diff --git a/src/assets/css/4-modules/options.css b/src/assets/css/4-modules/options.css
index 2137fad..b23dcb0 100644
--- a/src/assets/css/4-modules/options.css
+++ b/src/assets/css/4-modules/options.css
@@ -7,10 +7,14 @@
-------------------------------------------------------------- */
.options {
+ position: relative;
display: flex;
justify-content: space-between;
align-items: center;
- padding: 2.2rem 0;
+ overflow: hidden;
+ margin-right: -.2rem;
+ margin-left: -.2rem;
+ padding: 2.2rem .2rem;
}
.options__select,
@@ -38,6 +42,80 @@
}
.options__btn svg {
- margin-right: 1.5rem;
vertical-align: middle;
+ line-height: 1;
+}
+
+.options__btn--check {
+ position: relative;
+}
+
+.options__btn--check::after {
+ position: absolute;
+ right: 1.8rem;
+ bottom: 1.5rem;
+ width: 1.8rem;
+ height: 1.5rem;
+ background: url("/assets/img/boomerang-check.svg");
+ content: "";
+ animation: btnCheckArrive .5s cubic-bezier(.18,.89,.32,1.28);
+ animation-delay: 100ms;
+}
+
+@keyframes btnCheckArrive {
+ 0% {
+ transform: scale(1);
+ }
+ 50% {
+ transform: scale(3);
+ }
+ 100% {
+ transform: scale(1);
+ }
+}
+
+/* Panel
+-------------------------------------------------------------- */
+
+.options__panel {
+ position: absolute;
+ top: 2.2rem;
+ bottom: 2.2rem;
+ left: 0;
+ display: flex;
+ overflow: hidden;
+ width: 100%;
+ border-radius: .3rem;
+ background-color: #4c4981;
+ transition: 300ms transform;
+ transform: translateY(-9rem);
+}
+
+.options__panel.active {
+ transform: translateY(0);
+}
+
+.option__panelOption,
+.option__panelOption:visited {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ padding: 0;
+ width: 50%;
+ border: none;
+ border-radius: 0;
+ background-color: transparent;
+ color: #fff;
+ font-size: 1.2rem;
+ cursor: pointer;
+}
+
+.option__panelOption.current {
+ background-color: var(--color-primary);
+}
+
+.option__panelOption svg {
+ margin-bottom: .6rem;
+ max-height: 1.6rem;
}
diff --git a/src/assets/css/5-screens/capture.css b/src/assets/css/5-screens/capture.css
index 941c268..ee593ad 100644
--- a/src/assets/css/5-screens/capture.css
+++ b/src/assets/css/5-screens/capture.css
@@ -18,15 +18,23 @@
height: 11rem;
}
+/* Capture actions
+-------------------------------------------------------------- */
+
+.capture-actions {
+ position: relative;
+ display: flex;
+ justify-content: center;
+ margin-top: auto;
+ margin-bottom: 4rem;
+}
+
/* Capture button
-------------------------------------------------------------- */
.capture-btn,
.capture-btn:visited {
position: relative;
- align-self: center;
- margin-top: auto;
- margin-bottom: 4rem;
padding: 0;
width: 8rem;
height: 8rem;
@@ -83,3 +91,24 @@
transform: rotate(359deg);
}
}
+
+/* Switch button
+-------------------------------------------------------------- */
+
+.capture-switch,
+.capture-switch:visited {
+ position: absolute;
+ top: calc(50% - 3rem);
+ right: 0;
+ padding: 1rem;
+ border: none;
+ border-radius: 0;
+ background-color: transparent;
+ color: #fff;
+ line-height: 1;
+}
+
+.capture-switch svg {
+ width: 3rem;
+ height: 3rem;
+}
diff --git a/src/assets/css/7-rwd/_rwd-landscape.css b/src/assets/css/7-rwd/_rwd-landscape.css
index e8d0cf1..d895c5e 100644
--- a/src/assets/css/7-rwd/_rwd-landscape.css
+++ b/src/assets/css/7-rwd/_rwd-landscape.css
@@ -54,11 +54,19 @@
align-self: center;
}
- .capture-btn {
+ .capture-actions {
+ flex-direction: column;
flex-shrink: .0;
margin: 0 auto;
}
+ .capture-switch,
+ .capture-switch:visited {
+ position: absolute;
+ top: 0;
+ right: calc(50% - 3rem);
+ }
+
/* Options
-------------------------------------------------------------- */
diff --git a/src/assets/img/boomerang-check.svg b/src/assets/img/boomerang-check.svg
new file mode 100644
index 0000000..0e4070d
--- /dev/null
+++ b/src/assets/img/boomerang-check.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/store.js b/src/store.js
index f8401f1..c8d431e 100644
--- a/src/store.js
+++ b/src/store.js
@@ -9,10 +9,11 @@ export default new Vuex.Store({
strict: process.env.NODE_ENV !== 'production',
state: {
cameraShouldFaceUser: true,
- timer: {
+ duration: {
selected: 2,
list: [2, 3, 5]
},
+ boomerang: false,
camera: null,
capture: null,
gif: null,
@@ -22,14 +23,16 @@ export default new Vuex.Store({
updateCameraShouldFaceUser (state, cameraShouldFaceUser) {
state.cameraShouldFaceUser = cameraShouldFaceUser
},
- updateTimer (state, time) {
- state.timer.selected = time
+ updateDuration (state, time) {
+ state.duration.selected = time
+ },
+ updateBoomerang (state, value) {
+ state.boomerang = value
},
updateCamera (state, camera) {
if (state.camera) {
state.camera.mediaStream.getTracks().forEach(track => track.stop())
}
-
state.camera = camera
},
updateCapture (state, capture) {
diff --git a/src/views/components/capture-options.vue b/src/views/components/capture-options.vue
index 51efee9..a25d9d1 100644
--- a/src/views/components/capture-options.vue
+++ b/src/views/components/capture-options.vue
@@ -1,38 +1,78 @@
-