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 @@