├── .gitignore
├── LICENSE
├── README.md
├── bower.json
├── dist
├── datetime-range.min.css
└── datetime-range.min.js
├── gulpfile.js
├── images
├── date_range.png
├── datetime_range_collapsed.png
├── datetime_range_expanded.png
└── time_range.png
├── index.html
├── index.js
├── package.json
├── src
├── date-range.css
├── date-range.html
├── date-range.js
├── datetime-range.css
├── datetime-range.html
├── datetime-range.js
├── time-range.css
├── time-range.html
└── time-range.js
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | bower_components
2 | node_modules
3 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 g1eb
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Datetime range input UI element
2 |
3 | This directive is designed to provide easy and intuitive input of moment.js datetime objects.
4 |
5 | Typically this can be used to represent a start and an end datetime object.
6 | Desgined to be as simple as possible to afford intuitive interactions, including scrolling.
7 |
8 | Converted into an angular directive for your convenience :)
9 |
10 | ## Demo
11 | Click here for a live demo.
12 |
13 | ### Date range
14 | [
](https://rawgit.com/g1eb/angular-datetime-range/master/)
15 |
16 | ### Time range
17 | [
](https://rawgit.com/g1eb/angular-datetime-range/master/)
18 |
19 | ### Datetime range (collapsed state)
20 | [
](https://rawgit.com/g1eb/angular-datetime-range/master/)
21 |
22 | ### Datetime range (expanded state)
23 | [
](https://rawgit.com/g1eb/angular-datetime-range/master/)
24 |
25 | ## Install
26 |
27 | 1) Install 'angular-datetime-range' with bower
28 |
29 | ```
30 | bower install angular-datetime-range
31 | ```
32 |
33 | Or with npm:
34 |
35 | ```
36 | npm install angular-datetime-range
37 | ```
38 |
39 | 2) Add 'g1b.datetime-range' module to your app config
40 |
41 |
42 | ```javascript
43 | angular.module('myApp', [
44 | 'g1b.datetime-range',
45 | ......
46 | ])
47 | ```
48 |
49 | 3) Use 'datetime-range' directive in a view
50 |
51 | ```html
52 |
53 | ```
54 |
55 | ## Attributes
56 |
57 | |Property | Usage | Default | Required |
58 | |:------------- |:-------------|:-----:|:-----:|
59 | | start | Start moment.js datetime object or a datetime string | none | yes |
60 | | end | End moment.js datetime object or a datetime string | none | yes |
61 | | presets | Array of preset ranges, click here for more info | none | no |
62 | | min-date | moment.js datetime object min datetime | none | no |
63 | | max-date | moment.js datetime object max datetime | none | no |
64 | | on-change | Handler function that is fired on change of start and/or end datetime objects | none | no |
65 | | on-change-start | Handler function that is fired on change of start datetime object | none | no |
66 | | on-change-end | Handler function that is fired on change of end datetime object | none | no |
67 | | on-close | Handler function that is fired on close of the edit popover | none | no |
68 | | close-text | Close text shown in the button used to close edit popover | Close | no |
69 |
70 | ## Presets
71 |
72 | You can provide any number of preset ranges for quick selection in edit view.
73 |
74 | Consider the following example with ranges of current week, month and year.
75 | ```
76 | $scope.presets = [
77 | {
78 | 'name': 'This Week',
79 | 'start': moment().startOf('week').startOf('day'),
80 | 'end': moment().endOf('week').endOf('day'),
81 | }, {
82 | 'name': 'This Month',
83 | 'start': moment().startOf('month').startOf('day'),
84 | 'end': moment().endOf('month').endOf('day'),
85 | }, {
86 | 'name': 'This Year',
87 | 'start': moment().startOf('year').startOf('day'),
88 | 'end': moment().endOf('year').endOf('day'),
89 | }
90 | ];
91 | ```
92 |
93 | ## Other input directives
94 |
95 | If you are looking for other datetime input elements, check out [angular-datetime-inputs](https://github.com/g1eb/angular-datetime-inputs)
96 |
97 | ## Dependencies
98 |
99 | * [AngularJS](https://angularjs.org/)
100 | * [moment.js](http://momentjs.com/)
101 | * [angular-scroll-events](https://github.com/g1eb/angular-scroll-events)
102 |
--------------------------------------------------------------------------------
/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "angular-datetime-range",
3 | "version": "0.4.0",
4 | "description": "UI widget for datetime range input, converted to an angular directive for your convenience.",
5 | "homepage": "https://github.com/g1eb/angular-datetime-range",
6 | "authors": [
7 | "g1eb (https://g1eb.com)"
8 | ],
9 | "license": "MIT",
10 | "main": [
11 | "dist/datetime-range.min.js",
12 | "dist/datetime-range.min.css"
13 | ],
14 | "dependencies": {
15 | "angular": "^1.5.6",
16 | "moment": "^2.13.0",
17 | "angular-scroll-events": "^0.0.2"
18 | },
19 | "keywords": [
20 | "angular",
21 | "angularjs",
22 | "directive",
23 | "date",
24 | "time",
25 | "datetime",
26 | "range",
27 | "daterange",
28 | "datepair",
29 | "input",
30 | "dateinput",
31 | "timeinput"
32 | ],
33 | "ignore": [
34 | "**/.*",
35 | "node_modules",
36 | "bower_components",
37 | "test",
38 | "tests"
39 | ]
40 | }
41 |
--------------------------------------------------------------------------------
/dist/datetime-range.min.css:
--------------------------------------------------------------------------------
1 | .datetime-range.datetime{position:relative;width:100%;min-width:350px;height:auto;min-height:4em;margin:0;padding:0;color:#444;font-size:14px;font-family:sans-serif;text-decoration:none;text-align:center;user-select:none;-ms-user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-webkit-tap-highlight-color:rgba(255,255,255,0)}.datetime-range.datetime .end-datetime,.datetime-range.datetime .start-datetime{cursor:pointer;position:relative;width:47%;height:4em;background-color:#efefef;transition:background-color .25s ease-out}.datetime-range.datetime .start-datetime{position:absolute;left:0}.datetime-range.datetime .end-datetime{position:absolute;left:53%}.datetime-range.datetime .end-datetime .date,.datetime-range.datetime .start-datetime .date{color:#777;font-size:1em;line-height:1em;margin-top:.5em;display:block;overflow:hidden}.datetime-range.datetime .end-datetime .time,.datetime-range.datetime .start-datetime .time{font-size:1.5em;line-height:1.75em;display:block;overflow:hidden}.datetime-range.datetime .end-datetime.active,.datetime-range.datetime .end-datetime:hover,.datetime-range.datetime .start-datetime.active,.datetime-range.datetime .start-datetime:hover{background-color:#ddd}.datetime-range.datetime .start-datetime:after{content:"";position:absolute;top:0;border-top:2em solid transparent;border-bottom:2em solid transparent;border-left:1em solid #efefef;transition:border-left .25s ease-out;right:-1em}.datetime-range.datetime .start-datetime.active:after,.datetime-range.datetime .start-datetime:hover:after{border-left-color:#ddd}.datetime-range.datetime .end-datetime:before{content:"";position:absolute;top:0;border-width:2em 0 2em 1em;border-style:solid;border-color:#efefef #efefef #efefef transparent;transition:border-color .25s ease-out;left:-1em}.datetime-range.datetime .end-datetime.active:before,.datetime-range.datetime .end-datetime:hover:before{border-color:#ddd #ddd #ddd transparent}.datetime-range.datetime .end-datetime.warning,.datetime-range.datetime .end-datetime.warning.active,.datetime-range.datetime .end-datetime.warning:hover,.datetime-range.datetime .start-datetime.warning,.datetime-range.datetime .start-datetime.warning.active,.datetime-range.datetime .start-datetime.warning:hover{background-color:rgba(255,54,46,.75)}.datetime-range.datetime .start-datetime.warning.active:after,.datetime-range.datetime .start-datetime.warning:after,.datetime-range.datetime .start-datetime.warning:hover:after{border-left-color:rgba(255,54,46,.75)}.datetime-range.datetime .end-datetime.warning.active:before,.datetime-range.datetime .end-datetime.warning:before,.datetime-range.datetime .end-datetime.warning:hover:before{border-color:rgba(255,54,46,.75) rgba(255,54,46,.75) rgba(255,54,46,.75) transparent}.datetime-range.datetime .presets{box-sizing:border-box;position:absolute;z-index:2;top:4.5em;width:100%;height:auto;padding:0;text-align:center}.datetime-range.datetime .presets .dots{display:inline-block;cursor:pointer}.datetime-range.datetime .presets .dots .dot{display:inline-block;width:5px;height:5px;margin:0 3px;vertical-align:top;background-color:#efefef}.datetime-range.datetime .presets .dots:hover .dot{background-color:#ddd}.datetime-range.datetime .presets .list{display:none}.datetime-range.datetime .presets .list.active{display:block}.datetime-range.datetime .presets .list .preset-button{box-sizing:border-box;position:relative;display:block;cursor:pointer;color:#777;width:100%;height:auto;margin-bottom:10px;padding:0 15px;font-size:1.5em;line-height:2em;text-align:center;outline:none;border:1px solid #aaa;background-color:#efefef;transition:background-color .25s ease-out}.datetime-range.datetime .presets .list .preset-button:hover{background:#ddd}.datetime-range.datetime .edit-popover{position:absolute;z-index:2;top:4.5em;width:100%;height:auto;padding:0;background-color:#efefef;border-radius:0;border:1px solid #aaa;box-sizing:border-box}.datetime-range.datetime .calendar-toggle{width:100%;color:#777;font-size:1.5em;line-height:2em;cursor:pointer;transition:background-color .25s ease-out}.datetime-range.datetime .calendar-toggle:before{content:"";display:block;position:absolute;background-color:#efefef;width:1em;height:1em;top:-.55em;left:45%;z-index:1;border-color:#aaa;border-style:solid;border-width:1px 1px 0 0;transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);-webkit-transform:rotate(-45deg);transition:background-color .25s ease-out}.datetime-range.datetime .calendar-toggle:hover,.datetime-range.datetime .calendar-toggle:hover:before{background-color:#ddd}.datetime-range.datetime .calendar-toggle.start:before{left:20%}.datetime-range.datetime .calendar-toggle.end:before{left:74%}.datetime-range.datetime .calendar .calendar-header{cursor:default;background-color:#fff;position:relative;width:100%;font-size:1.5em;line-height:2em}.datetime-range.datetime .calendar .calendar-header .arrow{display:inline-block;color:#ddd;cursor:pointer;line-height:1.5em;font-size:1.5em}.datetime-range.datetime .calendar .calendar-header .arrow.arrow-left{position:absolute;left:0;width:2em;height:100%}.datetime-range.datetime .calendar .calendar-header .arrow.arrow-left:before{content:"";position:absolute;top:15%;left:25%;border-right:.75em solid #ddd;border-top:.5em solid transparent;border-bottom:.5em solid transparent;transition:border .25s ease-out}.datetime-range.datetime .calendar .calendar-header .arrow.arrow-left:hover:before{border-right-color:#999}.datetime-range.datetime .calendar .calendar-header .arrow.arrow-right{position:absolute;right:0;width:2em;height:100%}.datetime-range.datetime .calendar .calendar-header .arrow.arrow-right:before{content:"";position:absolute;top:15%;right:25%;border-left:.75em solid #ddd;border-top:.5em solid transparent;border-bottom:.5em solid transparent;transition:border .25s ease-out}.datetime-range.datetime .calendar .calendar-header .arrow.arrow-right:hover:before{border-left-color:#999}.datetime-range.datetime .calendar .calendar-body{padding:.5em 0}.datetime-range.datetime .calendar .calendar-body .weekdays{cursor:default;display:flex;justify-content:space-between;color:#777;font-size:1em;line-height:2em;text-transform:uppercase;padding:0 1em}.datetime-range.datetime .calendar .calendar-body .weekdays .weekday{width:5em;height:2.5em;display:inline-block}.datetime-range.datetime .calendar .calendar-body .week{display:flex;justify-content:space-between;color:#777;font-size:1.25em;line-height:2.65em;letter-spacing:1px;padding:.5em 1em}.datetime-range.datetime .calendar .calendar-body .week .date{display:inline-block;cursor:pointer;width:2.5em;height:2.5em;border-radius:50%;transition:background-color .25s ease-out}.datetime-range.datetime .calendar .calendar-body .week .date.current{color:#555;font-weight:900}.datetime-range.datetime .calendar .calendar-body .week .date:not(.active):hover{background-color:#ddd}.datetime-range.datetime .calendar .calendar-body .week .date.active,.datetime-range.datetime .calendar .calendar-body .week .date.inactive.active{color:#efefef;background-color:rgba(255,69,0,.75)}.datetime-range.datetime .calendar .calendar-body .week .date.inactive{color:#aaa}.datetime-range.datetime .timer{display:flex;justify-content:space-between;background-color:#fff}.datetime-range.datetime .timer .timer-hours,.datetime-range.datetime .timer .timer-minutes,.datetime-range.datetime .timer .timer-seconds{cursor:default;width:3em;display:inline-block;font-size:3em;line-height:1.5em;position:relative}.datetime-range.datetime .timer .timer-hours .arrow,.datetime-range.datetime .timer .timer-minutes .arrow,.datetime-range.datetime .timer .timer-seconds .arrow{position:relative;color:#ddd;cursor:pointer;height:1em;margin:0 .5em;line-height:1em;font-size:.75em}.datetime-range.datetime .timer .timer-hours .arrow.arrow-up:before,.datetime-range.datetime .timer .timer-minutes .arrow.arrow-up:before,.datetime-range.datetime .timer .timer-seconds .arrow.arrow-up:before{content:"";position:absolute;top:50%;left:calc(50% - .4em);border-left:.5em solid transparent;border-right:.5em solid transparent;border-bottom:.5em solid #ddd;transition:border .25s ease-out}.datetime-range.datetime .timer .timer-hours .arrow.arrow-up:hover:before,.datetime-range.datetime .timer .timer-minutes .arrow.arrow-up:hover:before,.datetime-range.datetime .timer .timer-seconds .arrow.arrow-up:hover:before{border-bottom-color:#999}.datetime-range.datetime .timer .timer-hours .arrow.arrow-down:before,.datetime-range.datetime .timer .timer-minutes .arrow.arrow-down:before,.datetime-range.datetime .timer .timer-seconds .arrow.arrow-down:before{content:"";position:absolute;top:0;left:calc(50% - .4em);border-left:.5em solid transparent;border-right:.5em solid transparent;border-top:.5em solid #ddd;transition:border .25s ease-out}.datetime-range.datetime .timer .timer-hours .arrow.arrow-down:hover:before,.datetime-range.datetime .timer .timer-minutes .arrow.arrow-down:hover:before,.datetime-range.datetime .timer .timer-seconds .arrow.arrow-down:hover:before{border-top-color:#999}.datetime-range.datetime .timer .timer-divider{font-size:3em;line-height:3em;-webkit-animation-name:a;-webkit-animation-duration:5s;-webkit-animation-timing-function:linear;-webkit-animation-iteration-count:infinite;-moz-animation-name:a;-moz-animation-duration:5s;-moz-animation-timing-function:linear;-moz-animation-iteration-count:infinite;animation-name:a;animation-duration:5s;animation-timing-function:linear;animation-iteration-count:infinite}@-webkit-keyframes a{0%{opacity:0}5%{opacity:1}95%{opacity:1}to{opacity:0}}@keyframes a{0%{opacity:0}5%{opacity:1}95%{opacity:1}to{opacity:0}}.datetime-range.datetime .close-button{position:absolute;z-index:2;left:-1px;cursor:pointer;outline:none;border-top:1px solid #aaa;border-left:1px solid #aaa;border-bottom:1px solid #aaa;color:#777;width:25%;height:auto;margin-top:10px;font-size:1.5em;line-height:2em;box-sizing:border-box;background-color:#efefef;transition:background-color .25s ease-out}.datetime-range.datetime .close-button:before{content:"";position:absolute;right:-.5em;top:-1px;width:1em;height:2em;background:#efefef;border-top:1px solid #aaa;border-right:1px solid #aaa;transition:background .25s ease-out;transform:skewX(-26deg)}.datetime-range.datetime .close-button:hover,.datetime-range.datetime .close-button:hover:before{background:#ddd}
2 | .datetime-range.date{position:relative;width:100%;min-width:350px;height:auto;min-height:4em;margin:0;padding:0;color:#444;font-size:14px;font-family:sans-serif;text-decoration:none;text-align:center;user-select:none;-ms-user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-webkit-tap-highlight-color:rgba(255,255,255,0)}.datetime-range.date .end-datetime,.datetime-range.date .start-datetime{cursor:pointer;position:relative;width:47%;height:4em;background-color:#efefef;transition:background-color .25s ease-out}.datetime-range.date .start-datetime{position:absolute;left:0}.datetime-range.date .end-datetime{position:absolute;left:53%}.datetime-range.date .end-datetime .date,.datetime-range.date .start-datetime .date{color:#777;font-size:2em;line-height:2em;display:block;overflow:hidden}.datetime-range.date .end-datetime.active,.datetime-range.date .end-datetime:hover,.datetime-range.date .start-datetime.active,.datetime-range.date .start-datetime:hover{background-color:#ddd}.datetime-range.date .start-datetime:after{content:"";position:absolute;top:0;border-top:2em solid transparent;border-bottom:2em solid transparent;border-left:1em solid #efefef;transition:border-left .25s ease-out;right:-1em}.datetime-range.date .start-datetime.active:after,.datetime-range.date .start-datetime:hover:after{border-left-color:#ddd}.datetime-range.date .end-datetime:before{content:"";position:absolute;top:0;border-width:2em 0 2em 1em;border-style:solid;border-color:#efefef #efefef #efefef transparent;transition:border-color .25s ease-out;left:-1em}.datetime-range.date .end-datetime.active:before,.datetime-range.date .end-datetime:hover:before{border-color:#ddd #ddd #ddd transparent}.datetime-range.date .end-datetime.warning,.datetime-range.date .end-datetime.warning.active,.datetime-range.date .end-datetime.warning:hover,.datetime-range.date .start-datetime.warning,.datetime-range.date .start-datetime.warning.active,.datetime-range.date .start-datetime.warning:hover{background-color:rgba(255,54,46,.75)}.datetime-range.date .start-datetime.warning.active:after,.datetime-range.date .start-datetime.warning:after,.datetime-range.date .start-datetime.warning:hover:after{border-left-color:rgba(255,54,46,.75)}.datetime-range.date .end-datetime.warning.active:before,.datetime-range.date .end-datetime.warning:before,.datetime-range.date .end-datetime.warning:hover:before{border-color:rgba(255,54,46,.75) rgba(255,54,46,.75) rgba(255,54,46,.75) transparent}.datetime-range.date .presets{box-sizing:border-box;position:absolute;z-index:2;top:4.5em;width:100%;height:auto;padding:0;text-align:center}.datetime-range.date .presets .dots{display:inline-block;cursor:pointer}.datetime-range.date .presets .dots .dot{display:inline-block;width:5px;height:5px;margin:0 3px;vertical-align:top;background-color:#efefef}.datetime-range.date .presets .dots:hover .dot{background-color:#ddd}.datetime-range.date .presets .list{display:none}.datetime-range.date .presets .list.active{display:block}.datetime-range.date .presets .list .preset-button{box-sizing:border-box;position:relative;display:block;cursor:pointer;color:#777;width:100%;height:auto;margin-bottom:10px;padding:0 15px;font-size:1.5em;line-height:2em;text-align:center;outline:none;border:1px solid #aaa;background-color:#efefef;transition:background-color .25s ease-out}.datetime-range.date .presets .list .preset-button:hover{background:#ddd}.datetime-range.date .edit-popover{position:absolute;z-index:2;top:4.5em;width:100%;height:auto;padding:0;background-color:#efefef;border-radius:0;border:1px solid #aaa;box-sizing:border-box}.datetime-range.date .edit-popover .header{width:100%;color:#777;font-size:1.5em;line-height:2em;transition:background-color .25s ease-out}.datetime-range.date .edit-popover .header:before{content:"";display:block;position:absolute;background-color:#efefef;width:1em;height:1em;top:-.55em;left:45%;z-index:1;border-color:#aaa;border-style:solid;border-width:1px 1px 0 0;transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);-webkit-transform:rotate(-45deg);transition:background-color .25s ease-out}.datetime-range.date .edit-popover .header.start:before{left:20%}.datetime-range.date .edit-popover .header.end:before{left:74%}.datetime-range.date .calendar .calendar-header{cursor:default;background-color:#fff;position:relative;width:100%;font-size:1.5em;line-height:2em}.datetime-range.date .calendar .calendar-header .arrow{display:inline-block;color:#ddd;cursor:pointer;line-height:1.5em;font-size:1.5em}.datetime-range.date .calendar .calendar-header .arrow.arrow-left{position:absolute;left:0;width:2em;height:100%}.datetime-range.date .calendar .calendar-header .arrow.arrow-left:before{content:"";position:absolute;top:15%;left:25%;border-right:.75em solid #ddd;border-top:.5em solid transparent;border-bottom:.5em solid transparent;transition:border .25s ease-out}.datetime-range.date .calendar .calendar-header .arrow.arrow-left:hover:before{border-right-color:#999}.datetime-range.date .calendar .calendar-header .arrow.arrow-right{position:absolute;right:0;width:2em;height:100%}.datetime-range.date .calendar .calendar-header .arrow.arrow-right:before{content:"";position:absolute;top:15%;right:25%;border-left:.75em solid #ddd;border-top:.5em solid transparent;border-bottom:.5em solid transparent;transition:border .25s ease-out}.datetime-range.date .calendar .calendar-header .arrow.arrow-right:hover:before{border-left-color:#999}.datetime-range.date .calendar .calendar-body{padding:.5em 0}.datetime-range.date .calendar .calendar-body .weekdays{cursor:default;display:flex;justify-content:space-between;color:#777;font-size:1em;line-height:2em;text-transform:uppercase;padding:0 1em}.datetime-range.date .calendar .calendar-body .weekdays .weekday{width:5em;height:2.5em;display:inline-block}.datetime-range.date .calendar .calendar-body .week{display:flex;justify-content:space-between;color:#777;font-size:1.25em;line-height:2.65em;letter-spacing:1px;padding:.5em 1em}.datetime-range.date .calendar .calendar-body .week .date{display:inline-block;cursor:pointer;width:2.5em;height:2.5em;border-radius:50%;transition:background-color .25s ease-out}.datetime-range.date .calendar .calendar-body .week .date.current{color:#555;font-weight:900}.datetime-range.date .calendar .calendar-body .week .date:not(.active):hover{background-color:#ddd}.datetime-range.date .calendar .calendar-body .week .date.active,.datetime-range.date .calendar .calendar-body .week .date.inactive.active{color:#efefef;background-color:rgba(255,69,0,.75)}.datetime-range.date .calendar .calendar-body .week .date.inactive{color:#aaa}.datetime-range.date .close-button{position:absolute;z-index:2;left:-1px;cursor:pointer;outline:none;border-top:1px solid #aaa;border-left:1px solid #aaa;border-bottom:1px solid #aaa;color:#777;width:25%;height:auto;margin-top:10px;font-size:1.5em;line-height:2em;box-sizing:border-box;background-color:#efefef;transition:background-color .25s ease-out}.datetime-range.date .close-button:before{content:"";position:absolute;right:-.5em;top:-1px;width:1em;height:2em;background:#efefef;border-top:1px solid #aaa;border-right:1px solid #aaa;transition:background .25s ease-out;transform:skewX(-26deg)}.datetime-range.date .close-button:hover,.datetime-range.date .close-button:hover:before{background:#ddd}
3 | .datetime-range.time{position:relative;width:100%;min-width:350px;height:auto;min-height:4em;margin:0;padding:0;color:#444;font-size:14px;font-family:sans-serif;text-decoration:none;text-align:center;user-select:none;-ms-user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-webkit-tap-highlight-color:rgba(255,255,255,0)}.datetime-range.time .end-datetime,.datetime-range.time .start-datetime{cursor:pointer;position:relative;width:47%;height:4em;background-color:#efefef;transition:background-color .25s ease-out}.datetime-range.time .start-datetime{position:absolute;left:0}.datetime-range.time .end-datetime{position:absolute;left:53%}.datetime-range.time .end-datetime .time,.datetime-range.time .start-datetime .time{color:#777;font-size:2em;line-height:2em;display:block;overflow:hidden}.datetime-range.time .end-datetime.active,.datetime-range.time .end-datetime:hover,.datetime-range.time .start-datetime.active,.datetime-range.time .start-datetime:hover{background-color:#ddd}.datetime-range.time .start-datetime:after{content:"";position:absolute;top:0;border-top:2em solid transparent;border-bottom:2em solid transparent;border-left:1em solid #efefef;transition:border-left .25s ease-out;right:-1em}.datetime-range.time .start-datetime.active:after,.datetime-range.time .start-datetime:hover:after{border-left-color:#ddd}.datetime-range.time .end-datetime:before{content:"";position:absolute;top:0;border-width:2em 0 2em 1em;border-style:solid;border-color:#efefef #efefef #efefef transparent;transition:border-color .25s ease-out;left:-1em}.datetime-range.time .end-datetime.active:before,.datetime-range.time .end-datetime:hover:before{border-color:#ddd #ddd #ddd transparent}.datetime-range.time .end-datetime.warning,.datetime-range.time .end-datetime.warning.active,.datetime-range.time .end-datetime.warning:hover,.datetime-range.time .start-datetime.warning,.datetime-range.time .start-datetime.warning.active,.datetime-range.time .start-datetime.warning:hover{background-color:rgba(255,54,46,.75)}.datetime-range.time .start-datetime.warning.active:after,.datetime-range.time .start-datetime.warning:after,.datetime-range.time .start-datetime.warning:hover:after{border-left-color:rgba(255,54,46,.75)}.datetime-range.time .end-datetime.warning.active:before,.datetime-range.time .end-datetime.warning:before,.datetime-range.time .end-datetime.warning:hover:before{border-color:rgba(255,54,46,.75) rgba(255,54,46,.75) rgba(255,54,46,.75) transparent}.datetime-range.time .presets{box-sizing:border-box;position:absolute;z-index:2;top:4.5em;width:100%;height:auto;padding:0;text-align:center}.datetime-range.time .presets .dots{display:inline-block;cursor:pointer}.datetime-range.time .presets .dots .dot{display:inline-block;width:5px;height:5px;margin:0 3px;vertical-align:top;background-color:#efefef}.datetime-range.time .presets .dots:hover .dot{background-color:#ddd}.datetime-range.time .presets .list{display:none}.datetime-range.time .presets .list.active{display:block}.datetime-range.time .presets .list .preset-button{box-sizing:border-box;position:relative;display:block;cursor:pointer;color:#777;width:100%;height:auto;margin-bottom:10px;padding:0 15px;font-size:1.5em;line-height:2em;text-align:center;outline:none;border:1px solid #aaa;background-color:#efefef;transition:background-color .25s ease-out}.datetime-range.time .presets .list .preset-button:hover{background:#ddd}.datetime-range.time .edit-popover{position:absolute;z-index:2;top:4.5em;width:100%;height:auto;padding:0;background-color:#efefef;border-radius:0;border:1px solid #aaa;box-sizing:border-box}.datetime-range.time .edit-popover .header{width:100%;color:#777;font-size:1.5em;line-height:2em;cursor:pointer;transition:background-color .25s ease-out}.datetime-range.time .edit-popover .header:before{content:"";display:block;position:absolute;background-color:#efefef;width:1em;height:1em;top:-.55em;left:45%;z-index:1;border-color:#aaa;border-style:solid;border-width:1px 1px 0 0;transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);-webkit-transform:rotate(-45deg);transition:background-color .25s ease-out}.datetime-range.time .edit-popover .header.start:before{left:20%}.datetime-range.time .edit-popover .header.end:before{left:74%}.datetime-range.time .timer{display:flex;justify-content:space-between;background-color:#fff}.datetime-range.time .timer .timer-hours,.datetime-range.time .timer .timer-minutes,.datetime-range.time .timer .timer-seconds{cursor:default;width:3em;display:inline-block;font-size:3em;line-height:1.5em;position:relative}.datetime-range.time .timer .timer-hours .arrow,.datetime-range.time .timer .timer-minutes .arrow,.datetime-range.time .timer .timer-seconds .arrow{position:relative;color:#ddd;cursor:pointer;height:1em;margin:0 .5em;line-height:1em;font-size:.75em}.datetime-range.time .timer .timer-hours .arrow.arrow-up:before,.datetime-range.time .timer .timer-minutes .arrow.arrow-up:before,.datetime-range.time .timer .timer-seconds .arrow.arrow-up:before{content:"";position:absolute;top:50%;left:calc(50% - .4em);border-left:.5em solid transparent;border-right:.5em solid transparent;border-bottom:.5em solid #ddd;transition:border .25s ease-out}.datetime-range.time .timer .timer-hours .arrow.arrow-up:hover:before,.datetime-range.time .timer .timer-minutes .arrow.arrow-up:hover:before,.datetime-range.time .timer .timer-seconds .arrow.arrow-up:hover:before{border-bottom-color:#999}.datetime-range.time .timer .timer-hours .arrow.arrow-down:before,.datetime-range.time .timer .timer-minutes .arrow.arrow-down:before,.datetime-range.time .timer .timer-seconds .arrow.arrow-down:before{content:"";position:absolute;top:0;left:calc(50% - .4em);border-left:.5em solid transparent;border-right:.5em solid transparent;border-top:.5em solid #ddd;transition:border .25s ease-out}.datetime-range.time .timer .timer-hours .arrow.arrow-down:hover:before,.datetime-range.time .timer .timer-minutes .arrow.arrow-down:hover:before,.datetime-range.time .timer .timer-seconds .arrow.arrow-down:hover:before{border-top-color:#999}.datetime-range.time .timer .timer-divider{font-size:3em;line-height:3em;-webkit-animation-name:a;-webkit-animation-duration:5s;-webkit-animation-timing-function:linear;-webkit-animation-iteration-count:infinite;-moz-animation-name:a;-moz-animation-duration:5s;-moz-animation-timing-function:linear;-moz-animation-iteration-count:infinite;animation-name:a;animation-duration:5s;animation-timing-function:linear;animation-iteration-count:infinite}@-webkit-keyframes a{0%{opacity:0}5%{opacity:1}95%{opacity:1}to{opacity:0}}@keyframes a{0%{opacity:0}5%{opacity:1}95%{opacity:1}to{opacity:0}}.datetime-range.time .close-button{position:absolute;z-index:2;left:-1px;cursor:pointer;outline:none;border-top:1px solid #aaa;border-left:1px solid #aaa;border-bottom:1px solid #aaa;color:#777;width:25%;height:auto;margin-top:10px;font-size:1.5em;line-height:2em;box-sizing:border-box;background-color:#efefef;transition:background-color .25s ease-out}.datetime-range.time .close-button:before{content:"";position:absolute;right:-.5em;top:-1px;width:1em;height:2em;background:#efefef;border-top:1px solid #aaa;border-right:1px solid #aaa;transition:background .25s ease-out;transform:skewX(-26deg)}.datetime-range.time .close-button:hover,.datetime-range.time .close-button:hover:before{background:#ddd}
--------------------------------------------------------------------------------
/dist/datetime-range.min.js:
--------------------------------------------------------------------------------
1 | "use strict";angular.module("g1b.datetime-range",["g1b.scroll-events"]).directive("datetimeRange",["$document","$timeout",function(e,t){return{restrict:"E",scope:{start:"=",end:"=",presets:"=?",minDate:"=?",maxDate:"=?",onChange:"&?",onChangeStart:"&?",onChangeEnd:"&?",onClose:"&?",closeText:"@"},replace:!0,template:'',compile:function(){return{pre:function(){},post:function(a,n){a.current=moment(),a.start&&!a.start._isAMomentObject&&(a.start=moment(a.start)),a.end&&!a.end._isAMomentObject&&(a.end=moment(a.end)),a.getNumWeeks=function(){if(a.calendar){var e=a.calendar.clone().startOf("week").weekday(),t=a.calendar.clone().startOf("month"),n=(a.calendar.clone().endOf("month"),(t.weekday()-e+7)%7);return Math.ceil((n+a.calendar.daysInMonth())/7)}},a.selectDate=function(e){a.selected===e?a.selected=void 0:(a.selected=e,a.calendar=a.selected.clone(),a.presetsActive=!1)},a.isWithinBounds=function(e){return(!a.minDate||e>a.minDate)&&(!a.maxDate||ea.start?(a.selected.year(e.year()).month(e.month()).date(e.date()).hours(e.hours()).minutes(e.minutes()).seconds(e.seconds()),(a.selected.clone().startOf("week").month()!==a.calendar.month()&&a.selected.clone().endOf("week").month()!==a.calendar.month()||n)&&(a.calendar=a.selected.clone()),a.selected===a.start&&a.callbackStart(),a.selected===a.end&&a.callbackEnd(),a.callbackAll()):(a.warning=a.selected===a.start?"end":"start",t(function(){a.warning=void 0},250)))},a.selectPreset=function(e){a.close(),a.start.isSame(e.start)&&a.end.isSame(e.end)||(a.start.isSame(e.start)||(a.start=e.start.clone(),a.callbackStart()),a.end.isSame(e.end)||(a.end=e.end.clone(),a.callbackEnd()),a.callbackAll())},a.callbackStart=function(){a.onChangeStart&&t(function(){a.onChangeStart()})},a.callbackEnd=function(){a.onChangeEnd&&t(function(){a.onChangeEnd()})},a.callbackAll=function(){a.onChange&&t(function(){a.onChange()})},a.close=function(){a.selected="",a.presetsActive=!1,a.calendarActive=!1,a.onClose&&a.onClose()},e.on("mousedown",function(e){n[0].contains(e.target)||!a.presetsActive&&!a.selected||a.$apply(function(){a.close()})}),e.on("keyup",function(e){27===e.keyCode&&(a.presetsActive||a.selected)&&a.$apply(function(){a.close()})})}}}}}]);
2 | "use strict";angular.module("g1b.datetime-range").directive("dateRange",["$document","$timeout",function(e,t){return{restrict:"E",scope:{start:"=",end:"=",presets:"=?",minDate:"=?",maxDate:"=?",onChange:"&?",onChangeStart:"&?",onChangeEnd:"&?",onClose:"&?",closeText:"@"},replace:!0,template:'',compile:function(){return{pre:function(){},post:function(n,a){n.current=moment(),n.start&&!n.start._isAMomentObject&&(n.start=moment(n.start)),n.end&&!n.end._isAMomentObject&&(n.end=moment(n.end)),n.getNumWeeks=function(){if(n.calendar){var e=n.calendar.clone().startOf("week").weekday(),t=n.calendar.clone().startOf("month"),a=(n.calendar.clone().endOf("month"),(t.weekday()-e+7)%7);return Math.ceil((a+n.calendar.daysInMonth())/7)}},n.selectDate=function(e){n.selected===e?n.selected=void 0:(n.selected=e,n.calendar=n.selected.clone(),n.presetsActive=!1)},n.isWithinBounds=function(e){return(!n.minDate||e>n.minDate)&&(!n.maxDate||en.start?(n.selected.year(e.year()).month(e.month()).date(e.date()).hours(e.hours()).minutes(e.minutes()).seconds(e.seconds()),(n.selected.clone().startOf("week").month()!==n.calendar.month()&&n.selected.clone().endOf("week").month()!==n.calendar.month()||a)&&(n.calendar=n.selected.clone()),n.selected===n.start&&n.callbackStart(),n.selected===n.end&&n.callbackEnd(),n.callbackAll()):(n.warning=n.selected===n.start?"end":"start",t(function(){n.warning=void 0},250)))},n.selectPreset=function(e){n.close(),n.start.isSame(e.start)&&n.end.isSame(e.end)||(n.start.isSame(e.start)||(n.start=e.start.clone(),n.callbackStart()),n.end.isSame(e.end)||(n.end=e.end.clone(),n.callbackEnd()),n.callbackAll())},n.callbackStart=function(){n.onChangeStart&&t(function(){n.onChangeStart()})},n.callbackEnd=function(){n.onChangeEnd&&t(function(){n.onChangeEnd()})},n.callbackAll=function(){n.onChange&&t(function(){n.onChange()})},n.close=function(){n.selected="",n.presetsActive=!1,n.onClose&&n.onClose()},e.on("mousedown",function(e){a[0].contains(e.target)||!n.presetsActive&&!n.selected||n.$apply(function(){n.close()})}),e.on("keyup",function(e){27===e.keyCode&&(n.presetsActive||n.selected)&&n.$apply(function(){n.close()})})}}}}}]);
3 | "use strict";angular.module("g1b.datetime-range").directive("timeRange",["$document","$timeout",function(e,t){return{restrict:"E",scope:{start:"=",end:"=",presets:"=?",minDate:"=?",maxDate:"=?",onChange:"&?",onChangeStart:"&?",onChangeEnd:"&?",onClose:"&?",closeText:"@"},replace:!0,template:'',compile:function(){return{pre:function(){},post:function(a,n){a.current=moment(),a.start&&!a.start._isAMomentObject&&(a.start=moment(a.start)),a.end&&!a.end._isAMomentObject&&(a.end=moment(a.end)),a.getNumWeeks=function(){if(a.calendar){var e=a.calendar.clone().startOf("week").weekday(),t=a.calendar.clone().startOf("month"),n=(a.calendar.clone().endOf("month"),(t.weekday()-e+7)%7);return Math.ceil((n+a.calendar.daysInMonth())/7)}},a.selectDate=function(e){a.selected===e?a.selected=void 0:(a.selected=e,a.calendar=a.selected.clone(),a.presetsActive=!1)},a.isWithinBounds=function(e){return(!a.minDate||e>a.minDate)&&(!a.maxDate||ea.start?(a.selected.year(e.year()).month(e.month()).date(e.date()).hours(e.hours()).minutes(e.minutes()).seconds(e.seconds()),(a.selected.clone().startOf("week").month()!==a.calendar.month()&&a.selected.clone().endOf("week").month()!==a.calendar.month()||n)&&(a.calendar=a.selected.clone()),a.selected===a.start&&a.callbackStart(),a.selected===a.end&&a.callbackEnd(),a.callbackAll()):(a.warning=a.selected===a.start?"end":"start",t(function(){a.warning=void 0},250)))},a.selectPreset=function(e){a.close(),a.start.isSame(e.start)&&a.end.isSame(e.end)||(a.start.isSame(e.start)||(a.start=e.start.clone(),a.callbackStart()),a.end.isSame(e.end)||(a.end=e.end.clone(),a.callbackEnd()),a.callbackAll())},a.callbackStart=function(){a.onChangeStart&&t(function(){a.onChangeStart()})},a.callbackEnd=function(){a.onChangeEnd&&t(function(){a.onChangeEnd()})},a.callbackAll=function(){a.onChange&&t(function(){a.onChange()})},a.close=function(){a.selected="",a.presetsActive=!1,a.onClose&&a.onClose()},e.on("mousedown",function(e){n[0].contains(e.target)||!a.presetsActive&&!a.selected||a.$apply(function(){a.close()})}),e.on("keyup",function(e){27===e.keyCode&&(a.presetsActive||a.selected)&&a.$apply(function(){a.close()})})}}}}}]);
--------------------------------------------------------------------------------
/gulpfile.js:
--------------------------------------------------------------------------------
1 | var gulp = require('gulp');
2 | var embedTemplates = require('gulp-angular-embed-templates');
3 | var concat = require('gulp-concat');
4 | var uglify = require('gulp-uglify');
5 | var cssnano = require('gulp-cssnano');
6 |
7 | gulp.task('build', function () {
8 | gulp.src(['src/datetime-range.js', 'src/date-range.js', 'src/time-range.js'])
9 | .pipe(embedTemplates())
10 | .pipe(uglify())
11 | .pipe(concat('datetime-range.min.js'))
12 | .pipe(gulp.dest('./dist'));
13 | gulp.src(['src/datetime-range.css', 'src/date-range.css', 'src/time-range.css'])
14 | .pipe(cssnano())
15 | .pipe(concat('datetime-range.min.css'))
16 | .pipe(gulp.dest('./dist'));
17 | });
18 |
19 | gulp.task('watch', function() {
20 | gulp.watch('src/**/*.+(js|html|css)', ['build']);
21 | });
22 |
--------------------------------------------------------------------------------
/images/date_range.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/g1eb/angular-datetime-range/dfbc75a4c3940738cded05a0e6393283c89f4e56/images/date_range.png
--------------------------------------------------------------------------------
/images/datetime_range_collapsed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/g1eb/angular-datetime-range/dfbc75a4c3940738cded05a0e6393283c89f4e56/images/datetime_range_collapsed.png
--------------------------------------------------------------------------------
/images/datetime_range_expanded.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/g1eb/angular-datetime-range/dfbc75a4c3940738cded05a0e6393283c89f4e56/images/datetime_range_expanded.png
--------------------------------------------------------------------------------
/images/time_range.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/g1eb/angular-datetime-range/dfbc75a4c3940738cded05a0e6393283c89f4e56/images/time_range.png
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Datetime range input UI element for AngularJS
5 |
6 |
7 |
19 |
20 |
21 |
22 | Date
23 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | Time
38 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | Datetime
53 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
105 |
106 |
107 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | require('./dist/datetime-range.min.js');
2 | module.exports = 'g1b.datetime-range';
3 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "angular-datetime-range",
3 | "version": "0.4.0",
4 | "description": "UI widget for datetime range input, converted to an angular directive for your convenience.",
5 | "homepage": "https://github.com/g1eb/angular-datetime-range#readme",
6 | "author": "g1eb (https://g1eb.com)",
7 | "license": "MIT",
8 | "main": "index.js",
9 | "repository": {
10 | "type": "git",
11 | "url": "git+https://github.com/g1eb/angular-datetime-range.git"
12 | },
13 | "bugs": {
14 | "url": "https://github.com/g1eb/angular-datetime-range/issues"
15 | },
16 | "scripts": {
17 | "build": "gulp build"
18 | },
19 | "dependencies": {
20 | "angular-scroll-events": "^0.0.2"
21 | },
22 | "devDependencies": {
23 | "gulp": "^3.9.1",
24 | "gulp-angular-embed-templates": "^2.2.0",
25 | "gulp-concat": "^2.6.0",
26 | "gulp-cssnano": "^2.1.2",
27 | "gulp-uglify": "^1.5.3"
28 | },
29 | "peerDependencies": {
30 | "angular": "^1.5.6",
31 | "moment": "^2.13.0"
32 | },
33 | "keywords": [
34 | "angular",
35 | "angularjs",
36 | "directive",
37 | "date",
38 | "time",
39 | "datetime",
40 | "range",
41 | "daterange",
42 | "datepair",
43 | "input",
44 | "picker",
45 | "dateinput",
46 | "timeinput"
47 | ]
48 | }
49 |
--------------------------------------------------------------------------------
/src/date-range.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Datetime range styles
3 | */
4 | .datetime-range.date {
5 | position: relative;
6 | width: 100%;
7 | min-width: 350px;
8 | height: auto;
9 | min-height: 4em;
10 | margin: 0;
11 | padding: 0;
12 | color: #444;
13 | font-size: 14px;
14 | font-family: sans-serif;
15 | text-decoration: none;
16 | text-align: center;
17 | user-select: none;
18 | -ms-user-select: none;
19 | -moz-user-select: none;
20 | -khtml-user-select: none;
21 | -webkit-user-select: none;
22 | -webkit-touch-callout: none;
23 | -webkit-user-select: none;
24 | -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
25 | }
26 |
27 |
28 | /**
29 | * Start and end datetime objects
30 | */
31 | .datetime-range.date .start-datetime,
32 | .datetime-range.date .end-datetime {
33 | cursor: pointer;
34 | position: relative;
35 | width: 47%;
36 | height: 4em;
37 | background-color: #efefef;
38 | transition: background-color 0.25s ease-out;
39 | }
40 | .datetime-range.date .start-datetime {
41 | position: absolute;
42 | left: 0;
43 | }
44 | .datetime-range.date .end-datetime {
45 | position: absolute;
46 | left: 53%;
47 | }
48 | .datetime-range.date .start-datetime .date,
49 | .datetime-range.date .end-datetime .date {
50 | color: #777;
51 | font-size: 2em;
52 | line-height: 2em;
53 | display: block;
54 | overflow: hidden;
55 | }
56 | .datetime-range.date .start-datetime.active,
57 | .datetime-range.date .start-datetime:hover,
58 | .datetime-range.date .end-datetime.active,
59 | .datetime-range.date .end-datetime:hover {
60 | background-color: #ddd;
61 | }
62 | .datetime-range.date .start-datetime::after {
63 | content: "";
64 | position: absolute;
65 | top: 0;
66 | border-top: 2em solid transparent;
67 | border-bottom: 2em solid transparent;
68 | border-left: 1em solid #efefef;
69 | transition: border-left 0.25s ease-out;
70 | right: -1em;
71 | }
72 | .datetime-range.date .start-datetime.active::after,
73 | .datetime-range.date .start-datetime:hover::after {
74 | border-left-color: #ddd;
75 | }
76 | .datetime-range.date .end-datetime::before {
77 | content: "";
78 | position: absolute;
79 | top: 0;
80 | border-width: 2em 0 2em 1em;
81 | border-style: solid;
82 | border-color: #efefef #efefef #efefef transparent;
83 | transition: border-color 0.25s ease-out;
84 | left: -1em;
85 | }
86 | .datetime-range.date .end-datetime.active::before,
87 | .datetime-range.date .end-datetime:hover::before {
88 | border-color: #ddd #ddd #ddd transparent;
89 | }
90 | .datetime-range.date .start-datetime.warning,
91 | .datetime-range.date .end-datetime.warning {
92 | background-color: rgba(255, 54, 46, 0.75);
93 | }
94 | .datetime-range.date .start-datetime.warning.active,
95 | .datetime-range.date .start-datetime.warning:hover,
96 | .datetime-range.date .end-datetime.warning.active,
97 | .datetime-range.date .end-datetime.warning:hover {
98 | background-color: rgba(255, 54, 46, 0.75);
99 | }
100 | .datetime-range.date .start-datetime.warning::after {
101 | border-left-color: rgba(255, 54, 46, 0.75);
102 | }
103 | .datetime-range.date .start-datetime.warning.active::after,
104 | .datetime-range.date .start-datetime.warning:hover::after {
105 | border-left-color: rgba(255, 54, 46, 0.75);
106 | }
107 | .datetime-range.date .end-datetime.warning::before {
108 | border-color: rgba(255, 54, 46, 0.75) rgba(255, 54, 46, 0.75) rgba(255, 54, 46, 0.75) transparent;
109 | }
110 | .datetime-range.date .end-datetime.warning.active::before,
111 | .datetime-range.date .end-datetime.warning:hover::before {
112 | border-color: rgba(255, 54, 46, 0.75) rgba(255, 54, 46, 0.75) rgba(255, 54, 46, 0.75) transparent;
113 | }
114 |
115 |
116 | /**
117 | * Presets
118 | */
119 | .datetime-range.date .presets {
120 | box-sizing: border-box;
121 | position: absolute;
122 | z-index: 5;
123 | top: 4.5em;
124 | width: 100%;
125 | height: auto;
126 | padding: 0;
127 | text-align: center;
128 | }
129 | .datetime-range.date .presets .dots {
130 | display: inline-block;
131 | cursor: pointer;
132 | }
133 | .datetime-range.date .presets .dots .dot {
134 | display: inline-block;
135 | width: 5px;
136 | height: 5px;
137 | margin: 0 3px;
138 | vertical-align: top;
139 | background-color: #efefef;
140 | }
141 | .datetime-range.date .presets .dots:hover .dot {
142 | background-color: #ddd;
143 | }
144 | .datetime-range.date .presets .list {
145 | display: none;
146 | }
147 | .datetime-range.date .presets .list.active {
148 | display: block;
149 | }
150 | .datetime-range.date .presets .list .preset-button {
151 | box-sizing: border-box;
152 | position: relative;
153 | display: block;
154 | cursor: pointer;
155 | color: #777;
156 | width: 100%;
157 | height: auto;
158 | margin-bottom: 10px;
159 | padding: 0 15px;
160 | font-size: 1.5em;
161 | line-height: 2em;
162 | text-align: center;
163 | outline: none;
164 | border: 1px solid #aaa;
165 | background-color: #efefef;
166 | transition: background-color 0.25s ease-out;
167 | }
168 | .datetime-range.date .presets .list .preset-button:hover {
169 | background: #ddd;
170 | }
171 |
172 |
173 | /**
174 | * Edit datetime popover
175 | */
176 | .datetime-range.date .edit-popover {
177 | position: absolute;
178 | z-index: 5;
179 | top: 4.5em;
180 | width: 100%;
181 | height: auto;
182 | padding: 0;
183 | background-color: #efefef;
184 | border-radius: 0;
185 | border: 1px solid #aaa;
186 | box-sizing: border-box;
187 | }
188 | .datetime-range.date .edit-popover .header {
189 | width: 100%;
190 | color: #777;
191 | font-size: 1.5em;
192 | line-height: 2em;
193 | transition: background-color 0.25s ease-out;
194 | }
195 | .datetime-range.date .edit-popover .header::before {
196 | content: "";
197 | display: block;
198 | position: absolute;
199 | background-color: #efefef;
200 | width: 1em;
201 | height: 1em;
202 | top: -0.55em;
203 | left: 45%;
204 | z-index: 2;
205 | border-color: #aaa;
206 | border-style: solid;
207 | border-width: 1px 1px 0 0;
208 | transform: rotate(-45deg);
209 | -moz-transform: rotate(-45deg);
210 | -ms-transform: rotate(-45deg);
211 | -o-transform: rotate(-45deg);
212 | -webkit-transform: rotate(-45deg);
213 | transition: background-color 0.25s ease-out;
214 | }
215 | .datetime-range.date .edit-popover .header.start::before {
216 | left: 20%;
217 | }
218 | .datetime-range.date .edit-popover .header.end::before {
219 | left: 74%;
220 | }
221 |
222 |
223 | /**
224 | * Calendar
225 | */
226 | .datetime-range.date .calendar .calendar-header {
227 | cursor: default;
228 | background-color: #fff;
229 | position: relative;
230 | width: 100%;
231 | font-size: 1.5em;
232 | line-height: 2em;
233 | }
234 | .datetime-range.date .calendar .calendar-header .arrow {
235 | display: inline-block;
236 | color: #ddd;
237 | cursor: pointer;
238 | line-height: 1.5em;
239 | font-size: 1.5em;
240 | }
241 | .datetime-range.date .calendar .calendar-header .arrow.arrow-left {
242 | position: absolute;
243 | left: 0;
244 | width: 2em;
245 | height: 100%;
246 | }
247 | .datetime-range.date .calendar .calendar-header .arrow.arrow-left::before {
248 | content: "";
249 | position: absolute;
250 | top: 15%;
251 | left: 25%;
252 | border-right: 0.75em solid #ddd;
253 | border-top: 0.5em solid transparent;
254 | border-bottom: 0.5em solid transparent;
255 | transition: border 0.25s ease-out;
256 | }
257 | .datetime-range.date .calendar .calendar-header .arrow.arrow-left:hover::before {
258 | border-right-color: #999;
259 | }
260 | .datetime-range.date .calendar .calendar-header .arrow.arrow-right {
261 | position: absolute;
262 | right: 0;
263 | width: 2em;
264 | height: 100%;
265 | }
266 | .datetime-range.date .calendar .calendar-header .arrow.arrow-right::before {
267 | content: "";
268 | position: absolute;
269 | top: 15%;
270 | right: 25%;
271 | border-left: 0.75em solid #ddd;
272 | border-top: 0.5em solid transparent;
273 | border-bottom: 0.5em solid transparent;
274 | transition: border 0.25s ease-out;
275 | }
276 | .datetime-range.date .calendar .calendar-header .arrow.arrow-right:hover::before {
277 | border-left-color: #999;
278 | }
279 | .datetime-range.date .calendar .calendar-body {
280 | padding: 0.5em 0;
281 | }
282 | .datetime-range.date .calendar .calendar-body .weekdays {
283 | cursor: default;
284 | display: flex;
285 | justify-content: space-between;
286 | color: #777;
287 | font-size: 1em;
288 | line-height: 2em;
289 | text-transform: uppercase;
290 | padding: 0 1em;
291 | }
292 | .datetime-range.date .calendar .calendar-body .weekdays .weekday {
293 | display: inline-block;
294 | width: 5em;
295 | height: 2.5em;
296 | }
297 | .datetime-range.date .calendar .calendar-body .weekdays .weekday {
298 | display: inline-block;
299 | }
300 | .datetime-range.date .calendar .calendar-body .week {
301 | display: flex;
302 | justify-content: space-between;
303 | color: #777;
304 | font-size: 1.25em;
305 | line-height: 2.65em;
306 | letter-spacing: 1px;
307 | padding: 0.5em 1em;
308 | }
309 | .datetime-range.date .calendar .calendar-body .week .date {
310 | display: inline-block;
311 | cursor: pointer;
312 | width: 2.5em;
313 | height: 2.5em;
314 | border-radius: 50%;
315 | transition: background-color 0.25s ease-out;
316 | }
317 | .datetime-range.date .calendar .calendar-body .week .date.current {
318 | color: #555;
319 | font-weight: 900;
320 | }
321 | .datetime-range.date .calendar .calendar-body .week .date:not(.active):hover {
322 | background-color: #ddd;
323 | }
324 | .datetime-range.date .calendar .calendar-body .week .date.active,
325 | .datetime-range.date .calendar .calendar-body .week .date.inactive.active {
326 | color: #efefef;
327 | background-color: rgba(255, 69, 0, 0.75);
328 | }
329 | .datetime-range.date .calendar .calendar-body .week .date.inactive {
330 | color: #aaa;
331 | }
332 |
333 |
334 | /**
335 | * Close button
336 | */
337 | .datetime-range.date .close-button {
338 | position: absolute;
339 | z-index: 5;
340 | left: -1px;
341 | cursor: pointer;
342 | outline: none;
343 | border-top: 1px solid #aaa;
344 | border-left: 1px solid #aaa;
345 | border-bottom: 1px solid #aaa;
346 | color: #777;
347 | width: 25%;
348 | height: auto;
349 | margin-top: 10px;
350 | font-size: 1.5em;
351 | line-height: 2em;
352 | box-sizing: border-box;
353 | background-color: #efefef;
354 | transition: background-color 0.25s ease-out;
355 | }
356 | .datetime-range.date .close-button::before {
357 | content: "";
358 | position: absolute;
359 | right: -0.5em;
360 | top: -1px;
361 | width: 1em;
362 | height: 2em;
363 | background: #efefef;
364 | border-top: 1px solid #aaa;
365 | border-right: 1px solid #aaa;
366 | transition: background 0.25s ease-out;
367 | transform: skewX(-26deg);
368 | }
369 | .datetime-range.date .close-button:hover,
370 | .datetime-range.date .close-button:hover::before {
371 | background: #ddd;
372 | }
373 |
--------------------------------------------------------------------------------
/src/date-range.html:
--------------------------------------------------------------------------------
1 |
2 |
7 |
12 |
26 |
27 |
31 |
32 |
39 |
40 |
41 |
44 |
45 |
46 |
47 |
55 |
56 |
57 |
58 |
59 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/src/date-range.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | angular.module('g1b.datetime-range').
4 | directive('dateRange', ['$document', '$timeout', function ($document, $timeout) {
5 |
6 | return {
7 | restrict: 'E',
8 | scope: {
9 | start: '=',
10 | end: '=',
11 | presets: '=?',
12 | minDate:'=?',
13 | maxDate:'=?',
14 | onChange: '&?',
15 | onChangeStart: '&?',
16 | onChangeEnd: '&?',
17 | onClose: '&?',
18 | closeText: '@',
19 | },
20 | replace: true,
21 | templateUrl: './date-range.html',
22 | compile: function () {
23 | return {
24 | pre: function preLink() {},
25 | post: function postLink(scope, element) {
26 |
27 | // Get current date
28 | scope.current = moment();
29 |
30 | // Convert start datetime to moment.js if its not a moment object yet
31 | if ( scope.start && !scope.start._isAMomentObject ) {
32 | scope.start = moment(scope.start);
33 | }
34 |
35 | // Convert end datetime to moment.js if its not a moment object yet
36 | if ( scope.end && !scope.end._isAMomentObject ) {
37 | scope.end = moment(scope.end);
38 | }
39 |
40 | // Get number of weeks in month
41 | scope.getNumWeeks = function () {
42 | if ( !scope.calendar ) { return; }
43 |
44 | var firstDayOfWeek = scope.calendar.clone().startOf('week').weekday();
45 |
46 | var firstOfMonth = scope.calendar.clone().startOf('month');
47 | var lastOfMonth = scope.calendar.clone().endOf('month');
48 |
49 | var firstWeekDay = (firstOfMonth.weekday() - firstDayOfWeek + 7) % 7;
50 |
51 | return Math.ceil((firstWeekDay + scope.calendar.daysInMonth()) / 7);
52 | }
53 |
54 | // Set selected date
55 | scope.selectDate = function (date) {
56 | if ( scope.selected === date ) {
57 | scope.selected = undefined;
58 | } else {
59 | scope.selected = date;
60 | scope.calendar = scope.selected.clone();
61 | scope.presetsActive = false;
62 | }
63 | };
64 |
65 | // Check if date is within bounds of min and max allowed date
66 | scope.isWithinBounds = function (date) {
67 | return ( !scope.minDate || date > scope.minDate ) && ( !scope.maxDate || date < scope.maxDate );
68 | };
69 |
70 | // Update selected date
71 | scope.setDate = function (date, calendar_update) {
72 | if ( scope.selected.isSame(date) || !scope.isWithinBounds(date) ) { return; }
73 | if ( ( scope.selected === scope.start && date < scope.end ) || ( scope.selected === scope.end && date > scope.start ) ) {
74 | scope.selected.year(date.year()).month(date.month()).date(date.date()).hours(date.hours()).minutes(date.minutes()).seconds(date.seconds());
75 | if ( (scope.selected.clone().startOf('week').month() !== scope.calendar.month() && scope.selected.clone().endOf('week').month() !== scope.calendar.month()) || calendar_update ) {
76 | scope.calendar = scope.selected.clone();
77 | }
78 | if ( scope.selected === scope.start ) {
79 | scope.callbackStart();
80 | }
81 | if ( scope.selected === scope.end ) {
82 | scope.callbackEnd();
83 | }
84 | scope.callbackAll();
85 | } else {
86 | scope.warning = ( scope.selected === scope.start ) ? 'end' : 'start';
87 | $timeout(function () {
88 | scope.warning = undefined;
89 | }, 250);
90 | }
91 | };
92 |
93 | // Set start and end datetime objects to the selected preset
94 | scope.selectPreset = function (preset) {
95 | // Hide presets menu on select
96 | scope.close();
97 |
98 | // Don't do anything if nothing is changed
99 | if ( scope.start.isSame(preset.start) && scope.end.isSame(preset.end) ) { return; }
100 |
101 | // Update start datetime object if changed
102 | if ( !scope.start.isSame(preset.start) ) {
103 | scope.start = preset.start.clone();
104 | scope.callbackStart();
105 | }
106 |
107 | // Update end datetime object if changed
108 | if ( !scope.end.isSame(preset.end) ) {
109 | scope.end = preset.end.clone();
110 | scope.callbackEnd();
111 | }
112 |
113 | // Something has definitely changed, fire ambiguous callback
114 | scope.callbackAll();
115 | };
116 |
117 | // Callbacks fired on change of start datetime object
118 | scope.callbackStart = function () {
119 | if ( !!scope.onChangeStart ) {
120 | $timeout(function () {
121 | scope.onChangeStart();
122 | });
123 | }
124 | };
125 |
126 | // Callbacks fired on change of end datetime object
127 | scope.callbackEnd = function () {
128 | if ( !!scope.onChangeEnd ) {
129 | $timeout(function () {
130 | scope.onChangeEnd();
131 | });
132 | }
133 | };
134 |
135 | // Callbacks fired on change of start and/or end datetime objects
136 | scope.callbackAll = function () {
137 | if ( !!scope.onChange ) {
138 | $timeout(function () {
139 | scope.onChange();
140 | });
141 | }
142 | };
143 |
144 | // Close edit popover
145 | scope.close = function () {
146 | scope.selected = '';
147 | scope.presetsActive = false;
148 |
149 | if ( !!scope.onClose ) {
150 | scope.onClose();
151 | }
152 | }
153 |
154 | // Bind click events outside directive to close edit popover
155 | $document.on('mousedown', function (e) {
156 | if ( !element[0].contains(e.target) && (!!scope.presetsActive || !!scope.selected) ) {
157 | scope.$apply(function () {
158 | scope.close();
159 | });
160 | }
161 | });
162 |
163 | // Bind 'esc' keyup event to close edit popover
164 | $document.on('keyup', function (e) {
165 | if ( e.keyCode === 27 && (!!scope.presetsActive || !!scope.selected) ) {
166 | scope.$apply(function () {
167 | scope.close();
168 | });
169 | }
170 | });
171 | }
172 | };
173 | }
174 | };
175 | }]);
176 |
--------------------------------------------------------------------------------
/src/datetime-range.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Datetime range styles
3 | */
4 | .datetime-range.datetime {
5 | position: relative;
6 | width: 100%;
7 | min-width: 350px;
8 | height: auto;
9 | min-height: 4em;
10 | margin: 0;
11 | padding: 0;
12 | color: #444;
13 | font-size: 14px;
14 | font-family: sans-serif;
15 | text-decoration: none;
16 | text-align: center;
17 | user-select: none;
18 | -ms-user-select: none;
19 | -moz-user-select: none;
20 | -khtml-user-select: none;
21 | -webkit-user-select: none;
22 | -webkit-touch-callout: none;
23 | -webkit-user-select: none;
24 | -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
25 | }
26 |
27 |
28 | /**
29 | * Start and end datetime objects
30 | */
31 | .datetime-range.datetime .start-datetime,
32 | .datetime-range.datetime .end-datetime {
33 | cursor: pointer;
34 | position: relative;
35 | width: 47%;
36 | height: 4em;
37 | background-color: #efefef;
38 | transition: background-color 0.25s ease-out;
39 | }
40 | .datetime-range.datetime .start-datetime {
41 | position: absolute;
42 | left: 0;
43 | }
44 | .datetime-range.datetime .end-datetime {
45 | position: absolute;
46 | left: 53%;
47 | }
48 | .datetime-range.datetime .start-datetime .date,
49 | .datetime-range.datetime .end-datetime .date {
50 | color: #777;
51 | font-size: 1em;
52 | line-height: 1em;
53 | margin-top: 0.5em;
54 | display: block;
55 | overflow: hidden;
56 | }
57 | .datetime-range.datetime .start-datetime .time,
58 | .datetime-range.datetime .end-datetime .time {
59 | font-size: 1.5em;
60 | line-height: 1.75em;
61 | display: block;
62 | overflow: hidden;
63 | }
64 | .datetime-range.datetime .start-datetime.active,
65 | .datetime-range.datetime .start-datetime:hover,
66 | .datetime-range.datetime .end-datetime.active,
67 | .datetime-range.datetime .end-datetime:hover {
68 | background-color: #ddd;
69 | }
70 | .datetime-range.datetime .start-datetime::after {
71 | content: "";
72 | position: absolute;
73 | top: 0;
74 | border-top: 2em solid transparent;
75 | border-bottom: 2em solid transparent;
76 | border-left: 1em solid #efefef;
77 | transition: border-left 0.25s ease-out;
78 | right: -1em;
79 | }
80 | .datetime-range.datetime .start-datetime.active::after,
81 | .datetime-range.datetime .start-datetime:hover::after {
82 | border-left-color: #ddd;
83 | }
84 | .datetime-range.datetime .end-datetime::before {
85 | content: "";
86 | position: absolute;
87 | top: 0;
88 | border-width: 2em 0 2em 1em;
89 | border-style: solid;
90 | border-color: #efefef #efefef #efefef transparent;
91 | transition: border-color 0.25s ease-out;
92 | left: -1em;
93 | }
94 | .datetime-range.datetime .end-datetime.active::before,
95 | .datetime-range.datetime .end-datetime:hover::before {
96 | border-color: #ddd #ddd #ddd transparent;
97 | }
98 | .datetime-range.datetime .start-datetime.warning,
99 | .datetime-range.datetime .end-datetime.warning {
100 | background-color: rgba(255, 54, 46, 0.75);
101 | }
102 | .datetime-range.datetime .start-datetime.warning.active,
103 | .datetime-range.datetime .start-datetime.warning:hover,
104 | .datetime-range.datetime .end-datetime.warning.active,
105 | .datetime-range.datetime .end-datetime.warning:hover {
106 | background-color: rgba(255, 54, 46, 0.75);
107 | }
108 | .datetime-range.datetime .start-datetime.warning::after {
109 | border-left-color: rgba(255, 54, 46, 0.75);
110 | }
111 | .datetime-range.datetime .start-datetime.warning.active::after,
112 | .datetime-range.datetime .start-datetime.warning:hover::after {
113 | border-left-color: rgba(255, 54, 46, 0.75);
114 | }
115 | .datetime-range.datetime .end-datetime.warning::before {
116 | border-color: rgba(255, 54, 46, 0.75) rgba(255, 54, 46, 0.75) rgba(255, 54, 46, 0.75) transparent;
117 | }
118 | .datetime-range.datetime .end-datetime.warning.active::before,
119 | .datetime-range.datetime .end-datetime.warning:hover::before {
120 | border-color: rgba(255, 54, 46, 0.75) rgba(255, 54, 46, 0.75) rgba(255, 54, 46, 0.75) transparent;
121 | }
122 |
123 |
124 | /**
125 | * Presets
126 | */
127 | .datetime-range.datetime .presets {
128 | box-sizing: border-box;
129 | position: absolute;
130 | z-index: 5;
131 | top: 4.5em;
132 | width: 100%;
133 | height: auto;
134 | padding: 0;
135 | text-align: center;
136 | }
137 | .datetime-range.datetime .presets .dots {
138 | display: inline-block;
139 | cursor: pointer;
140 | }
141 | .datetime-range.datetime .presets .dots .dot {
142 | display: inline-block;
143 | width: 5px;
144 | height: 5px;
145 | margin: 0 3px;
146 | vertical-align: top;
147 | background-color: #efefef;
148 | }
149 | .datetime-range.datetime .presets .dots:hover .dot {
150 | background-color: #ddd;
151 | }
152 | .datetime-range.datetime .presets .list {
153 | display: none;
154 | }
155 | .datetime-range.datetime .presets .list.active {
156 | display: block;
157 | }
158 | .datetime-range.datetime .presets .list .preset-button {
159 | box-sizing: border-box;
160 | position: relative;
161 | display: block;
162 | cursor: pointer;
163 | color: #777;
164 | width: 100%;
165 | height: auto;
166 | margin-bottom: 10px;
167 | padding: 0 15px;
168 | font-size: 1.5em;
169 | line-height: 2em;
170 | text-align: center;
171 | outline: none;
172 | border: 1px solid #aaa;
173 | background-color: #efefef;
174 | transition: background-color 0.25s ease-out;
175 | }
176 | .datetime-range.datetime .presets .list .preset-button:hover {
177 | background: #ddd;
178 | }
179 |
180 |
181 | /**
182 | * Edit datetime popover
183 | */
184 | .datetime-range.datetime .edit-popover {
185 | position: absolute;
186 | z-index: 5;
187 | top: 4.5em;
188 | width: 100%;
189 | height: auto;
190 | padding: 0;
191 | background-color: #efefef;
192 | border-radius: 0;
193 | border: 1px solid #aaa;
194 | box-sizing: border-box;
195 | }
196 |
197 |
198 | /**
199 | * Calendar
200 | */
201 | .datetime-range.datetime .calendar-toggle {
202 | width: 100%;
203 | color: #777;
204 | font-size: 1.5em;
205 | line-height: 2em;
206 | cursor: pointer;
207 | transition: background-color 0.25s ease-out;
208 | }
209 | .datetime-range.datetime .calendar-toggle::before {
210 | content: "";
211 | display: block;
212 | position: absolute;
213 | background-color: #efefef;
214 | width: 1em;
215 | height: 1em;
216 | top: -0.55em;
217 | left: 45%;
218 | z-index: 2;
219 | border-color: #aaa;
220 | border-style: solid;
221 | border-width: 1px 1px 0 0;
222 | transform: rotate(-45deg);
223 | -moz-transform: rotate(-45deg);
224 | -ms-transform: rotate(-45deg);
225 | -o-transform: rotate(-45deg);
226 | -webkit-transform: rotate(-45deg);
227 | transition: background-color 0.25s ease-out;
228 | }
229 | .datetime-range.datetime .calendar-toggle:hover,
230 | .datetime-range.datetime .calendar-toggle:hover::before {
231 | background-color: #ddd;
232 | }
233 | .datetime-range.datetime .calendar-toggle.start::before {
234 | left: 20%;
235 | }
236 | .datetime-range.datetime .calendar-toggle.end::before {
237 | left: 74%;
238 | }
239 | .datetime-range.datetime .calendar .calendar-header {
240 | cursor: default;
241 | background-color: #fff;
242 | position: relative;
243 | width: 100%;
244 | font-size: 1.5em;
245 | line-height: 2em;
246 | }
247 | .datetime-range.datetime .calendar .calendar-header .arrow {
248 | display: inline-block;
249 | color: #ddd;
250 | cursor: pointer;
251 | line-height: 1.5em;
252 | font-size: 1.5em;
253 | }
254 | .datetime-range.datetime .calendar .calendar-header .arrow.arrow-left {
255 | position: absolute;
256 | left: 0;
257 | width: 2em;
258 | height: 100%;
259 | }
260 | .datetime-range.datetime .calendar .calendar-header .arrow.arrow-left::before {
261 | content: "";
262 | position: absolute;
263 | top: 15%;
264 | left: 25%;
265 | border-right: 0.75em solid #ddd;
266 | border-top: 0.5em solid transparent;
267 | border-bottom: 0.5em solid transparent;
268 | transition: border 0.25s ease-out;
269 | }
270 | .datetime-range.datetime .calendar .calendar-header .arrow.arrow-left:hover::before {
271 | border-right-color: #999;
272 | }
273 | .datetime-range.datetime .calendar .calendar-header .arrow.arrow-right {
274 | position: absolute;
275 | right: 0;
276 | width: 2em;
277 | height: 100%;
278 | }
279 | .datetime-range.datetime .calendar .calendar-header .arrow.arrow-right::before {
280 | content: "";
281 | position: absolute;
282 | top: 15%;
283 | right: 25%;
284 | border-left: 0.75em solid #ddd;
285 | border-top: 0.5em solid transparent;
286 | border-bottom: 0.5em solid transparent;
287 | transition: border 0.25s ease-out;
288 | }
289 | .datetime-range.datetime .calendar .calendar-header .arrow.arrow-right:hover::before {
290 | border-left-color: #999;
291 | }
292 | .datetime-range.datetime .calendar .calendar-body {
293 | padding: 0.5em 0;
294 | }
295 | .datetime-range.datetime .calendar .calendar-body .weekdays {
296 | cursor: default;
297 | display: flex;
298 | justify-content: space-between;
299 | color: #777;
300 | font-size: 1em;
301 | line-height: 2em;
302 | text-transform: uppercase;
303 | padding: 0 1em;
304 | }
305 | .datetime-range.datetime .calendar .calendar-body .weekdays .weekday {
306 | display: inline-block;
307 | width: 5em;
308 | height: 2.5em;
309 | }
310 | .datetime-range.datetime .calendar .calendar-body .weekdays .weekday {
311 | display: inline-block;
312 | }
313 | .datetime-range.datetime .calendar .calendar-body .week {
314 | display: flex;
315 | justify-content: space-between;
316 | color: #777;
317 | font-size: 1.25em;
318 | line-height: 2.65em;
319 | letter-spacing: 1px;
320 | padding: 0.5em 1em;
321 | }
322 | .datetime-range.datetime .calendar .calendar-body .week .date {
323 | display: inline-block;
324 | cursor: pointer;
325 | width: 2.5em;
326 | height: 2.5em;
327 | border-radius: 50%;
328 | transition: background-color 0.25s ease-out;
329 | }
330 | .datetime-range.datetime .calendar .calendar-body .week .date.current {
331 | color: #555;
332 | font-weight: 900;
333 | }
334 | .datetime-range.datetime .calendar .calendar-body .week .date:not(.active):hover {
335 | background-color: #ddd;
336 | }
337 | .datetime-range.datetime .calendar .calendar-body .week .date.active,
338 | .datetime-range.datetime .calendar .calendar-body .week .date.inactive.active {
339 | color: #efefef;
340 | background-color: rgba(255, 69, 0, 0.75);
341 | }
342 | .datetime-range.datetime .calendar .calendar-body .week .date.inactive {
343 | color: #aaa;
344 | }
345 |
346 |
347 | /**
348 | * Timer
349 | */
350 | .datetime-range.datetime .timer {
351 | display: flex;
352 | justify-content: space-between;
353 | background-color: #fff;
354 | }
355 | .datetime-range.datetime .timer .timer-hours,
356 | .datetime-range.datetime .timer .timer-minutes,
357 | .datetime-range.datetime .timer .timer-seconds {
358 | cursor: default;
359 | width: 3em;
360 | display: inline-block;
361 | font-size: 3em;
362 | line-height: 1.5em;
363 | position: relative;
364 | }
365 | .datetime-range.datetime .timer .timer-hours .arrow,
366 | .datetime-range.datetime .timer .timer-minutes .arrow,
367 | .datetime-range.datetime .timer .timer-seconds .arrow {
368 | position: relative;
369 | color: #ddd;
370 | cursor: pointer;
371 | height: 1em;
372 | margin: 0 0.5em;
373 | line-height: 1em;
374 | font-size: 0.75em;
375 | }
376 | .datetime-range.datetime .timer .timer-hours .arrow.arrow-up::before,
377 | .datetime-range.datetime .timer .timer-minutes .arrow.arrow-up::before,
378 | .datetime-range.datetime .timer .timer-seconds .arrow.arrow-up::before {
379 | content: "";
380 | position: absolute;
381 | top: 50%;
382 | left: calc(50% - 0.4em);
383 | border-left: 0.5em solid transparent;
384 | border-right: 0.5em solid transparent;
385 | border-bottom: 0.5em solid #ddd;
386 | transition: border 0.25s ease-out;
387 | }
388 | .datetime-range.datetime .timer .timer-hours .arrow.arrow-up:hover::before,
389 | .datetime-range.datetime .timer .timer-minutes .arrow.arrow-up:hover::before,
390 | .datetime-range.datetime .timer .timer-seconds .arrow.arrow-up:hover::before {
391 | border-bottom-color: #999;
392 | }
393 | .datetime-range.datetime .timer .timer-hours .arrow.arrow-down::before,
394 | .datetime-range.datetime .timer .timer-minutes .arrow.arrow-down::before,
395 | .datetime-range.datetime .timer .timer-seconds .arrow.arrow-down::before {
396 | content: "";
397 | position: absolute;
398 | top: 0;
399 | left: calc(50% - 0.4em);
400 | border-left: 0.5em solid transparent;
401 | border-right: 0.5em solid transparent;
402 | border-top: 0.5em solid #ddd;
403 | transition: border 0.25s ease-out;
404 | }
405 | .datetime-range.datetime .timer .timer-hours .arrow.arrow-down:hover::before,
406 | .datetime-range.datetime .timer .timer-minutes .arrow.arrow-down:hover::before,
407 | .datetime-range.datetime .timer .timer-seconds .arrow.arrow-down:hover::before {
408 | border-top-color: #999;
409 | }
410 | .datetime-range.datetime .timer .timer-divider {
411 | font-size: 3em;
412 | line-height: 3em;
413 | -webkit-animation-name: blinker;
414 | -webkit-animation-duration: 5s;
415 | -webkit-animation-timing-function: linear;
416 | -webkit-animation-iteration-count: infinite;
417 | -moz-animation-name: blinker;
418 | -moz-animation-duration: 5s;
419 | -moz-animation-timing-function: linear;
420 | -moz-animation-iteration-count: infinite;
421 | animation-name: blinker;
422 | animation-duration: 5s;
423 | animation-timing-function: linear;
424 | animation-iteration-count: infinite;
425 | }
426 | @-moz-keyframes blinker {
427 | 0% { opacity: 0.0; }
428 | 5% { opacity: 1.0; }
429 | 95% { opacity: 1.0; }
430 | 100% { opacity: 0.0; }
431 | }
432 | @-webkit-keyframes blinker {
433 | 0% { opacity: 0.0; }
434 | 5% { opacity: 1.0; }
435 | 95% { opacity: 1.0; }
436 | 100% { opacity: 0.0; }
437 | }
438 | @keyframes blinker {
439 | 0% { opacity: 0.0; }
440 | 5% { opacity: 1.0; }
441 | 95% { opacity: 1.0; }
442 | 100% { opacity: 0.0; }
443 | }
444 |
445 |
446 | /**
447 | * Close button
448 | */
449 | .datetime-range.datetime .close-button {
450 | position: absolute;
451 | z-index: 5;
452 | left: -1px;
453 | cursor: pointer;
454 | outline: none;
455 | border-top: 1px solid #aaa;
456 | border-left: 1px solid #aaa;
457 | border-bottom: 1px solid #aaa;
458 | color: #777;
459 | width: 25%;
460 | height: auto;
461 | margin-top: 10px;
462 | font-size: 1.5em;
463 | line-height: 2em;
464 | box-sizing: border-box;
465 | background-color: #efefef;
466 | transition: background-color 0.25s ease-out;
467 | }
468 | .datetime-range.datetime .close-button::before {
469 | content: "";
470 | position: absolute;
471 | right: -0.5em;
472 | top: -1px;
473 | width: 1em;
474 | height: 2em;
475 | background: #efefef;
476 | border-top: 1px solid #aaa;
477 | border-right: 1px solid #aaa;
478 | transition: background 0.25s ease-out;
479 | transform: skewX(-26deg);
480 | }
481 | .datetime-range.datetime .close-button:hover,
482 | .datetime-range.datetime .close-button:hover::before {
483 | background: #ddd;
484 | }
485 |
--------------------------------------------------------------------------------
/src/datetime-range.html:
--------------------------------------------------------------------------------
1 |
2 |
8 |
14 |
28 |
29 |
33 |
34 |
35 |
42 |
43 |
44 |
47 |
48 |
49 |
50 |
58 |
59 |
60 |
61 |
62 |
63 |
70 |
:
71 |
78 |
:
79 |
86 |
87 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/src/datetime-range.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | angular.module('g1b.datetime-range', ['g1b.scroll-events']).
4 | directive('datetimeRange', ['$document', '$timeout', function ($document, $timeout) {
5 |
6 | return {
7 | restrict: 'E',
8 | scope: {
9 | start: '=',
10 | end: '=',
11 | presets: '=?',
12 | minDate:'=?',
13 | maxDate:'=?',
14 | onChange: '&?',
15 | onChangeStart: '&?',
16 | onChangeEnd: '&?',
17 | onClose: '&?',
18 | closeText: '@',
19 | },
20 | replace: true,
21 | templateUrl: './datetime-range.html',
22 | compile: function () {
23 | return {
24 | pre: function preLink() {},
25 | post: function postLink(scope, element) {
26 |
27 | // Get current date
28 | scope.current = moment();
29 |
30 | // Convert start datetime to moment.js if its not a moment object yet
31 | if ( scope.start && !scope.start._isAMomentObject ) {
32 | scope.start = moment(scope.start);
33 | }
34 |
35 | // Convert end datetime to moment.js if its not a moment object yet
36 | if ( scope.end && !scope.end._isAMomentObject ) {
37 | scope.end = moment(scope.end);
38 | }
39 |
40 | // Get number of weeks in month
41 | scope.getNumWeeks = function () {
42 | if ( !scope.calendar ) { return; }
43 |
44 | var firstDayOfWeek = scope.calendar.clone().startOf('week').weekday();
45 |
46 | var firstOfMonth = scope.calendar.clone().startOf('month');
47 | var lastOfMonth = scope.calendar.clone().endOf('month');
48 |
49 | var firstWeekDay = (firstOfMonth.weekday() - firstDayOfWeek + 7) % 7;
50 |
51 | return Math.ceil((firstWeekDay + scope.calendar.daysInMonth()) / 7);
52 | }
53 |
54 | // Set selected date
55 | scope.selectDate = function (date) {
56 | if ( scope.selected === date ) {
57 | scope.selected = undefined;
58 | } else {
59 | scope.selected = date;
60 | scope.calendar = scope.selected.clone();
61 | scope.presetsActive = false;
62 | }
63 | };
64 |
65 | // Check if date is within bounds of min and max allowed date
66 | scope.isWithinBounds = function (date) {
67 | return ( !scope.minDate || date > scope.minDate ) && ( !scope.maxDate || date < scope.maxDate );
68 | };
69 |
70 | // Update selected date
71 | scope.setDate = function (date, calendar_update) {
72 | if ( scope.selected.isSame(date) || !scope.isWithinBounds(date) ) { return; }
73 | if ( ( scope.selected === scope.start && date < scope.end ) || ( scope.selected === scope.end && date > scope.start ) ) {
74 | scope.selected.year(date.year()).month(date.month()).date(date.date()).hours(date.hours()).minutes(date.minutes()).seconds(date.seconds());
75 | if ( (scope.selected.clone().startOf('week').month() !== scope.calendar.month() && scope.selected.clone().endOf('week').month() !== scope.calendar.month()) || calendar_update ) {
76 | scope.calendar = scope.selected.clone();
77 | }
78 | if ( scope.selected === scope.start ) {
79 | scope.callbackStart();
80 | }
81 | if ( scope.selected === scope.end ) {
82 | scope.callbackEnd();
83 | }
84 | scope.callbackAll();
85 | } else {
86 | scope.warning = ( scope.selected === scope.start ) ? 'end' : 'start';
87 | $timeout(function () {
88 | scope.warning = undefined;
89 | }, 250);
90 | }
91 | };
92 |
93 | // Set start and end datetime objects to the selected preset
94 | scope.selectPreset = function (preset) {
95 | // Hide presets menu on select
96 | scope.close();
97 |
98 | // Don't do anything if nothing is changed
99 | if ( scope.start.isSame(preset.start) && scope.end.isSame(preset.end) ) { return; }
100 |
101 | // Update start datetime object if changed
102 | if ( !scope.start.isSame(preset.start) ) {
103 | scope.start = preset.start.clone();
104 | scope.callbackStart();
105 | }
106 |
107 | // Update end datetime object if changed
108 | if ( !scope.end.isSame(preset.end) ) {
109 | scope.end = preset.end.clone();
110 | scope.callbackEnd();
111 | }
112 |
113 | // Something has definitely changed, fire ambiguous callback
114 | scope.callbackAll();
115 | };
116 |
117 | // Callbacks fired on change of start datetime object
118 | scope.callbackStart = function () {
119 | if ( !!scope.onChangeStart ) {
120 | $timeout(function () {
121 | scope.onChangeStart();
122 | });
123 | }
124 | };
125 |
126 | // Callbacks fired on change of end datetime object
127 | scope.callbackEnd = function () {
128 | if ( !!scope.onChangeEnd ) {
129 | $timeout(function () {
130 | scope.onChangeEnd();
131 | });
132 | }
133 | };
134 |
135 | // Callbacks fired on change of start and/or end datetime objects
136 | scope.callbackAll = function () {
137 | if ( !!scope.onChange ) {
138 | $timeout(function () {
139 | scope.onChange();
140 | });
141 | }
142 | };
143 |
144 | // Close edit popover
145 | scope.close = function () {
146 | scope.selected = '';
147 | scope.presetsActive = false;
148 | scope.calendarActive = false;
149 |
150 | if ( !!scope.onClose ) {
151 | scope.onClose();
152 | }
153 | }
154 |
155 | // Bind click events outside directive to close edit popover
156 | $document.on('mousedown', function (e) {
157 | if ( !element[0].contains(e.target) && (!!scope.presetsActive || !!scope.selected) ) {
158 | scope.$apply(function () {
159 | scope.close();
160 | });
161 | }
162 | });
163 |
164 | // Bind 'esc' keyup event to close edit popover
165 | $document.on('keyup', function (e) {
166 | if ( e.keyCode === 27 && (!!scope.presetsActive || !!scope.selected) ) {
167 | scope.$apply(function () {
168 | scope.close();
169 | });
170 | }
171 | });
172 | }
173 | };
174 | }
175 | };
176 | }]);
177 |
--------------------------------------------------------------------------------
/src/time-range.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Datetime range styles
3 | */
4 | .datetime-range.time {
5 | position: relative;
6 | width: 100%;
7 | min-width: 350px;
8 | height: auto;
9 | min-height: 4em;
10 | margin: 0;
11 | padding: 0;
12 | color: #444;
13 | font-size: 14px;
14 | font-family: sans-serif;
15 | text-decoration: none;
16 | text-align: center;
17 | user-select: none;
18 | -ms-user-select: none;
19 | -moz-user-select: none;
20 | -khtml-user-select: none;
21 | -webkit-user-select: none;
22 | -webkit-touch-callout: none;
23 | -webkit-user-select: none;
24 | -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
25 | }
26 |
27 |
28 | /**
29 | * Start and end datetime objects
30 | */
31 | .datetime-range.time .start-datetime,
32 | .datetime-range.time .end-datetime {
33 | cursor: pointer;
34 | position: relative;
35 | width: 47%;
36 | height: 4em;
37 | background-color: #efefef;
38 | transition: background-color 0.25s ease-out;
39 | }
40 | .datetime-range.time .start-datetime {
41 | position: absolute;
42 | left: 0;
43 | }
44 | .datetime-range.time .end-datetime {
45 | position: absolute;
46 | left: 53%;
47 | }
48 | .datetime-range.time .start-datetime .time,
49 | .datetime-range.time .end-datetime .time {
50 | color: #777;
51 | font-size: 2em;
52 | line-height: 2em;
53 | display: block;
54 | overflow: hidden;
55 | }
56 | .datetime-range.time .start-datetime.active,
57 | .datetime-range.time .start-datetime:hover,
58 | .datetime-range.time .end-datetime.active,
59 | .datetime-range.time .end-datetime:hover {
60 | background-color: #ddd;
61 | }
62 | .datetime-range.time .start-datetime::after {
63 | content: "";
64 | position: absolute;
65 | top: 0;
66 | border-top: 2em solid transparent;
67 | border-bottom: 2em solid transparent;
68 | border-left: 1em solid #efefef;
69 | transition: border-left 0.25s ease-out;
70 | right: -1em;
71 | }
72 | .datetime-range.time .start-datetime.active::after,
73 | .datetime-range.time .start-datetime:hover::after {
74 | border-left-color: #ddd;
75 | }
76 | .datetime-range.time .end-datetime::before {
77 | content: "";
78 | position: absolute;
79 | top: 0;
80 | border-width: 2em 0 2em 1em;
81 | border-style: solid;
82 | border-color: #efefef #efefef #efefef transparent;
83 | transition: border-color 0.25s ease-out;
84 | left: -1em;
85 | }
86 | .datetime-range.time .end-datetime.active::before,
87 | .datetime-range.time .end-datetime:hover::before {
88 | border-color: #ddd #ddd #ddd transparent;
89 | }
90 | .datetime-range.time .start-datetime.warning,
91 | .datetime-range.time .end-datetime.warning {
92 | background-color: rgba(255, 54, 46, 0.75);
93 | }
94 | .datetime-range.time .start-datetime.warning.active,
95 | .datetime-range.time .start-datetime.warning:hover,
96 | .datetime-range.time .end-datetime.warning.active,
97 | .datetime-range.time .end-datetime.warning:hover {
98 | background-color: rgba(255, 54, 46, 0.75);
99 | }
100 | .datetime-range.time .start-datetime.warning::after {
101 | border-left-color: rgba(255, 54, 46, 0.75);
102 | }
103 | .datetime-range.time .start-datetime.warning.active::after,
104 | .datetime-range.time .start-datetime.warning:hover::after {
105 | border-left-color: rgba(255, 54, 46, 0.75);
106 | }
107 | .datetime-range.time .end-datetime.warning::before {
108 | border-color: rgba(255, 54, 46, 0.75) rgba(255, 54, 46, 0.75) rgba(255, 54, 46, 0.75) transparent;
109 | }
110 | .datetime-range.time .end-datetime.warning.active::before,
111 | .datetime-range.time .end-datetime.warning:hover::before {
112 | border-color: rgba(255, 54, 46, 0.75) rgba(255, 54, 46, 0.75) rgba(255, 54, 46, 0.75) transparent;
113 | }
114 |
115 |
116 | /**
117 | * Presets
118 | */
119 | .datetime-range.time .presets {
120 | box-sizing: border-box;
121 | position: absolute;
122 | z-index: 5;
123 | top: 4.5em;
124 | width: 100%;
125 | height: auto;
126 | padding: 0;
127 | text-align: center;
128 | }
129 | .datetime-range.time .presets .dots {
130 | display: inline-block;
131 | cursor: pointer;
132 | }
133 | .datetime-range.time .presets .dots .dot {
134 | display: inline-block;
135 | width: 5px;
136 | height: 5px;
137 | margin: 0 3px;
138 | vertical-align: top;
139 | background-color: #efefef;
140 | }
141 | .datetime-range.time .presets .dots:hover .dot {
142 | background-color: #ddd;
143 | }
144 | .datetime-range.time .presets .list {
145 | display: none;
146 | }
147 | .datetime-range.time .presets .list.active {
148 | display: block;
149 | }
150 | .datetime-range.time .presets .list .preset-button {
151 | box-sizing: border-box;
152 | position: relative;
153 | display: block;
154 | cursor: pointer;
155 | color: #777;
156 | width: 100%;
157 | height: auto;
158 | margin-bottom: 10px;
159 | padding: 0 15px;
160 | font-size: 1.5em;
161 | line-height: 2em;
162 | text-align: center;
163 | outline: none;
164 | border: 1px solid #aaa;
165 | background-color: #efefef;
166 | transition: background-color 0.25s ease-out;
167 | }
168 | .datetime-range.time .presets .list .preset-button:hover {
169 | background: #ddd;
170 | }
171 |
172 |
173 | /**
174 | * Edit datetime popover
175 | */
176 | .datetime-range.time .edit-popover {
177 | position: absolute;
178 | z-index: 5;
179 | top: 4.5em;
180 | width: 100%;
181 | height: auto;
182 | padding: 0;
183 | background-color: #efefef;
184 | border-radius: 0;
185 | border: 1px solid #aaa;
186 | box-sizing: border-box;
187 | }
188 | .datetime-range.time .edit-popover .header {
189 | width: 100%;
190 | color: #777;
191 | font-size: 1.5em;
192 | line-height: 2em;
193 | cursor: pointer;
194 | transition: background-color 0.25s ease-out;
195 | }
196 | .datetime-range.time .edit-popover .header::before {
197 | content: "";
198 | display: block;
199 | position: absolute;
200 | background-color: #efefef;
201 | width: 1em;
202 | height: 1em;
203 | top: -0.55em;
204 | left: 45%;
205 | z-index: 2;
206 | border-color: #aaa;
207 | border-style: solid;
208 | border-width: 1px 1px 0 0;
209 | transform: rotate(-45deg);
210 | -moz-transform: rotate(-45deg);
211 | -ms-transform: rotate(-45deg);
212 | -o-transform: rotate(-45deg);
213 | -webkit-transform: rotate(-45deg);
214 | transition: background-color 0.25s ease-out;
215 | }
216 | .datetime-range.time .edit-popover .header.start::before {
217 | left: 20%;
218 | }
219 | .datetime-range.time .edit-popover .header.end::before {
220 | left: 74%;
221 | }
222 |
223 |
224 | /**
225 | * Timer
226 | */
227 | .datetime-range.time .timer {
228 | display: flex;
229 | justify-content: space-between;
230 | background-color: #fff;
231 | }
232 | .datetime-range.time .timer .timer-hours,
233 | .datetime-range.time .timer .timer-minutes,
234 | .datetime-range.time .timer .timer-seconds {
235 | cursor: default;
236 | width: 3em;
237 | display: inline-block;
238 | font-size: 3em;
239 | line-height: 1.5em;
240 | position: relative;
241 | }
242 | .datetime-range.time .timer .timer-hours .arrow,
243 | .datetime-range.time .timer .timer-minutes .arrow,
244 | .datetime-range.time .timer .timer-seconds .arrow {
245 | position: relative;
246 | color: #ddd;
247 | cursor: pointer;
248 | height: 1em;
249 | margin: 0 0.5em;
250 | line-height: 1em;
251 | font-size: 0.75em;
252 | }
253 | .datetime-range.time .timer .timer-hours .arrow.arrow-up::before,
254 | .datetime-range.time .timer .timer-minutes .arrow.arrow-up::before,
255 | .datetime-range.time .timer .timer-seconds .arrow.arrow-up::before {
256 | content: "";
257 | position: absolute;
258 | top: 50%;
259 | left: calc(50% - 0.4em);
260 | border-left: 0.5em solid transparent;
261 | border-right: 0.5em solid transparent;
262 | border-bottom: 0.5em solid #ddd;
263 | transition: border 0.25s ease-out;
264 | }
265 | .datetime-range.time .timer .timer-hours .arrow.arrow-up:hover::before,
266 | .datetime-range.time .timer .timer-minutes .arrow.arrow-up:hover::before,
267 | .datetime-range.time .timer .timer-seconds .arrow.arrow-up:hover::before {
268 | border-bottom-color: #999;
269 | }
270 | .datetime-range.time .timer .timer-hours .arrow.arrow-down::before,
271 | .datetime-range.time .timer .timer-minutes .arrow.arrow-down::before,
272 | .datetime-range.time .timer .timer-seconds .arrow.arrow-down::before {
273 | content: "";
274 | position: absolute;
275 | top: 0;
276 | left: calc(50% - 0.4em);
277 | border-left: 0.5em solid transparent;
278 | border-right: 0.5em solid transparent;
279 | border-top: 0.5em solid #ddd;
280 | transition: border 0.25s ease-out;
281 | }
282 | .datetime-range.time .timer .timer-hours .arrow.arrow-down:hover::before,
283 | .datetime-range.time .timer .timer-minutes .arrow.arrow-down:hover::before,
284 | .datetime-range.time .timer .timer-seconds .arrow.arrow-down:hover::before {
285 | border-top-color: #999;
286 | }
287 | .datetime-range.time .timer .timer-divider {
288 | font-size: 3em;
289 | line-height: 3em;
290 | -webkit-animation-name: blinker;
291 | -webkit-animation-duration: 5s;
292 | -webkit-animation-timing-function: linear;
293 | -webkit-animation-iteration-count: infinite;
294 | -moz-animation-name: blinker;
295 | -moz-animation-duration: 5s;
296 | -moz-animation-timing-function: linear;
297 | -moz-animation-iteration-count: infinite;
298 | animation-name: blinker;
299 | animation-duration: 5s;
300 | animation-timing-function: linear;
301 | animation-iteration-count: infinite;
302 | }
303 | @-moz-keyframes blinker {
304 | 0% { opacity: 0.0; }
305 | 5% { opacity: 1.0; }
306 | 95% { opacity: 1.0; }
307 | 100% { opacity: 0.0; }
308 | }
309 | @-webkit-keyframes blinker {
310 | 0% { opacity: 0.0; }
311 | 5% { opacity: 1.0; }
312 | 95% { opacity: 1.0; }
313 | 100% { opacity: 0.0; }
314 | }
315 | @keyframes blinker {
316 | 0% { opacity: 0.0; }
317 | 5% { opacity: 1.0; }
318 | 95% { opacity: 1.0; }
319 | 100% { opacity: 0.0; }
320 | }
321 |
322 |
323 | /**
324 | * Close button
325 | */
326 | .datetime-range.time .close-button {
327 | position: absolute;
328 | z-index: 5;
329 | left: -1px;
330 | cursor: pointer;
331 | outline: none;
332 | border-top: 1px solid #aaa;
333 | border-left: 1px solid #aaa;
334 | border-bottom: 1px solid #aaa;
335 | color: #777;
336 | width: 25%;
337 | height: auto;
338 | margin-top: 10px;
339 | font-size: 1.5em;
340 | line-height: 2em;
341 | box-sizing: border-box;
342 | background-color: #efefef;
343 | transition: background-color 0.25s ease-out;
344 | }
345 | .datetime-range.time .close-button::before {
346 | content: "";
347 | position: absolute;
348 | right: -0.5em;
349 | top: -1px;
350 | width: 1em;
351 | height: 2em;
352 | background: #efefef;
353 | border-top: 1px solid #aaa;
354 | border-right: 1px solid #aaa;
355 | transition: background 0.25s ease-out;
356 | transform: skewX(-26deg);
357 | }
358 | .datetime-range.time .close-button:hover,
359 | .datetime-range.time .close-button:hover::before {
360 | background: #ddd;
361 | }
362 |
--------------------------------------------------------------------------------
/src/time-range.html:
--------------------------------------------------------------------------------
1 |
2 |
7 |
12 |
26 |
27 |
31 |
32 |
39 |
40 |
41 |
44 |
45 |
46 |
47 |
55 |
56 |
57 |
58 |
59 |
60 |
67 |
:
68 |
75 |
:
76 |
83 |
84 |
87 |
88 |
89 |
--------------------------------------------------------------------------------
/src/time-range.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | angular.module('g1b.datetime-range').
4 | directive('timeRange', ['$document', '$timeout', function ($document, $timeout) {
5 |
6 | return {
7 | restrict: 'E',
8 | scope: {
9 | start: '=',
10 | end: '=',
11 | presets: '=?',
12 | minDate:'=?',
13 | maxDate:'=?',
14 | onChange: '&?',
15 | onChangeStart: '&?',
16 | onChangeEnd: '&?',
17 | onClose: '&?',
18 | closeText: '@',
19 | },
20 | replace: true,
21 | templateUrl: './time-range.html',
22 | compile: function () {
23 | return {
24 | pre: function preLink() {},
25 | post: function postLink(scope, element) {
26 |
27 | // Get current date
28 | scope.current = moment();
29 |
30 | // Convert start datetime to moment.js if its not a moment object yet
31 | if ( scope.start && !scope.start._isAMomentObject ) {
32 | scope.start = moment(scope.start);
33 | }
34 |
35 | // Convert end datetime to moment.js if its not a moment object yet
36 | if ( scope.end && !scope.end._isAMomentObject ) {
37 | scope.end = moment(scope.end);
38 | }
39 |
40 | // Get number of weeks in month
41 | scope.getNumWeeks = function () {
42 | if ( !scope.calendar ) { return; }
43 |
44 | var firstDayOfWeek = scope.calendar.clone().startOf('week').weekday();
45 |
46 | var firstOfMonth = scope.calendar.clone().startOf('month');
47 | var lastOfMonth = scope.calendar.clone().endOf('month');
48 |
49 | var firstWeekDay = (firstOfMonth.weekday() - firstDayOfWeek + 7) % 7;
50 |
51 | return Math.ceil((firstWeekDay + scope.calendar.daysInMonth()) / 7);
52 | }
53 |
54 | // Set selected date
55 | scope.selectDate = function (date) {
56 | if ( scope.selected === date ) {
57 | scope.selected = undefined;
58 | } else {
59 | scope.selected = date;
60 | scope.calendar = scope.selected.clone();
61 | scope.presetsActive = false;
62 | }
63 | };
64 |
65 | // Check if date is within bounds of min and max allowed date
66 | scope.isWithinBounds = function (date) {
67 | return ( !scope.minDate || date > scope.minDate ) && ( !scope.maxDate || date < scope.maxDate );
68 | };
69 |
70 | // Update selected date
71 | scope.setDate = function (date, calendar_update) {
72 | if ( scope.selected.isSame(date) || !scope.isWithinBounds(date) ) { return; }
73 | if ( ( scope.selected === scope.start && date < scope.end ) || ( scope.selected === scope.end && date > scope.start ) ) {
74 | scope.selected.year(date.year()).month(date.month()).date(date.date()).hours(date.hours()).minutes(date.minutes()).seconds(date.seconds());
75 | if ( (scope.selected.clone().startOf('week').month() !== scope.calendar.month() && scope.selected.clone().endOf('week').month() !== scope.calendar.month()) || calendar_update ) {
76 | scope.calendar = scope.selected.clone();
77 | }
78 | if ( scope.selected === scope.start ) {
79 | scope.callbackStart();
80 | }
81 | if ( scope.selected === scope.end ) {
82 | scope.callbackEnd();
83 | }
84 | scope.callbackAll();
85 | } else {
86 | scope.warning = ( scope.selected === scope.start ) ? 'end' : 'start';
87 | $timeout(function () {
88 | scope.warning = undefined;
89 | }, 250);
90 | }
91 | };
92 |
93 | // Set start and end datetime objects to the selected preset
94 | scope.selectPreset = function (preset) {
95 | // Hide presets menu on select
96 | scope.close();
97 |
98 | // Don't do anything if nothing is changed
99 | if ( scope.start.isSame(preset.start) && scope.end.isSame(preset.end) ) { return; }
100 |
101 | // Update start datetime object if changed
102 | if ( !scope.start.isSame(preset.start) ) {
103 | scope.start = preset.start.clone();
104 | scope.callbackStart();
105 | }
106 |
107 | // Update end datetime object if changed
108 | if ( !scope.end.isSame(preset.end) ) {
109 | scope.end = preset.end.clone();
110 | scope.callbackEnd();
111 | }
112 |
113 | // Something has definitely changed, fire ambiguous callback
114 | scope.callbackAll();
115 | };
116 |
117 | // Callbacks fired on change of start datetime object
118 | scope.callbackStart = function () {
119 | if ( !!scope.onChangeStart ) {
120 | $timeout(function () {
121 | scope.onChangeStart();
122 | });
123 | }
124 | };
125 |
126 | // Callbacks fired on change of end datetime object
127 | scope.callbackEnd = function () {
128 | if ( !!scope.onChangeEnd ) {
129 | $timeout(function () {
130 | scope.onChangeEnd();
131 | });
132 | }
133 | };
134 |
135 | // Callbacks fired on change of start and/or end datetime objects
136 | scope.callbackAll = function () {
137 | if ( !!scope.onChange ) {
138 | $timeout(function () {
139 | scope.onChange();
140 | });
141 | }
142 | };
143 |
144 | // Close edit popover
145 | scope.close = function () {
146 | scope.selected = '';
147 | scope.presetsActive = false;
148 |
149 | if ( !!scope.onClose ) {
150 | scope.onClose();
151 | }
152 | }
153 |
154 | // Bind click events outside directive to close edit popover
155 | $document.on('mousedown', function (e) {
156 | if ( !element[0].contains(e.target) && (!!scope.presetsActive || !!scope.selected) ) {
157 | scope.$apply(function () {
158 | scope.close();
159 | });
160 | }
161 | });
162 |
163 | // Bind 'esc' keyup event to close edit popover
164 | $document.on('keyup', function (e) {
165 | if ( e.keyCode === 27 && (!!scope.presetsActive || !!scope.selected) ) {
166 | scope.$apply(function () {
167 | scope.close();
168 | });
169 | }
170 | });
171 | }
172 | };
173 | }
174 | };
175 | }]);
176 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | align-text@^0.1.1, align-text@^0.1.3:
6 | version "0.1.4"
7 | resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
8 | dependencies:
9 | kind-of "^3.0.2"
10 | longest "^1.0.1"
11 | repeat-string "^1.5.2"
12 |
13 | alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
14 | version "1.0.2"
15 | resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
16 |
17 | angular-scroll-events@^0.0.2:
18 | version "0.0.2"
19 | resolved "https://registry.yarnpkg.com/angular-scroll-events/-/angular-scroll-events-0.0.2.tgz#a47a25e0d1f19f087f496433730dccb90ca6d230"
20 | dependencies:
21 | angular "^1.5.6"
22 |
23 | angular@^1.5.6:
24 | version "1.6.6"
25 | resolved "https://registry.yarnpkg.com/angular/-/angular-1.6.6.tgz#fd5a3cfb437ce382d854ee01120797978527cb64"
26 |
27 | ansi-regex@^2.0.0, ansi-regex@^2.1.1:
28 | version "2.1.1"
29 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
30 |
31 | ansi-styles@^2.2.1:
32 | version "2.2.1"
33 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
34 |
35 | archy@^1.0.0:
36 | version "1.0.0"
37 | resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"
38 |
39 | argh@^0.1.4:
40 | version "0.1.4"
41 | resolved "https://registry.yarnpkg.com/argh/-/argh-0.1.4.tgz#3eb4d612973fc6b6dc6ef338f56f759f2ac5c3a6"
42 |
43 | argparse@^1.0.7:
44 | version "1.0.9"
45 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
46 | dependencies:
47 | sprintf-js "~1.0.2"
48 |
49 | arr-diff@^2.0.0:
50 | version "2.0.0"
51 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
52 | dependencies:
53 | arr-flatten "^1.0.1"
54 |
55 | arr-flatten@^1.0.1:
56 | version "1.1.0"
57 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
58 |
59 | array-differ@^1.0.0:
60 | version "1.0.0"
61 | resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
62 |
63 | array-each@^1.0.1:
64 | version "1.0.1"
65 | resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f"
66 |
67 | array-slice@^1.0.0:
68 | version "1.0.0"
69 | resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.0.0.tgz#e73034f00dcc1f40876008fd20feae77bd4b7c2f"
70 |
71 | array-uniq@^1.0.2:
72 | version "1.0.3"
73 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
74 |
75 | array-unique@^0.2.1:
76 | version "0.2.1"
77 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
78 |
79 | async@^2.1.5:
80 | version "2.6.0"
81 | resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4"
82 | dependencies:
83 | lodash "^4.14.0"
84 |
85 | async@~0.2.6:
86 | version "0.2.10"
87 | resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
88 |
89 | autoprefixer@^6.3.1:
90 | version "6.7.7"
91 | resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014"
92 | dependencies:
93 | browserslist "^1.7.6"
94 | caniuse-db "^1.0.30000634"
95 | normalize-range "^0.1.2"
96 | num2fraction "^1.2.2"
97 | postcss "^5.2.16"
98 | postcss-value-parser "^3.2.3"
99 |
100 | balanced-match@^0.4.2:
101 | version "0.4.2"
102 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
103 |
104 | balanced-match@^1.0.0:
105 | version "1.0.0"
106 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
107 |
108 | beeper@^1.0.0:
109 | version "1.1.1"
110 | resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809"
111 |
112 | brace-expansion@^1.0.0:
113 | version "1.1.8"
114 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
115 | dependencies:
116 | balanced-match "^1.0.0"
117 | concat-map "0.0.1"
118 |
119 | braces@^1.8.2:
120 | version "1.8.5"
121 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
122 | dependencies:
123 | expand-range "^1.8.1"
124 | preserve "^0.2.0"
125 | repeat-element "^1.1.2"
126 |
127 | browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
128 | version "1.7.7"
129 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9"
130 | dependencies:
131 | caniuse-db "^1.0.30000639"
132 | electron-to-chromium "^1.2.7"
133 |
134 | camelcase@^1.0.2:
135 | version "1.2.1"
136 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
137 |
138 | caniuse-api@^1.5.2:
139 | version "1.6.1"
140 | resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"
141 | dependencies:
142 | browserslist "^1.3.6"
143 | caniuse-db "^1.0.30000529"
144 | lodash.memoize "^4.1.2"
145 | lodash.uniq "^4.5.0"
146 |
147 | caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
148 | version "1.0.30000760"
149 | resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000760.tgz#3ea29473eb78a6ccb09f2eb73ac9e1debfec528d"
150 |
151 | center-align@^0.1.1:
152 | version "0.1.3"
153 | resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
154 | dependencies:
155 | align-text "^0.1.3"
156 | lazy-cache "^1.0.3"
157 |
158 | chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
159 | version "1.1.3"
160 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
161 | dependencies:
162 | ansi-styles "^2.2.1"
163 | escape-string-regexp "^1.0.2"
164 | has-ansi "^2.0.0"
165 | strip-ansi "^3.0.0"
166 | supports-color "^2.0.0"
167 |
168 | clap@^1.0.9:
169 | version "1.2.3"
170 | resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51"
171 | dependencies:
172 | chalk "^1.1.3"
173 |
174 | cli-color@^1.2.0:
175 | version "1.2.0"
176 | resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-1.2.0.tgz#3a5ae74fd76b6267af666e69e2afbbd01def34d1"
177 | dependencies:
178 | ansi-regex "^2.1.1"
179 | d "1"
180 | es5-ext "^0.10.12"
181 | es6-iterator "2"
182 | memoizee "^0.4.3"
183 | timers-ext "0.1"
184 |
185 | cliui@^2.1.0:
186 | version "2.1.0"
187 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
188 | dependencies:
189 | center-align "^0.1.1"
190 | right-align "^0.1.1"
191 | wordwrap "0.0.2"
192 |
193 | clone-buffer@^1.0.0:
194 | version "1.0.0"
195 | resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58"
196 |
197 | clone-stats@^0.0.1:
198 | version "0.0.1"
199 | resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1"
200 |
201 | clone-stats@^1.0.0:
202 | version "1.0.0"
203 | resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680"
204 |
205 | clone@^0.2.0:
206 | version "0.2.0"
207 | resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f"
208 |
209 | clone@^1.0.0, clone@^1.0.2:
210 | version "1.0.2"
211 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
212 |
213 | clone@^2.1.1:
214 | version "2.1.1"
215 | resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb"
216 |
217 | cloneable-readable@^1.0.0:
218 | version "1.0.0"
219 | resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.0.0.tgz#a6290d413f217a61232f95e458ff38418cfb0117"
220 | dependencies:
221 | inherits "^2.0.1"
222 | process-nextick-args "^1.0.6"
223 | through2 "^2.0.1"
224 |
225 | coa@~1.0.1:
226 | version "1.0.4"
227 | resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd"
228 | dependencies:
229 | q "^1.1.2"
230 |
231 | color-convert@^0.5.0:
232 | version "0.5.3"
233 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd"
234 |
235 | color-convert@^1.3.0:
236 | version "1.9.0"
237 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a"
238 | dependencies:
239 | color-name "^1.1.1"
240 |
241 | color-name@^1.0.0, color-name@^1.1.1:
242 | version "1.1.3"
243 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
244 |
245 | color-string@^0.3.0:
246 | version "0.3.0"
247 | resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991"
248 | dependencies:
249 | color-name "^1.0.0"
250 |
251 | color@0.8.x:
252 | version "0.8.0"
253 | resolved "https://registry.yarnpkg.com/color/-/color-0.8.0.tgz#890c07c3fd4e649537638911cf691e5458b6fca5"
254 | dependencies:
255 | color-convert "^0.5.0"
256 | color-string "^0.3.0"
257 |
258 | color@^0.11.0:
259 | version "0.11.4"
260 | resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
261 | dependencies:
262 | clone "^1.0.2"
263 | color-convert "^1.3.0"
264 | color-string "^0.3.0"
265 |
266 | colormin@^1.0.5:
267 | version "1.1.2"
268 | resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133"
269 | dependencies:
270 | color "^0.11.0"
271 | css-color-names "0.0.4"
272 | has "^1.0.1"
273 |
274 | colornames@0.0.2:
275 | version "0.0.2"
276 | resolved "https://registry.yarnpkg.com/colornames/-/colornames-0.0.2.tgz#d811fd6c84f59029499a8ac4436202935b92be31"
277 |
278 | colors@~1.1.2:
279 | version "1.1.2"
280 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
281 |
282 | colorspace@1.0.x:
283 | version "1.0.1"
284 | resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.0.1.tgz#c99c796ed31128b9876a52e1ee5ee03a4a719749"
285 | dependencies:
286 | color "0.8.x"
287 | text-hex "0.0.x"
288 |
289 | concat-map@0.0.1:
290 | version "0.0.1"
291 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
292 |
293 | concat-with-sourcemaps@^1.0.0:
294 | version "1.0.4"
295 | resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.4.tgz#f55b3be2aeb47601b10a2d5259ccfb70fd2f1dd6"
296 | dependencies:
297 | source-map "^0.5.1"
298 |
299 | core-util-is@~1.0.0:
300 | version "1.0.2"
301 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
302 |
303 | css-color-names@0.0.4:
304 | version "0.0.4"
305 | resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
306 |
307 | cssnano@^3.0.0:
308 | version "3.10.0"
309 | resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
310 | dependencies:
311 | autoprefixer "^6.3.1"
312 | decamelize "^1.1.2"
313 | defined "^1.0.0"
314 | has "^1.0.1"
315 | object-assign "^4.0.1"
316 | postcss "^5.0.14"
317 | postcss-calc "^5.2.0"
318 | postcss-colormin "^2.1.8"
319 | postcss-convert-values "^2.3.4"
320 | postcss-discard-comments "^2.0.4"
321 | postcss-discard-duplicates "^2.0.1"
322 | postcss-discard-empty "^2.0.1"
323 | postcss-discard-overridden "^0.1.1"
324 | postcss-discard-unused "^2.2.1"
325 | postcss-filter-plugins "^2.0.0"
326 | postcss-merge-idents "^2.1.5"
327 | postcss-merge-longhand "^2.0.1"
328 | postcss-merge-rules "^2.0.3"
329 | postcss-minify-font-values "^1.0.2"
330 | postcss-minify-gradients "^1.0.1"
331 | postcss-minify-params "^1.0.4"
332 | postcss-minify-selectors "^2.0.4"
333 | postcss-normalize-charset "^1.1.0"
334 | postcss-normalize-url "^3.0.7"
335 | postcss-ordered-values "^2.1.0"
336 | postcss-reduce-idents "^2.2.2"
337 | postcss-reduce-initial "^1.0.0"
338 | postcss-reduce-transforms "^1.0.3"
339 | postcss-svgo "^2.1.1"
340 | postcss-unique-selectors "^2.0.2"
341 | postcss-value-parser "^3.2.3"
342 | postcss-zindex "^2.0.1"
343 |
344 | csso@~2.3.1:
345 | version "2.3.2"
346 | resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85"
347 | dependencies:
348 | clap "^1.0.9"
349 | source-map "^0.5.3"
350 |
351 | d@1:
352 | version "1.0.0"
353 | resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
354 | dependencies:
355 | es5-ext "^0.10.9"
356 |
357 | dateformat@^2.0.0:
358 | version "2.2.0"
359 | resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062"
360 |
361 | deap@^1.0.0:
362 | version "1.0.0"
363 | resolved "https://registry.yarnpkg.com/deap/-/deap-1.0.0.tgz#b148bf82430a27699b7483a03eb6b67585bfc888"
364 |
365 | decamelize@^1.0.0, decamelize@^1.1.2:
366 | version "1.2.0"
367 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
368 |
369 | defaults@^1.0.0:
370 | version "1.0.3"
371 | resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
372 | dependencies:
373 | clone "^1.0.2"
374 |
375 | defined@^1.0.0:
376 | version "1.0.0"
377 | resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
378 |
379 | deprecated@^0.0.1:
380 | version "0.0.1"
381 | resolved "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz#f9c9af5464afa1e7a971458a8bdef2aa94d5bb19"
382 |
383 | detect-file@^0.1.0:
384 | version "0.1.0"
385 | resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-0.1.0.tgz#4935dedfd9488648e006b0129566e9386711ea63"
386 | dependencies:
387 | fs-exists-sync "^0.1.0"
388 |
389 | diagnostics@^1.1.0:
390 | version "1.1.0"
391 | resolved "https://registry.yarnpkg.com/diagnostics/-/diagnostics-1.1.0.tgz#e1090900b49523e8527be20f081275205f2ae36a"
392 | dependencies:
393 | colorspace "1.0.x"
394 | enabled "1.0.x"
395 | kuler "0.0.x"
396 |
397 | dom-serializer@0:
398 | version "0.1.0"
399 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
400 | dependencies:
401 | domelementtype "~1.1.1"
402 | entities "~1.1.1"
403 |
404 | domelementtype@1, domelementtype@^1.3.0:
405 | version "1.3.0"
406 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
407 |
408 | domelementtype@~1.1.1:
409 | version "1.1.3"
410 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
411 |
412 | domhandler@^2.3.0:
413 | version "2.4.1"
414 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259"
415 | dependencies:
416 | domelementtype "1"
417 |
418 | domutils@^1.5.1:
419 | version "1.6.2"
420 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.6.2.tgz#1958cc0b4c9426e9ed367fb1c8e854891b0fa3ff"
421 | dependencies:
422 | dom-serializer "0"
423 | domelementtype "1"
424 |
425 | duplexer2@0.0.2:
426 | version "0.0.2"
427 | resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db"
428 | dependencies:
429 | readable-stream "~1.1.9"
430 |
431 | electron-to-chromium@^1.2.7:
432 | version "1.3.27"
433 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz#78ecb8a399066187bb374eede35d9c70565a803d"
434 |
435 | emits@^3.0.0:
436 | version "3.0.0"
437 | resolved "https://registry.yarnpkg.com/emits/-/emits-3.0.0.tgz#32752bba95e1707b219562384ab9bb8b1fd62f70"
438 |
439 | enabled@1.0.x:
440 | version "1.0.2"
441 | resolved "https://registry.yarnpkg.com/enabled/-/enabled-1.0.2.tgz#965f6513d2c2d1c5f4652b64a2e3396467fc2f93"
442 | dependencies:
443 | env-variable "0.0.x"
444 |
445 | end-of-stream@~0.1.5:
446 | version "0.1.5"
447 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz#8e177206c3c80837d85632e8b9359dfe8b2f6eaf"
448 | dependencies:
449 | once "~1.3.0"
450 |
451 | entities@^1.1.1, entities@~1.1.1:
452 | version "1.1.1"
453 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
454 |
455 | env-variable@0.0.x:
456 | version "0.0.3"
457 | resolved "https://registry.yarnpkg.com/env-variable/-/env-variable-0.0.3.tgz#b86c1641be5610267d506f18071ea76d707097cb"
458 |
459 | es5-ext@^0.10.12, es5-ext@^0.10.14, es5-ext@^0.10.30, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2:
460 | version "0.10.35"
461 | resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.35.tgz#18ee858ce6a3c45c7d79e91c15fcca9ec568494f"
462 | dependencies:
463 | es6-iterator "~2.0.1"
464 | es6-symbol "~3.1.1"
465 |
466 | es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1:
467 | version "2.0.3"
468 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
469 | dependencies:
470 | d "1"
471 | es5-ext "^0.10.35"
472 | es6-symbol "^3.1.1"
473 |
474 | es6-symbol@^3.1.1, es6-symbol@~3.1.1:
475 | version "3.1.1"
476 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
477 | dependencies:
478 | d "1"
479 | es5-ext "~0.10.14"
480 |
481 | es6-weak-map@^2.0.2:
482 | version "2.0.2"
483 | resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"
484 | dependencies:
485 | d "1"
486 | es5-ext "^0.10.14"
487 | es6-iterator "^2.0.1"
488 | es6-symbol "^3.1.1"
489 |
490 | escape-string-regexp@^1.0.2:
491 | version "1.0.5"
492 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
493 |
494 | esprima@^2.6.0:
495 | version "2.7.3"
496 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
497 |
498 | event-emitter@^0.3.5:
499 | version "0.3.5"
500 | resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
501 | dependencies:
502 | d "1"
503 | es5-ext "~0.10.14"
504 |
505 | expand-brackets@^0.1.4:
506 | version "0.1.5"
507 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
508 | dependencies:
509 | is-posix-bracket "^0.1.0"
510 |
511 | expand-range@^1.8.1:
512 | version "1.8.2"
513 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
514 | dependencies:
515 | fill-range "^2.1.0"
516 |
517 | expand-tilde@^1.2.2:
518 | version "1.2.2"
519 | resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449"
520 | dependencies:
521 | os-homedir "^1.0.1"
522 |
523 | expand-tilde@^2.0.2:
524 | version "2.0.2"
525 | resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
526 | dependencies:
527 | homedir-polyfill "^1.0.1"
528 |
529 | extend@^3.0.0:
530 | version "3.0.1"
531 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
532 |
533 | extglob@^0.3.1:
534 | version "0.3.2"
535 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
536 | dependencies:
537 | is-extglob "^1.0.0"
538 |
539 | fancy-log@^1.0.0, fancy-log@^1.1.0:
540 | version "1.3.0"
541 | resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.0.tgz#45be17d02bb9917d60ccffd4995c999e6c8c9948"
542 | dependencies:
543 | chalk "^1.1.1"
544 | time-stamp "^1.0.0"
545 |
546 | filename-regex@^2.0.0:
547 | version "2.0.1"
548 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
549 |
550 | fill-range@^2.1.0:
551 | version "2.2.3"
552 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
553 | dependencies:
554 | is-number "^2.1.0"
555 | isobject "^2.0.0"
556 | randomatic "^1.1.3"
557 | repeat-element "^1.1.2"
558 | repeat-string "^1.5.2"
559 |
560 | find-index@^0.1.1:
561 | version "0.1.1"
562 | resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4"
563 |
564 | findup-sync@^0.4.2:
565 | version "0.4.3"
566 | resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.3.tgz#40043929e7bc60adf0b7f4827c4c6e75a0deca12"
567 | dependencies:
568 | detect-file "^0.1.0"
569 | is-glob "^2.0.1"
570 | micromatch "^2.3.7"
571 | resolve-dir "^0.1.0"
572 |
573 | fined@^1.0.1:
574 | version "1.1.0"
575 | resolved "https://registry.yarnpkg.com/fined/-/fined-1.1.0.tgz#b37dc844b76a2f5e7081e884f7c0ae344f153476"
576 | dependencies:
577 | expand-tilde "^2.0.2"
578 | is-plain-object "^2.0.3"
579 | object.defaults "^1.1.0"
580 | object.pick "^1.2.0"
581 | parse-filepath "^1.0.1"
582 |
583 | first-chunk-stream@^1.0.0:
584 | version "1.0.0"
585 | resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e"
586 |
587 | flagged-respawn@^0.3.2:
588 | version "0.3.2"
589 | resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-0.3.2.tgz#ff191eddcd7088a675b2610fffc976be9b8074b5"
590 |
591 | flatten@^1.0.2:
592 | version "1.0.2"
593 | resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
594 |
595 | for-in@^1.0.1:
596 | version "1.0.2"
597 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
598 |
599 | for-own@^0.1.4:
600 | version "0.1.5"
601 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
602 | dependencies:
603 | for-in "^1.0.1"
604 |
605 | for-own@^1.0.0:
606 | version "1.0.0"
607 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b"
608 | dependencies:
609 | for-in "^1.0.1"
610 |
611 | fs-exists-sync@^0.1.0:
612 | version "0.1.0"
613 | resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add"
614 |
615 | function-bind@^1.0.2:
616 | version "1.1.1"
617 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
618 |
619 | gaze@^0.5.1:
620 | version "0.5.2"
621 | resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f"
622 | dependencies:
623 | globule "~0.1.0"
624 |
625 | glob-base@^0.3.0:
626 | version "0.3.0"
627 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
628 | dependencies:
629 | glob-parent "^2.0.0"
630 | is-glob "^2.0.0"
631 |
632 | glob-parent@^2.0.0:
633 | version "2.0.0"
634 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
635 | dependencies:
636 | is-glob "^2.0.0"
637 |
638 | glob-stream@^3.1.5:
639 | version "3.1.18"
640 | resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz#9170a5f12b790306fdfe598f313f8f7954fd143b"
641 | dependencies:
642 | glob "^4.3.1"
643 | glob2base "^0.0.12"
644 | minimatch "^2.0.1"
645 | ordered-read-streams "^0.1.0"
646 | through2 "^0.6.1"
647 | unique-stream "^1.0.0"
648 |
649 | glob-watcher@^0.0.6:
650 | version "0.0.6"
651 | resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-0.0.6.tgz#b95b4a8df74b39c83298b0c05c978b4d9a3b710b"
652 | dependencies:
653 | gaze "^0.5.1"
654 |
655 | glob2base@^0.0.12:
656 | version "0.0.12"
657 | resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56"
658 | dependencies:
659 | find-index "^0.1.1"
660 |
661 | glob@^4.3.1:
662 | version "4.5.3"
663 | resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f"
664 | dependencies:
665 | inflight "^1.0.4"
666 | inherits "2"
667 | minimatch "^2.0.1"
668 | once "^1.3.0"
669 |
670 | glob@~3.1.21:
671 | version "3.1.21"
672 | resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd"
673 | dependencies:
674 | graceful-fs "~1.2.0"
675 | inherits "1"
676 | minimatch "~0.2.11"
677 |
678 | global-modules@^0.2.3:
679 | version "0.2.3"
680 | resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d"
681 | dependencies:
682 | global-prefix "^0.1.4"
683 | is-windows "^0.2.0"
684 |
685 | global-prefix@^0.1.4:
686 | version "0.1.5"
687 | resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f"
688 | dependencies:
689 | homedir-polyfill "^1.0.0"
690 | ini "^1.3.4"
691 | is-windows "^0.2.0"
692 | which "^1.2.12"
693 |
694 | globule@~0.1.0:
695 | version "0.1.0"
696 | resolved "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz#d9c8edde1da79d125a151b79533b978676346ae5"
697 | dependencies:
698 | glob "~3.1.21"
699 | lodash "~1.0.1"
700 | minimatch "~0.2.11"
701 |
702 | glogg@^1.0.0:
703 | version "1.0.0"
704 | resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5"
705 | dependencies:
706 | sparkles "^1.0.0"
707 |
708 | graceful-fs@^3.0.0:
709 | version "3.0.11"
710 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818"
711 | dependencies:
712 | natives "^1.1.0"
713 |
714 | graceful-fs@~1.2.0:
715 | version "1.2.3"
716 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364"
717 |
718 | gulp-angular-embed-templates@^2.2.0:
719 | version "2.3.0"
720 | resolved "https://registry.yarnpkg.com/gulp-angular-embed-templates/-/gulp-angular-embed-templates-2.3.0.tgz#c010efdd594dee945132834537d7923ade840d79"
721 | dependencies:
722 | gulp-util "^3.0.6"
723 | htmlparser2 "~3.9.1"
724 | minimize "^2.0.0"
725 | object-assign "4.1.0"
726 | through2 "^2.0.1"
727 |
728 | gulp-concat@^2.6.0:
729 | version "2.6.1"
730 | resolved "https://registry.yarnpkg.com/gulp-concat/-/gulp-concat-2.6.1.tgz#633d16c95d88504628ad02665663cee5a4793353"
731 | dependencies:
732 | concat-with-sourcemaps "^1.0.0"
733 | through2 "^2.0.0"
734 | vinyl "^2.0.0"
735 |
736 | gulp-cssnano@^2.1.2:
737 | version "2.1.2"
738 | resolved "https://registry.yarnpkg.com/gulp-cssnano/-/gulp-cssnano-2.1.2.tgz#e08a09771ec5454a549f1a005bdd256cb8e5e0a3"
739 | dependencies:
740 | cssnano "^3.0.0"
741 | gulp-util "^3.0.6"
742 | object-assign "^4.0.1"
743 | vinyl-sourcemaps-apply "^0.2.1"
744 |
745 | gulp-uglify@^1.5.3:
746 | version "1.5.4"
747 | resolved "https://registry.yarnpkg.com/gulp-uglify/-/gulp-uglify-1.5.4.tgz#524788d87666d09f9d0c21fb2177f90039a658c9"
748 | dependencies:
749 | deap "^1.0.0"
750 | fancy-log "^1.0.0"
751 | gulp-util "^3.0.0"
752 | isobject "^2.0.0"
753 | through2 "^2.0.0"
754 | uglify-js "2.6.4"
755 | uglify-save-license "^0.4.1"
756 | vinyl-sourcemaps-apply "^0.2.0"
757 |
758 | gulp-util@^3.0.0, gulp-util@^3.0.6:
759 | version "3.0.8"
760 | resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f"
761 | dependencies:
762 | array-differ "^1.0.0"
763 | array-uniq "^1.0.2"
764 | beeper "^1.0.0"
765 | chalk "^1.0.0"
766 | dateformat "^2.0.0"
767 | fancy-log "^1.1.0"
768 | gulplog "^1.0.0"
769 | has-gulplog "^0.1.0"
770 | lodash._reescape "^3.0.0"
771 | lodash._reevaluate "^3.0.0"
772 | lodash._reinterpolate "^3.0.0"
773 | lodash.template "^3.0.0"
774 | minimist "^1.1.0"
775 | multipipe "^0.1.2"
776 | object-assign "^3.0.0"
777 | replace-ext "0.0.1"
778 | through2 "^2.0.0"
779 | vinyl "^0.5.0"
780 |
781 | gulp@^3.9.1:
782 | version "3.9.1"
783 | resolved "https://registry.yarnpkg.com/gulp/-/gulp-3.9.1.tgz#571ce45928dd40af6514fc4011866016c13845b4"
784 | dependencies:
785 | archy "^1.0.0"
786 | chalk "^1.0.0"
787 | deprecated "^0.0.1"
788 | gulp-util "^3.0.0"
789 | interpret "^1.0.0"
790 | liftoff "^2.1.0"
791 | minimist "^1.1.0"
792 | orchestrator "^0.3.0"
793 | pretty-hrtime "^1.0.0"
794 | semver "^4.1.0"
795 | tildify "^1.0.0"
796 | v8flags "^2.0.2"
797 | vinyl-fs "^0.3.0"
798 |
799 | gulplog@^1.0.0:
800 | version "1.0.0"
801 | resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5"
802 | dependencies:
803 | glogg "^1.0.0"
804 |
805 | has-ansi@^2.0.0:
806 | version "2.0.0"
807 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
808 | dependencies:
809 | ansi-regex "^2.0.0"
810 |
811 | has-flag@^1.0.0:
812 | version "1.0.0"
813 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
814 |
815 | has-gulplog@^0.1.0:
816 | version "0.1.0"
817 | resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce"
818 | dependencies:
819 | sparkles "^1.0.0"
820 |
821 | has@^1.0.1:
822 | version "1.0.1"
823 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
824 | dependencies:
825 | function-bind "^1.0.2"
826 |
827 | homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1:
828 | version "1.0.1"
829 | resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc"
830 | dependencies:
831 | parse-passwd "^1.0.0"
832 |
833 | html-comment-regex@^1.1.0:
834 | version "1.1.1"
835 | resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e"
836 |
837 | htmlparser2@^3.9.2, htmlparser2@~3.9.1:
838 | version "3.9.2"
839 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338"
840 | dependencies:
841 | domelementtype "^1.3.0"
842 | domhandler "^2.3.0"
843 | domutils "^1.5.1"
844 | entities "^1.1.1"
845 | inherits "^2.0.1"
846 | readable-stream "^2.0.2"
847 |
848 | indexes-of@^1.0.1:
849 | version "1.0.1"
850 | resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
851 |
852 | inflight@^1.0.4:
853 | version "1.0.6"
854 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
855 | dependencies:
856 | once "^1.3.0"
857 | wrappy "1"
858 |
859 | inherits@1:
860 | version "1.0.2"
861 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b"
862 |
863 | inherits@2, inherits@^2.0.1, inherits@~2.0.1, inherits@~2.0.3:
864 | version "2.0.3"
865 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
866 |
867 | ini@^1.3.4:
868 | version "1.3.4"
869 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
870 |
871 | interpret@^1.0.0:
872 | version "1.0.4"
873 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.4.tgz#820cdd588b868ffb191a809506d6c9c8f212b1b0"
874 |
875 | is-absolute-url@^2.0.0:
876 | version "2.1.0"
877 | resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
878 |
879 | is-absolute@^0.2.3:
880 | version "0.2.6"
881 | resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb"
882 | dependencies:
883 | is-relative "^0.2.1"
884 | is-windows "^0.2.0"
885 |
886 | is-buffer@^1.1.5:
887 | version "1.1.6"
888 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
889 |
890 | is-dotfile@^1.0.0:
891 | version "1.0.3"
892 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
893 |
894 | is-equal-shallow@^0.1.3:
895 | version "0.1.3"
896 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
897 | dependencies:
898 | is-primitive "^2.0.0"
899 |
900 | is-extendable@^0.1.1:
901 | version "0.1.1"
902 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
903 |
904 | is-extglob@^1.0.0:
905 | version "1.0.0"
906 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
907 |
908 | is-glob@^2.0.0, is-glob@^2.0.1:
909 | version "2.0.1"
910 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
911 | dependencies:
912 | is-extglob "^1.0.0"
913 |
914 | is-number@^2.1.0:
915 | version "2.1.0"
916 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
917 | dependencies:
918 | kind-of "^3.0.2"
919 |
920 | is-number@^3.0.0:
921 | version "3.0.0"
922 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
923 | dependencies:
924 | kind-of "^3.0.2"
925 |
926 | is-plain-obj@^1.0.0:
927 | version "1.1.0"
928 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
929 |
930 | is-plain-object@^2.0.3:
931 | version "2.0.4"
932 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
933 | dependencies:
934 | isobject "^3.0.1"
935 |
936 | is-posix-bracket@^0.1.0:
937 | version "0.1.1"
938 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
939 |
940 | is-primitive@^2.0.0:
941 | version "2.0.0"
942 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
943 |
944 | is-promise@^2.1:
945 | version "2.1.0"
946 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
947 |
948 | is-relative@^0.2.1:
949 | version "0.2.1"
950 | resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5"
951 | dependencies:
952 | is-unc-path "^0.1.1"
953 |
954 | is-svg@^2.0.0:
955 | version "2.1.0"
956 | resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9"
957 | dependencies:
958 | html-comment-regex "^1.1.0"
959 |
960 | is-unc-path@^0.1.1:
961 | version "0.1.2"
962 | resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9"
963 | dependencies:
964 | unc-path-regex "^0.1.0"
965 |
966 | is-utf8@^0.2.0:
967 | version "0.2.1"
968 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
969 |
970 | is-windows@^0.2.0:
971 | version "0.2.0"
972 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c"
973 |
974 | isarray@0.0.1:
975 | version "0.0.1"
976 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
977 |
978 | isarray@1.0.0, isarray@~1.0.0:
979 | version "1.0.0"
980 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
981 |
982 | isexe@^2.0.0:
983 | version "2.0.0"
984 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
985 |
986 | isobject@^2.0.0:
987 | version "2.1.0"
988 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
989 | dependencies:
990 | isarray "1.0.0"
991 |
992 | isobject@^3.0.0, isobject@^3.0.1:
993 | version "3.0.1"
994 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
995 |
996 | js-base64@^2.1.9:
997 | version "2.3.2"
998 | resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.3.2.tgz#a79a923666372b580f8e27f51845c6f7e8fbfbaf"
999 |
1000 | js-yaml@~3.7.0:
1001 | version "3.7.0"
1002 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
1003 | dependencies:
1004 | argparse "^1.0.7"
1005 | esprima "^2.6.0"
1006 |
1007 | kind-of@^3.0.2:
1008 | version "3.2.2"
1009 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
1010 | dependencies:
1011 | is-buffer "^1.1.5"
1012 |
1013 | kind-of@^4.0.0:
1014 | version "4.0.0"
1015 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
1016 | dependencies:
1017 | is-buffer "^1.1.5"
1018 |
1019 | kuler@0.0.x:
1020 | version "0.0.0"
1021 | resolved "https://registry.yarnpkg.com/kuler/-/kuler-0.0.0.tgz#b66bb46b934e550f59d818848e0abba4f7f5553c"
1022 | dependencies:
1023 | colornames "0.0.2"
1024 |
1025 | lazy-cache@^1.0.3:
1026 | version "1.0.4"
1027 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
1028 |
1029 | liftoff@^2.1.0:
1030 | version "2.3.0"
1031 | resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.3.0.tgz#a98f2ff67183d8ba7cfaca10548bd7ff0550b385"
1032 | dependencies:
1033 | extend "^3.0.0"
1034 | findup-sync "^0.4.2"
1035 | fined "^1.0.1"
1036 | flagged-respawn "^0.3.2"
1037 | lodash.isplainobject "^4.0.4"
1038 | lodash.isstring "^4.0.1"
1039 | lodash.mapvalues "^4.4.0"
1040 | rechoir "^0.6.2"
1041 | resolve "^1.1.7"
1042 |
1043 | lodash._basecopy@^3.0.0:
1044 | version "3.0.1"
1045 | resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
1046 |
1047 | lodash._basetostring@^3.0.0:
1048 | version "3.0.1"
1049 | resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5"
1050 |
1051 | lodash._basevalues@^3.0.0:
1052 | version "3.0.0"
1053 | resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7"
1054 |
1055 | lodash._getnative@^3.0.0:
1056 | version "3.9.1"
1057 | resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
1058 |
1059 | lodash._isiterateecall@^3.0.0:
1060 | version "3.0.9"
1061 | resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
1062 |
1063 | lodash._reescape@^3.0.0:
1064 | version "3.0.0"
1065 | resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a"
1066 |
1067 | lodash._reevaluate@^3.0.0:
1068 | version "3.0.0"
1069 | resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed"
1070 |
1071 | lodash._reinterpolate@^3.0.0:
1072 | version "3.0.0"
1073 | resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
1074 |
1075 | lodash._root@^3.0.0:
1076 | version "3.0.1"
1077 | resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692"
1078 |
1079 | lodash.escape@^3.0.0:
1080 | version "3.2.0"
1081 | resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698"
1082 | dependencies:
1083 | lodash._root "^3.0.0"
1084 |
1085 | lodash.isarguments@^3.0.0:
1086 | version "3.1.0"
1087 | resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
1088 |
1089 | lodash.isarray@^3.0.0:
1090 | version "3.0.4"
1091 | resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
1092 |
1093 | lodash.isplainobject@^4.0.4:
1094 | version "4.0.6"
1095 | resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
1096 |
1097 | lodash.isstring@^4.0.1:
1098 | version "4.0.1"
1099 | resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
1100 |
1101 | lodash.keys@^3.0.0:
1102 | version "3.1.2"
1103 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
1104 | dependencies:
1105 | lodash._getnative "^3.0.0"
1106 | lodash.isarguments "^3.0.0"
1107 | lodash.isarray "^3.0.0"
1108 |
1109 | lodash.mapvalues@^4.4.0:
1110 | version "4.6.0"
1111 | resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c"
1112 |
1113 | lodash.memoize@^4.1.2:
1114 | version "4.1.2"
1115 | resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
1116 |
1117 | lodash.restparam@^3.0.0:
1118 | version "3.6.1"
1119 | resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
1120 |
1121 | lodash.template@^3.0.0:
1122 | version "3.6.2"
1123 | resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f"
1124 | dependencies:
1125 | lodash._basecopy "^3.0.0"
1126 | lodash._basetostring "^3.0.0"
1127 | lodash._basevalues "^3.0.0"
1128 | lodash._isiterateecall "^3.0.0"
1129 | lodash._reinterpolate "^3.0.0"
1130 | lodash.escape "^3.0.0"
1131 | lodash.keys "^3.0.0"
1132 | lodash.restparam "^3.0.0"
1133 | lodash.templatesettings "^3.0.0"
1134 |
1135 | lodash.templatesettings@^3.0.0:
1136 | version "3.1.1"
1137 | resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5"
1138 | dependencies:
1139 | lodash._reinterpolate "^3.0.0"
1140 | lodash.escape "^3.0.0"
1141 |
1142 | lodash.uniq@^4.5.0:
1143 | version "4.5.0"
1144 | resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
1145 |
1146 | lodash@^4.14.0:
1147 | version "4.17.4"
1148 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
1149 |
1150 | lodash@~1.0.1:
1151 | version "1.0.2"
1152 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551"
1153 |
1154 | longest@^1.0.1:
1155 | version "1.0.1"
1156 | resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
1157 |
1158 | lru-cache@2:
1159 | version "2.7.3"
1160 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952"
1161 |
1162 | lru-queue@0.1:
1163 | version "0.1.0"
1164 | resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3"
1165 | dependencies:
1166 | es5-ext "~0.10.2"
1167 |
1168 | macaddress@^0.2.8:
1169 | version "0.2.8"
1170 | resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12"
1171 |
1172 | map-cache@^0.2.0:
1173 | version "0.2.2"
1174 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
1175 |
1176 | math-expression-evaluator@^1.2.14:
1177 | version "1.2.17"
1178 | resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac"
1179 |
1180 | memoizee@^0.4.3:
1181 | version "0.4.11"
1182 | resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.11.tgz#bde9817663c9e40fdb2a4ea1c367296087ae8c8f"
1183 | dependencies:
1184 | d "1"
1185 | es5-ext "^0.10.30"
1186 | es6-weak-map "^2.0.2"
1187 | event-emitter "^0.3.5"
1188 | is-promise "^2.1"
1189 | lru-queue "0.1"
1190 | next-tick "1"
1191 | timers-ext "^0.1.2"
1192 |
1193 | micromatch@^2.3.7:
1194 | version "2.3.11"
1195 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
1196 | dependencies:
1197 | arr-diff "^2.0.0"
1198 | array-unique "^0.2.1"
1199 | braces "^1.8.2"
1200 | expand-brackets "^0.1.4"
1201 | extglob "^0.3.1"
1202 | filename-regex "^2.0.0"
1203 | is-extglob "^1.0.0"
1204 | is-glob "^2.0.1"
1205 | kind-of "^3.0.2"
1206 | normalize-path "^2.0.1"
1207 | object.omit "^2.0.0"
1208 | parse-glob "^3.0.4"
1209 | regex-cache "^0.4.2"
1210 |
1211 | minimatch@^2.0.1:
1212 | version "2.0.10"
1213 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7"
1214 | dependencies:
1215 | brace-expansion "^1.0.0"
1216 |
1217 | minimatch@~0.2.11:
1218 | version "0.2.14"
1219 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a"
1220 | dependencies:
1221 | lru-cache "2"
1222 | sigmund "~1.0.0"
1223 |
1224 | minimist@0.0.8:
1225 | version "0.0.8"
1226 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
1227 |
1228 | minimist@^1.1.0:
1229 | version "1.2.0"
1230 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
1231 |
1232 | minimize@^2.0.0:
1233 | version "2.1.0"
1234 | resolved "https://registry.yarnpkg.com/minimize/-/minimize-2.1.0.tgz#fa277647fc5f9a21524bfde62814ca7ce1ffd7a2"
1235 | dependencies:
1236 | argh "^0.1.4"
1237 | async "^2.1.5"
1238 | cli-color "^1.2.0"
1239 | diagnostics "^1.1.0"
1240 | emits "^3.0.0"
1241 | htmlparser2 "^3.9.2"
1242 | uuid "^3.0.0"
1243 |
1244 | mkdirp@^0.5.0, mkdirp@~0.5.1:
1245 | version "0.5.1"
1246 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
1247 | dependencies:
1248 | minimist "0.0.8"
1249 |
1250 | multipipe@^0.1.2:
1251 | version "0.1.2"
1252 | resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b"
1253 | dependencies:
1254 | duplexer2 "0.0.2"
1255 |
1256 | natives@^1.1.0:
1257 | version "1.1.0"
1258 | resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31"
1259 |
1260 | next-tick@1:
1261 | version "1.0.0"
1262 | resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
1263 |
1264 | normalize-path@^2.0.1:
1265 | version "2.1.1"
1266 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
1267 | dependencies:
1268 | remove-trailing-separator "^1.0.1"
1269 |
1270 | normalize-range@^0.1.2:
1271 | version "0.1.2"
1272 | resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
1273 |
1274 | normalize-url@^1.4.0:
1275 | version "1.9.1"
1276 | resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
1277 | dependencies:
1278 | object-assign "^4.0.1"
1279 | prepend-http "^1.0.0"
1280 | query-string "^4.1.0"
1281 | sort-keys "^1.0.0"
1282 |
1283 | num2fraction@^1.2.2:
1284 | version "1.2.2"
1285 | resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
1286 |
1287 | object-assign@4.1.0:
1288 | version "4.1.0"
1289 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
1290 |
1291 | object-assign@^3.0.0:
1292 | version "3.0.0"
1293 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
1294 |
1295 | object-assign@^4.0.1, object-assign@^4.1.0:
1296 | version "4.1.1"
1297 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1298 |
1299 | object.defaults@^1.1.0:
1300 | version "1.1.0"
1301 | resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf"
1302 | dependencies:
1303 | array-each "^1.0.1"
1304 | array-slice "^1.0.0"
1305 | for-own "^1.0.0"
1306 | isobject "^3.0.0"
1307 |
1308 | object.omit@^2.0.0:
1309 | version "2.0.1"
1310 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
1311 | dependencies:
1312 | for-own "^0.1.4"
1313 | is-extendable "^0.1.1"
1314 |
1315 | object.pick@^1.2.0:
1316 | version "1.3.0"
1317 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
1318 | dependencies:
1319 | isobject "^3.0.1"
1320 |
1321 | once@^1.3.0:
1322 | version "1.4.0"
1323 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1324 | dependencies:
1325 | wrappy "1"
1326 |
1327 | once@~1.3.0:
1328 | version "1.3.3"
1329 | resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
1330 | dependencies:
1331 | wrappy "1"
1332 |
1333 | orchestrator@^0.3.0:
1334 | version "0.3.8"
1335 | resolved "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz#14e7e9e2764f7315fbac184e506c7aa6df94ad7e"
1336 | dependencies:
1337 | end-of-stream "~0.1.5"
1338 | sequencify "~0.0.7"
1339 | stream-consume "~0.1.0"
1340 |
1341 | ordered-read-streams@^0.1.0:
1342 | version "0.1.0"
1343 | resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz#fd565a9af8eb4473ba69b6ed8a34352cb552f126"
1344 |
1345 | os-homedir@^1.0.0, os-homedir@^1.0.1:
1346 | version "1.0.2"
1347 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
1348 |
1349 | parse-filepath@^1.0.1:
1350 | version "1.0.1"
1351 | resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.1.tgz#159d6155d43904d16c10ef698911da1e91969b73"
1352 | dependencies:
1353 | is-absolute "^0.2.3"
1354 | map-cache "^0.2.0"
1355 | path-root "^0.1.1"
1356 |
1357 | parse-glob@^3.0.4:
1358 | version "3.0.4"
1359 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
1360 | dependencies:
1361 | glob-base "^0.3.0"
1362 | is-dotfile "^1.0.0"
1363 | is-extglob "^1.0.0"
1364 | is-glob "^2.0.0"
1365 |
1366 | parse-passwd@^1.0.0:
1367 | version "1.0.0"
1368 | resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
1369 |
1370 | path-parse@^1.0.5:
1371 | version "1.0.5"
1372 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
1373 |
1374 | path-root-regex@^0.1.0:
1375 | version "0.1.2"
1376 | resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d"
1377 |
1378 | path-root@^0.1.1:
1379 | version "0.1.1"
1380 | resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7"
1381 | dependencies:
1382 | path-root-regex "^0.1.0"
1383 |
1384 | postcss-calc@^5.2.0:
1385 | version "5.3.1"
1386 | resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e"
1387 | dependencies:
1388 | postcss "^5.0.2"
1389 | postcss-message-helpers "^2.0.0"
1390 | reduce-css-calc "^1.2.6"
1391 |
1392 | postcss-colormin@^2.1.8:
1393 | version "2.2.2"
1394 | resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b"
1395 | dependencies:
1396 | colormin "^1.0.5"
1397 | postcss "^5.0.13"
1398 | postcss-value-parser "^3.2.3"
1399 |
1400 | postcss-convert-values@^2.3.4:
1401 | version "2.6.1"
1402 | resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d"
1403 | dependencies:
1404 | postcss "^5.0.11"
1405 | postcss-value-parser "^3.1.2"
1406 |
1407 | postcss-discard-comments@^2.0.4:
1408 | version "2.0.4"
1409 | resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d"
1410 | dependencies:
1411 | postcss "^5.0.14"
1412 |
1413 | postcss-discard-duplicates@^2.0.1:
1414 | version "2.1.0"
1415 | resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932"
1416 | dependencies:
1417 | postcss "^5.0.4"
1418 |
1419 | postcss-discard-empty@^2.0.1:
1420 | version "2.1.0"
1421 | resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5"
1422 | dependencies:
1423 | postcss "^5.0.14"
1424 |
1425 | postcss-discard-overridden@^0.1.1:
1426 | version "0.1.1"
1427 | resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58"
1428 | dependencies:
1429 | postcss "^5.0.16"
1430 |
1431 | postcss-discard-unused@^2.2.1:
1432 | version "2.2.3"
1433 | resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433"
1434 | dependencies:
1435 | postcss "^5.0.14"
1436 | uniqs "^2.0.0"
1437 |
1438 | postcss-filter-plugins@^2.0.0:
1439 | version "2.0.2"
1440 | resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c"
1441 | dependencies:
1442 | postcss "^5.0.4"
1443 | uniqid "^4.0.0"
1444 |
1445 | postcss-merge-idents@^2.1.5:
1446 | version "2.1.7"
1447 | resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270"
1448 | dependencies:
1449 | has "^1.0.1"
1450 | postcss "^5.0.10"
1451 | postcss-value-parser "^3.1.1"
1452 |
1453 | postcss-merge-longhand@^2.0.1:
1454 | version "2.0.2"
1455 | resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658"
1456 | dependencies:
1457 | postcss "^5.0.4"
1458 |
1459 | postcss-merge-rules@^2.0.3:
1460 | version "2.1.2"
1461 | resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721"
1462 | dependencies:
1463 | browserslist "^1.5.2"
1464 | caniuse-api "^1.5.2"
1465 | postcss "^5.0.4"
1466 | postcss-selector-parser "^2.2.2"
1467 | vendors "^1.0.0"
1468 |
1469 | postcss-message-helpers@^2.0.0:
1470 | version "2.0.0"
1471 | resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e"
1472 |
1473 | postcss-minify-font-values@^1.0.2:
1474 | version "1.0.5"
1475 | resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69"
1476 | dependencies:
1477 | object-assign "^4.0.1"
1478 | postcss "^5.0.4"
1479 | postcss-value-parser "^3.0.2"
1480 |
1481 | postcss-minify-gradients@^1.0.1:
1482 | version "1.0.5"
1483 | resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1"
1484 | dependencies:
1485 | postcss "^5.0.12"
1486 | postcss-value-parser "^3.3.0"
1487 |
1488 | postcss-minify-params@^1.0.4:
1489 | version "1.2.2"
1490 | resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3"
1491 | dependencies:
1492 | alphanum-sort "^1.0.1"
1493 | postcss "^5.0.2"
1494 | postcss-value-parser "^3.0.2"
1495 | uniqs "^2.0.0"
1496 |
1497 | postcss-minify-selectors@^2.0.4:
1498 | version "2.1.1"
1499 | resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf"
1500 | dependencies:
1501 | alphanum-sort "^1.0.2"
1502 | has "^1.0.1"
1503 | postcss "^5.0.14"
1504 | postcss-selector-parser "^2.0.0"
1505 |
1506 | postcss-normalize-charset@^1.1.0:
1507 | version "1.1.1"
1508 | resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1"
1509 | dependencies:
1510 | postcss "^5.0.5"
1511 |
1512 | postcss-normalize-url@^3.0.7:
1513 | version "3.0.8"
1514 | resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222"
1515 | dependencies:
1516 | is-absolute-url "^2.0.0"
1517 | normalize-url "^1.4.0"
1518 | postcss "^5.0.14"
1519 | postcss-value-parser "^3.2.3"
1520 |
1521 | postcss-ordered-values@^2.1.0:
1522 | version "2.2.3"
1523 | resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d"
1524 | dependencies:
1525 | postcss "^5.0.4"
1526 | postcss-value-parser "^3.0.1"
1527 |
1528 | postcss-reduce-idents@^2.2.2:
1529 | version "2.4.0"
1530 | resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3"
1531 | dependencies:
1532 | postcss "^5.0.4"
1533 | postcss-value-parser "^3.0.2"
1534 |
1535 | postcss-reduce-initial@^1.0.0:
1536 | version "1.0.1"
1537 | resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea"
1538 | dependencies:
1539 | postcss "^5.0.4"
1540 |
1541 | postcss-reduce-transforms@^1.0.3:
1542 | version "1.0.4"
1543 | resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1"
1544 | dependencies:
1545 | has "^1.0.1"
1546 | postcss "^5.0.8"
1547 | postcss-value-parser "^3.0.1"
1548 |
1549 | postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2:
1550 | version "2.2.3"
1551 | resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90"
1552 | dependencies:
1553 | flatten "^1.0.2"
1554 | indexes-of "^1.0.1"
1555 | uniq "^1.0.1"
1556 |
1557 | postcss-svgo@^2.1.1:
1558 | version "2.1.6"
1559 | resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d"
1560 | dependencies:
1561 | is-svg "^2.0.0"
1562 | postcss "^5.0.14"
1563 | postcss-value-parser "^3.2.3"
1564 | svgo "^0.7.0"
1565 |
1566 | postcss-unique-selectors@^2.0.2:
1567 | version "2.0.2"
1568 | resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d"
1569 | dependencies:
1570 | alphanum-sort "^1.0.1"
1571 | postcss "^5.0.4"
1572 | uniqs "^2.0.0"
1573 |
1574 | postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0:
1575 | version "3.3.0"
1576 | resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15"
1577 |
1578 | postcss-zindex@^2.0.1:
1579 | version "2.2.0"
1580 | resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22"
1581 | dependencies:
1582 | has "^1.0.1"
1583 | postcss "^5.0.4"
1584 | uniqs "^2.0.0"
1585 |
1586 | postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.8, postcss@^5.2.16:
1587 | version "5.2.18"
1588 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5"
1589 | dependencies:
1590 | chalk "^1.1.3"
1591 | js-base64 "^2.1.9"
1592 | source-map "^0.5.6"
1593 | supports-color "^3.2.3"
1594 |
1595 | prepend-http@^1.0.0:
1596 | version "1.0.4"
1597 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
1598 |
1599 | preserve@^0.2.0:
1600 | version "0.2.0"
1601 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
1602 |
1603 | pretty-hrtime@^1.0.0:
1604 | version "1.0.3"
1605 | resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1"
1606 |
1607 | process-nextick-args@^1.0.6, process-nextick-args@~1.0.6:
1608 | version "1.0.7"
1609 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
1610 |
1611 | q@^1.1.2:
1612 | version "1.5.1"
1613 | resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
1614 |
1615 | query-string@^4.1.0:
1616 | version "4.3.4"
1617 | resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
1618 | dependencies:
1619 | object-assign "^4.1.0"
1620 | strict-uri-encode "^1.0.0"
1621 |
1622 | randomatic@^1.1.3:
1623 | version "1.1.7"
1624 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
1625 | dependencies:
1626 | is-number "^3.0.0"
1627 | kind-of "^4.0.0"
1628 |
1629 | "readable-stream@>=1.0.33-1 <1.1.0-0":
1630 | version "1.0.34"
1631 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
1632 | dependencies:
1633 | core-util-is "~1.0.0"
1634 | inherits "~2.0.1"
1635 | isarray "0.0.1"
1636 | string_decoder "~0.10.x"
1637 |
1638 | readable-stream@^2.0.2, readable-stream@^2.1.5:
1639 | version "2.3.3"
1640 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
1641 | dependencies:
1642 | core-util-is "~1.0.0"
1643 | inherits "~2.0.3"
1644 | isarray "~1.0.0"
1645 | process-nextick-args "~1.0.6"
1646 | safe-buffer "~5.1.1"
1647 | string_decoder "~1.0.3"
1648 | util-deprecate "~1.0.1"
1649 |
1650 | readable-stream@~1.1.9:
1651 | version "1.1.14"
1652 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
1653 | dependencies:
1654 | core-util-is "~1.0.0"
1655 | inherits "~2.0.1"
1656 | isarray "0.0.1"
1657 | string_decoder "~0.10.x"
1658 |
1659 | rechoir@^0.6.2:
1660 | version "0.6.2"
1661 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
1662 | dependencies:
1663 | resolve "^1.1.6"
1664 |
1665 | reduce-css-calc@^1.2.6:
1666 | version "1.3.0"
1667 | resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716"
1668 | dependencies:
1669 | balanced-match "^0.4.2"
1670 | math-expression-evaluator "^1.2.14"
1671 | reduce-function-call "^1.0.1"
1672 |
1673 | reduce-function-call@^1.0.1:
1674 | version "1.0.2"
1675 | resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99"
1676 | dependencies:
1677 | balanced-match "^0.4.2"
1678 |
1679 | regex-cache@^0.4.2:
1680 | version "0.4.4"
1681 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
1682 | dependencies:
1683 | is-equal-shallow "^0.1.3"
1684 |
1685 | remove-trailing-separator@^1.0.1:
1686 | version "1.1.0"
1687 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
1688 |
1689 | repeat-element@^1.1.2:
1690 | version "1.1.2"
1691 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
1692 |
1693 | repeat-string@^1.5.2:
1694 | version "1.6.1"
1695 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
1696 |
1697 | replace-ext@0.0.1:
1698 | version "0.0.1"
1699 | resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924"
1700 |
1701 | replace-ext@^1.0.0:
1702 | version "1.0.0"
1703 | resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
1704 |
1705 | resolve-dir@^0.1.0:
1706 | version "0.1.1"
1707 | resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e"
1708 | dependencies:
1709 | expand-tilde "^1.2.2"
1710 | global-modules "^0.2.3"
1711 |
1712 | resolve@^1.1.6, resolve@^1.1.7:
1713 | version "1.5.0"
1714 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36"
1715 | dependencies:
1716 | path-parse "^1.0.5"
1717 |
1718 | right-align@^0.1.1:
1719 | version "0.1.3"
1720 | resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
1721 | dependencies:
1722 | align-text "^0.1.1"
1723 |
1724 | safe-buffer@~5.1.0, safe-buffer@~5.1.1:
1725 | version "5.1.1"
1726 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
1727 |
1728 | sax@~1.2.1:
1729 | version "1.2.4"
1730 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
1731 |
1732 | semver@^4.1.0:
1733 | version "4.3.6"
1734 | resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
1735 |
1736 | sequencify@~0.0.7:
1737 | version "0.0.7"
1738 | resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c"
1739 |
1740 | sigmund@~1.0.0:
1741 | version "1.0.1"
1742 | resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
1743 |
1744 | sort-keys@^1.0.0:
1745 | version "1.1.2"
1746 | resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
1747 | dependencies:
1748 | is-plain-obj "^1.0.0"
1749 |
1750 | source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1:
1751 | version "0.5.7"
1752 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
1753 |
1754 | sparkles@^1.0.0:
1755 | version "1.0.0"
1756 | resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3"
1757 |
1758 | sprintf-js@~1.0.2:
1759 | version "1.0.3"
1760 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
1761 |
1762 | stream-consume@~0.1.0:
1763 | version "0.1.0"
1764 | resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.0.tgz#a41ead1a6d6081ceb79f65b061901b6d8f3d1d0f"
1765 |
1766 | strict-uri-encode@^1.0.0:
1767 | version "1.1.0"
1768 | resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
1769 |
1770 | string_decoder@~0.10.x:
1771 | version "0.10.31"
1772 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
1773 |
1774 | string_decoder@~1.0.3:
1775 | version "1.0.3"
1776 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
1777 | dependencies:
1778 | safe-buffer "~5.1.0"
1779 |
1780 | strip-ansi@^3.0.0:
1781 | version "3.0.1"
1782 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
1783 | dependencies:
1784 | ansi-regex "^2.0.0"
1785 |
1786 | strip-bom@^1.0.0:
1787 | version "1.0.0"
1788 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz#85b8862f3844b5a6d5ec8467a93598173a36f794"
1789 | dependencies:
1790 | first-chunk-stream "^1.0.0"
1791 | is-utf8 "^0.2.0"
1792 |
1793 | supports-color@^2.0.0:
1794 | version "2.0.0"
1795 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
1796 |
1797 | supports-color@^3.2.3:
1798 | version "3.2.3"
1799 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
1800 | dependencies:
1801 | has-flag "^1.0.0"
1802 |
1803 | svgo@^0.7.0:
1804 | version "0.7.2"
1805 | resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"
1806 | dependencies:
1807 | coa "~1.0.1"
1808 | colors "~1.1.2"
1809 | csso "~2.3.1"
1810 | js-yaml "~3.7.0"
1811 | mkdirp "~0.5.1"
1812 | sax "~1.2.1"
1813 | whet.extend "~0.9.9"
1814 |
1815 | text-hex@0.0.x:
1816 | version "0.0.0"
1817 | resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-0.0.0.tgz#578fbc85a6a92636e42dd17b41d0218cce9eb2b3"
1818 |
1819 | through2@^0.6.1:
1820 | version "0.6.5"
1821 | resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48"
1822 | dependencies:
1823 | readable-stream ">=1.0.33-1 <1.1.0-0"
1824 | xtend ">=4.0.0 <4.1.0-0"
1825 |
1826 | through2@^2.0.0, through2@^2.0.1:
1827 | version "2.0.3"
1828 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
1829 | dependencies:
1830 | readable-stream "^2.1.5"
1831 | xtend "~4.0.1"
1832 |
1833 | tildify@^1.0.0:
1834 | version "1.2.0"
1835 | resolved "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a"
1836 | dependencies:
1837 | os-homedir "^1.0.0"
1838 |
1839 | time-stamp@^1.0.0:
1840 | version "1.1.0"
1841 | resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3"
1842 |
1843 | timers-ext@0.1, timers-ext@^0.1.2:
1844 | version "0.1.2"
1845 | resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.2.tgz#61cc47a76c1abd3195f14527f978d58ae94c5204"
1846 | dependencies:
1847 | es5-ext "~0.10.14"
1848 | next-tick "1"
1849 |
1850 | uglify-js@2.6.4:
1851 | version "2.6.4"
1852 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.6.4.tgz#65ea2fb3059c9394692f15fed87c2b36c16b9adf"
1853 | dependencies:
1854 | async "~0.2.6"
1855 | source-map "~0.5.1"
1856 | uglify-to-browserify "~1.0.0"
1857 | yargs "~3.10.0"
1858 |
1859 | uglify-save-license@^0.4.1:
1860 | version "0.4.1"
1861 | resolved "https://registry.yarnpkg.com/uglify-save-license/-/uglify-save-license-0.4.1.tgz#95726c17cc6fd171c3617e3bf4d8d82aa8c4cce1"
1862 |
1863 | uglify-to-browserify@~1.0.0:
1864 | version "1.0.2"
1865 | resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
1866 |
1867 | unc-path-regex@^0.1.0:
1868 | version "0.1.2"
1869 | resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
1870 |
1871 | uniq@^1.0.1:
1872 | version "1.0.1"
1873 | resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
1874 |
1875 | uniqid@^4.0.0:
1876 | version "4.1.1"
1877 | resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1"
1878 | dependencies:
1879 | macaddress "^0.2.8"
1880 |
1881 | uniqs@^2.0.0:
1882 | version "2.0.0"
1883 | resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
1884 |
1885 | unique-stream@^1.0.0:
1886 | version "1.0.0"
1887 | resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b"
1888 |
1889 | user-home@^1.1.1:
1890 | version "1.1.1"
1891 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
1892 |
1893 | util-deprecate@~1.0.1:
1894 | version "1.0.2"
1895 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1896 |
1897 | uuid@^3.0.0:
1898 | version "3.1.0"
1899 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
1900 |
1901 | v8flags@^2.0.2:
1902 | version "2.1.1"
1903 | resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4"
1904 | dependencies:
1905 | user-home "^1.1.1"
1906 |
1907 | vendors@^1.0.0:
1908 | version "1.0.1"
1909 | resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22"
1910 |
1911 | vinyl-fs@^0.3.0:
1912 | version "0.3.14"
1913 | resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-0.3.14.tgz#9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6"
1914 | dependencies:
1915 | defaults "^1.0.0"
1916 | glob-stream "^3.1.5"
1917 | glob-watcher "^0.0.6"
1918 | graceful-fs "^3.0.0"
1919 | mkdirp "^0.5.0"
1920 | strip-bom "^1.0.0"
1921 | through2 "^0.6.1"
1922 | vinyl "^0.4.0"
1923 |
1924 | vinyl-sourcemaps-apply@^0.2.0, vinyl-sourcemaps-apply@^0.2.1:
1925 | version "0.2.1"
1926 | resolved "https://registry.yarnpkg.com/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz#ab6549d61d172c2b1b87be5c508d239c8ef87705"
1927 | dependencies:
1928 | source-map "^0.5.1"
1929 |
1930 | vinyl@^0.4.0:
1931 | version "0.4.6"
1932 | resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847"
1933 | dependencies:
1934 | clone "^0.2.0"
1935 | clone-stats "^0.0.1"
1936 |
1937 | vinyl@^0.5.0:
1938 | version "0.5.3"
1939 | resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde"
1940 | dependencies:
1941 | clone "^1.0.0"
1942 | clone-stats "^0.0.1"
1943 | replace-ext "0.0.1"
1944 |
1945 | vinyl@^2.0.0:
1946 | version "2.1.0"
1947 | resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.1.0.tgz#021f9c2cf951d6b939943c89eb5ee5add4fd924c"
1948 | dependencies:
1949 | clone "^2.1.1"
1950 | clone-buffer "^1.0.0"
1951 | clone-stats "^1.0.0"
1952 | cloneable-readable "^1.0.0"
1953 | remove-trailing-separator "^1.0.1"
1954 | replace-ext "^1.0.0"
1955 |
1956 | whet.extend@~0.9.9:
1957 | version "0.9.9"
1958 | resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1"
1959 |
1960 | which@^1.2.12:
1961 | version "1.3.0"
1962 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
1963 | dependencies:
1964 | isexe "^2.0.0"
1965 |
1966 | window-size@0.1.0:
1967 | version "0.1.0"
1968 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
1969 |
1970 | wordwrap@0.0.2:
1971 | version "0.0.2"
1972 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
1973 |
1974 | wrappy@1:
1975 | version "1.0.2"
1976 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1977 |
1978 | "xtend@>=4.0.0 <4.1.0-0", xtend@~4.0.1:
1979 | version "4.0.1"
1980 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
1981 |
1982 | yargs@~3.10.0:
1983 | version "3.10.0"
1984 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
1985 | dependencies:
1986 | camelcase "^1.0.2"
1987 | cliui "^2.1.0"
1988 | decamelize "^1.0.0"
1989 | window-size "0.1.0"
1990 |
--------------------------------------------------------------------------------