+
+
+ {text}
+
-
- {humanize.filesize(totalLoaded)} (
- {percent.toFixed(2)} %)
+
+
+ {humanize.filesize(totalLoaded)} ({percent.toFixed(2)} %)
+
)
diff --git a/browser/app/js/uploads/__tests__/Dropzone.test.js b/browser/app/js/uploads/__tests__/Dropzone.test.js
index d5b5d98a5..ce18431ff 100644
--- a/browser/app/js/uploads/__tests__/Dropzone.test.js
+++ b/browser/app/js/uploads/__tests__/Dropzone.test.js
@@ -26,12 +26,8 @@ describe("Dropzone", () => {
it("should call uploadFile with files", () => {
const uploadFile = jest.fn()
const wrapper = shallow(
)
- const file1 = new Blob(["file content1"], {
- type: "text/plain"
- })
- const file2 = new Blob(["file content2"], {
- type: "text/plain"
- })
+ const file1 = new Blob(["file content1"], { type: "text/plain" })
+ const file2 = new Blob(["file content2"], { type: "text/plain" })
wrapper.first().prop("onDrop")([file1, file2])
expect(uploadFile.mock.calls).toEqual([[file1], [file2]])
})
diff --git a/browser/app/js/uploads/__tests__/actions.test.js b/browser/app/js/uploads/__tests__/actions.test.js
index 2f3b65454..35ec20546 100644
--- a/browser/app/js/uploads/__tests__/actions.test.js
+++ b/browser/app/js/uploads/__tests__/actions.test.js
@@ -85,9 +85,7 @@ describe("Uploads actions", () => {
it("creates alerts/SET action when currentBucket is not present", () => {
const store = mockStore({
- buckets: {
- currentBucket: ""
- }
+ buckets: { currentBucket: "" }
})
const expectedActions = [
{
@@ -99,9 +97,7 @@ describe("Uploads actions", () => {
}
}
]
- const file = new Blob(["file content"], {
- type: "text/plain"
- })
+ const file = new Blob(["file content"], { type: "text/plain" })
store.dispatch(uploadsActions.uploadFile(file))
const actions = store.getActions()
expect(actions).toEqual(expectedActions)
@@ -109,12 +105,8 @@ describe("Uploads actions", () => {
it("creates uploads/ADD action before uploading the file", () => {
const store = mockStore({
- buckets: {
- currentBucket: "test1"
- },
- objects: {
- currentPrefix: "pre1/"
- }
+ buckets: { currentBucket: "test1" },
+ objects: { currentPrefix: "pre1/" }
})
const expectedActions = [
{
@@ -142,12 +134,8 @@ describe("Uploads actions", () => {
})
window.XMLHttpRequest = jest.fn().mockImplementation(xhrMockClass)
const store = mockStore({
- buckets: {
- currentBucket: "test1"
- },
- objects: {
- currentPrefix: "pre1/"
- }
+ buckets: { currentBucket: "test1" },
+ objects: { currentPrefix: "pre1/" }
})
store.dispatch(uploadsActions.uploadFile(file))
expect(open).toHaveBeenCalledWith(
diff --git a/browser/app/js/uploads/__tests__/reducer.test.js b/browser/app/js/uploads/__tests__/reducer.test.js
index 4314bf503..5099d504c 100644
--- a/browser/app/js/uploads/__tests__/reducer.test.js
+++ b/browser/app/js/uploads/__tests__/reducer.test.js
@@ -34,24 +34,14 @@ describe("uploads reducer", () => {
name: "test"
})
expect(newState.files).toEqual({
- "a-b-c": {
- loaded: 0,
- size: 100,
- name: "test"
- }
+ "a-b-c": { loaded: 0, size: 100, name: "test" }
})
})
it("should handle UPDATE_PROGRESS", () => {
const newState = reducer(
{
- files: {
- "a-b-c": {
- loaded: 0,
- size: 100,
- name: "test"
- }
- }
+ files: { "a-b-c": { loaded: 0, size: 100, name: "test" } }
},
{
type: actions.UPDATE_PROGRESS,
@@ -60,11 +50,7 @@ describe("uploads reducer", () => {
}
)
expect(newState.files).toEqual({
- "a-b-c": {
- loaded: 50,
- size: 100,
- name: "test"
- }
+ "a-b-c": { loaded: 50, size: 100, name: "test" }
})
})
@@ -72,16 +58,8 @@ describe("uploads reducer", () => {
const newState = reducer(
{
files: {
- "a-b-c": {
- loaded: 70,
- size: 100,
- name: "test1"
- },
- "x-y-z": {
- loaded: 50,
- size: 100,
- name: "test2"
- }
+ "a-b-c": { loaded: 70, size: 100, name: "test1" },
+ "x-y-z": { loaded: 50, size: 100, name: "test2" }
}
},
{
@@ -90,11 +68,7 @@ describe("uploads reducer", () => {
}
)
expect(newState.files).toEqual({
- "x-y-z": {
- loaded: 50,
- size: 100,
- name: "test2"
- }
+ "x-y-z": { loaded: 50, size: 100, name: "test2" }
})
})
diff --git a/browser/app/js/uploads/reducer.js b/browser/app/js/uploads/reducer.js
index d073ead89..8b49390d1 100644
--- a/browser/app/js/uploads/reducer.js
+++ b/browser/app/js/uploads/reducer.js
@@ -39,13 +39,7 @@ const stop = (files, action) => {
return newFiles
}
-export default (
- state = {
- files: {},
- showAbortModal: false
- },
- action
-) => {
+export default (state = { files: {}, showAbortModal: false }, action) => {
switch (action.type) {
case uploadsActions.ADD:
return {
diff --git a/browser/app/js/utils.js b/browser/app/js/utils.js
index 60c704de4..91afff20c 100644
--- a/browser/app/js/utils.js
+++ b/browser/app/js/utils.js
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-import { minioBrowserPrefix } from "./constants.js"
+import { minioBrowserPrefix } from './constants.js'
export const sortObjectsByName = (objects, order) => {
- let folders = objects.filter(object => object.name.endsWith("/"))
- let files = objects.filter(object => !object.name.endsWith("/"))
+ let folders = objects.filter(object => object.name.endsWith('/'))
+ let files = objects.filter(object => !object.name.endsWith('/'))
folders = folders.sort((a, b) => {
if (a.name.toLowerCase() < b.name.toLowerCase()) return -1
if (a.name.toLowerCase() > b.name.toLowerCase()) return 1
@@ -37,34 +37,32 @@ export const sortObjectsByName = (objects, order) => {
}
export const sortObjectsBySize = (objects, order) => {
- let folders = objects.filter(object => object.name.endsWith("/"))
- let files = objects.filter(object => !object.name.endsWith("/"))
+ let folders = objects.filter(object => object.name.endsWith('/'))
+ let files = objects.filter(object => !object.name.endsWith('/'))
files = files.sort((a, b) => a.size - b.size)
- if (order) files = files.reverse()
+ if (order)
+ files = files.reverse()
return [...folders, ...files]
}
export const sortObjectsByDate = (objects, order) => {
- let folders = objects.filter(object => object.name.endsWith("/"))
- let files = objects.filter(object => !object.name.endsWith("/"))
- files = files.sort(
- (a, b) =>
- new Date(a.lastModified).getTime() - new Date(b.lastModified).getTime()
- )
- if (order) files = files.reverse()
+ let folders = objects.filter(object => object.name.endsWith('/'))
+ let files = objects.filter(object => !object.name.endsWith('/'))
+ files = files.sort((a, b) => new Date(a.lastModified).getTime() - new Date(b.lastModified).getTime())
+ if (order)
+ files = files.reverse()
return [...folders, ...files]
}
-export const pathSlice = path => {
- path = path.replace(minioBrowserPrefix, "")
- let prefix = ""
- let bucket = ""
- if (!path)
- return {
+export const pathSlice = (path) => {
+ path = path.replace(minioBrowserPrefix, '')
+ let prefix = ''
+ let bucket = ''
+ if (!path) return {
bucket,
prefix
- }
- let objectIndex = path.indexOf("/", 1)
+ }
+ let objectIndex = path.indexOf('/', 1)
if (objectIndex == -1) {
bucket = path.slice(1)
return {
@@ -81,6 +79,7 @@ export const pathSlice = path => {
}
export const pathJoin = (bucket, prefix) => {
- if (!prefix) prefix = ""
- return minioBrowserPrefix + "/" + bucket + "/" + prefix
+ if (!prefix)
+ prefix = ''
+ return minioBrowserPrefix + '/' + bucket + '/' + prefix
}
diff --git a/browser/app/js/web.js b/browser/app/js/web.js
index 170922981..147cd203e 100644
--- a/browser/app/js/web.js
+++ b/browser/app/js/web.js
@@ -14,35 +14,32 @@
* limitations under the License.
*/
-import JSONrpc from "./jsonrpc"
-import { minioBrowserPrefix } from "./constants.js"
-import Moment from "moment"
-import storage from "local-storage-fallback"
+import JSONrpc from './jsonrpc'
+import { minioBrowserPrefix } from './constants.js'
+import Moment from 'moment'
+import storage from 'local-storage-fallback'
class Web {
constructor(endpoint) {
- const namespace = "Web"
+ const namespace = 'Web'
this.JSONrpc = new JSONrpc({
endpoint,
namespace
})
}
makeCall(method, options) {
- return this.JSONrpc.call(
- method,
- {
- params: options
- },
- storage.getItem("token")
- )
+ return this.JSONrpc.call(method, {
+ params: options
+ }, storage.getItem('token'))
.catch(err => {
if (err.status === 401) {
- storage.removeItem("token")
+ storage.removeItem('token')
location.reload()
- throw new Error("Please re-login.")
+ throw new Error('Please re-login.')
}
- if (err.status) throw new Error(`Server returned error [${err.status}]`)
- throw new Error("Minio server is unreachable")
+ if (err.status)
+ throw new Error(`Server returned error [${err.status}]`)
+ throw new Error('Minio server is unreachable')
})
.then(res => {
let json = JSON.parse(res.text)
@@ -54,85 +51,81 @@ class Web {
if (!Moment(result.uiVersion).isValid()) {
throw new Error("Invalid UI version in the JSON-RPC response")
}
- if (
- result.uiVersion !== currentUiVersion &&
- currentUiVersion !== "MINIO_UI_VERSION"
- ) {
- storage.setItem("newlyUpdated", true)
+ if (result.uiVersion !== currentUiVersion
+ && currentUiVersion !== 'MINIO_UI_VERSION') {
+ storage.setItem('newlyUpdated', true)
location.reload()
}
return result
})
}
LoggedIn() {
- return !!storage.getItem("token")
+ return !!storage.getItem('token')
}
Login(args) {
- return this.makeCall("Login", args).then(res => {
- storage.setItem("token", `${res.token}`)
- return res
- })
+ return this.makeCall('Login', args)
+ .then(res => {
+ storage.setItem('token', `${res.token}`)
+ return res
+ })
}
Logout() {
- storage.removeItem("token")
+ storage.removeItem('token')
}
ServerInfo() {
- return this.makeCall("ServerInfo")
+ return this.makeCall('ServerInfo')
}
StorageInfo() {
- return this.makeCall("StorageInfo")
+ return this.makeCall('StorageInfo')
}
ListBuckets() {
- return this.makeCall("ListBuckets")
+ return this.makeCall('ListBuckets')
}
MakeBucket(args) {
- return this.makeCall("MakeBucket", args)
+ return this.makeCall('MakeBucket', args)
}
DeleteBucket(args) {
- return this.makeCall("DeleteBucket", args)
+ return this.makeCall('DeleteBucket', args)
}
ListObjects(args) {
- return this.makeCall("ListObjects", args)
+ return this.makeCall('ListObjects', args)
}
PresignedGet(args) {
- return this.makeCall("PresignedGet", args)
+ return this.makeCall('PresignedGet', args)
}
PutObjectURL(args) {
- return this.makeCall("PutObjectURL", args)
+ return this.makeCall('PutObjectURL', args)
}
RemoveObject(args) {
- return this.makeCall("RemoveObject", args)
+ return this.makeCall('RemoveObject', args)
}
GetAuth() {
- return this.makeCall("GetAuth")
+ return this.makeCall('GetAuth')
}
GenerateAuth() {
- return this.makeCall("GenerateAuth")
+ return this.makeCall('GenerateAuth')
}
SetAuth(args) {
- return this.makeCall("SetAuth", args).then(res => {
- storage.setItem("token", `${res.token}`)
- return res
- })
+ return this.makeCall('SetAuth', args)
+ .then(res => {
+ storage.setItem('token', `${res.token}`)
+ return res
+ })
}
CreateURLToken() {
- return this.makeCall("CreateURLToken")
+ return this.makeCall('CreateURLToken')
}
GetBucketPolicy(args) {
- return this.makeCall("GetBucketPolicy", args)
+ return this.makeCall('GetBucketPolicy', args)
}
SetBucketPolicy(args) {
- return this.makeCall("SetBucketPolicy", args)
+ return this.makeCall('SetBucketPolicy', args)
}
ListAllBucketPolicies(args) {
- return this.makeCall("ListAllBucketPolicies", args)
+ return this.makeCall('ListAllBucketPolicies', args)
}
}
-const web = new Web(
- `${window.location.protocol}//${
- window.location.host
- }${minioBrowserPrefix}/webrpc`
-)
+const web = new Web(`${window.location.protocol}//${window.location.host}${minioBrowserPrefix}/webrpc`);
-export default web
+export default web;
\ No newline at end of file
diff --git a/browser/app/less/inc/about.less b/browser/app/less/inc/about.less
deleted file mode 100644
index 5db8f219d..000000000
--- a/browser/app/less/inc/about.less
+++ /dev/null
@@ -1,42 +0,0 @@
-.about {
-
-}
-
-.about__logo {
- background-color: @muted-bg;
- width: 8rem;
- display: flex;
- justify-content: center;
- border-radius: @border-radius-large 0 0 @border-radius-large;
-
- & > img {
- width: 5rem;
- }
-}
-
-.about__content {
- display: flex;
-}
-
-.about__info {
- padding: 3rem 2rem;
-}
-
-.about__item {
- & > strong {
- font-weight: normal;
- display: block;
- color: @headings-color;
- margin-bottom: 0.25rem;
- text-transform: uppercase;
- font-size: @font-size-small;
- }
-
- & > small {
- color: @text-muted-color;
- }
-
- & + .about__item {
- margin-top: 1rem;
- }
-}
\ No newline at end of file
diff --git a/browser/app/less/inc/alert.less b/browser/app/less/inc/alert.less
index 2188a3fb6..4c60e5d65 100644
--- a/browser/app/less/inc/alert.less
+++ b/browser/app/less/inc/alert.less
@@ -1,20 +1,20 @@
.alert {
+ border: 0;
position: fixed;
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
+ max-width: 500px;
+ margin: 0;
+ box-shadow: 0 4px 5px rgba(0, 0, 0, 0.1);
color: @white;
width: 100%;
- padding: 1.5rem 4rem 1.5rem 2rem;
- z-index: 1000000;
+ right: 20px;
+ border-radius: 3px;
+ padding: 17px 50px 17px 17px;
+ z-index: 10010;
.animation-duration(800ms);
.animation-fill-mode(both);
- font-size: @font-size-small;
- word-wrap: break-word;
- &:not(.alert--upload) {
- text-align: center;
- top: 1.5rem;
- max-width: 500px;
- border-radius: @border-radius-base;
+ &:not(.progress) {
+ top: 20px;
@media(min-width: (@screen-sm-min)) {
left: 50%;
@@ -22,17 +22,35 @@
}
}
+ &.progress {
+ bottom: 20px;
+ right: 20px;
+ }
+
+ &.alert-danger {
+ background: @red;
+ }
+
+ &.alert-success {
+ background: @green;
+ }
+
+ &.alert-info {
+ background: @blue;
+ }
+
@media(max-width: (@screen-xs-max)) {
- left: 1.5rem;
- width: ~"calc(100% - 4rem)";
+ left: 20px;
+ width: ~"calc(100% - 40px)";
max-width: 100%;
}
.progress {
- margin: 0.75rem 0;
- height: 0.25rem;
+ margin: 10px 10px 8px 0;
+ height: 5px;
box-shadow: none;
- background-color: rgba(255,255,255,0.2);
+ border-radius: 1px;
+ background-color: @blue;
border-radius: 2px;
overflow: hidden;
}
@@ -44,27 +62,7 @@
}
.close {
- top: 1.3rem;
- right: 1.5rem;
+ position: absolute;
+ top: 15px;
}
-}
-
-.alert-danger {
- background: @red;
-}
-
-.alert-success {
- background: @green;
-}
-
-.alert-info {
- background: @blue;
-}
-
-.alert--upload {
- bottom: 0;
- left: 0;
- width: 100%;
- max-width: 100%;
- box-shadow: 0 -2px 5px rgba(0,0,0,0.15);
}
\ No newline at end of file
diff --git a/browser/app/less/inc/animate/animate.less b/browser/app/less/inc/animate/animate.less
new file mode 100644
index 000000000..33c53b1ae
--- /dev/null
+++ b/browser/app/less/inc/animate/animate.less
@@ -0,0 +1,13 @@
+.animated{
+ &.infinite {
+ .animation-iteration-count(infinite);
+ }
+}
+
+@import 'fadeIn';
+@import 'fadeInDown';
+@import 'fadeInUp';
+@import 'fadeOut';
+@import 'fadeOutDown';
+@import 'fadeOutUp';
+@import 'zoomIn';
diff --git a/browser/app/less/inc/animate/fadeIn.less b/browser/app/less/inc/animate/fadeIn.less
new file mode 100644
index 000000000..50282ac98
--- /dev/null
+++ b/browser/app/less/inc/animate/fadeIn.less
@@ -0,0 +1,26 @@
+@-webkit-keyframes fadeIn {
+ 0% {opacity: 0;}
+ 100% {opacity: 1;}
+}
+
+@-moz-keyframes fadeIn {
+ 0% {opacity: 0;}
+ 100% {opacity: 1;}
+}
+
+@-o-keyframes fadeIn {
+ 0% {opacity: 0;}
+ 100% {opacity: 1;}
+}
+
+@keyframes fadeIn {
+ 0% {opacity: 0;}
+ 100% {opacity: 1;}
+}
+
+.fadeIn {
+ -webkit-animation-name: fadeIn;
+ -moz-animation-name: fadeIn;
+ -o-animation-name: fadeIn;
+ animation-name: fadeIn;
+}
\ No newline at end of file
diff --git a/browser/app/less/inc/animate/fadeInDown.less b/browser/app/less/inc/animate/fadeInDown.less
new file mode 100644
index 000000000..2a959322e
--- /dev/null
+++ b/browser/app/less/inc/animate/fadeInDown.less
@@ -0,0 +1,54 @@
+@-webkit-keyframes fadeInDown {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(-20px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ }
+}
+
+@-moz-keyframes fadeInDown {
+ 0% {
+ opacity: 0;
+ -moz-transform: translateY(-20px);
+ }
+
+ 100% {
+ opacity: 1;
+ -moz-transform: translateY(0);
+ }
+}
+
+@-o-keyframes fadeInDown {
+ 0% {
+ opacity: 0;
+ -ms-transform: translateY(-20px);
+ }
+
+ 100% {
+ opacity: 1;
+ -ms-transform: translateY(0);
+ }
+}
+
+@keyframes fadeInDown {
+ 0% {
+ opacity: 0;
+ transform: translateY(-20px);
+ }
+
+ 100% {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+.fadeInDown {
+ -webkit-animation-name: fadeInDown;
+ -moz-animation-name: fadeInDown;
+ -o-animation-name: fadeInDown;
+ animation-name: fadeInDown;
+}
\ No newline at end of file
diff --git a/browser/app/less/inc/animate/fadeInUp.less b/browser/app/less/inc/animate/fadeInUp.less
new file mode 100644
index 000000000..54b4d26ec
--- /dev/null
+++ b/browser/app/less/inc/animate/fadeInUp.less
@@ -0,0 +1,54 @@
+@-webkit-keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(20px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ }
+}
+
+@-moz-keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ -moz-transform: translateY(20px);
+ }
+
+ 100% {
+ opacity: 1;
+ -moz-transform: translateY(0);
+ }
+}
+
+@-o-keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ -o-transform: translateY(20px);
+ }
+
+ 100% {
+ opacity: 1;
+ -o-transform: translateY(0);
+ }
+}
+
+@keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ transform: translateY(20px);
+ }
+
+ 100% {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+.fadeInUp {
+ -webkit-animation-name: fadeInUp;
+ -moz-animation-name: fadeInUp;
+ -o-animation-name: fadeInUp;
+ animation-name: fadeInUp;
+}
\ No newline at end of file
diff --git a/browser/app/less/inc/animate/fadeOut.less b/browser/app/less/inc/animate/fadeOut.less
new file mode 100644
index 000000000..ba64505b9
--- /dev/null
+++ b/browser/app/less/inc/animate/fadeOut.less
@@ -0,0 +1,26 @@
+@-webkit-keyframes fadeOut {
+ 0% {opacity: 1;}
+ 100% {opacity: 0;}
+}
+
+@-moz-keyframes fadeOut {
+ 0% {opacity: 1;}
+ 100% {opacity: 0;}
+}
+
+@-o-keyframes fadeOut {
+ 0% {opacity: 1;}
+ 100% {opacity: 0;}
+}
+
+@keyframes fadeOut {
+ 0% {opacity: 1;}
+ 100% {opacity: 0;}
+}
+
+.fadeOut {
+ -webkit-animation-name: fadeOut;
+ -moz-animation-name: fadeOut;
+ -o-animation-name: fadeOut;
+ animation-name: fadeOut;
+}
\ No newline at end of file
diff --git a/browser/app/less/inc/animate/fadeOutDown.less b/browser/app/less/inc/animate/fadeOutDown.less
new file mode 100644
index 000000000..214e75367
--- /dev/null
+++ b/browser/app/less/inc/animate/fadeOutDown.less
@@ -0,0 +1,54 @@
+@-webkit-keyframes fadeOutDown {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(20px);
+ }
+}
+
+@-moz-keyframes fadeOutDown {
+ 0% {
+ opacity: 1;
+ -moz-transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -moz-transform: translateY(20px);
+ }
+}
+
+@-o-keyframes fadeOutDown {
+ 0% {
+ opacity: 1;
+ -o-transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -o-transform: translateY(20px);
+ }
+}
+
+@keyframes fadeOutDown {
+ 0% {
+ opacity: 1;
+ transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ transform: translateY(20px);
+ }
+}
+
+.fadeOutDown {
+ -webkit-animation-name: fadeOutDown;
+ -moz-animation-name: fadeOutDown;
+ -o-animation-name: fadeOutDown;
+ animation-name: fadeOutDown;
+}
\ No newline at end of file
diff --git a/browser/app/less/inc/animate/fadeOutUp.less b/browser/app/less/inc/animate/fadeOutUp.less
new file mode 100644
index 000000000..cf6115ac0
--- /dev/null
+++ b/browser/app/less/inc/animate/fadeOutUp.less
@@ -0,0 +1,51 @@
+@-webkit-keyframes fadeOutUp {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(-20px);
+ }
+}
+@-moz-keyframes fadeOutUp {
+ 0% {
+ opacity: 1;
+ -moz-transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -moz-transform: translateY(-20px);
+ }
+}
+@-o-keyframes fadeOutUp {
+ 0% {
+ opacity: 1;
+ -o-transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -o-transform: translateY(-20px);
+ }
+}
+@keyframes fadeOutUp {
+ 0% {
+ opacity: 1;
+ transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ transform: translateY(-20px);
+ }
+}
+
+.fadeOutUp {
+ -webkit-animation-name: fadeOutUp;
+ -moz-animation-name: fadeOutUp;
+ -o-animation-name: fadeOutUp;
+ animation-name: fadeOutUp;
+}
\ No newline at end of file
diff --git a/browser/app/less/inc/animate/zoomIn.less b/browser/app/less/inc/animate/zoomIn.less
new file mode 100644
index 000000000..34c754fef
--- /dev/null
+++ b/browser/app/less/inc/animate/zoomIn.less
@@ -0,0 +1,23 @@
+@-webkit-keyframes zoomIn {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(.3, .3, .3);
+ transform: scale3d(.3, .3, .3);
+ }
+
+ 50% {
+ opacity: 1;
+ }
+}
+
+@keyframes zoomIn {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(.3, .3, .3);
+ transform: scale3d(.3, .3, .3);
+ }
+
+ 50% {
+ opacity: 1;
+ }
+}
\ No newline at end of file
diff --git a/browser/app/less/inc/animations.less b/browser/app/less/inc/animations.less
deleted file mode 100644
index 3aad8efb1..000000000
--- a/browser/app/less/inc/animations.less
+++ /dev/null
@@ -1,92 +0,0 @@
-// Zoom In
-@-webkit-keyframes zoomIn {
- from {
- opacity: 0;
- -webkit-transform: scale3d(.3, .3, .3);
- transform: scale3d(.3, .3, .3);
- }
-
- 50% {
- opacity: 1;
- }
-}
-
-@keyframes zoomIn {
- from {
- opacity: 0;
- -webkit-transform: scale3d(.3, .3, .3);
- transform: scale3d(.3, .3, .3);
- }
-
- 50% {
- opacity: 1;
- }
-}
-
-
-// Fade In Down
-@-webkit-keyframes fadeInDown {
- 0% {
- opacity: 0;
- -webkit-transform: translateY(-20px);
- }
-
- 100% {
- opacity: 1;
- -webkit-transform: translateY(0);
- }
-}
-
-@keyframes fadeInDown {
- 0% {
- opacity: 0;
- transform: translateY(-20px);
- }
-
- 100% {
- opacity: 1;
- transform: translateY(0);
- }
-}
-
-@-webkit-keyframes fadeOutUp {
- 0% {
- opacity: 1;
- -webkit-transform: translateY(0);
- }
-
- 100% {
- opacity: 0;
- -webkit-transform: translateY(-20px);
- }
-}
-
-
-// Fade Out Up
-@keyframes fadeOutUp {
- 0% {
- opacity: 1;
- transform: translateY(0);
- }
-
- 100% {
- opacity: 0;
- transform: translateY(-20px);
- }
-}
-
-
-// Classes
-.fadeOutUp {
- -webkit-animation-name: fadeOutUp;
- -moz-animation-name: fadeOutUp;
- -o-animation-name: fadeOutUp;
- animation-name: fadeOutUp;
-}
-
-.fadeInDown {
- -webkit-animation-name: fadeInDown;
- -moz-animation-name: fadeInDown;
- -o-animation-name: fadeInDown;
- animation-name: fadeInDown;
-}
diff --git a/browser/app/less/inc/base.less b/browser/app/less/inc/base.less
index 91f52afff..4f288ae82 100644
--- a/browser/app/less/inc/base.less
+++ b/browser/app/less/inc/base.less
@@ -1,9 +1,6 @@
* {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
- box-sizing: border-box;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
&:focus,
&:active {
@@ -12,35 +9,23 @@
}
html {
- font-size: @font-size-base;
- min-height: 100%;
+ font-size: 10px;
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
}
+html,
body {
- background-color: @body-bg;
- font-weight: @font-weight-normal;
- font-family: @font-family-sans-serif;
- line-height: @line-height-base;
- color: @text-color;
-}
-
-h1, h2, h3, h4, h5, h6 {
- font-family: @headings-font-family;
- color: @headings-color;
- font-weight: @font-weight-bold;
+ min-height: 100%;
}
a {
- color: @link-color;
- text-decoration: @link-hover-decoration;
+ .transition(color);
+ .transition-duration(300ms);
- &:hover {
- color: darken(@link-color, 10%);
- }
}
button {
border: 0;
- background-color: transparent;
- padding: 0;
-}
\ No newline at end of file
+}
+
+
diff --git a/browser/app/less/inc/buttons.less b/browser/app/less/inc/buttons.less
index 29d53ba75..6c04a95da 100644
--- a/browser/app/less/inc/buttons.less
+++ b/browser/app/less/inc/buttons.less
@@ -1,39 +1,22 @@
-// Base
.btn {
border: 0;
- border-radius: @border-radius-small;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 2px;
text-align: center;
.transition(all);
.transition-duration(300ms);
- font-size: @font-size-small;
- &:not(.btn--sm) {
- padding: 0.5rem 0.75rem;
- }
-}
-
-
-// Size
-.btn--sm {
- padding: 0.35rem 0.5rem;
- font-size: @font-size-extra-small;
-}
-
-
-// Link buttons
-.btn--link {
- background-color: transparent;
- text-transform: uppercase;
- font-weight: @font-weight-bold;
- color: @headings-color;;
-
- &:hover {
- background-color: @muted-bg;
+ &:hover,
+ &:focus {
+ .opacity(0.9);
}
}
-
-// Variants
+/*-----------------------------------
+ Button Variants
+------------------------------------*/
.btn-variant(@bg-color, @color) {
color: @color;
background-color: @bg-color;
@@ -41,18 +24,34 @@
&:hover,
&:focus {
color: @color;
- background-color: darken(@bg-color, 5%);
+ background-color: darken(@bg-color, 6%);
}
+
+
+}
+
+.btn-block {
+ display: block;
+ width: 100%;
}
-.btn--danger {
+.btn-white {
+ .btn-variant(#fff, darken(@text-color, 20%));
+}
+
+.btn-link {
+ .btn-variant(#eee, #545454);
+}
+
+.btn-danger {
.btn-variant(@red, @white);
}
-.btn--primary {
+.btn-primary {
.btn-variant(@blue, @white);
}
-.btn--success {
+.btn-success {
.btn-variant(@green, @white);
-}
\ No newline at end of file
+}
+//-----------------------------------
\ No newline at end of file
diff --git a/browser/app/less/inc/close.less b/browser/app/less/inc/close.less
deleted file mode 100644
index e442ac3e0..000000000
--- a/browser/app/less/inc/close.less
+++ /dev/null
@@ -1,23 +0,0 @@
-.close {
- width: 25px;
- height: 25px;
- cursor: pointer;
- position: absolute;
- z-index: 1;
-
- &:not(.close--alt) {
- background: url(../../img/icons/close-inverse.svg) no-repeat center;
-
- opacity: 0.75;
- .transition(opacity);
- .transition-duration(300ms);
-
- &:hover {
- opacity: 1;
- }
- }
-}
-
-.close--alt {
- background: url(../../img/icons/close.svg) no-repeat center;
-}
\ No newline at end of file
diff --git a/browser/app/less/inc/create.less b/browser/app/less/inc/create.less
deleted file mode 100644
index 140ef30f8..000000000
--- a/browser/app/less/inc/create.less
+++ /dev/null
@@ -1,139 +0,0 @@
-.create {
- position: fixed !important;
- bottom: 2rem;
- right: 2rem;
- z-index: 10;
-
- .dropdown-menu {
- z-index: 1;
- box-shadow: none;
- border: 0;
- width: 40px;
- min-width: 40px;
- height: 150px;
- text-align: center;
- background-color: transparent;
- bottom: 55px;
- top: auto;
- right: 8px;
- display: block;
- }
-
- &:not(.open) {
- .dropdown-menu {
- pointer-events: none;
- }
- }
-
- &.open {
- .create__toggle {
- & > i {
- &:first-child {
- opacity: 0;
- .scale(0);
- }
-
- &:last-child {
- opacity: 1;
- .scale(1);
- }
- }
- }
-
- .create__btn {
- opacity: 1;
- }
-
- .create__btn--bucket {
- .translate3d(0,-120px,0)
- }
-
- .create__btn--upload {
- .translate3d(0,-65px,0);
- }
- }
-}
-
-.create__toggle {
- cursor: pointer;
- width: 55px;
- height: 55px;
- border-radius: 50%;
- border: 0;
- position: relative;
- background-color: @red;
- box-shadow: 0 0 0 5px fade(@black, 5%);
- display: block;
- z-index: 10;
-
- & > i {
- position: absolute;
- font-size: 1.35rem;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- text-align: center;
- line-height: 55px;
- color: @white;
- .transition(transform);
- .transition-duration(300ms);
-
- &:last-child {
- opacity: 0;
- .scale(0);
- }
- }
-}
-
-.create__btn {
- width: 40px;
- height: 40px;
- border-radius: 50%;
- text-align: center;
- position: absolute;
- left: 0;
- color: @white;
- line-height: 40px;
- box-shadow: 0 0 0 4px fade(@black, 3%);
- font-size: 1.3rem;
- background-color: @amber;
- bottom: -48px;
- opacity: 0;
- .transition(all);
- .transition-duration(300ms);
-
- &:hover,
- &:focus {
- background-color: darken(@amber, 10%);
- color: @white;
-
- }
-
- & > label {
- width: 100%;
- height: 100%;
- position: absolute;
- left: 0;
- top: 0;
- z-index: 1;
- cursor: pointer;
- }
-}
-
-.create__btn--bucket {
- background: @amber url(../../img/icons/bucket-new.svg) no-repeat center;
- background-size: 12px;
- .transition-delay(100ms);
-}
-
-.create__btn--upload {
-}
-
-.create-bucket {
- .modal-dialog {
- position: fixed;
- right: 2rem;
- bottom: 4.75rem;
- }
-}
\ No newline at end of file
diff --git a/browser/app/less/inc/dropdown.less b/browser/app/less/inc/dropdown.less
index f8214fd93..4d160464e 100644
--- a/browser/app/less/inc/dropdown.less
+++ b/browser/app/less/inc/dropdown.less
@@ -1,78 +1,23 @@
-.dropdown,
-.dropup {
- position: relative;
-}
-
-.dropdown-toggle--icon {
- width: 2rem;
- height: 2rem;
- border-radius: 50%;
- line-height: 100%;
- background-color: transparent;
-
- & > .zmdi {
- font-size: 1.25rem;
- line-height: 1.1rem;
- }
-
- &:hover {
- background-color: @white;
- }
-}
-
.dropdown-menu {
- position: absolute;
+ padding: 15px 0;
top: 0;
- left: 0;
- z-index: @zindex-dropdown;
- border: 1px solid @dropdown-border-color;
- display: none;
- padding: 0.75rem 0;
- margin: 0;
- list-style: none;
- font-size: @font-size-base;
- background-color: @dropdown-bg;
- border-radius: @border-radius-large;
- box-shadow: @dropdown-shadow;
- min-width: 5rem;
-
- > li > a {
- display: block;
- color: @dropdown-link-color;
- padding: 0.5rem 1.25rem;
- font-size: @font-size-base - 1;
- white-space: nowrap;
- .transition(all);
- .transition-duration(300ms);
+ margin-top: -1px;
- &:hover {
- color: @dropdown-link-hover-color;
- background-color: @dropdown-link-hover-bg;
- }
-
- & > i {
- text-align: center;
- width: 1.1rem;
- margin-left: 0.75rem;
- font-size: 1.15rem;
- vertical-align: top;
- position: relative;
- top: 0.05rem;
- line-height: 100%;
+ & > li {
+ & > a {
+ padding: 8px 20px;
+ font-size: 15px;
+
+ & > i {
+ width: 20px;
+ position: relative;
+ top: 1px;
+ }
}
}
}
-.open {
- & > .dropdown-menu {
- display: block;
- }
-}
-
.dropdown-menu-right {
- right: -0.1rem;
- left: auto;
-
& > li {
& > a {
text-align: right;
diff --git a/browser/app/less/inc/file-explorer.less b/browser/app/less/inc/file-explorer.less
new file mode 100644
index 000000000..7d5e942dd
--- /dev/null
+++ b/browser/app/less/inc/file-explorer.less
@@ -0,0 +1,160 @@
+/*------------------------------
+ Layout
+--------------------------------*/
+.file-explorer {
+ background-color: @white;
+ position: relative;
+ height: 100%;
+
+ &.toggled {
+ height: 100vh;
+ overflow: hidden;
+ }
+}
+
+.fe-body {
+ @media(min-width: @screen-md-min) {
+ padding: 0 0 80px @fe-sidebar-width;
+ }
+
+ @media(max-width: @screen-sm-max) {
+ padding: 75px 0 80px;
+ }
+
+ min-height:100vh;
+ overflow: auto;
+}
+
+
+/*------------------------------
+ Create and Upload Button
+--------------------------------*/
+.feb-actions {
+ position: fixed;
+ bottom: 30px;
+ right: 30px;
+
+ .dropdown-menu {
+ min-width: 55px;
+ width: 55px;
+ text-align: center;
+ background: transparent;
+ box-shadow: none;
+ margin: 0;
+ }
+
+ &.open {
+ .feba-btn {
+ .scale(1);
+
+ &:first-child {
+ .animation-name(feba-btn-anim);
+ .animation-duration(300ms);
+ }
+
+ &:last-child {
+ .animation-name(feba-btn-anim);
+ .animation-duration(100ms);
+ }
+ }
+
+ .feba-toggle {
+ background: darken(@red, 10%);
+
+ & > span {
+ transform: translateZ(1px) rotate(135deg);
+ }
+ }
+ }
+}
+
+.feba-toggle {
+ width: 55px;
+ height: 55px;
+ line-height: 55px;
+ border-radius: 50%;
+ background: @red;
+ box-shadow: 0 2px 3px rgba(0, 0, 0, 0.15);
+ display: inline-block;
+ text-align: center;
+ border: 0;
+ padding: 0;
+
+ span {
+ display: inline-block;
+ height: 100%;
+ width: 100%;
+ }
+
+ i {
+ color: @white;
+ font-size: 17px;
+ line-height: 55px;
+ }
+}
+
+.feba-toggle,
+.feba-toggle > span {
+ .transition(all);
+ .transition-duration(250ms);
+ .backface-visibility(hidden);
+}
+
+.feba-btn {
+ width: 40px;
+ margin-top: 10px;
+ height: 40px;
+ border-radius: 50%;
+ text-align: center;
+ display: inline-block;
+ color: @white;
+ line-height: 40px;
+ box-shadow: 0 2px 3px rgba(0, 0, 0, 0.15);
+ -webkit-transform: scale(0);
+ transform: scale(0);
+ position: relative;
+
+ &:hover,
+ &:focus {
+ color: @white;
+ }
+
+ label {
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ left: 0;
+ top: 0;
+ cursor: pointer;
+ }
+}
+
+.feba-bucket {
+ background: @orange;
+}
+
+.feba-upload {
+ background: @yellow;
+}
+
+@-webkit-keyframes feba-btn-anim {
+ from {
+ .scale(0);
+ .opacity(0);
+ }
+ to {
+ .scale(1);
+ .opacity(1);
+ }
+}
+
+@keyframes feba-btn-anim {
+ from {
+ .scale(0);
+ .opacity(0);
+ }
+ to {
+ .scale(1);
+ .opacity(1);
+ }
+}
diff --git a/browser/app/less/inc/font.less b/browser/app/less/inc/font.less
index a2fc93b33..bdb7f98d8 100644
--- a/browser/app/less/inc/font.less
+++ b/browser/app/less/inc/font.less
@@ -1,24 +1,7 @@
-// Roboto Regular
-@font-face{
- font-family: Roboto;
- src:url('../../fonts/roboto/Roboto-Regular-webfont.eot');
- src:url('../../fonts/roboto/Roboto-Regular-webfont.eot?#iefix') format('embedded-opentype'),
- url('../../fonts/roboto/Roboto-Regular-webfont.woff') format('woff'),
- url('../../fonts/roboto/Roboto-Regular-webfont.ttf') format('truetype'),
- url('../../fonts/roboto/Roboto-Regular-webfont.svg#icon') format('svg');
- font-weight: 400;
- font-style: normal;
-}
-
-
-// Roboto Medium
-@font-face{
- font-family: Roboto;
- src:url('../../fonts/roboto/Roboto-Medium-webfont.eot');
- src:url('../../fonts/roboto/Roboto-Medium-webfont.eot?#iefix') format('embedded-opentype'),
- url('../../fonts/roboto/Roboto-Medium-webfont.woff') format('woff'),
- url('../../fonts/roboto/Roboto-Medium-webfont.ttf') format('truetype'),
- url('../../fonts/roboto/Roboto-Medium-webfont.svg#icon') format('svg');
- font-weight: 500;
+@font-face {
+ font-family: Lato;
+ src: url('../../fonts/lato/lato-normal.woff2') format('woff2'),
+ url('../../fonts/lato/lato-normal.woff') format('woff');
+ font-weight: normal;
font-style: normal;
}
\ No newline at end of file
diff --git a/browser/app/less/inc/form.less b/browser/app/less/inc/form.less
index 363747164..d58e22ca7 100644
--- a/browser/app/less/inc/form.less
+++ b/browser/app/less/inc/form.less
@@ -1,102 +1,262 @@
-// Form Group
-.form-group {
- position: relative;
+.form-control {
+ border: 0;
+ border-bottom: 1px solid @input-border;
+ color: #32393F;
+ padding: 5px;
+ width: 100%;
+ font-size: 13px;
+ background-color: transparent;
+}
+
+select.form-control {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ border-radius: 0;
+ background: url(../../img/select-caret.svg) no-repeat bottom 7px right;
+
+}
+
- &:not(:only-child):not(:last-child) {
- margin-bottom: 1.25rem;
+/*--------------------------
+ Input Group
+----------------------------*/
+.input-group {
+ position: relative;
+ &:not(:last-child) {
+ margin-bottom: 25px;
}
- & > label {
- font-size: @font-size-extra-small;
- font-weight: @font-weight-bold;
- text-transform: uppercase;
+ label:not(.ig-label) {
+ font-size: 13px;
+ display: block;
+ margin-bottom: 10px;
}
}
-.form-group--centered {
- .form-group__field {
- text-align: center;
- }
+.ig-label {
+ position: absolute;
+ text-align: center;
+ bottom: 7px;
+ left: 0;
+ width: 100%;
+ .transition(all);
+ .transition-duration(250ms);
+ padding: 2px 0 3px;
+ border-radius: 2px;
+ font-weight: 400;
}
+.ig-helpers {
+ z-index: 1;
+ width: 100%;
+ left: 0;
+
+ &,
+ &:before,
+ &:after {
+ position: absolute;
+ height: 2px;
+ bottom: 0;
+ }
-// Field
-.form-group__field {
- border: 0;
- border-bottom: 1px solid @input-border-color;
- color: @input-color;
+ &:before,
+ &:after {
+ content: '';
+ width: 0;
+ .transition(all);
+ .transition-duration(250ms);
+ background-color: #03A9F4;
+ }
+
+ &:before {
+ left: 50%;
+ }
+
+ &:after {
+ right: 50%;
+ }
+}
+
+.ig-text {
width: 100%;
- font-size: @font-size-small;
- background-color: @input-bg;
- padding: 0 1px;
- height: @input-height;
- outline: 0;
- box-shadow: none;
- .placeholder(@text-muted-color);
+ height: 40px;
+ border: 0;
+ background: transparent !important;
+ text-align: center;
+ position: relative;
+ z-index: 1;
+ border-bottom: 1px solid #eee;
+ color: #32393F;
+ font-size: 13px;
+
+ &:focus + .ig-helpers {
+ &:before,
+ &:after {
+ width: 50%;
+ }
+ }
+
+ &:valid,
+ &:disabled,
&:focus {
- & ~ .form-group__helper {
- width: 100%;
+ & ~ .ig-label {
+ bottom: 35px;
+ font-size: 13px;
+ z-index: 1;
}
}
+
+ &:disabled {
+ .opacity(0.5);
+ }
}
-.form-group__field--static {
- border: 0;
+.ig-dark {
+ .ig-text {
+ color: @white !important;
+ border-color: rgba(255,255,255,0.1) !important;
+ }
+
+ .ig-helpers {
+ &:before,
+ &:after {
+ background-color: #dfdfdf;
+ height: 1px;
+ }
+ }
}
+.ig-left {
+ .ig-label,
+ .ig-text {
+ text-align: left;
+ }
+}
-// Helper (blue bar)
-.form-group__helper {
- position: absolute;
- bottom: 0;
- left: 0;
- height: 2px;
- width: 0;
- background-color: @blue;
- z-index: 1;
- .transition(width);
- .transition-duration(300ms);
+.ig-error {
+ .ig-label {
+ color: #E23F3F;
+ }
+ .ig-helpers i {
+ &:first-child,
+ &:first-child:before,
+ &:first-child:after {
+ background: rgba(226, 63, 63, 0.43);
+ }
+ &:last-child,
+ &:last-child:before,
+ &:last-child:after {
+ background: #E23F3F !important;
+ }
+ }
+ &:after {
+ content: "\f05a";
+ font-family: FontAwesome;
+ position: absolute;
+ top: 17px;
+ right: 9px;
+ font-size: 20px;
+ color: #D33D3E;
+ }
}
+.ig-search {
+ &:before {
+ font-family: @font-family-icon;
+ content: '\f002';
+ font-size: 15px;
+ position: absolute;
+ left: 2px;
+ top: 8px;
+ }
-// Form group with icons and addons
-.form-group--icon {
- .form-group__field {
- padding-left: 2.4rem;
+ .ig-text {
+ padding-left: 25px;
}
}
-.form-group__icon {
- font-size: 1.15rem;
- color: @headings-color;
- position: absolute;
- bottom: 0.6rem;
- left: 0.2rem;
+
+/*--------------------------
+ Share Spinners
+----------------------------*/
+.set-expire {
+ border: 1px solid @input-border;
+ margin: 35px 0 30px;
+ position: relative;
+
+ &:before {
+ content: '';
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 1;
+ }
}
-.form-group__addon {
- position: absolute;
- bottom: 0;
- right: 0;
- height: @input-height;
- border: 1px solid @input-border-color;
- width: 2.5rem;
+.set-expire-item {
+ padding: 9px 5px 3px;
+ position: relative;
+ display: table-cell;
+ width: 1%;
text-align: center;
- line-height: 2.5rem;
- background-color: @white;
- font-size: 1.25rem;
+ .user-select(none);
- &.active {
- color: @green;
+ &:not(:last-child) {
+ border-right: 1px solid @input-border;
}
}
+.set-expire-title {
+ font-size: 10px;
+ text-transform: uppercase;
+}
-// Select
-select {
- background-color: transparent;
- .appearance(none);
- border-radius: 0;
- background: url(../../img/icons/select-caret.svg) no-repeat bottom 5px right 1px;
+.set-expire-value {
+ display: inline-block;
+ overflow: hidden;
+ position: relative;
+ left: -8px;
+
+ input {
+ .user-select(none);
+ font-size: 20px;
+ text-align: center;
+ position: relative;
+ right: -15px;
+ border: 0;
+ color: @text-strong-color;
+ padding: 0;
+ height: 25px;
+ width: 100%;
+ font-weight: normal;
+ }
+}
+
+.set-expire-decrease,
+.set-expire-increase {
+ position: absolute;
+ width: 20px;
+ height: 20px;
+ background: url(../../img/arrow.svg) no-repeat center;
+ background-size: 85%;
+ left: 50%;
+ margin-left: -10px;
+ .opacity(0.2);
+ cursor: pointer;
+
+ &:hover {
+ .opacity(0.5);
+ }
+}
+
+.set-expire-increase {
+ top: -25px;
+}
+
+.set-expire-decrease {
+ bottom: -27px;
+ .rotate(-180deg);
}
\ No newline at end of file
diff --git a/browser/app/less/inc/generics.less b/browser/app/less/inc/generics.less
new file mode 100644
index 000000000..1c46dfc60
--- /dev/null
+++ b/browser/app/less/inc/generics.less
@@ -0,0 +1,83 @@
+/*----------------------------
+ Text Alignment
+-----------------------------*/
+.text-center { text-align: center !important; }
+.text-left { text-align: left !important; }
+.text-right { text-align: right !important; }
+
+
+/*----------------------------
+ Float
+-----------------------------*/
+.clearfix { .clearfix(); }
+.pull-right { float: right !important; }
+.pull-left { float: left !important; }
+
+
+/*----------------------------
+ Position
+-----------------------------*/
+.p-relative { position: relative; }
+
+
+/*---------------------------------------------------------------------------
+ Generate Margin Class
+ margin, margin-top, margin-bottom, margin-left, margin-right
+----------------------------------------------------------------------------*/
+
+.margin (@label, @size: 1, @key:1) when (@size =< 30){
+ .m-@{key} {
+ margin: @size !important;
+ }
+
+ .m-t-@{key} {
+ margin-top: @size !important;
+ }
+
+ .m-b-@{key} {
+ margin-bottom: @size !important;
+ }
+
+ .m-l-@{key} {
+ margin-left: @size !important;
+ }
+
+ .m-r-@{key} {
+ margin-right: @size !important;
+ }
+
+ .margin(@label - 5; @size + 5; @key + 5);
+}
+
+.margin(25, 0px, 0);
+
+
+/*---------------------------------------------------------------------------
+ Generate Padding Class
+ padding, padding-top, padding-bottom, padding-left, padding-right
+----------------------------------------------------------------------------*/
+.padding (@label, @size: 1, @key:1) when (@size =< 30){
+ .p-@{key} {
+ padding: @size !important;
+ }
+
+ .p-t-@{key} {
+ padding-top: @size !important;
+ }
+
+ .p-b-@{key} {
+ padding-bottom: @size !important;
+ }
+
+ .p-l-@{key} {
+ padding-left: @size !important;
+ }
+
+ .p-r-@{key} {
+ padding-right: @size !important;
+ }
+
+ .padding(@label - 5; @size + 5; @key + 5);
+}
+
+.padding(25, 0px, 0);
\ No newline at end of file
diff --git a/browser/app/less/inc/header.less b/browser/app/less/inc/header.less
index 9690a0217..436fc4e41 100644
--- a/browser/app/less/inc/header.less
+++ b/browser/app/less/inc/header.less
@@ -1,64 +1,247 @@
-// Base
-.header {
- z-index: @header-z-index;
+/*--------------------------
+ Header
+----------------------------*/
+.fe-header {
+ @media(min-width: (@screen-sm-min - 100)) {
+ position: relative;
+ padding: 40px 40px 20px 45px;
+ }
+
+ @media(max-width: (@screen-xs-max - 100)) {
+ padding: 20px;
+ }
+
+ h2 {
+ font-size: 16px;
+ font-weight: normal;
+ margin: 0;
+
+ & > span {
+ margin-bottom: 7px;
+ display: inline-block;
+
+ &:not(:first-child) {
+ &:before {
+ content: '/';
+ margin: 0 4px;
+ color: @text-color;
+ }
+ }
+ &:last-child {
+ &:after {
+ content: '/';
+ margin: 0 4px;
+ color: @text-color;
+ }
+ }
+ }
+ }
+
+ p {
+ margin-top: 7px;
+ }
}
-// Toolbar
-.toolbar {
- background-color: @toolbar-bg;
- height: @toolbar-height;
- display: flex;
- align-items: center;
- @media(min-width: @screen-sm-min) {
- padding: 0 1.25rem 0;
+/*--------------------------
+ Disk usage
+----------------------------*/
+.feh-usage {
+ margin-top: 12px;
+ max-width: 285px;
+
+ @media(max-width: (@screen-xs-max - 100px)) {
+ max-width: 100%;
+ font-size: 12px;
}
- @media(max-width: @screen-xs-max) {
- padding: 0 0.7rem;
+ & > ul {
+ margin-top: 7px;
+ list-style: none;
+ padding: 0;
+
+ & > li {
+ padding-right: 0;
+ display: inline-block;
+ }
}
}
-.toolbar__item {
- &:not(.toolbar__item--alt) {
- color: @text-color;
- font-size: 1.25rem;
- width: 2.6rem;
- height: 2.6rem;
- border-radius: 50%;
- text-align: center;
- vertical-align: middle;
+.fehu-chart {
+ height: 5px;
+ background: #eee;
+ position: relative;
+ border-radius: 2px;
+ overflow: hidden;
+
+ & > div {
+ position: absolute;
+ left: 0;
+ height: 100%;
+ background: @link-color;
+ }
+}
+
+/*--------------------------
+ Header Actions
+----------------------------*/
+.feh-actions {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ position: absolute;
+ right: 35px;
+ top: 30px;
+ z-index: 11;
+
+ @media(max-width: (@screen-sm-max)) {
+ top: 7px;
+ right: 10px;
+ position: fixed;
+ }
+
+ & > li {
display: inline-block;
- margin: -0.1rem 0 0 0.5rem;
+ text-align: right;
+ vertical-align: top;
+ line-height: 100%;
+
+ & > a,
+ & > .btn-group > button {
+ display: block;
+ height: 45px;
+ min-width: 45px;
+ text-align: center;
+ border-radius: 50%;
+ padding: 0;
+ border: 0;
+ background: none;
- &:not(:disabled) {
- cursor: pointer;
+ @media(min-width: @screen-md-min) {
+ color: #7B7B7B;
+ font-size: 21px;
+ line-height: 45px;
+ .transition(all);
+ .transition-duration(300ms);
+
+ &:hover {
+ background: rgba(0,0,0,0.09);
+ }
+ }
+
+ @media(max-width: (@screen-sm-max)) {
+ background: url(../../img/more-h-light.svg) no-repeat center;
+
+ .fa-reorder {
+ display: none;
+ }
+ }
+
+ }
+ }
+}
+
+
+/*--------------------------
+ Mobile Header
+----------------------------*/
+@media(max-width: @screen-sm-max) {
+ .fe-header-mobile {
+ background-color: @dark-gray;
+ padding: 10px 50px 9px 12px;
+ text-align: center;
+ position: fixed;
+ z-index: 10;
+ box-shadow: 0 0 10px rgba(0,0,0,0.3);
+ left: 0;
+ top: 0;
+ width: 100%;
+
+ .mh-logo {
+ height: 35px;
+ position: relative;
+ top: 4px;
+ }
+ }
+
+ .feh-trigger {
+ width: 41px;
+ height: 41px;
+ cursor: pointer;
+ float: left;
+ position: relative;
+ text-align: center;
+
+ &:before,
+ &:after {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border-radius: 50%;
+
+ }
+
+ &:after {
+ z-index: 1;
+ }
+
+ &:before {
+ background: rgba(255, 255, 255, 0.1);
.transition(all);
.transition-duration(300ms);
+ .scale(0);
+ }
+ }
- &:hover {
- background-color: fade(@white, 50%);
- color: darken(@text-color, 10%);
- }
+ .feht-toggled {
+ &:before {
+ .scale(1);
}
- &:disabled {
- opacity: 0.3;
+ .feht-lines {
+ .rotate(180deg);
+
+ & > div {
+ &.top {
+ width: 12px;
+ transform: translateX(8px) translateY(1px) rotate(45deg);
+ -webkit-transform: translateX(8px) translateY(1px) rotate(45deg);
+ }
+
+ &.bottom {
+ width: 12px;
+ transform: translateX(8px) translateY(-1px) rotate(-45deg);
+ -webkit-transform: translateX(8px) translateY(-1px) rotate(-45deg);
+ }
+ }
}
+ }
- &:first-child {
- margin-left: 0;
+ .feht-lines,
+ .feht-lines > div {
+ .transition(all);
+ .transition-duration(300ms);
+ }
+
+ .feht-lines {
+ width: 18px;
+ height: 12px;
+ display: inline-block;
+ margin-top: 14px;
+
+ & > div {
+ background-color: #EAEAEA;
+ width: 18px;
+ height: 2px;
+
+ &.center {
+ margin: 3px 0;
+ }
}
}
}
-.toolbar__item--alt {
- align-self: center;
- margin-left: 0.75rem;
-}
-.toolbar__end {
- margin: 0 -0.5rem 0 auto;
- display: flex;
- align-content: center;
-}
\ No newline at end of file
diff --git a/browser/app/less/inc/ie-warning.less b/browser/app/less/inc/ie-warning.less
new file mode 100644
index 000000000..c4bcc0a50
--- /dev/null
+++ b/browser/app/less/inc/ie-warning.less
@@ -0,0 +1,81 @@
+.ie-warning {
+ background-color: #ff5252;
+ width: 100%;
+ height: 100%;
+ position: fixed;
+ left: 0;
+ top: 0;
+ text-align: center;
+
+ &:before {
+ width: 1px;
+ content: '';
+ height: 100%;
+ }
+
+ &:before,
+ .iw-inner {
+ display: inline-block;
+ vertical-align: middle;
+ }
+}
+
+.iw-inner {
+ width: 470px;
+ height: 300px;
+ background-color: @white;
+ border-radius: 5px;
+ padding: 40px;
+ position: relative;
+
+ ul {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ width: 230px;
+ margin-left: 80px;
+ margin-top: 16px;
+
+ & > li {
+ float: left;
+
+ & > a {
+ display: block;
+ padding: 10px 15px 7px;
+ font-size: 14px;
+ margin: 0 1px;
+ border-radius: 3px;
+
+ &:hover {
+ background: #eee;
+ }
+
+ img {
+ height: 40px;
+ margin-bottom: 5px;
+ }
+ }
+ }
+ }
+}
+
+.iwi-icon {
+ color: #ff5252;
+ font-size: 40px;
+ display: block;
+ line-height: 100%;
+ margin-bottom: 15px;
+}
+
+.iwi-skip {
+ position: absolute;
+ left: 0;
+ bottom: -35px;
+ width: 100%;
+ color: rgba(255, 255, 255, 0.6);
+ cursor: pointer;
+
+ &:hover {
+ color: @white;
+ }
+}
\ No newline at end of file
diff --git a/browser/app/less/inc/layout.less b/browser/app/less/inc/layout.less
deleted file mode 100644
index adc7faadf..000000000
--- a/browser/app/less/inc/layout.less
+++ /dev/null
@@ -1,21 +0,0 @@
-.content {
- display: flex;
- flex-direction: column;
- height: 100vh;
-
- @media(min-width: @screen-md-min) {
- padding: 0 0 0 @sidebar-width;
- .transition(padding);
- .transition-duration(200ms);
- }
-
- @media(max-width: @screen-sm-max) {
- padding: 0;
- }
-}
-
-.sidebar--toggled {
- & + .content {
- padding-left: 0;
- }
-}
\ No newline at end of file
diff --git a/browser/app/less/inc/list.less b/browser/app/less/inc/list.less
new file mode 100644
index 000000000..88860bf99
--- /dev/null
+++ b/browser/app/less/inc/list.less
@@ -0,0 +1,486 @@
+/*--------------------------
+ Row
+----------------------------*/
+.fesl-row {
+ position: relative;
+
+ @media (min-width: (@screen-sm-min - 100px)) {
+ padding: 5px 20px 5px 40px;
+ display: flex;
+ flex-flow: row nowrap;
+ justify-content: space-between;
+ }
+
+ @media(max-width: (@screen-xs-max - 100px)) {
+ padding: 5px 20px;
+ }
+
+ .clearfix();
+}
+
+header.fesl-row {
+ @media (min-width:(@screen-sm-min - 100px)) {
+ margin-bottom: 20px;
+ border-bottom: 1px solid lighten(@text-muted-color, 20%);
+ padding-left: 30px;
+
+ .fesl-item,
+ .fesli-sort {
+ .transition(all);
+ .transition-duration(300ms);
+ }
+
+ .fesl-item {
+ cursor: pointer;
+ color: @text-color;
+ font-weight: 500;
+ margin-bottom: -5px;
+
+ & > .fesli-sort {
+ float: right;
+ margin: 4px 0 0;
+ .opacity(0);
+ color: @dark-gray;
+ font-size: 14px;
+ }
+
+ &:hover:not(.fesl-item-actions) {
+ background: lighten(@text-muted-color, 22%);
+ color: @dark-gray;
+
+ & > .fesli-sort {
+ .opacity(0.5);
+ }
+ }
+ }
+ }
+
+ @media (max-width:(@screen-xs-max - 100px)) {
+ display: none;
+ }
+}
+
+.list-type(@background, @icon) {
+ .fis-icon {
+ background-color: @background;
+
+ &:before {
+ content: @icon;
+ }
+ }
+}
+
+div.fesl-row {
+ border-bottom: 1px solid transparent;
+ cursor: default;
+ .transition(background-color);
+ .transition-duration(500ms);
+
+ @media (max-width: (@screen-xs-max - 100px)) {
+ padding: 5px 20px;
+ }
+
+ &:not(.fesl-row-selected) {
+ &:nth-child(even) {
+ background-color: @list-row-even-bg;
+ }
+ }
+
+ &:hover {
+ .fis-icon {
+ &:before {
+ .opacity(0)
+ }
+ }
+
+ .fis-helper {
+ &:before {
+ .opacity(1);
+ }
+ }
+ }
+
+ /*--------------------------
+ Icons
+ ----------------------------*/
+ &[data-type=folder] { .list-type(#a1d6dd, '\f114'); }
+ &[data-type=pdf] {.list-type(#fa7775, '\f1c1'); }
+ &[data-type=zip] { .list-type(#427089, '\f1c6'); }
+ &[data-type=audio] { .list-type(#009688, '\f1c7'); }
+ &[data-type=code] { .list-type(#997867, "\f1c9"); }
+ &[data-type=excel] { .list-type(#64c866, '\f1c3'); }
+ &[data-type=image] { .list-type(#f06292, '\f1c5'); }
+ &[data-type=video] { .list-type(#f8c363, '\f1c8'); }
+ &[data-type=other] { .list-type(#afafaf, '\f016'); }
+ &[data-type=text] { .list-type(#8a8a8a, '\f0f6'); }
+ &[data-type=doc] { .list-type(#2196f5, '\f1c2'); }
+ &[data-type=presentation] { .list-type(#896ea6, '\f1c4'); }
+
+ &.fesl-loading{
+ &:before {
+ content: '';
+ }
+
+ &:after {
+ .list-loader(20px, 20px, rgba(255, 255, 255, 0.5), @white);
+ left: 57px;
+ top: 17px;
+
+ @media (max-width: (@screen-xs-max - 100px)) {
+ left: 27px;
+ }
+ }
+
+ }
+}
+
+.fesl-row-selected {
+ background-color: @list-row-selected-bg;
+
+ &, .fesl-item a {
+ color: darken(@text-color, 10%);
+ }
+}
+
+.fi-select {
+ float: left;
+ position: relative;
+ width: 35px;
+ height: 35px;
+ margin: 3px 0;
+
+ @media(max-width: (@screen-xs-max - 100px)) {
+ margin-right: 15px;
+ }
+
+ input {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 35px;
+ height: 35px;
+ z-index: 8;
+ opacity: 0;
+ cursor: pointer;
+
+ &:checked {
+ & ~ .fis-icon {
+ background-color: #32393F;
+
+ &:before {
+ opacity: 0;
+ }
+ }
+
+ & ~ .fis-helper {
+ &:before {
+ .scale(0);
+ }
+
+ &:after {
+ .scale(1);
+ }
+ }
+ }
+ }
+}
+
+.fis-icon {
+ display: inline-block;
+ vertical-align: top;
+ border-radius: 50%;
+ width: 35px;
+ height: 35px;
+ .transition(background-color);
+ .transition-duration(250ms);
+
+ &:before {
+ width: 100%;
+ height: 100%;
+ text-align: center;
+ position: absolute;
+ border-radius: 50%;
+ font-family: @font-family-icon;
+ line-height: 35px;
+ font-size: 16px;
+ color: @white;
+ .transition(all);
+ .transition-duration(300ms);
+ font-style: normal;
+ }
+}
+
+.fis-helper {
+ &:before,
+ &:after {
+ position: absolute;
+ .transition(all);
+ .transition-duration(250ms);
+ }
+
+ &:before {
+ content: '';
+ width: 15px;
+ height: 15px;
+ border: 2px solid @white;
+ z-index: 7;
+ border-radius: 2px;
+ top: 10px;
+ left: 10px;
+ opacity: 0;
+ }
+
+ &:after {
+ font-family: @font-family-icon;
+ content: '\f00c';
+ top: 8px;
+ left: 9px;
+ color: @white;
+ font-size: 14px;
+ .scale(0);
+ }
+}
+
+
+/*--------------------------
+ Files and Folders
+----------------------------*/
+.fesl-item {
+ display: block;
+
+ a {
+ color: darken(@text-color, 5%);
+ }
+
+ @media(min-width: (@screen-sm-min - 100px)) {
+ &:not(.fesl-item-actions):not(.fesl-item-icon) {
+ text-overflow: ellipsis;
+ padding: 10px 15px;
+ white-space: nowrap;
+ overflow: hidden;
+ }
+
+ &.fesl-item-name {
+ flex: 3;
+ }
+
+ &.fesl-item-size {
+ width: 140px;
+ }
+
+ &.fesl-item-modified {
+ width: 190px;
+ }
+
+ &.fesl-item-actions {
+ width: 40px;
+ }
+ }
+
+ @media(max-width: (@screen-xs-max - 100px)) {
+ padding: 0;
+
+ &.fesl-item-name {
+ width: 100%;
+ margin-bottom: 3px;
+ }
+
+ &.fesl-item-size,
+ &.fesl-item-modified {
+ font-size: 12px;
+ color: #B5B5B5;
+ float: left;
+ }
+
+ &.fesl-item-modified {
+ max-width: 72px;
+ white-space: nowrap;
+ overflow: hidden;
+ }
+
+ &.fesl-item-size {
+ margin-right: 10px;
+ }
+
+ &.fesl-item-actions {
+ position: absolute;
+ top: 5px;
+ right: 10px;
+ }
+ }
+}
+
+
+/*--------------------------
+ Action buttons
+----------------------------*/
+.fia-toggle {
+ height: 36px;
+ width: 36px;
+ background: transparent url(../../img/more-h.svg) no-repeat center;
+ position: relative;
+ top: 3px;
+ .opacity(0.4);
+
+ &:hover {
+ .opacity(0.7);
+ }
+}
+
+.fesl-item-actions {
+ .dropdown-menu {
+ background-color: transparent;
+ box-shadow: none;
+ padding: 0;
+ right: 38px;
+ left: auto;
+ margin: 0;
+ height: 100%;
+ text-align: right;
+ }
+
+ .dropdown {
+ &.open {
+ .dropdown-menu {
+ .fiad-action {
+ right: 0;
+ }
+ }
+ }
+ }
+}
+
+.fiad-action {
+ height: 35px;
+ width: 35px;
+ background: @amber;
+ display: inline-block;
+ border-radius: 50%;
+ text-align: center;
+ line-height: 35px;
+ font-weight: normal;
+ position: relative;
+ top: 4px;
+ margin-left: 5px;
+ .animation-name(fiad-action-anim);
+ .transform-origin(center center);
+ .backface-visibility(none);
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+
+ &:nth-child(2) {
+ .animation-duration(100ms);
+ }
+
+ &:nth-child(1) {
+ .animation-duration(250ms);
+ }
+
+ & > i {
+ font-size: 14px;
+ color: @white;
+ }
+
+ &:hover {
+ background-color: darken(@amber, 3%);
+ }
+}
+
+.list-actions {
+ position: fixed;
+ .translate3d(0, -100%, 0);
+ .opacity(0);
+ .transition(all);
+ .transition-duration(200ms);
+ padding: 20px 70px 20px 25px;
+ top: 0;
+ left: 0;
+ width: 100%;
+ background-color: @brand-primary;
+ z-index: 20;
+ box-shadow: 0 0 10px rgba(0,0,0,0.3);
+ text-align: center;
+
+ &.list-actions-toggled {
+ .translate3d(0, 0, 0);
+ .opacity(1);
+ }
+}
+
+.la-close {
+ position: absolute;
+ right: 20px;
+ top: 0;
+ color: #fff;
+ width: 30px;
+ height: 30px;
+ border-radius: 50%;
+ text-align: center;
+ line-height: 30px !important;
+ background: rgba(255, 255, 255, 0.1);
+ font-weight: normal;
+ bottom: 0;
+ margin: auto;
+ cursor: pointer;
+
+ &:hover {
+ background-color: rgba(255, 255, 255, 0.2);
+ }
+}
+
+.la-label {
+ color: @white;
+ float: left;
+ padding: 4px 0;
+
+ .fa {
+ font-size: 22px;
+ vertical-align: top;
+ margin-right: 10px;
+ margin-top: -1px;
+ }
+}
+
+.la-actions {
+ button {
+ background-color: transparent;
+ border: 2px solid rgba(255,255,255,0.9);
+ color: @white;
+ border-radius: 2px;
+ padding: 5px 10px;
+ font-size: 13px;
+ .transition(all);
+ .transition-duration(300ms);
+ margin-left: 10px;
+
+ &:hover {
+ background-color: @white;
+ color: @brand-primary;
+ }
+ }
+}
+
+@-webkit-keyframes fiad-action-anim {
+ from {
+ .scale(0);
+ .opacity(0);
+ right: -20px;
+ }
+ to {
+ .scale(1);
+ .opacity(1);
+ right: 0;
+ }
+}
+
+@keyframes fiad-action-anim {
+ from {
+ .scale(0);
+ .opacity(0);
+ right: -20px;
+ }
+ to {
+ .scale(1);
+ .opacity(1);
+ right: 0;
+ }
+}
\ No newline at end of file
diff --git a/browser/app/less/inc/login.less b/browser/app/less/inc/login.less
index 7ad51a0ec..7e86faa0d 100644
--- a/browser/app/less/inc/login.less
+++ b/browser/app/less/inc/login.less
@@ -1,86 +1,104 @@
.login {
height: 100vh;
- padding: 1.5rem;
+ min-height: 500px;
+ background: @dark-gray;
+
text-align: center;
- display: flex;
- align-items: center;
- justify-content: center;
+ &:before {
+ height: ~"calc(100% - 110px)";
+ width: 1px;
+ content: "";
+ }
}
-.login__inner {
- max-width: 400px;
- width: 90%;
- flex-shrink: 0;
+.l-wrap,
+.login:before {
+ display: inline-block;
+ vertical-align: middle;
}
-.login__header {
- margin-bottom: 1rem;
+.l-wrap {
+ width: 80%;
+ max-width: 500px;
+ margin-top: -50px;
+ &.toggled {
+ display: inline-block;
+ }
+
+ .input-group:not(:last-child) {
+ margin-bottom: 40px;
+ }
}
-.login__form {
- background-color: @white;
- padding: 2rem;
+.l-footer {
+ height: 110px;
+ padding: 0 50px;
+}
- .form-group__field {
- text-align: center;
+.lf-logo {
+ float: right;
+ img {
+ width: 40px;
}
}
-.login__logo {
- width: 2rem;
+.lf-server {
+ float: left;
+ color: rgba(255, 255, 255, 0.4);
+ font-size: 20px;
+ font-weight: 400;
+ padding-top: 40px;
}
-.login__host {
- color: @text-muted-color;
- margin-top: -0.5rem;
- font-size: @font-size-small;
+@media (max-width: @screen-sm-min) {
+ .lf-logo,
+ .lf-server {
+ float: none;
+ display: block;
+ text-align: center;
+ width: 100%;
+ }
+
+ .lf-logo {
+ margin-bottom: 5px;
+ }
+
+ .lf-server {
+ font-size: 15px;
+ }
}
-.login__btn {
- margin-top: 0.5rem;
- width: 2.6rem;
- height: 2.6rem;
- line-height: 100%;
+.lw-btn {
+ width: 50px;
+ height: 50px;
+ border: 1px solid @white;
+ display: inline-block;
border-radius: 50%;
- background-color: transparent;
- border: 1px solid darken(@input-border-color, 5%);
+ font-size: 22px;
+ color: @white;
.transition(all);
- .transition-duration(500ms);
- position: relative;
- overflow: hidden;
-
+ .transition-duration(300ms);
+ opacity: 0.3;
+ background-color: transparent;
+ line-height: 45px;
+ padding: 0;
&:hover {
- border-color: darken(@input-border-color, 15%);
-
- &:before {
- left: 2.6rem;
- .opacity(0);
- }
-
- &:after {
- .opacity(1);
- left: 0;
- }
+ color: @white;
+ opacity: 0.8;
+ border-color: @white;
}
- &:before,
- &:after {
- display: flex;
- align-items: center;
- justify-content: center;
- content: '\f301';
- font-family: @font-family-icon;
- position: absolute;
- left: 0;
- top: 0;
+ i {
+ display: block;
width: 100%;
- height: 100%;
- .transition(all);
- .transition-duration(300ms);
+ padding-left: 3px;
}
+}
- &:after {
- left: -2.6rem;
- .opacity(0);
- }
+/*------------------------------
+ Chrome autofill fix
+-------------------------------*/
+input:-webkit-autofill {
+ -webkit-box-shadow:0 0 0 50px @dark-gray inset !important;
+ -webkit-text-fill-color: @white !important;
}
\ No newline at end of file
diff --git a/browser/app/less/inc/misc.less b/browser/app/less/inc/misc.less
index 59194787a..8359d426d 100644
--- a/browser/app/less/inc/misc.less
+++ b/browser/app/less/inc/misc.less
@@ -1,3 +1,116 @@
-.sr-only {
+/*--------------------------
+ Close
+----------------------------*/
+.close-variant(@color, @bg-color, @color-hover, @bg-color-hover) {
+ span {
+ background-color: @bg-color;
+ color: @color;
+ }
+
+ &:hover,
+ &:focus {
+ span {
+ background-color: @bg-color-hover;
+ color: @color-hover;
+ }
+ }
+}
+
+.close {
+ right: 15px;
+ font-weight: normal;
+ opacity: 1;
+ font-size: 18px;
+ position: absolute;
+ text-align: center;
+ top: 16px;
+ z-index: 1;
+ padding: 0;
+ border: 0;
+ background-color: transparent;
+
+ span {
+ width: 25px;
+ height: 25px;
+ display: block;
+ border-radius: 50%;
+ line-height: 24px;
+ text-shadow: none;
+ }
+
+ &:not(.close-alt) {
+ .close-variant(rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.1), @white, rgba(255, 255, 255, 0.2));
+ }
+}
+
+.close-alt {
+ .close-variant(#989898, #efefef, #7b7b7b, #e8e8e8);
+}
+
+
+/*--------------------------
+ Hidden
+----------------------------*/
+.hidden {
display: none !important;
+}
+
+
+/*--------------------------
+ Copy text
+----------------------------*/
+.copy-text {
+ input {
+ width: 100%;
+ border-radius: 1px;
+ border: 1px solid @input-border;
+ padding: 7px 12px;
+ font-size: 13px;
+ line-height: 100%;
+ cursor: text;
+ .transition(border-color);
+ .transition-duration(300ms);
+
+ &:hover {
+ border-color: darken(@input-border, 5%);
+ }
+ }
+}
+
+/*--------------------------
+ Sharing
+----------------------------*/
+.share-availability {
+ margin-bottom: 40px;
+
+ &:before,
+ &:after {
+ position: absolute;
+ bottom: -30px;
+ font-size: 10px;
+ }
+
+ &:before {
+ content: '01 Sec';
+ left: 0;
+ }
+
+ &:after {
+ content: '7 days';
+ right: 0;
+ }
+}
+
+
+.modal-aheader {
+ height: 100px;
+
+ &:before {
+ height: 0 !important;
+ }
+
+ .modal-dialog {
+ margin: 0;
+ vertical-align: top;
+ }
}
\ No newline at end of file
diff --git a/browser/app/less/inc/mixin.less b/browser/app/less/inc/mixin.less
index 5829ee140..27a764817 100644
--- a/browser/app/less/inc/mixin.less
+++ b/browser/app/less/inc/mixin.less
@@ -1,4 +1,6 @@
-// User select
+/*--------------------------
+ User Select
+----------------------------*/
.user-select(@value) {
-webkit-user-select: @value;
-moz-user-select: @value;
@@ -7,30 +9,9 @@
}
-// Font icons
-.font-icon(@icon) {
- font-family: @font-family-icon;
- content: @icon;
-}
-
-
-// Appearance
-.appearance(@value) {
- -webkit-appearance: @value;
- -moz-appearance: @value;
- appearance: @value;
-}
-
-
-// Scale and rotate
-.scale-rotate(@scale, @rotate) {
- -webkit-transform: scale(@scale) rotate(@rotate);
- -ms-transform: scale(@scale) rotate(@rotate);
- transform: scale(@scale) rotate(@rotate);
-}
-
-
-// CSS Animations
+/*----------------------------------------
+ CSS Animations based on animate.css
+-----------------------------------------*/
.animated(@name, @duration) {
-webkit-animation-name: @name;
animation-name: @name;
@@ -40,10 +21,32 @@
animation-fill-mode: both;
}
+/*-------------------------------------------------
+ For loop mixin for generate custom classes
+--------------------------------------------------*/
+.for(@i, @n) {.-each(@i)}
+.for(@n) when (isnumber(@n)) {.for(1, @n)}
+.for(@i, @n) when not (@i = @n) {
+ .for((@i + (@n - @i) / abs(@n - @i)), @n);
+}
-// Scale3D
-.scale3d(@x, @y, @z) {
- -webkit-transform: scale3d(@x, @y, @z);
- -ms-transform: scale3d(@x, @y, @z);
- transform: scale3d(@x, @y, @z);
-}
\ No newline at end of file
+.for(@array) when (default()) {.for-impl_(length(@array))}
+.for-impl_(@i) when (@i > 1) {.for-impl_((@i - 1))}
+.for-impl_(@i) when (@i > 0) {.-each(extract(@array, @i))}
+
+/*----------------------------------------
+ List Loader
+-----------------------------------------*/
+.list-loader(@width, @height, @borderColor, @borderColorBottom) {
+ content: '';
+ width: @width;
+ height: @height;
+ border-radius: 50%;
+ .animated(zoomIn, 500ms);
+ border: 2px solid @borderColor;
+ border-bottom-color: @borderColorBottom;
+ position: absolute;
+ z-index: 1;
+ -webkit-animation: zoomIn 250ms, spin 700ms 250ms infinite linear;
+ animation: zoomIn 250ms, spin 700ms 250ms infinite linear;
+}
diff --git a/browser/app/less/inc/modal.less b/browser/app/less/inc/modal.less
index 3c3cb367a..6d66ffa77 100644
--- a/browser/app/less/inc/modal.less
+++ b/browser/app/less/inc/modal.less
@@ -1,64 +1,294 @@
-// Base
+/*--------------------------
+ Modal
+----------------------------*/
.modal {
- .close {
- top: 1.5rem;
- right: 1.5rem;
+ @media(min-width: @screen-sm-min) {
+ text-align: center;
+
+ &:before {
+ content: '';
+ height: 100%;
+ width: 1px;
+ display: inline-block;
+ vertical-align: middle;
+ }
+
+ .modal-dialog {
+ text-align: left;
+ margin: 10px auto;
+ display: inline-block;
+ vertical-align: middle;
+ }
+ }
+}
+
+.modal-dark {
+ .modal-header {
+ color: rgba(255, 255, 255, 0.4);
+
+ small {
+ color: rgba(255, 255, 255, 0.2);
+ }
+ }
+
+ .modal-content {
+ background-color: @dark-gray;
}
}
+.modal-backdrop {
+ .animated(fadeIn, 200ms);
+}
+
.modal-dialog {
.animated(zoomIn, 200ms);
}
.modal-header {
- color: @headings-color;
+ color: @text-strong-color;
+ position: relative;
- & > small {
+ small {
display: block;
- margin-top: 0.25rem;
- color: @text-muted-color;
- font-size: @font-size-small;
+ text-transform: none;
+ font-size: 12px;
+ margin-top: 5px;
+ color: #a8a8a8;
}
}
.modal-content {
- box-shadow: 0 0 30px rgba(0, 0, 0, 0.04);
+ border-radius: 3px;
+ box-shadow: none;
}
.modal-footer {
- text-align: left;
- padding-top: 1rem;
+ padding: 0 30px 30px;
+ text-align: center;
+}
+
+
+/*--------------------------
+ Dialog
+----------------------------*/
+.modal-confirm {
+ .modal-dialog {
+ text-align: center;
+ }
+}
+
+.mc-icon {
+ margin: 0 0 10px;
+
+ & > i {
+ font-size: 60px;
+ }
+}
+
+.mci-red {
+ color: #ff8f8f;
+}
+
+.mci-amber {
+ color: @amber;
+}
+
+.mci-green {
+ color: #64e096;
+}
+
+.mc-text {
+ color: @text-strong-color;
+}
+
+.mc-sub {
+ color: @text-muted-color;
+ margin-top: 5px;
+ font-size: 13px;
+}
+//--------------------------
+
+
+/*--------------------------
+ About
+----------------------------*/
+.modal-about {
+ @media (max-width: @screen-xs-max) {
+ text-align: center;
- .btn--link {
- &:first-child {
- margin-left: -0.5rem;
+ .modal-dialog {
+ max-width: 400px;
+ width: 90%;
+ margin: 20px auto 0;
}
}
}
+.ma-inner {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ min-height: 350px;
+ position: relative;
-// Dialog
-.dialog {
+ @media (min-width: @screen-sm-min) {
+ &:before {
+ content: '';
+ width: 150px;
+ height: 100%;
+ top: 0;
+ left: 0;
+ position: absolute;
+ border-radius: 3px 0 0px 3px;
+ background-color: #23282C;
+ }
+ }
+}
+
+.mai-item {
+ &:first-child {
+ width: 150px;
+ text-align: center;
+ }
+
+ &:last-child {
+ flex: 4;
+ padding: 30px;
+ }
+}
+
+.maii-logo {
+ width: 70px;
+ position: relative;
+
+}
+
+.maii-list {
+ list-style: none;
+ padding: 0;
+
+ & > li {
+ margin-bottom: 15px;
+
+ div {
+ color: rgba(255, 255, 255, 0.8);
+ text-transform: uppercase;
+ font-size: 14px;
+ }
+
+ small {
+ font-size: 13px;
+ color: rgba(255, 255, 255, 0.4);
+ }
+ }
+}
+//--------------------------
+
+
+/*--------------------------
+ Preferences
+----------------------------*/
+.toggle-password {
+ position: absolute;
+ bottom: 30px;
+ right: 35px;
+ width: 30px;
+ height: 30px;
+ border: 1px solid #eee;
+ border-radius: 0;
text-align: center;
+ cursor: pointer;
+ z-index: 10;
+ background-color: @white;
+ padding-top: 5px;
+
+ &.toggled {
+ background: #eee;
+ }
}
+//--------------------------
+
-.dialog__icon {
- color: @red;
- font-size: 3rem;
- line-height: 100%;
- margin-bottom: 0.5rem;
+/*--------------------------
+ Policy
+----------------------------*/
+.pm-body {
+ padding-bottom: 30px;
}
-.dialog__text{
- color: @headings-color;
+.pmb-header {
+ margin-bottom: 35px;
}
-.dialog__sub {
- margin-top: 0.25rem;
- font-size: @font-size-small;
- color: @text-muted-color;
+.pmb-list {
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+ justify-content: center;
+ padding: 10px 35px;
+
+ &:nth-child(even) {
+ background-color: #F7F7F7;
+ }
+
+ .form-control {
+ padding-left: 0;
+ padding-right: 0;
+ }
+}
+
+header.pmb-list {
+ margin: 20px 0 10px;
+}
+
+.pmbl-item {
+ display: block;
+ font-size: 13px;
+
+ &:nth-child(1) {
+ flex: 2;
+ }
+
+ &:nth-child(2) {
+ margin: 0 25px;
+ width: 150px;
+ }
+
+ &:nth-child(3) {
+ width: 70px;
+ }
+}
+
+div.pmb-list {
+ select {
+ border: 0;
+ }
+
+ .pml-item {
+ &:not(:last-child) {
+ padding: 0 5px;
+ }
+ }
+}
+//--------------------------
+
+
+/*--------------------------
+ Create Bucket
+----------------------------*/
+.modal-create-bucket {
+ .modal-dialog {
+ position: fixed;
+ right: 25px;
+ bottom: 95px;
+ margin: 0;
+ height: 110px;
+ }
+
+ .modal-content {
+ width: 100%;
+ height: 100%;
+ }
}
+//--------------------------
-.dialog__actions {
- margin-top: 2rem;
-}
\ No newline at end of file
diff --git a/browser/app/less/inc/objects.less b/browser/app/less/inc/objects.less
deleted file mode 100644
index fe802a3ee..000000000
--- a/browser/app/less/inc/objects.less
+++ /dev/null
@@ -1,286 +0,0 @@
-.objects {
- height: 100%;
- flex: 1 1 auto;
- display: flex;
- flex-direction: column;
- overflow: hidden;
-}
-
-.objects__lists {
- flex: 1 1 auto;
- overflow: auto;
- position: relative;
-}
-
-.objects--active {
- .objects__lists {
- &:before,
- &:after {
- position: absolute;
- .animated(zoomIn, 300ms);
- }
-
- &:before {
- content: '';
- left: 1.5rem;
- top: 0.5rem;
- width: ~"calc(100% - 3rem)";
- height: ~"calc(100% - 2rem)";
- border: 2px dashed darken(@muted-bg, 50%);
- background-color: @body-bg;
- z-index: 11;
- opacity: 0.75;
- }
-
- &:after {
- content: 'Drop Your Files Here';
- font-size: 1.25rem;
- text-transform: uppercase;
- z-index: 12;
- position: absolute;
- left: 0;
- top: 0;
- bottom: 0;
- right: 0;
- margin: auto;
- width: 14.33rem;
- text-align: center;
- height: 1.8rem;
- }
- }
-}
-
-.objects__header {
- @media(min-width: @screen-sm-min) {
- color: @headings-color;
- text-transform: uppercase;
- font-weight: @font-weight-bold;
- font-size: @font-size-small;
- border-bottom: 1px solid darken(@muted-border, 3%);
- border-top: 1px solid darken(@muted-border, 3%);
- margin-bottom: 1rem;
-
- & > .objects__column {
- overflow: hidden;
- cursor: pointer;
- .transition(color);
- .transition-duration(300ms);
-
- &:hover {
- color: @text-color;
-
- .objects__sort {
- opacity: 1;
- }
- }
- }
- }
-}
-
-.objects__row {
- position: relative;
-
- @media (min-width: (@screen-sm-min)) {
- padding: 0 1.5rem;
- display: flex;
- flex-flow: row nowrap;
- align-items: center;
- flex-shrink: 0;
- }
-
- @media(max-width: @screen-xs-max) {
- padding: 1rem 1rem 1rem 4.25rem;
-
- &:nth-child(even) {
- background-color: @white;
- }
-
- &.objects__row--directory {
- .objects__column--size,
- .objects__column--date {
- display: none;
- }
- }
- }
-
- &:hover {
- &:not(.objects__header) {
- @media (min-width: @screen-sm-min) {
- background-color: @object-row-hover-bg;
- }
- }
-
- .objects__select {
- & > i {
- &:before {
- .scale(0);
- opacity: 0;
- }
-
- &:after {
- .scale(1);
- }
- }
- }
- }
-}
-
-.objects__column {
- position: relative;
-
- @media(min-width: @screen-sm-min) {
- padding: 0.8rem 0.5rem;
-
- &:not(.objects__column--name):not(.objects__column--select) {
- margin: 0 0 0 1.5rem;
- }
- }
-}
-
-.objects__column--select {
- @media(max-width: @screen-xs-max) {
- position: absolute;
- left: 1.25rem;
- top: 0;
- bottom: 0;
- height: 30px;
- margin: auto;
- }
-}
-
-.objects__select {
- position: relative;
- height: 30px;
- width: 30px;
-
- & > input[type="checkbox"],
- & > i,
- & > i:before,
- & > i:after {
- position: absolute;
- width: 100%;
- height: 100%;
- top: 0;
- left: 0;
- }
-
- & > input[type="checkbox"] {
- z-index: 2;
- opacity: 0;
-
- &:checked ~ i {
- &:before {
- .scale(0);
- }
-
- &:after {
- .scale(1);
- .font-icon('\f269');
- color: @headings-color;
- }
- }
- }
-
- & > i {
- font-style: normal;
-
- &:before,
- &:after {
- content: '';
- display: flex;
- align-items: center;
- justify-content: center;
- font-size: 1.6rem;
- color: @text-color;
- .transition(all);
- .transition-duration(200ms);
- }
-
- &:before {
- background-color: red;
- z-index: 1;
- border-radius: 50%;
- }
-
- &:after {
- .scale(0);
- .font-icon('\f26c');
-
- }
- }
-}
-
-.objects__column--name {
- overflow: hidden;
- .text-overflow();
-
- @media(min-width: @screen-sm-min) {
- flex: 1 1 auto;
- }
-
- & > a {
- color: @headings-color;
- display: block;
- }
-}
-
-@media(min-width: @screen-sm-min) {
- .objects__column--size {
- width: 6.5rem;
- }
-
- .objects__column--date {
- width: 11.5rem;
- }
-}
-
-@media(max-width: @screen-xs-max) {
- .objects__column--size,
- .objects__column--date {
- display: inline-block;
- font-size: @font-size-small;
- margin: 0.25rem 1rem 0 0;
- color: @text-muted-color;
- }
-}
-
-.objects__sort {
- position: absolute;
- bottom: 0.8rem;
- right: 0;
- opacity: 0;
- color: @text-color;
- font-size: 1rem;
- .transition(opacity);
- .transition-duration(300ms);
-}
-
-
-// File types
-.object-type(@color, @icon, @icon2x, @width, @height) {
- .objects__select {
- & > i {
- &:before {
- content: '';
- .img-retina('/../../img/icons/files/@{icon}.png', '/../../img/icons/files/@{icon2x}.png', @width, @height);
- background-color: @color;
- background-position: center;
- background-repeat: no-repeat;
- }
- }
- }
-}
-
-[data-object-type=folder] { .object-type(#65baff, 'folder', 'folder@2x', 14px, 12px); }
-[data-object-type=pdf] { .object-type(#fa7775, 'pdf', 'pdf@2x',16px, 15px); }
-[data-object-type=zip] { .object-type(#427089, 'zip', 'zip@2x', 16px, 26px); }
-[data-object-type=audio] { .object-type(#0fc5b4, 'audio', 'audio@2x', 16px, 14px); }
-[data-object-type=code] { .object-type(#c1a08f, 'code', 'code@2x', 17px, 14px); }
-[data-object-type=excel] { .object-type(#32c787, 'excel', 'excel@2x', 16px, 16px); }
-[data-object-type=image] { .object-type(#ff85af, 'image', 'image@2x', 16px, 8px); }
-[data-object-type=video] { .object-type(#f8c363, 'video', 'video@2x', 14px, 11px); }
-[data-object-type=other] { .object-type(#c1c1c1, 'other', 'other@2x', 12px, 9px); }
-[data-object-type=doc] { .object-type(#03A9F4, 'doc', 'doc@2x', 16px, 16px); }
-[data-object-type=presentation] { .object-type(#ac91ca, 'presentation', 'presentation@2x', 16px, 16px); }
-[data-object-type=text] { .object-type(#00BCD4, 'text', 'text@2x', 12px, 12px); }
-
diff --git a/browser/app/less/inc/path.less b/browser/app/less/inc/path.less
deleted file mode 100644
index 4eefd5431..000000000
--- a/browser/app/less/inc/path.less
+++ /dev/null
@@ -1,39 +0,0 @@
-.path {
- line-height: 100%;
- padding: 1.25rem 2rem 1.35rem;
-
- @media(max-width: @screen-xs-max) {
- padding: 1rem 2rem 0.75rem;
- }
-
- & > a {
- display: inline-block;
- vertical-align: middle;
- color: @path-link-color;
- .user-select(none);
- position: relative;
-
- &:not(:last-child) {
- &:hover {
- color: darken(@path-link-color, 10%);
- }
- }
-
- &:last-child {
- cursor: default;
- }
-
- & + a {
- margin-left: 35px;
-
- &:before {
- content: '\f2fb';
- font-family: @font-family-icon;
- color: @text-muted-color;
- position: absolute;
- left: -20px;
- top: 1px;
- }
- }
- }
-}
\ No newline at end of file
diff --git a/browser/app/less/inc/policy.less b/browser/app/less/inc/policy.less
deleted file mode 100644
index 994c8e651..000000000
--- a/browser/app/less/inc/policy.less
+++ /dev/null
@@ -1,37 +0,0 @@
-.policy__row {
- display: flex;
- padding: 0.4rem 2.25rem;
-
- &:not(.policy__row--add) {
- align-items: center;
- }
-
- &:first-child {
- margin-bottom: 1rem;
- }
-
- &:last-child {
- margin-bottom: 1.5rem;
- }
-
- & > .form-group {
- flex: 1 1 auto;
- margin: 0 1.5rem 0 0 !important;
- }
-
- & > .btn {
- width: 4.5rem;
- }
-
- &:nth-child(even) {
- background-color: @muted-bg;
- }
-}
-
-.policy__row--add {
- align-items: flex-end;
-}
-
-.policy__access {
- width: 5rem;
-}
\ No newline at end of file
diff --git a/browser/app/less/inc/share.less b/browser/app/less/inc/share.less
deleted file mode 100644
index 9523fd4ba..000000000
--- a/browser/app/less/inc/share.less
+++ /dev/null
@@ -1,81 +0,0 @@
-.set-expire {
- border: 2px solid @input-border-color;
- margin: 2rem 0 0;
- position: relative;
- display: flex;
-
- &:before {
- content: '';
- position: absolute;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- z-index: 1;
- }
-}
-
-.set-expire__item {
- padding: 0.85rem 0.2rem 0.25rem;
- position: relative;
- flex: 1 1 auto;
- text-align: center;
- .user-select(none);
-
- &:not(:last-child) {
- border-right: 2px solid @input-border-color;
- }
-}
-
-.set-expire__title {
- font-size: @font-size-extra-small;
- text-transform: uppercase;
- font-weight: @font-weight-bold;
- color: @text-muted-color;
-}
-
-.set-expire__value {
- display: inline-block;
- overflow: hidden;
- position: relative;
- left: -9px;
-
- input {
- .user-select(none);
- font-size: 1.35rem;
- text-align: center;
- position: relative;
- right: -15px;
- border: 0;
- padding: 0;
- height: 1.75rem;
- width: 100%;
- }
-}
-
-.set-expire__handle {
- position: absolute;
- width: 1.5rem;
- height: 1.5rem;
- left: 0;
- right: 0;
- margin: auto;
- opacity: 0.5;
- cursor: pointer;
- font-size: 1.65rem;
- .transition(opacity);
- .transition-duration(300ms);
-
- &:hover {
- opacity: 1;
- cursor: pointer;
- }
-
- &.zmdi-chevron-up {
- top: -1.8rem;
- }
-
- &.zmdi-chevron-down {
- bottom: -1.8rem;
- }
-}
\ No newline at end of file
diff --git a/browser/app/less/inc/sidebar.less b/browser/app/less/inc/sidebar.less
index dd382eda6..8df214f71 100644
--- a/browser/app/less/inc/sidebar.less
+++ b/browser/app/less/inc/sidebar.less
@@ -1,166 +1,210 @@
-// Base
-.sidebar {
- max-width: @sidebar-width;
- background-color: @sidebar-bg;
+/*--------------------------
+ Sidebar
+----------------------------*/
+.fe-sidebar {
+ width: @fe-sidebar-width;
+ background-color: @dark-gray;
position: fixed;
height: 100%;
- z-index: @sidebar-z-index;
- left: 0;
- top: 0;
- .transition(transform);
- .transition-duration(200ms);
-
- @media (min-width: @screen-md-min) {
- width: 100%;
+ overflow: hidden;
+ padding: 25px;
- &.sidebar--toggled {
- .translate3d((-@sidebar-width - 15px), 0, 0);
- }
+ @media(min-width: @screen-md-min) {
+ .translate3d(0, 0, 0);
}
- @media (max-width: @screen-sm-max) {
- width: 85%;
- box-shadow: 0 0 1.3rem rgba(0, 0, 0, 0.1);
- .translate3d((-@sidebar-width - 1rem), 0, 0);
+ @media(max-width: @screen-sm-max) {
+ padding-top: 85px;
+ z-index: 9;
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.65);
+ .transition(all);
+ .transition-duration(300ms);
+ .translate3d((-@fe-sidebar-width - 15px), 0, 0);
- &.sidebar--toggled {
+ &.toggled {
.translate3d(0, 0, 0);
}
}
-}
-.sidebar__inner {
- display: flex;
- flex-direction: column;
- height: 100%;
- z-index: 1;
-}
+ a {
+ color: rgba(255, 255, 255, 0.58);
-// Logo
-.logo {
- padding: @sidebar-padding;
- display: flex;
- flex-shrink: 0;
- align-items: flex-start;
- margin-bottom: 1.15rem;
+ &:hover {
+ color: @white;
+ }
+ }
}
-.logo__img {
- height: 4rem;
- margin: -0.6rem 0.55rem 0 -0.75rem;
-}
+/*--------------------------
+ Header
+----------------------------*/
+.fes-header {
+ margin-bottom: 40px;
-.logo__title {
- & > h2 {
- font-weight: @font-weight-normal;
- line-height: 100%;
- font-size: 1.33rem;
- margin: 0;
+ img,
+ h2 {
+ float: left;
+ }
+
+ h2 {
+ margin: 13px 0 0 10px;
+ font-weight: normal;
}
- & > small {
- display: block;
- margin-top: 0.33rem;
- padding-left: 1px;
- color: @text-muted-color;
- font-size: @font-size-small;
- max-width: @sidebar-width - 80;
- .text-overflow();
- }
+ img {
+ width: 32px;
+ }
}
+/*--------------------------
+ List
+----------------------------*/
+.fesl-inner {
+ height: ~"calc(100vh - 260px)";
+ overflow: auto;
+ padding: 0;
+ margin: 0 -25px;
+
+ & li {
+ position: relative;
+
+ & > a {
+ display: block;
+ padding: 10px 45px 12px 55px;
+ word-wrap: break-word;
+
+ &:before {
+ font-family: FontAwesome;
+ content: '\f0a0';
+ font-size: 17px;
+ position: absolute;
+ top: 10px;
+ left: 25px;
+ .opacity(0.8);
+ }
+
+ &.fesli-loading {
+ &:before {
+ .list-loader(20px, 20px, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.5));
+ left: 32px;
+ top: 0;
+ bottom: 0;
+ margin: auto;
+ }
+ }
+ }
-// Buckets
-.buckets {
- flex: 1 1 auto;
- overflow: auto;
- flex-shrink: 0;
-}
+ &.active {
+ background-color: #282e32;
-.buckets__search {
- padding: 0 @sidebar-padding;
- margin-bottom: 1rem;
-}
+ & > a {
+ color: @white;
+ }
+ }
-.buckets__list {
- height: calc(~"100vh - 246px");
- overflow: auto;
-}
+ &:not(.active):hover {
+ background-color: rgba(0, 0, 0, 0.1);
+
+ & > a {
+ color: @white;
+ }
+ }
+
+ &:hover {
+ .bucket-dropdown .dropdown-toggle {
+ .opacity(0.6);
-.buckets__item {
- padding: 0.8rem @sidebar-padding*1.2 0.8rem @sidebar-padding*2.2;
- background: url(../../img/icons/bucket.svg) no-repeat left 2.2rem center;
- position: relative;
- cursor: pointer;
- word-wrap: break-word;
-
- & > a {
- &, &:focus, &:hover {
- color: @headings-color;
- }
- }
-
- &:hover {
- .buckets__item__actions {
- display: block;
- }
- }
+ &:hover {
+ .opacity(1);
+ }
+ }
+ }
+ }
+
+ ul {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ }
+
+ &:hover .scrollbar-vertical {
+ opacity: 1;
+ }
}
-.buckets__item--active {
- &:after {
- content: '';
- height: 100%;
- width: 100%;
- #gradient > .horizontal(#f3f3f3; @white);
- position: absolute;
- left: 0;
- top: 0;
- z-index: -1;
- }
+/* Dropdown */
+.bucket-dropdown {
+ position: absolute;
+ top: 0px;
+ right: 0px;
+ width: 35px;
+ height: 100%;
+ cursor: pointer;
+ color: @white;
+
+ .dropdown-toggle {
+ .opacity(0);
+ .transition(all);
+ .transition-duration(200ms);
+ font-size: 20px;
+ background-color: transparent;
+ }
+
+ .dropdown-menu-right {
+ padding: 15px 0;
+ margin-top: -1px;
+ & li {
+ a:before {
+ content: none;
+ -webkit-box-shadow: @dropdown-shadow;
+ box-shadow: @dropdown-shadow;
+ }
+ &:not(.active):hover {
+ & > a {
+ color: @dropdown-link-hover-color;
+ }
+ }
+ }
+ }
}
-.buckets__item__actions {
- position: absolute !important;
- top: 0.5rem;
- right: 0.5rem;
- .transition(opacity);
- .transition-duration(300ms);
+/* Scrollbar */
+.scrollbar-vertical {
+ position: absolute;
+ right: 5px;
+ width: 4px;
+ height: 100%;
+ opacity: 0;
+ .transition(opacity);
+ .transition-duration(300ms);
- &:not(.open) {
- display: none;
- }
+ div {
+ border-radius: 1px !important;
+ background-color: #6a6a6a !important;
+ }
+}
- &:hover {
- opacity: 1;
- }
+/*--------------------------
+ Host
+----------------------------*/
+.fes-host {
+ position: fixed;
+ left: 0;
+ bottom: 0;
+ z-index: 1;
+ background: @dark-gray;
+ color: rgba(255, 255, 255, 0.4);
+ font-size: 15px;
+ font-weight: 400;
+ width: @fe-sidebar-width;
+ padding: 20px;
+ .text-overflow();
+
+ & > i {
+ margin-right: 10px;
+ }
}
-// Backdrop for mobile
-@media(min-width: @screen-md-min) {
- .sidebar-backdrop {
- display: none;
- }
-}
-@media(max-width: @screen-sm-max) {
- .sidebar-backdrop {
- display: none;
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- z-index: @sidebar-z-index - 1;
- cursor: pointer;
- }
-
- .sidebar--toggled {
- & + .content {
- .sidebar-backdrop {
- display: block;
- }
- }
- }
-}
\ No newline at end of file
+
diff --git a/browser/app/less/inc/storage.less b/browser/app/less/inc/storage.less
deleted file mode 100644
index 7f65c174e..000000000
--- a/browser/app/less/inc/storage.less
+++ /dev/null
@@ -1,21 +0,0 @@
-@media(min-width: @screen-md-min) {
- .storage {
- color: @text-muted-color;
- padding: 1.25rem @sidebar-padding 1.6rem;
- margin: auto 0 0;
- border-top: 1px solid @muted-border;
- }
-
- .storage__progress {
- background-color: darken(@muted-bg, 3%);
- overflow: hidden;
- height: 0.3rem;
- margin-top: 0.3rem;
-
- & > span {
- height: 0.3rem;
- background-color: @blue;
- display: block;
- }
- }
-}
\ No newline at end of file
diff --git a/browser/app/less/inc/tooltips.less b/browser/app/less/inc/tooltips.less
deleted file mode 100644
index c51664985..000000000
--- a/browser/app/less/inc/tooltips.less
+++ /dev/null
@@ -1,3 +0,0 @@
-.tooltip-inner {
- padding: 0.55rem 1rem;
-}
\ No newline at end of file
diff --git a/browser/app/less/inc/variables.less b/browser/app/less/inc/variables.less
index 51e64aa1c..a89008007 100644
--- a/browser/app/less/inc/variables.less
+++ b/browser/app/less/inc/variables.less
@@ -1,98 +1,101 @@
-// Colors
-@amber : #ffc721;
-@red : #ff6b68;
+/*--------------------------
+ Base
+----------------------------*/
+@font-family-sans-serif : 'Lato', sans-serif;
+@font-family-icon : 'fontAwesome';
+@body-bg : #edecec;
+@text-color : #8e8e8e;
+@font-size-base : 15px;
+@link-color : #46a5e0;
+@link-hover-decoration : none;
+
+
+/*--------------------------
+ File Explorer
+----------------------------*/
+@fe-sidebar-width : 320px;
+@text-muted-color : #BDBDBD;
+@text-strong-color : #333;
+
+/*--------------------------
+ Colors
+----------------------------*/
+@cyan : #2ED2FF;
+@amber : #ffc107;
+@red : #ff726f;
@grey : #f5f5f5;
+@dark-blue : #0084d3;
@blue : #00a6f7;
@white : #ffffff;
-@black : #000000;
-@blue : #2196F3;
+@black : #1b1e25;
+@blue : #50b2ff;
+@light-blue : #c1d1e8;
@green : #33d46f;
@yellow : #FFC107;
@orange : #ffc155;
-
-
-// Theme Coloes
-@muted-bg: #fafafa;
-@muted-border: #f3f3f3;
-
-
-// Fonts
-@font-family-sans-serif: 'Roboto', sans-serif;
-@font-family-icon: 'Material-Design-Iconic-Font';
-@font-size-base: 15px;
-@font-size-small: @font-size-base - 2;
-@font-size-extra-small: @font-size-base - 4;
-@font-weight-bold: 500;
-@font-weight-normal: 400;
-@line-height-base: 1.42857;
-
-
-// Body
-@body-bg : #f7f7f7;
-
-
-// Links
-@link-color : #46a5e0;
-@link-hover-decoration : none;
-
-
-// Text Colors
-@text-color: #6f6f6f;
-@headings-color: #384143;
-@text-muted-color: #8a8a8a;
-
-// Header
-@header-height: 120px;
-@header-link-color: #f8f8f8;
-@header-z-index: 10;
-@toolbar-height: 4.33rem;
-@toolbar-bg: #f0f0f0;
-
-
-// Sidebar
-@sidebar-width: 21.33rem;
-@sidebar-bg: @white;
-@sidebar-padding: 2rem;
-@sidebar-z-index: @header-z-index + 2;
-
-
-// Path
-@path-link-color: @text-color;
-
-
-// Objects
-@object-row-hover-bg: #f0f0f0;
-
-
-// Buttons
-@border-radius-large: 4px;
-@border-radius-small: 2px;
-@border-radius-base: 2px;
-
-
-// Forms
-@input-border-color: @muted-border;
-@input-color: @headings-color;
-@input-bg: transparent;
-@input-height: 2.5rem;
-
-
-// Dropdown
-@dropdown-link-hover-bg: @muted-bg;
-@dropdown-border-color: #e6e6e6;
-@dropdown-link-color: @text-color;
-@dropdown-link-hover-color: @headings-color;
-@dropdown-shadow: 0 4px 10px rgba(0, 0, 0, 0.05);
-@zindex-dropdown: 1000;
-
-
-// Modal
-@modal-content-fallback-border-color: transparent;
-@modal-content-border-color: transparent;
-@modal-backdrop-bg: fade(@black, 10%);
-@modal-header-border-color: transparent;
-@modal-title-line-height: transparent;
-@modal-footer-border-color: transparent;
-@modal-inner-padding: 2rem 2.25rem;
-@modal-title-padding: 2rem 2.25rem 1rem;
-@modal-sm: 400px;
\ No newline at end of file
+@purple : #9C27B0;
+@teal : #009688;
+@brown : #795548;
+@blue-gray : #374952;
+@dark-gray : #32393F;
+
+
+/*--------------------------
+ Dropdown
+----------------------------*/
+@dropdown-fallback-border : transparent;
+@dropdown-border : transparent;
+@dropdown-divider-bg : '';
+@dropdown-link-hover-bg : rgba(0,0,0,0.05);
+@dropdown-link-color : @text-color;
+@dropdown-link-hover-color : #333;
+@dropdown-link-disabled-color : #e4e4e4;
+@dropdown-divider-bg : rgba(0,0,0,0.08);
+@dropdown-link-active-color : #333;
+@dropdown-link-active-bg : rgba(0, 0, 0, 0.075);
+@dropdown-shadow : 0 2px 10px rgba(0, 0, 0, 0.2);
+
+
+/*--------------------------
+ Modal
+----------------------------*/
+@modal-content-fallback-border-color: transparent;
+@modal-content-border-color: transparent;
+@modal-backdrop-bg: rgba(0,0,0,0.1);
+@modal-header-border-color: transparent;
+@modal-title-line-height: transparent;
+@modal-footer-border-color: transparent;
+@modal-inner-padding: 30px 35px;
+@modal-title-padding: 30px 35px 0px;
+@modal-sm: 400px;
+
+
+/*-------------------------
+ Buttons
+--------------------------*/
+@btn-border-radius-large: 2px;
+@btn-border-radius-small: 2px;
+@btn-border-radius-base: 2px;
+
+
+/*-------------------------
+ Colors
+--------------------------*/
+@brand-primary: #2298f7;
+@brand-success: #4CAF50;
+@brand-info: #00BCD4;
+@brand-warning: #FF9800;
+@brand-danger: #FF5722;
+
+
+/*-------------------------
+ Form
+--------------------------*/
+@input-border: #eee;
+
+
+/*-------------------------
+ List
+--------------------------*/
+@list-row-selected-bg: #fbf2bf;
+@list-row-even-bg: #fafafa;
\ No newline at end of file
diff --git a/browser/app/less/main.less b/browser/app/less/main.less
index df83181b0..29aa50772 100644
--- a/browser/app/less/main.less
+++ b/browser/app/less/main.less
@@ -1,9 +1,12 @@
/*----------------------------
Bootstrap
-----------------------------*/
-@import "../../node_modules/bootstrap/less/normalize.less";
+@import "../../node_modules/bootstrap/less/scaffolding.less";
@import "../../node_modules/bootstrap/less/variables.less";
+@import "../../node_modules/bootstrap/less/grid.less";
@import "../../node_modules/bootstrap/less/mixins.less";
+@import "../../node_modules/bootstrap/less/normalize.less";
+@import "../../node_modules/bootstrap/less/dropdowns.less";
@import "../../node_modules/bootstrap/less/modals.less";
@import "../../node_modules/bootstrap/less/tooltip.less";
@import "../../node_modules/bootstrap/less/responsive-utilities.less";
@@ -14,25 +17,19 @@
-----------------------------*/
@import 'inc/mixin';
@import 'inc/variables';
-@import 'inc/font';
@import 'inc/base';
-@import 'inc/buttons';
-@import 'inc/layout';
-@import 'inc/animations';
+@import 'inc/animate/animate';
+@import 'inc/generics';
+@import 'inc/font';
@import 'inc/form';
+@import 'inc/buttons';
@import 'inc/misc';
@import 'inc/login';
@import 'inc/header';
@import 'inc/sidebar';
-@import 'inc/storage';
-@import 'inc/path';
-@import 'inc/objects';
-@import 'inc/about';
-@import 'inc/policy';
-@import 'inc/create';
-@import 'inc/close';
-@import 'inc/tooltips';
-@import 'inc/share';
+@import 'inc/list';
+@import 'inc/file-explorer';
+@import 'inc/ie-warning';
/*----------------------------
Boostrap
diff --git a/browser/package.json b/browser/package.json
index 35f1c124c..9a265d4f8 100644
--- a/browser/package.json
+++ b/browser/package.json
@@ -7,14 +7,14 @@
"dev": "NODE_ENV=dev webpack-dev-server --devtool cheap-module-eval-source-map --progress --colors --hot --content-base dev",
"build": "NODE_ENV=dev node build.js",
"release": "NODE_ENV=production MINIO_UI_BUILD=RELEASE node build.js",
- "format": "prettier --write 'app/**/*.js'",
- "eslint": "eslint 'app/**/*.js'"
+ "format": "esformatter -i 'app/**/*.js'"
},
"jest": {
"setupTestFrameworkScriptFile": "./app/js/jest/setup.js",
"testURL": "https://localhost:8080",
"moduleNameMapper": {
- "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "
/app/js/jest/__mocks__/fileMock.js",
+ "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$":
+ "/app/js/jest/__mocks__/fileMock.js",
"\\.(css|scss)$": "identity-obj-proxy"
}
},
@@ -32,7 +32,6 @@
"async": "^1.5.2",
"babel-cli": "^6.14.0",
"babel-core": "^6.14.0",
- "babel-eslint": "^8.2.2",
"babel-jest": "^22.1.0",
"babel-loader": "^7.1.2",
"babel-plugin-syntax-object-rest-spread": "^6.13.0",
@@ -45,24 +44,25 @@
"css-loader": "^0.23.1",
"enzyme": "^3.3.0",
"enzyme-adapter-react-16": "^1.1.1",
- "eslint": "^4.19.1",
- "eslint-plugin-prettier": "^2.6.0",
+ "esformatter": "^0.10.0",
+ "esformatter-jsx": "^7.4.1",
+ "esformatter-jsx-ignore": "^1.0.6",
"html-webpack-plugin": "^2.30.1",
"jest": "^22.1.4",
"jest-enzyme": "^4.0.2",
"json-loader": "^0.5.4",
"less": "^2.7.1",
"less-loader": "^2.2.3",
- "prettier": "^1.11.1",
"purifycss-webpack-plugin": "^2.0.3",
"style-loader": "^0.13.1",
"url-loader": "^0.5.7",
"webpack-dev-server": "^2.11.1"
},
"dependencies": {
- "bootstrap": "3.3.7",
+ "bootstrap": "^3.3.6",
"classnames": "^2.2.3",
"expect": "^1.20.2",
+ "font-awesome": "^4.7.0",
"history": "^4.7.2",
"humanize": "0.0.9",
"identity-obj-proxy": "^3.0.0",
@@ -74,7 +74,7 @@
"moment": "^2.15.1",
"react": "^16.2.0",
"react-addons-test-utils": "^0.14.8",
- "react-bootstrap": "^0.32.1",
+ "react-bootstrap": "^0.32.0",
"react-copy-to-clipboard": "^5.0.1",
"react-custom-scrollbars": "^4.2.1",
"react-dom": "^16.2.0",
diff --git a/browser/ui-assets.go b/browser/ui-assets.go
index 93f3a3123..de12e85d1 100644
--- a/browser/ui-assets.go
+++ b/browser/ui-assets.go
@@ -1,13 +1,13 @@
// Code generated by go-bindata.
// sources:
-// production/bucket-new.svg
-// production/bucket.svg
+// production/chrome.png
// production/favicon.ico
+// production/firefox.png
// production/index.html
-// production/index_bundle-2018-03-23T08-15-30Z.js
+// production/index_bundle-2018-03-26T18-21-28Z.js
// production/loader.css
// production/logo.svg
-// production/select-caret.svg
+// production/safari.png
// DO NOT EDIT!
package browser
@@ -53,103 +53,60 @@ func (fi bindataFileInfo) Sys() interface{} {
return nil
}
-var _productionBucketNewSvg = []byte(`
-`)
+var _productionChromePng = []byte("\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00d\x00\x00\x00T\b\x03\x00\x00\x00CFb\xcb\x00\x00\x02\xfdPLTE\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\r\x05\x02\v\r\x02\f\x06\x03\r\a\x02\x01\x05\x01_E\t\x03\n\x04#[$\x80-$\xef\xd8\x0f\xa4'#\v\x1f\v\x86^\x1b\a\b\x02`\x19\x15B\xc8M\x18A\x19\x00\x00\x00D-\x05\xa9{\x1a5\x813\xb4+%\x97t\x10\x15\x17\a\x86d\r\x88<1\x87%!P\xafE/|7,s2\x17?\x1c\x97&\"\xe7VM\xda*)\u01e8\t\xc6K?\xf1438\x864$d/\u031d\x19\"^)\x1ed$\u03d4&\xa8x\x1e\xe2\xba\x0e\xe4aQB\xa0@fH\x11O7\x0e/{-uU\x10\xfc\xd2\tM\xb8IL\xb8IL\xb5I\xdf!'\xfa\xd1\vJ\xb0H\xe1,-\xe1(+\xe0%)\xfc\xd1\nK\xb3H\xe5?8I\xaeHG\xa5F7\x80\xc3\xe310\xe494\xe341J\x8a\xc9\xff\xff\xff\xfb\xce\r\xe7E=\xf1\xc2\x14G\xa8G\xf9\xcc\x0eD\x86\xc7\xe6B;\xe2/.\xecYLH\xabG\xe5;6\xe8I?\xf3\xc5\x14\xf7\xca\x0f>\x83\xc4\xe463\xf0\xbf\x19\xf5\xc7\x12P\x8e\xcb\xe8LAE\x9fE\xed\xba\x1dV\x92\xcdC\x9aD4~\xc0\xe9ODj\xa2\xd6\xebUHq\xa8\xda!i\xa5\xeaRF\xd0\x1e!-y\xba\xeecTe\x9e\xd4a\x9a\xd21|\xbe\xfe\xd3\b\xfe\xd0\x00\xe9\xb6\x1e(u\xb5$q\xb1Z\x95\xcf\u0723'\xe4\xaf#\xf5\xfe\xff\xf1jX n\xac?\x95C<\x90B\xde\x0e)\xe0\xaa%]\x97\xd1\xee_Q\xff\xfe\xf9\xff\xf5\xfd\xfe\xf9\xef\xe6\xb2 \xec]N\xdf\x13\x16\xfcl[P\xb9N'\x9dNB\xb4>\xf0\xb0,\xdd\a\f&u\xbeR\xc5P4\xb31\xff\xdb\x04y\xab\xda\x00H\x8e\xda %\xcb\x19\x1e\xe7\x06\x1c\xe9\x87\x1a\xff\xde\x13\xff\xeb\xfe\xf4\xf4\xf1\xde\xe0\xe1\xcc\xd7\xce\x15\\\x9a\xfe'-\xe2\"(\xe9\xcf\x13\xc3\x03\a\xffxd;\xd0PH\xbeJ\xf1\xf4\xfd\xde\xe6\xee6\xd8R<\x9bI3\x91D\xfeA<\xff\xc9+\xe5\x81\x1d\xff\xd3\x1b\xed\xbd\x14\xe8\xeb\xf6\xee\xe2\xe5\xba\xcb\xd9\x0ef\xaf\x06\\\xa3\x05R\x94S\xbeR\xff_Q\xd3\x1e!\xf4\xde\f\xea\xb9\x02\x8a\xb9\u283a\xce\u7c73\xf2\xe5\xa8?\xa0J\xe1\x17,\xe7\xa8*\xfc\xb2&\xfc\xbf$\xfc\xc5\x18\xfd\xd0\x0f\xbc\xd3\xe6\x9e\xc2\xe3\xfeQG\x81v:2\xa14\xec),\xa6\xb6(\xe3~!\xd8\x13\x1e\xcf\xd9\xe1\xe3\xc9\xc9s\x9c\xbe\x97\u0296\u630dZ\xd6V7\xa6K\xf3QF\xf5\xd7A\x17\x8b=\xff34x\xa70\xfe\xd9%\xbe\x1a\x1a\xff\xe8\r\xd3\x01\r\x86\xa8\xc1\xf0\u5683\xc1\x82U\xcdRe\x91<\xc0\xbe\x1a\xff\xd5\x05\xb1\u03f7\uc821\xf6\xe0p\xddehg\xbcdd\xab<\xa4I+\xb81%\xff\xf7\v\xf3\xf7\xdc\xef\xc0\xc1\xee\xe7\xbaK\x84\xb4\xf4\xe4\x90B\xa2C\xed>9\x93#\v\xe1t\a\xef\xd0\x03\xef\xd5l\xc5ah\xe8\x8dT\x99\x91C\xcd\xc7\x17@-D\x9a\x00\x00\x009tRNS\x00\x01\x02\t\x05\r\x16: .Hn`\x93_\xfe\x9fX\xe3\x80;\xfergQ\u01bb\xb3\xaa\xa4\x94\x8f|\xf8\xda\xca\u020a\xf1\xe4\u02bc\xfd\xf9\xea\u06ef\u007f\xfe\xea\xe6\xe2\xe0\xc2\xc0\xa1\x90-{*r\x00\x00\v\aIDATh\xde\xec\u04ff\x8a\xab@\x14\xc7\xf1lXB.\v\x83\x85\x9d\xc5\xda$!i\xb7^H\x04\v\xc7b\x1a\x15\xa7\xb0\xb0\x92\x80\xe0\vlg#>\xc0\xd6\x16\xb7\xf4\x01|\x05\xc1^\u0203l}\u007f'\xc6\xcc\xdd*\u007fv\xb7\xdbo\x95bf>\x9e\x03\x99\xfc\xf6C=\xcct\xc6\xccg\xcadL\x9f}\xbf0g\xcf\ub5f7\xb2\xfc;T\x96\xd9\xcbz\xc1\xe6\xdf\xf5\xfd$<\xad\xb3\xf2\xf8\xf4\u06f9\x12\xe5K\x8d\xcd\xe8\xcc\xd7\t][\xe2\xc1\f\x9d\x05\xfc\u038b\"\u021b\xa6Y.t\xc5\xdcM\x18A\xd3\x14A\x91g\x03\x93\r\xe5y\x11\x04A\x9a\xa4m\x93h_a\xa6\x93\xc9\x1f\xa3o\xfat\x1f\x04P\xf2|\x04 \x10\xb1\u07e7I\x12\u02fe\x95\xda\xfcN\xe5a:y4\x93\xa6\x8f\x93t\u007fTP\x8e \x80 \x83\x908\x96B\xf4\xed\x8a\xe1\x9b\xee00\u01bam\xa5L\x12R\xe0|\x0eBJF,\x84\xb0\xed\xba6f\xb8s\xfb\xaa\x98h\x85'\xa5\x8c\xa1\xa4\xca!\x00\u046ah\x0e)<\u03f6\xf9G\xbd\u04a1\xdcj,\xea\xda\xf6\x84 %>9\x90\xa8\x94\"\x81V\xe5\x91\x11\x86\u072d7&\xee\xdddL\xb5\xfa\x83\u06f6\xa7\x18\xea\xf4<\"A\xc2\x00\x01\x83\xf3\xc8u7\x87\x05f\xb9\xc50\ua407\xa1\rF9D\xc5C\x92\x84\x91\by\x04\xc3\xd9n\x0e\xda\xf5\xb3\xe0\x9cQGn\xc4GFPRu\x14\x14\xc1\x89p|\u007f\xdb]\xaf`b\xed\xe08\xae\x1b\x81\xe1\x03\x03H5\x00\x8a\x18\x8d\xad\xd5UWn\f\xff\x0f\xf3\xe0\xf8\xa3\x12\xd24\x04}\xce&\x81\b~&\xb6\xbb\x1d\x94\xa7kF\xc1\x19Vu\xb8\xe2\xfb`\xc8\x19 P*\x00\xa3\xf0?aY\xef]\xa5_\x1e\x05'\xe6]e\xedvP\xc0\x8c\xce \xa98\x01\xa7=\x9d\b2^_\u07eb\u054c\x94\v\u01a3QY@\xa0(\x86\xe2\xaa#0\f\xe1(\x02\x06Uix\xe5\x12\U0008fbfa\am\"\x8c\xe38\xaeE\xad\"\"\n\x11\x11\x11]\xc4M\x10Ar\xb9D\xdbf\bxW\x8a\xb7\xd5`\x0f\x1a\xca\x11,\\L\x87\xc0-%\x1e\x85\xe0p\t\x86&\x96\x1b\xac\xa1i\xba\x88\xd5AjJ\x8a\b68\xf4\x05Z\xe8\xd04\x94v\xa8\x85\xbe(\x1d\x8a(\xf8\xbb{\x1e\xfbTz\xb9\xef\xd0B\x86\xe7\xc3\xffy\xfe$\xb7\xff\xe4\a[-\x869\xb6D0z\xba\x05P\x01\x043\xd0\xf0\xeb\xcb\xe4Y\xdc.\xcb3\xb6\x9d\x1f\x1c\xa6\f\x1c&\x91p:9\x9f\n\x00\x98\x80pa'q\x8e+roqd=?\x81Y\xac\x18C\xc2\xd9\x0fZZ\xf1\x119\x1e\xb1\xe3\x0f)\xd7\x19\xe2h4g>\x16\u01f6\xf2\xbd\x83\xc3~?u\x98\u0512J\x19)d\xfd\xfdL\xeaw(\xdf\u007f\xda}\x94+\x8bA~\xe4\xc6\ucb2d \x06=\xf0\x1b\xa9\x87\x9b\v\x1b\x95Jec\xe1\xf7\xcc\xfe\xfe\x8c\xd5\xdb\u007f\xbd:\u0517k@\\\x06Y\xcb\xf88n\xec[\xbe\x97(\xcc\x01\xf1\xbc\xf2^\x13I\xda\xee\xeaR\xb9\xfc\x86v\x9e\xf6\x89\xb6s\xdem\x8d\xf1\"A\x1f\xc7{\x8a\xbdL\xb1kI\x19O\u007fX\x82>`\x9a\xa6n;S\xdd\xe5r\xf7;Z\x87]gg\xd7\xe3G\x81\xb6\xf8\xceY\x17\xe4\xf4\x8d\xb5 \xc7q\x82\x905\xa6\x8a\xb1\x01C\x16TUQ\x94(IA\xaa\xa4B\xf9\xde\xe7\xfd\x1f \xf7\x158\xd3h\x94sk\xe4\xf4\u04c5\x8fng\x82A\x8a\xd05.\xe4j\x85\x05\u0454{\x04$\x13\x87$\u06c4$\xa4\x15\x1d[|\xe4I\u06bf\x029q\xdc\x019\x97\xb9O\x11\xda\xd8\xc5z\xadP\x11\xe7B!I\x92\x88\xc3\x12\x90$\xa5eS\xdcsD\xb0\xc3M\x0e\xd7\x05\x84?\x8c\xf0\x1e_\xadP\x98\x17\xa7\xd3=a\x892,\b(\x8dG\x99\"\b3\xda\x02\x01W\xe4o\xa7u\x13\xd2d\x1c\xc7\x01|\xf3\x99{\xcb\x0e6z1\xb2Cy\bz\x8f\x8a\xb2\xe1\x0e\x8dg\xbb4z\xbc\f24V\xdb%\xd8aec\x86\xca\xc0\xad\xc3^\x88\x99\x97\xd6&tH\x98\xc8P\xb7y\x12D]A\x11\x84\x86$v0!;\u0529\x88\x88 \xfa\xfe_\xea\xe9y\xe6\x96\xf6%\x90\xa6{>~\u007f\xbf\xff_\xb5\xb6r\x84\x1fc\x82L\x02\xb9\n\x06\x91\x01\x12\xbcz\xdfY\x89\xc0h\xaf\x85\u062d\u05bf\x91';\xbfQ$\xe0t^e\x0e\x0f'\x9c\xce\xfb\xbe\n\x04E\\\xed.\x19Q\xefD\xb4+\xab\xe0\xa71\xd9\xc9}\xbf\x13!\x0e\xa5\xf8G\xbc\x02\xe4\xea\xf8\xddw*\xa4\rH{5\xe4x\x05\x82c\xfc\xed\xf5\xa5\x8c\xef\xbe\xcf\xe7d\xe1\xcf\xe7\xf19\v\u05e2#\xea\xd3U\x13\xd9\x15\xb3a^t\xf3r\x95\xc3?\"\x8fn\x14\x02\x01\x1f\x1ce\xf0J Px0\x80{R\xd9\xe4i\x1e\xf7d\xa3#\xdch\xb5)\x97\x82\xc4R\xcf'\x06\xa6\v~\u007f\x00\x8e2x\xc5\u007f\xa70yi\xe2\xa9\x12!FG\xbe\xcb\xc0\x10u\fn\xab\b\xa5U\xa1\u031fE}Q\xa6\u0722z+\xa8\xb2\x96\x8eN\x17\v\xc1\xde\u07a0\"\xbd\xc1b1\xa3.\x82K\x02\xa3\xebJ~\x9b\x8c\xa8\x8f\x17\x10\u056dG\x95T6\x1d]\x1d*\xf6\xaaS,M\x0e\x8cW^\x92\xf6\xf6\xae+\u5ca1Z\x13\x83\xc3\xea\xae\xdcJ,\u055a\xc1Z\x86\x86o*S*MGG2m\x15\x1bA\x91\xcb\xf9\xa3\xfa\x8d\b\xbe\x14\a\xb6b\xb7C\x01#+\x1f'0\xb1a\x053}_W/\x1d\xc6\xe52\xb9\x8a\xd5\x10\x83du\x90\x81\u1ca8\x94\xa9l:\x12\x9d\\\xb8\x89\xc7#\xa5\x9b\v\xaf\xa2\x97\"\x1f\x96\xdf\x0f^T\xcd\n'\xebr'\xa6\x85&U\x14\xdd\xde)\x8fD\xab@Q0\xa9\xc4b\x06Lfrzuuu:;\x11\x8d\xa43k\xcb+\x83\xb7(\xc2g\xf5{XdZ\xba*\x06>\xd1h\x95\x1c\x12[\xbej/\x89\xd4\xd4bv\"\x1daI\x8fg\u05fe.\x8f>\x1eT\x1a8X0\xae\x97;\r\xd5\x11m\x9dp0\xe6!\x03\x83\xa2@\x90\v\x89T\xeb\xda\xe2\x87,\u0247\u014f__\xbc\x88\xbf\x1c\xc4\xd6e\x84/\xa4\xf3\xfa\xdb}u0\xaaE\xd04\xda\x1c\x0eI\xe2J%\x93J\\\x88\xc5b\x89\x17\x88#\xee9\xbf.\x17i\x93\x8d\xf9yV\xa4v\x15ta\xdbW\xad\x9f\xfc?A\xe2vK\x8e\x998\xb6\xce\x05y\x1f0\xba\xf3\xfb\xf0\xdd\"\u0577bvH\x1e\xb2\x16v]\xf8\xfaU\x92M\x04\x12\xc7\u05b9\xc1j0\xa3\xb3{>l\xaaU\x04Ut\x9a\xed1\x8f\xac\xb0\x91\xa9b\x15\x81,\xe5\xe8\xd6e\xa3\x83\x1b\xd7\u01f6\x91\"\xb5\xab\xe8\x0fX\xbd\x0e\xaeX\x91J\xc5N\x9a\xf0\xads\xe2\x8fq\xfd\xdeX\x93\xa0cEj\xed\xde,9\xbc\xe8\xc2\xcbP\x06Q!K\x8e\xef\x83mL@\vJ\x90}\xc0\xe81\x91\"\xb5\xa3\x154\xdbE\x0f\x14yd\x94\x91\x1d\xfc\x92\x16I\x91\x8b\x9c\xe0\xc6ej\xc8\u00ea\x19\x9d\xa09&z\x99B\x18>\xb4V\xe6\xe0\x03A\xe2\x9fn\xad\xb7\xd1A\xb1I\xb1Qu\xdf\xeb\x1e;\xa7\x11\xeaj\x03|`\xc2A\x1bQ8\u00d5?\xb1\xdblR\xfc\u780b\n|R\xf4\xe8v\xf7\xf4\x8c\xed\xd3\xc8\v\xa9\xad`\xf9\xb6>/\x0e\x19\u074cH\xeb`n4dZ\xb6\xf8\xca\xfaS\x06@ \x83\xa25`4\tx\xf7\xe6R\xaf1\x1d\x10\xfbx\x19\x99\x01a\xc7?Q\\Zz|\x8b\t\x84\xa0\xcb\xe0\x86\x1e\xc6&\xa3\xad\xd7\x18\x0fJ}(\xc3\u06f8)\xc3\n\x89n1\xfe\xf26\x15\xe4\x16\x18U\x18\xb3\u0682\x01\x05\x13;&y\xfb\xbd\xbc\rs\x10\xec\xdc\xed^rw\xb8\xb0\x06Z\x02\x02\x88{\xf7zB\xc9\xf9\xfd:\xbco\v\xa9\xab\xd7\b\xdbgf\xfa13\u0486C\b\xae!\x8e\xaf\v\xcfg\x02'\xc2\xe1\xf9$\xfe>\x81\xb1\xa5\xe0\xda6\x1c\x96\xfa\xc0\xc8\x0e\x81\x1c\x8e\xf8\xa7r\x193\xe2\x02\xd9E\x185\x8e\xee\xd1\b0\xb6\xaa`\xfd\xc7r3\xfd\xfd}\xdc\x01\x84x\xf0\u04f7\x8c\xc73\x80\b\xe1Phnv\xbfQ[\xaf\xd3l=(/4\x1c\xc8\xe5\xfa\xe1\x00\xe2\x927\xbe2O\x9f\xcf\x00\b\xa1d\xb2i\x8fV\x87;\xf8_A\u007f\xe3\xae\x03\xb9\x99>\xe2pht4<\xd7C\u0085\u0679d\xd36\x9c\xaa\xff\xa9\xa1\xd5\xd6!B}\xbd`\xdaupt\x06u8\xb4\xbc2\x17F\x00\x10!9\x17j\xdaf$_V\x87h\xb5\xdaM=\x9b>\\\xa7\x13\x04\xbcQ\xaf7\x1aM\x06\x83\xc9li92\x9a\xcbQh\xb9?4\x1bB\b\x90L\x9e8y\xc6b6\xe0K\x8cF\xbd^\x0f\n\u01c5`Hm\x84\x12\\\x00anlhh\xd8min9r\xe4\xf0(\xf2r.\x89\xcc\u0386N\x9c\xdcq\xb6\u0672{\xf7\xee\x86F\xb3\x19\x0e \xe6\x80\xf97\"+\x9c\u13a5\xb9\xb9\xa5\xa5e\a\u0359\xb3\xcd\xcd\x16\v\x00.\xfcE\x10\x03\xd9\xe4\xcc\xd8\u0420\xb1R\u0103\xc8b@L\xec\xd1|N\x82N\x9e\xd4\u007f\ac\x04)\x87|\u02db}\xdc/\x17\x81!\r\x89\x91d.\x00\x00\x00\x00IEND\xaeB`\x82")
-func productionBucketNewSvgBytes() ([]byte, error) {
- return _productionBucketNewSvg, nil
+func productionChromePngBytes() ([]byte, error) {
+ return _productionChromePng, nil
}
-func productionBucketNewSvg() (*asset, error) {
- bytes, err := productionBucketNewSvgBytes()
+func productionChromePng() (*asset, error) {
+ bytes, err := productionChromePngBytes()
if err != nil {
return nil, err
}
- info := bindataFileInfo{name: "production/bucket-new.svg", size: 1062, mode: os.FileMode(420), modTime: time.Unix(1521792948, 0)}
+ info := bindataFileInfo{name: "production/chrome.png", size: 3726, mode: os.FileMode(420), modTime: time.Unix(1522088513, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
-var _productionBucketSvg = []byte(`
-`)
+var _productionFaviconIco = []byte("\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00!\x00\x00\x00 \b\x06\x00\x00\x00\x9c\xb8\x11\xca\x00\x00\x00\tpHYs\x00\x00\v\x12\x00\x00\v\x12\x01\xd2\xdd~\xfc\x00\x00\x01\xa7IDATX\xc3\xed\x96=N\xc3@\x10\x85\xdfX\x80\x90\x10J\xa8)\x88R\x99\x02)\x15%2\a@\x84\xd64\xe6\x06\xbeA\xc2\rr\x03\\@\x1fN\xc0RR \x85\x8a6\xdc`s\x81\f\u036c4\xb2\x1c\xc5\u007fkE\x88\x91\xac\xcd\xee:;\x9f\xc7\xcfo\x17\u030c\xba\x17\x01}\x02\f\x01,\x97!\xa0_u\x1d4\x84H\x15\x00\x13\xc0gG\xfb\x1f6\x0e+\x81\x04h\x16\xa9\xb4\x8f\x00\xee\x86\xc7\a?\xcfW\xa7\x97j\xbcT4\x85X\xba\x1fk\xe6\xf9\xe7\xcd0\xb989\x04\x80\xc9\xea\xfe|\xd0\x15D&\xed$ Jz/\xdf\x06\xc0Cnn{4\u0444\xe8\"S\x9aH\x98\x196\x0e\x13\x1b\x87l\xe30\xf1.\xcc\x12 \xb6\x8cH[\x81\x10\x10\xb3\x01d\xd6%D\x9f\x80\x85\x02\x89\x1cH\x97\x10Q\x0ed\u0649Y\xa9\n\xcc\t`\xe9\x0fT5\xc6\xde\xcd* \x8a\xc4+n\x95_,\x01\xbcJw\xe4\xd5'\x02\xa2\x04\xc0\x1b\x80^\xc1\xf4\u00bbc\n\xc0\x93t\xbf\nn\x19WZ\xb0\x86\x06\x12\xf5\xce3\xd1\x04+MDj~\u053a0\t\x18i\x005\xee\xc6R\x02\xac\xdb\u05bd|\x1d\xea\xf3[\xe8sC~;\xcf\u03f7\x06A\xc0T\x12X\x02\x06\xaa\xf4&\a0\xabz\xb0\xa9\xe2\x05\xae\xcc\xd3\r\xc9\xd9\xc1y9Y\xa9*pAr\xa3\x85\xe9\x13\xc2\x16<\xb5q\xfb\x83w\b\x02\u019b\x92\xe7\x85Y\x17b\xaf\x84\x95D\u04be\x03\x98\xae\x99\rZ\x8e2\x10\x16\xc0\xb5\x8f\xe4.\x88\x99\x1b/\x12\x10\xb1l^T\xeb\xff\u0601\xf8\x87\xf8\x93\x10\xab]\x80H}\xfb\xc4\xd6X3gr\u07ac\x15\xbf\u007f\xf2A\x8a&e %\x00\x00\x00\x00IEND\xaeB`\x82")
-func productionBucketSvgBytes() ([]byte, error) {
- return _productionBucketSvg, nil
+func productionFaviconIcoBytes() ([]byte, error) {
+ return _productionFaviconIco, nil
}
-func productionBucketSvg() (*asset, error) {
- bytes, err := productionBucketSvgBytes()
+func productionFaviconIco() (*asset, error) {
+ bytes, err := productionFaviconIcoBytes()
if err != nil {
return nil, err
}
- info := bindataFileInfo{name: "production/bucket.svg", size: 1062, mode: os.FileMode(420), modTime: time.Unix(1521792948, 0)}
+ info := bindataFileInfo{name: "production/favicon.ico", size: 501, mode: os.FileMode(420), modTime: time.Unix(1522088513, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
-var _productionFaviconIco = []byte("\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00!\x00\x00\x00 \b\x06\x00\x00\x00\x9c\xb8\x11\xca\x00\x00\x00\tpHYs\x00\x00\v\x12\x00\x00\v\x12\x01\xd2\xdd~\xfc\x00\x00\x01\xa7IDATX\xc3\xed\x96=N\xc3@\x10\x85\xdfX\x80\x90\x10J\xa8)\x88R\x99\x02)\x15%2\a@\x84\xd64\xe6\x06\xbeA\xc2\rr\x03\\@\x1fN\xc0RR \x85\x8a6\xdc`s\x81\f\u036c4\xb2\x1c\xc5\u007fkE\x88\x91\xac\xcd\xee:;\x9f\xc7\xcfo\x17\u030c\xba\x17\x01}\x02\f\x01,\x97!\xa0_u\x1d4\x84H\x15\x00\x13\xc0gG\xfb\x1f6\x0e+\x81\x04h\x16\xa9\xb4\x8f\x00\xee\x86\xc7\a?\xcfW\xa7\x97j\xbcT4\x85X\xba\x1fk\xe6\xf9\xe7\xcd0\xb989\x04\x80\xc9\xea\xfe|\xd0\x15D&\xed$ Jz/\xdf\x06\xc0Cnn{4\u0444\xe8\"S\x9aH\x98\x196\x0e\x13\x1b\x87l\xe30\xf1.\xcc\x12 \xb6\x8cH[\x81\x10\x10\xb3\x01d\xd6%D\x9f\x80\x85\x02\x89\x1cH\x97\x10Q\x0ed\u0649Y\xa9\n\xcc\t`\xe9\x0fT5\xc6\xde\xcd* \x8a\xc4+n\x95_,\x01\xbcJw\xe4\xd5'\x02\xa2\x04\xc0\x1b\x80^\xc1\xf4\u00bbc\n\xc0\x93t\xbf\nn\x19WZ\xb0\x86\x06\x12\xf5\xce3\xd1\x04+MDj~\u053a0\t\x18i\x005\xee\xc6R\x02\xac\xdb\u05bd|\x1d\xea\xf3[\xe8sC~;\xcf\u03f7\x06A\xc0T\x12X\x02\x06\xaa\xf4&\a0\xabz\xb0\xa9\xe2\x05\xae\xcc\xd3\r\xc9\xd9\xc1y9Y\xa9*pAr\xa3\x85\xe9\x13\xc2\x16<\xb5q\xfb\x83w\b\x02\u019b\x92\xe7\x85Y\x17b\xaf\x84\x95D\u04be\x03\x98\xae\x99\rZ\x8e2\x10\x16\xc0\xb5\x8f\xe4.\x88\x99\x1b/\x12\x10\xb1l^T\xeb\xff\u0601\xf8\x87\xf8\x93\x10\xab]\x80H}\xfb\xc4\xd6X3gr\u07ac\x15\xbf\u007f\xf2A\x8a&e %\x00\x00\x00\x00IEND\xaeB`\x82")
+var _productionFirefoxPng = []byte("\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00d\x00\x00\x00T\b\x03\x00\x00\x00CFb\xcb\x00\x00\x02\xfaPLTE\x00\x00\x00&\x18\x16\x04\x02\x04\x11\b\t\x04\x00\x00\x02\x00\x00\x05\x05\r\x0e\a\v\xbc$\x04\a\x03\x00\xb4<\x0f\xf2\x9d7\xf0f\x11R\xae\xde\xf3\x9d.\b\x02\x00\xf9\xe4a\xf3\xa5<\x13.a\xce*\x03?\x8a\u0087'\x04M+=\xb9#\t\xf7\xac:\xc4S\x10\xd2D \xaf\x82c\x14K\x99\x1b6y\xb5,\x03\xba3\r\xf8\xa8*&k\xaa\xf3\x91\x1f\f0t\xe1t\x1f\xc90\x1b\x91.\x12\x86(\x14#c\xa1\xcfg\x1e\fB\x94\xd1r;a!\x03\xe7\x8b\x1d\xdao\x12\xeb\x8a\x1f\x1b\x14!\xbc((Y6\\\xf4\x9e\x1a\xf8\xc39\xff\xdf(\xff\xe1O7\xa7\xd5\xfd\xf5\x81\xd0J\x0e\xd0V\x13\xd1R\x10\xd4[\x13\xd0E\n\xcaI\x0f\xd6G\t\xd6_\x14\xcdP\x12\xc4B\x0e\xc9\xf6\xfd\xd9g\x17\x96\x0f\x03\x1aN\x8f\xd7X\f\xd2\xf9\xfe\xddn\x1b\xec\x93\x0f\xd4O\v\xdbk\x17\xe6\x81\v\xdcN\a\x9f\x13\x04\xba\xf1\xfb\x8f\f\x03\xd6c\x18\v.m\xf1\xa3\x15\xb8/\x06\x1fn\xb7\xc1\xf3\xfc\xad(\x06\xf8\xc1+\xe2w\a\xb1\xf0\xfb\xa1\xed\xfa\x14>|\x107u\xdaa\x0f\x88\x06\x03\xdc\xfc\xff3\x8f\xd2!u\xbd\x01/\x84\xddW\x0f\xc16\a\xa9\x1b\x04\xe1v\x1d\xdeg\x0f\xe2a\v\x1ch\xb0\x02\x1d\\\xe4n\f\xc9;\x05\x00\x1ar\xd9a\x03[\xc2\xee.\x82\xc8\xe9\x89\x10\aA\x92\xdem\x03\xa8\xf3\xfd\x18H\x88\x06&c\xf0\xa8&\x8e\xea\xfa#_\xa0\x037\x8b\x14C\x84\xe0X\ad\xce\xf2\xf3\xb58\xe3h\x0f$|\xc4\xfa\xce7S\xb8\xecH\xb0\xec\x1aR\x96\xb3\x19\x04$Y\x99\xff\xfae\xefw\x19\xd2W\bA\xa8\xe6<\x9f\xde4\x97\xd9\xf8\xd2N\x01\x0eN\x96\xe7\xf6p\xda\xf5e\xbf\xe3\xff\xf6U\xfd\xdc?\x02\x01\x1e\xe9x\t\x9f\x1d\x05k\xca\xe8\xfe\xc5\x1d\xfb\xb5\x18\xe8q\x12\x97\xef\xfd\xf9\xc5E\xf3\x86\x1e\xe0p\x15\x00'{\xf4\xb6$\xf9x\t\x88\xe3\xf6.r\xb2\xfe~\x0e\xd59\x02F\x99\xd4\x12]\xae\xff\xe5R\x00\x05-\xde>\x06\x80\xd8\xee\xfe\xfe\xcd\x01Z\xbc\xee\x92=\xe3\x94!z\xe4\xf7(g\xa6\x04\b_\xe6N\bY\xb8\xda\x1b\x1aI\xe4\x84/\xff\xd7(\xf2\x98\x1e\xea[\x05\xbb\xfc\xfeQ\xc0\xf5\xff\xfe\x84\xfc\x8d)\a1x\u038aZ\xec\xbeK\xfe\xecD\xe6\xa1=w\xce\xec6n\xbf\x12h\xbf\xfc\xa7C\xe0w*\x81\xf7\xff\xef\xff\xfe3\x82\xb2\xf6\xb5~gqy\xfc\xe9v\xef\xd3l4\"<\xc0h+\x90@$\xfe\xa9\x10\x8c\x87aKNY\xfe\x95\bU\xa1\u0604\xb4\xc1.`\xb4\xfe\xfe\x99-4^yiZ\xa1hHuU:\u0086 \xf6C\x00\x05M\xab\xb7\u00e55It\xc1\x94g\xeb\xb6Z\xbf\xb6Ym4\x1bY\u007f\x96b>:\xabS\x16\xd2\u06e4\x8e\x9f\x9d\xa7\xb0\x8er\x150\x97\\(C\x12\x18`\x00\x12\xbd\xda\xd3^\x8b\xae\xcb\xccy\xa2\x88m\x9a|1\xce\xd6\xc4G\xa2\xc1\xef\u077f\xf4\xe4\x9d\xff\xf4\x1e\xdf\xe8\u03a0\xf2\x046\x00\x00\x009tRNS\x00\x038*\nw\x1d\x12\xfec\xfe&\xfe\xfeyN\xfd\\\xfc\xfe\xfb\xd3\xfe\xd27\xfd>\f\xc0g\x1d\xa1\x9dl\xcc\u0139\x85wK4\u069c\xf6\xac\x8cy\xe3\x97\xfe\u0371\xd5\u0278\xb4\x98\xb0l\r\x8a\x00\x00\x0f7IDATh\xde\xec\xd6iL\x92q\x1c\a\xf0\x8e\xadZ\x85\xd3r\xad\xfb~Q\xb6\xae\xadU\x807\x852\x9b\x95n\x19SJI\xba\xb4\\\u0120\x00\x95 \x88\x87\tD\xc0\x16-\xa0\x1a\x041!\x8b4\x97\xa9\xa9XV^\xb5\xd94\xbb\u055a\xdd\xf7:\xd6\xd6\xef\xff<\xd25\xb2\xfb]_\x90\xf1\x8a\u03fe\xbf\xdf\xff\xff\xcc>\xff\xf3\x8f2p\u06b8qaac!aa\x93&M\x1b\xf3\xf7\x85i\xe3\u00a6\xd0\x15\"{}}(\xa4\xb5\xa4\x84\xb4`\xc1\xa4i}\xff\xaa0\x85%\x10\u057f\u057bu\xfc\u04d0\x8c\x8c\x8c\x944\xb7\xa9D\x1d:i\xda_\"\xc6MY\xc5R\u0597\xb8\xf9\xa7i\xf1\xb4\x8b(\x19\xf8G|\xaa-\u07e9\x18;\xe9\xcf\xeb\xf4\xed!lP!%#\x83\x96\xf1eh\xa9\xc7\u07caxc'\x8d\xf9\xe3\x16\xab\xe8v\xa7\xc9\xcc\xe7\xa7\xf1\x97\xc5\u007f\x01\xc4g\xc4\xc7\xc7\xd3t\xa6\x92\xb7\n`\xfe\x80\x180%9y\x95\x88\xebt\xf3\xcdB!?\x1eO\x06\x92\x88\xaf4\x1a\x8dokk{\xf1\x92'\x1e;\xed\xb7k$'\x0fc]\u51ba\xcd6\x1d\x9fO\x8b\xff&4H\xaaP_\xff\xc8\xf3\xe1\xa5X\xfc\x8beB\x86\x10\u06d8\xb3\r\x19g\xcf\xeamn\xb7.\x85\x86\xe7+\"\x05\xc2\x17\xd6f\t\xdey\xdet\x8b\xc3\xfa\x8c\x19\xf2\xd3\u0190\xba\x10bT\u06f6\u11b3\x16\xa2K\x81\x93\xdb\xe3\xc0\v\x82\x8ce\x10\x9d\xad\xf6\b\xab\xc3\xe3\xe9P\x8e\x1d74\xe4g\x91\x89uA\xf0\xd9\u007f\x18\x18\xab\x94\x80\xb4\x9a\xf4\xb5\xb5\xc7\u0367\x97\xbdxA\xf3\xc7o\xa4\xa6\xa6\xa6\xb9\xdd\xfa\xac\xcc\xc7\xed\xed\xed\u077c'\xc5A?g\x8c,*\x9a\u0727O\xbfa\u0640\bD\b\xd1\xeb\xf3\xf7\xb4uUQ)oN\xa7|\x16\b#\xcdf\xab\xad\u0577\xae\xc8|\\Q\xd1\xfe\x88\xf7\xa4\xf0\u7509\x95\xd6\u0290\xfe\xd9\xd9\xd90,\x85\xf2\xea\u0573\xad;\xcb\xdb^G8\x1c\x8e\x8e\xd3)_\x06\xaf\x01\xf7\xded*q:\xcfe\xbe\u00b0\xf6\x0e\xde\xf3\xc2YC~\xa2\x88U\xa5R\x1d\x1eq\x02\x90\xe4\\\xba\x12\xaa\xa8\xe57\x1c\x8e\brT\a\x1f\xad\xc0/,#\f\x9d[\xaf\u05d3\x9cN\xe9Qq\xb3!\xb8\xe2\xa1\xe0y\u064c\x1f/&H5\x14Rv\xe9D\xf6\xb6U\x02@\x8e\x9c\v\xbd\xe1\xd8\x1c\x1b\x99\xf8\xfa\x02?5u\x19\n\x10\xb8\xc1\u05f9ui6\xbd\xbe\xc4Y\xdf\xf6\"T\u0709\xb9@I\xde[|\xf9\x87\xca\u0521C\x8b\x8b\x8bo;.]\xb9QUU\xd5\xd5\xf5\xe8\xe5\x83\xc2\xd8\xd8\u063c\xcbzsZZj\x0fC\xf4\u0419\xf4\xb0\xf4\x12\x12\xc9)U<\xf4\xb4\xe5\\1h\x83+:N\xae\x9d\xeb\x1b\u067b\xd1wzYqq\xa1#a\xa8\xb5\x12\xa5\xa8\xae\xae\xd4\x01F\\^\xf7\x9e4\b\xa1\xf8O\x15\xacC\x0f\xcf\xfcV\xb4\x92\x8e\x8bo:[\\\xa0<\xbe\xb4kTp\xef\x0f\xb3\xf1\x9c\xe2\xc2\xe1\xc3wX\xb7\xaa6m\u0630\x81\xb1\xbe\xf4|$\x181e7HB\x9d\x0e\x14\x18\x191*\xbe\u0384\f\xbc\b\xdb\u027es\xe6\xa1\xe7}K\xb5\x16\x94\xc6\xe7\xbb\xee.\xec\xfd&&:\x06EXO\xa9\x0elX\x8dg\x03\x05\x90\xc8\xf0\xb2\xc6|@p\x05\x18 \xe0\x9b\xad\aq\xb6\x92\xd8\\.\xaf\xb3\xa9\xa2\xbd\xd9b\xd1b\x15W\x9e_\xc6z\x1d\xd8\u8d7b\u0227N\xed\xdf\xc1\xe1pV\xaf\x8e\x8e^\x1d\x17\x13\x19\x1bIYT\xd6X.\x14\xf6t\x81 Cg\xb6\xd9lz\x12\xa9\x95\x94\u007f|'\xf7\xac=\xa7\x05\xc3*\x9a\xaa\xab\xb5\u062bg\xeb\xb0\xf9\xbd\"\xeb\"OYwl\xe4p\xe28\u045c\xb8\xb8\xe8\xf0\x98\x98\u0218pF\xde\u0292\v\x17\x801\x9ba\xfd(f\xb3N\b9^k\xca\u07f3'?\xbf\x9cm\xe7\r\v6`\xed\xcd\x12P\xae?w\x19\x86\xf4\xb6\x93X08\xc8\x00\x02\x12N\xa5R(\xd1\f\u02a0\xc1m\x17\xf0\x98\xf9\x00\x11\x84\xcdv\x1c\x02\u0116-\xe5\xe5v%Tqa\x15w}\u056e\xe6\x11\xd5XPoM\xac\xc8HL\xe4p\x12 \u053880\u00a3\x191+\x87;fTA\xba\x1e\xb5\xe9\xc0\x10\xfa\r\xa8\x01\xc8\u039d\xe5\\\xa5xX\xb0\u02c55\xf9@i\xb9g\x98\xf7}c\xccd\xeb~ \x00\x01\x02)T*\x18\bY\ube0d\x87\xfa\xac\x9b/DA\x04a@\x0fy\xb9ZD\xcf~\x8di\rX\xb5\xef\xae\xc5\x12\\\xa3\x1d\xd2\xcb}WmLL\x8c\x8a\x82wB\x14R\x10\x12\x8e#\x11yy\x89\x9c\xbc\xb2\xdb\xcf\xea/\xec\xf9\"\u0200\x8d\xb0\xe5\x1aeN#fq\x19\f\xbe\x86j\x8b\xa1F\x1b\xf2\u076b8\x1b\x8a\x00\x82\x9c(2\nT\x01d\t\x05\x90\xc2\xe2\u013c\xc2\xc2\u0296\x02\xf8a\x13\xbc\xb6\xf4\xa4\x1cZ(\x15v\xb9\xf4\u0335f\xad\xd6e\x90\xdcm\x96\xf4\x86\x84XU\x1b\xf3\x88\"\u4a08\bB\x81*K\x92V\x0er0\xce'\x162\x1a\xb9\xf9\x10D\xc0*v\xca\xe5\x05\x05r\xaeH$b\x17ps\xb3\xef\xb9,Z\x83\x11Gd\xdf\xdd\xfcd\xd5\u040d\x00 \x04\fB\xc1OW\xd2\xe0\x19\r\x1eO\x03\xfcu\xf3B\xb7|*A j\xafB\xe1\xd5\u0615\xf4\x9c\x16\x97\xc4\u2aa9n\x96\x19\x8c\xb2\x89\u07fb\xeeV\xd5\x0eN\x94\x03\xd6\x11\x81\x8cH\xa4\xc4\xc0\xbc\x92\x96\xac\xaez\xf7\xce\x03y\xc4\xca\xf4\x92\xb6\xf4\xb4 \xa9\u0661\x05\xf2\x02\xb5F\xc3\x15\xd1\xe9t\x85\"\xe7\xbaQ\"\xd1\x1a\xb5M\xc6\x1a#\xf3{H\x90U\x05E \x04\x02\fB(\xd1I\fFQCC\xc3\xfb\u01dd\x99<\xaf\x13~\x9fH\xa8\x1dR\xcf\x06D-\x02\x83\x9e{\xf0\x8aE\"\xb1\x18\x8dMF\xa3\f\x90\xbe\x01\x11t~\x11\x92\x00\r\xfc\u04ca\xa1\x84'-b\x9c/\x05\xa5\x11\x88P\xb5\x1c\a\xe4\x105\xd7n\xf7*\xb9\x1a\xb6F\xaa\xa0+X\xdd\xde\x1c@|\x12\x99\xac\xc9%\x931\x83F\x87\x04\x9cV%\x81@\x112\b8\xe17J\x8b\xaa:\xc5G\xb8j9\x9e\x02\xb4\n\xf8\xa8\xf7zE^\xb6&\x8b\x0e\xc9i\xfcp\xe6\xa4D\xe2\xf31\x11\xc2d\x06M\x98\x19pZ\x95p\xdbQ\x112\x9a\x16nP\xfd=\x8a\uab8b\xb34\x05\x9f\xe2\xb4\u06e1\x01\x1c+%}\u015a\\\x84$_\xf3<\xde\xed\xb3T\x1f\x9301\x83\xec\x10s\xe6\u0729\x81\x8aL\x84\xc7\x16>\xad(\x98\x16qG\b\x03\x15\xa9{}\x84\xad\xfe\x94\x02\xae\xc8k\x87\x16pA\x14\x00\x88\xe8\x02\xfa\x99a\xef\u06ef\xdf\xd2\x06\x97ngb.\xcbv\xe6\xf4\xa5\x01\x90\xbe#\x83&\xab6F\xf9\x11\xbf\x81j\xa0\xd4uI5lx\x11Q\xb3\x81\x80\x1aJ P\x04\x02\xc1\x99m\x0f\xb1\xe0R\xad\xc1w\f\x10\x99\xe4\xd0\xcd\xc5\xd3\x03\xfd\x9f\x122[\x85\xa6EN\xc0k@\x80`0\xce']>_YW'\u94b2\xfd\u0460\xb7W\t\x84\xc2O\x00\x92\xfd\xcaP#\xb1\xd4XJ%\x18\x1c\xae\xed#\xd2\x03!}C`\xef\xe8\x8e$\x90\x13\x88\x9b\xbe(i\xd4\u02bd{\x97\xa7/\xbe\xdfy\xa5\xaa\xf1\x1c\x17\xc5\x0fI\u0461\xfdD\xe4\xe6\xe6\"\xc4h\xd1\x1ae\xdb%\x06@\x8e\x9dL\x9f\x11p\xf1\x80D\xe0\b\x95L\xa6\xa0\xa7\xef\xe0\xc5\xe9\xe9\xe9\xcb\xd7=\x11g\xe6$\xb3\xb2\xa4R)\xf7s\xb2\xe8\xb9\x02\x10\b\x02!\xbb\xefa2tA\x982\x83\x8c\xb9\xef\xd6\xee\xf4\u0641\x1e\xf33\u1fa3\xc3KE\xd3\n\u01cd\xe5\x8b\x17\xef\u077b\xeb\xda\x1d\x91\x82\xc7\x03\xe4\xcbp\xd7(DY~\x82\xc5b\x01b`\u028cL\xe6!c\r OO\xa4\xcf\vx\xba>\x96fo\xa1I\xc5q\x1c\xc0Wv\xb1\v\xddF\xb3\x15TD\x17\xa2{Q\x94\xa6M\u0464\xe3\x8e\xe2\xf4\f\x15\u02a0\u04b9\xbc\x1c\xb0C\x1d\xaa\xb1\x15d\u0307|)E%\x9c\x82\x11\v\x96`\x98\v\xbaC=U\xcb\xd5^\xaaEt\xa3\x1e\xaa\xa7^z\xe8\xfb\xff\x9fl\x04\xaeV}\xa7\x0e\x9d\x9c\x8f\xbf\xdf\xef\u007f\xf4\xb8\xd3\xde^E0\x8f&wc\xc2\n\"\xe1\xe5^\xf7\xedkm=\u063a\xef\u05dc\xd8w\xe2\xe0n\x00\x84\xa8\"\xe7O:\xb3\u0673\x90\x92\x1f\x8a\x9f7\xd7B6\x99\x0f\x90\x85E\x11\xa9Y\x06\x10\x0e\uf167}\xad\xad\xadp~ep\xef\xe0a(\x94\u0633\xdb\x16{w\xe7\xfc\x19gVt\x9e=\x99M\xa6J\xa135\x91\xa5\x97\x0e\x98\xb7\xa1\x14\u06ad&\xbd\xd2a\x01\xe1\xe0\x1c\xe6\u01ef\xee\x1dl\xad\x95};\xf7H\x04\x02\xe4l\xe7C\xa7(\x9e,;\xb3\x18\u0253o\x8bk-\xe1\xa5\x17\x0e\x98\xd4A\x8a(\x81h\x1d\xd4\xe08U\xfey\u07fd\x834\x92u\x0fi%w\x0e\x1e\a\x02\x82\xe4H\xecv\xb9\xf3ag\u007f\xb6\\v\x8a\xc9\xe1\xe1o\xc955\x91z\xb31\xe8\x01\xa2\xfa\x81P\xc2\xe3Qv\xe7\x9e\xf7\xf5Q\x03\xb9\xd7\xd7w\xf1\xe8\u044b\xf4\x01\x18\x92`\xb3\u064a%\xec\x1c\xb3:\x19'\n\xb1\xdb\v\u0254}v-d\xadb\u01c1\xa0\\M\x10\x15A8\a!\x82Ac[w\xee\xc5il\x1b\xc1\xed\x83\x17\xab\xae\xde}\xf3\xe4\xf4\xab\x8b;\xab\x04\xf2l\xce@9%\xde\xe9\xecw:\t28\xc80\xd3j\xcdd\xfe\xa2\v\a\xd4\xf2\xa0F\xa3\x95f\"\x11A\xb5\xb1\xad\xad-\x9f~~\x9a\b\xa7\x9f\xb7\xe4o\u0738\u007f\xfe\u032cG\x0f^]\xbcx\x8a\x12H\xe8\xe9\xd7\xe1r\xbf\x88Ne\xb30\xec\f\xc3,\xa9y8\xb4`Y\xbdi[\xc4#!\xdb[\x9at\x94\xc0\x871\x10\x14\x93y\xfc\xe2\xc5\xe3L.\xd7\u0586\xb7\xb3\xb7\x8f\xae_\x87r\x8a\nH\U00069cd0*d\xcb\u026c\x98\x15\x81\x84Yf\xcd(Gv\xf5jUD\x0e\x84~T\xb5\xa8@\xa8\xcd\xe6+f\xe5.\x89A\xd2m\xbb2\x99\x8c\xcf\xd7|\xf9\xfe\xac\xb7\x87^\x1d\xa7u\x1c9r\xa48\\N\xf5\x87\x9d\xe5\xa4\x1da\uc30b\r\u03eb\x8d,\xac\x0f\xaa\"\x91\xa0\x06\f&\xdf\u04a4V\xef\x80q\xe5\xda\u0529\xcdm#\x01\xa2o\xba\xd6\u0478k\xf8\u0429S\xc7\x01 \xfe\xd8\u05f2\x18\x0e'\x93I\xda*;+\xb0\xe8V\xed(\xe4*\xce\xe2\xd1\x11\x04\xa5\xe8\x8d0:::\xae\xa9\xad\x0ee\xf3\x88\u046c4\x9a+\xcfn\u068e\x1d:t\xc8F\t\u007f\xb1\x94M\xda3L2\x95\x02\x81\xb8\x04v\xedh\xc82y\xd0c\xe04Ph)\xfa\x03\x14i\x9f\xce\xedMLmT\xb6\u86db\xf5-\xcaF\x9dY\u05f0\x1f\x00\t\x00\x92\u0607d\xaa\xbf\xd9N\x91p\x98\t\v\x82k\xe1h\xc8|\xb9\\g\xf1\xea<\x1c\x10(z\xbd\x9b\x18\xed]]\x89\xbd\x89\x84c\xaa\x94\xe0\x8e\xca\x1c\xc98v\u8604\xc4b/\x93\"\x93\x01\x91bX ,/\xa0\x90\u0462\x88x\x1c\x06\x8f\xce\xeb\xd1BA)P\x80\xb4\xa7\xdd\x06\x837AvNOP7\xb5!\xb4\xffX57c1\x9b-\x16\x1bH\r\xdaY6E\x97\x15\u02c6\x05^\x98?\xaa\x81~E8\x83w\x9b\u05e1\xd5J\r\x03\x83J|\xddn\xab\x95C\x1c\x95\xf7\x03\xfe\x1e\x18\xfb\xf7\xef\xc7\x15\xbf\xfd\xa1\xfdG\xfc\u016f)\f\xdbN\u00ba\xa0\xf0\xbcv\xd9\xe8\xc8By\xc4k1\xe88\x83N#)\x18\x83\x8f$\xd72P\x1a\x18(\x95\xfc\xa1P\x0f\x00\xc9\xe8\xf1\xfbC\xb8\xb5\x85\x9e\r2\xa2\x88\x85\x8b\v\xebr\xb1\u00b5\x8f\x15 \xa3f\x91\x1c\x88WgphG\x94]\xcdH\xf7\xe3R1\x04\x81\x10=\xe4r\xa47\xe4?w\xae\xb7\a\x8f\x15_\x0e\x85\u03cb\f\x8d\v\x99\xde\u0630a\xc6o\x90\x85@,V\xcek\xa0+\xac\xaa\x90\xe4\xd3\x1f\xfcD\x01\x13\xf2\xc7zc\xbd\xe7z\x91s\xbd\xc3\xc5\xe2\xe7\xa1x\xe7\x19&\x8c0,\xd6U\xbcc\xe0\u04e5\xd9u\xbf-\xc5b1\x18\x1c{\x1d\x9a\x9f\x8a^R\xba\xf3\x8f+\x1f\x1a\x9e\x11\xa6\xf7\x1c\x82\x1b /\x87\x1a>\x0f\x05\u0113\x9d\x18\x06\x16\x96\vH\xae!\x14\xb95\xad\xee\xf7\xa5\x18,VT\xe3\xd1\xe8F\x14\xcadr\xf9\xee\xf7\xa4i=1\xa9\n\xe4\xe5`<\x9e\x13\x98l\xa7\x88Y XW\xb9J\xcf'\xe5\u05ba\xdffY\x04\x95X\r{-\xba\x9f\xb5\xa0e`\xa8\xd3Ri(\xc5b\xb1s4\xef\xbf|\x1c\x8c\xf3\xbc\xc0\xd8\xfb\u0170@\x14\x17\xcf\u78a1\xa2\xfa\xe1\xbc\xdf#\v\x14(\u0170\u05ca\x86\xe9\xa4ZH1U&\x9d\xcf\xe9?V\xde#\x95\x8f\xcd9\xd7\x10\f\x17\xf6p\xa6_\x10\x04\xb6\xe0\x12\xf8\xc0\xf4R\xe8\xf1\x9d-u\u007f\xc8|Z\x8a\u057a\x97\xdbF\x14-U(C\x93\xe9\xce\xe5\u007f$\x9c\x0f\xc0`\xd9x\x1f\x10\xa3\xc9%\x8a\x85\xa8I`R\xc9\xd4\xe0\xa61\x9d(Qx\xad#\x8a\xc4()#A\xee\xa6\xedH\x93\xbe)j$J\xc0g\x8a\xb20X\x17\x93\xc2{\xd8\u09b1\x9d!X\x18\xb1\x10\xc5 M\x9f\xec\x97*\xc2\xc0\xa1q\x93\u05df\x11\xdcJ\x15U\x8c&_\xb8\xbfP(0\xf4\xa3=\xb5\xb4n\x8cY\x11\xb1\x90B yu\x92\xa2D($\xc5h4F\xb5Z\x1c\xfaG\xa3\x98=\xf6\xf5B\x81\xbe\xff\x0e\r.\x1a\xab!) \xc8\xfe\xe2\x91ZF\xb6\xafT\xaaT\xa8)\x8a\xa8TZ-\xec\xa8;\x10g\xb1\x06\xc2h\x16\xd6\xd9\xd0\xd0\xf2\xb1\x1bP\xbc^+U\xac\x06\x87\x0e\f:F\xbbE!\x1a\xf4\n\xf3H\xc7\x03\bvC\x01\xc8\xd0\xca\xf1u\u007f\x15\x99\"b\x05A.\x16N\x83WM\x19\fCJW\x00I\a~$\xc3\xf3xct-\xff\xeb\x93B\x13\xe6\xca-\xf8~b \xd7\x04\x87\xfek4\xdbL\x18\xb4\xaf\xab+\x90F\x02\x81.\x12h>\x9eo\x9f.\xf0\xd3W\xd4\xfdC\x96G\"\x00,\xe4b\xf1r\x1a\xf4i\x9b\xc9D\x9c\xf6j\b\xe26\xf2\xf1\xe9\xd1\xcf\x15\xc5\xfc\u007f10\x18\x85\x1c\u06f7\xe0\x8ax\x1d\xbamF)\x1d\x1d\x12\x81+\xcf\xf3\xf1\\\xe3\x87g\x1b\u046a\u007f\u0338\xe5\xf2\x88\u0152\xa0\x06\x82\x03\t\xb4\x8c(\x88\u0448\xb2\xb0\x82\x85\x8f\r\xb6\x8d\xcb\xff\xeb\xdc\xd9\xc2E\xf5ro\x820\xe4\u02ca\\.\x1d\x85#\x1e\x0fY\xd9\xd1h\xbbix#\x86\xf1\x9f\x91-\xaa\xaf\x8f8\x1c^$\x02\x01!\x06\xbea\x98\xa2\xbc/\x9d_\xb7V\xf6\x9f'\x19Ip\xe6i\xb9B^_\xef\xf1p\x1c'\xe7~\x10j\x93\xf9\xda\xf4\xae\x95\x8bVL\xc6\u04e4\u050d\xfb\xeb\x8dO\x980a\xf2\xe4\u0253&M\x92\xc9&M\x90\xcd\\=W15x\xe1\x12\xcd\x15\x1c\x84w\x18\x1b\u7b9e2S&\x1b\x8f\xc8\xf0\x9cIx\xf6\x04\x84r\u007f\x8e$\x10\x80nb\xe6\u0319S\xa6L\x999e\xe2\xc4\xf5\xab\xe7V\xb3z\xf5\xfa\xf5\x13\xa5\xe0\x8fx\n$@\x90\xc6\xc4\xc0\x18QF\x18\x1a@\xbf\x06\x82D\xc0\xa8\x16\x03\x04\xf9\x8b\x8eU{\x06\r\x01\xf8kd\x88\xf4\xfa\xb1\xf5\xdfl\xfe;Os\x9f\xdb\xd7~>\x98\x00\x00\x00\x00IEND\xaeB`\x82")
-func productionFaviconIcoBytes() ([]byte, error) {
- return _productionFaviconIco, nil
+func productionFirefoxPngBytes() ([]byte, error) {
+ return _productionFirefoxPng, nil
}
-func productionFaviconIco() (*asset, error) {
- bytes, err := productionFaviconIcoBytes()
+func productionFirefoxPng() (*asset, error) {
+ bytes, err := productionFirefoxPngBytes()
if err != nil {
return nil, err
}
- info := bindataFileInfo{name: "production/favicon.ico", size: 501, mode: os.FileMode(420), modTime: time.Unix(1521792948, 0)}
+ info := bindataFileInfo{name: "production/firefox.png", size: 4795, mode: os.FileMode(420), modTime: time.Unix(1522088513, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
var _productionIndexHTML = []byte(`
+
@@ -158,12 +115,49 @@ var _productionIndexHTML = []byte(`
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
`)
@@ -178,25 +172,25 @@ func productionIndexHTML() (*asset, error) {
return nil, err
}
- info := bindataFileInfo{name: "production/index.html", size: 474, mode: os.FileMode(420), modTime: time.Unix(1521792948, 0)}
+ info := bindataFileInfo{name: "production/index.html", size: 1954, mode: os.FileMode(420), modTime: time.Unix(1522088513, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
-var _productionIndex_bundle20180323t081530zJs = []byte(`!function(A){function I(C){if(g[C])return g[C].exports;var e=g[C]={i:C,l:!1,exports:{}};return A[C].call(e.exports,e,e.exports,I),e.l=!0,e.exports}var g={};I.m=A,I.c=g,I.d=function(A,g,C){I.o(A,g)||Object.defineProperty(A,g,{configurable:!1,enumerable:!0,get:C})},I.n=function(A){var g=A&&A.__esModule?function(){return A.default}:function(){return A};return I.d(g,"a",g),g},I.o=function(A,I){return Object.prototype.hasOwnProperty.call(A,I)},I.p="",I(I.s=309)}([function(A,I,g){"use strict";A.exports=g(536)},function(A,I,g){var C=g(11),e=g(49),t=g(29),n=g(30),a=g(50),i=function(A,I,g){var o,l,r,c,d=A&i.F,s=A&i.G,N=A&i.S,M=A&i.P,V=A&i.B,T=s?C:N?C[I]||(C[I]={}):(C[I]||{}).prototype,p=s?e:e[I]||(e[I]={}),U=p.prototype||(p.prototype={});s&&(g=I);for(o in g)l=!d&&T&&void 0!==T[o],r=(l?T:g)[o],c=V&&l?a(r,C):M&&"function"==typeof r?a(Function.call,r):r,T&&n(T,o,r,A&i.U),p[o]!=r&&t(p,o,c),M&&U[o]!=r&&(U[o]=r)};C.core=e,i.F=1,i.G=2,i.S=4,i.P=8,i.B=16,i.W=32,i.U=64,i.R=128,A.exports=i},function(A,I,g){"use strict";I.__esModule=!0,I.default=function(A,I){if(!(A instanceof I))throw new TypeError("Cannot call a class as a function")}},function(A,I,g){"use strict";I.__esModule=!0;var C=g(179),e=function(A){return A&&A.__esModule?A:{default:A}}(C);I.default=function(A,I){if(!A)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!I||"object"!==(void 0===I?"undefined":(0,e.default)(I))&&"function"!=typeof I?A:I}},function(A,I,g){"use strict";function C(A){return A&&A.__esModule?A:{default:A}}I.__esModule=!0;var e=g(690),t=C(e),n=g(694),a=C(n),i=g(179),o=C(i);I.default=function(A,I){if("function"!=typeof I&&null!==I)throw new TypeError("Super expression must either be null or a function, not "+(void 0===I?"undefined":(0,o.default)(I)));A.prototype=(0,a.default)(I&&I.prototype,{constructor:{value:A,enumerable:!1,writable:!0,configurable:!0}}),I&&(t.default?(0,t.default)(A,I):A.__proto__=I)}},function(A,I,g){"use strict";I.__esModule=!0;var C=g(257),e=function(A){return A&&A.__esModule?A:{default:A}}(C);I.default=e.default||function(A){for(var I=1;I=0||Object.prototype.hasOwnProperty.call(A,C)&&(g[C]=A[C]);return g}},function(A,I,g){A.exports=g(579)()},function(A,I,g){"use strict";function C(A){return function(){for(var I=arguments.length,g=Array(I),C=0;C1?I-1:0),C=1;C0?e(C(A),9007199254740991):0}},function(A,I,g){"use strict";var C=function(A,I,g,C,e,t,n,a){if(!A){var i;if(void 0===I)i=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var o=[g,C,e,t,n,a],l=0;i=new Error(I.replace(/%s/g,function(){return o[l++]})),i.name="Invariant Violation"}throw i.framesToPop=1,i}};A.exports=C},function(A,I,g){var C=g(37);A.exports=function(A){return Object(C(A))}},function(A,I,g){"use strict";g.d(I,"c",function(){return C}),g.d(I,"b",function(){return e}),g.d(I,"a",function(){return t}),g.d(I,"d",function(){return n}),g.d(I,"e",function(){return a});var C={LARGE:"large",SMALL:"small",XSMALL:"xsmall"},e={large:"lg",medium:"md",small:"sm",xsmall:"xs",lg:"lg",md:"md",sm:"sm",xs:"xs"},t=["lg","md","sm","xs"],n={SUCCESS:"success",WARNING:"warning",DANGER:"danger",INFO:"info"},a={DEFAULT:"default",PRIMARY:"primary",LINK:"link",INVERSE:"inverse"}},function(A,I,g){"use strict";function C(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(C)}catch(A){console.error(A)}}C(),A.exports=g(537)},function(A,I){var g={}.hasOwnProperty;A.exports=function(A,I){return g.call(A,I)}},function(A,I,g){"use strict";function C(A){return A&&A.__esModule?A:{default:A}}function e(A,I){if(!(A instanceof I))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(I,"__esModule",{value:!0});var t=function(){function A(A,I){for(var g=0;g"+e+""+I+">"};A.exports=function(A,I){var g={};g[A]=I(a),C(C.P+C.F*e(function(){var I=""[A]('"');return I!==I.toLowerCase()||I.split('"').length>3}),"String",g)}},function(A,I,g){var C=g(91),e=g(53),t=g(32),n=g(41),a=g(26),i=g(201),o=Object.getOwnPropertyDescriptor;I.f=g(18)?o:function(A,I){if(A=t(A),I=n(I,!0),i)try{return o(A,I)}catch(A){}if(a(A,I))return e(!C.f.call(A,I),A[I])}},function(A,I,g){var C=g(26),e=g(23),t=g(132)("IE_PROTO"),n=Object.prototype;A.exports=Object.getPrototypeOf||function(A){return A=e(A),C(A,t)?A[t]:"function"==typeof A.constructor&&A instanceof A.constructor?A.constructor.prototype:A instanceof Object?n:null}},function(A,I){var g={}.toString;A.exports=function(A){return g.call(A).slice(8,-1)}},function(A,I){A.exports=function(A){if(void 0==A)throw TypeError("Can't call method on "+A);return A}},function(A,I,g){var C=g(12);A.exports=function(A,I){return!!A&&C(function(){I?A.call(null,function(){},1):A.call(null)})}},function(A,I,g){"use strict";function C(A){return A&&A.__esModule?A:{default:A}}Object.defineProperty(I,"__esModule",{value:!0}),I.downloadCheckedObjects=I.resetCheckedList=I.uncheckObject=I.checkObject=I.downloadObject=I.hideShareObject=I.showShareObject=I.shareObject=I.deleteCheckedObjects=I.removeObject=I.deleteObject=I.setPrefixWritable=I.setCurrentPrefix=I.selectPrefix=I.setSortOrder=I.setSortBy=I.sortObjects=I.fetchObjects=I.appendList=I.setList=I.CHECKED_LIST_RESET=I.CHECKED_LIST_REMOVE=I.CHECKED_LIST_ADD=I.SET_SHARE_OBJECT=I.SET_PREFIX_WRITABLE=I.SET_CURRENT_PREFIX=I.SET_SORT_ORDER=I.SET_SORT_BY=I.REMOVE=I.APPEND_LIST=I.SET_LIST=void 0;var e=Object.assign||function(A){for(var I=1;I1?"-":"";C.href=t,C.download=I.bucketName+n+I.prefix.slice(0,-1)+".zip",C.click(),window.URL.revokeObjectURL(t),C.remove()}},e.send(JSON.stringify(I))})},function(A,I,g){"use strict";function C(A){return!A||"#"===A.trim()}var e=g(5),t=g.n(e),n=g(7),a=g.n(n),i=g(2),o=g.n(i),l=g(3),r=g.n(l),c=g(4),d=g.n(c),s=g(0),N=g.n(s),M=g(8),V=g.n(M),T=g(16),p=g.n(T),U=g(20),E={href:V.a.string,onClick:V.a.func,onKeyDown:V.a.func,disabled:V.a.bool,role:V.a.string,tabIndex:V.a.oneOfType([V.a.number,V.a.string]),componentClass:p.a},u={componentClass:"a"},R=function(A){function I(g,C){o()(this,I);var e=r()(this,A.call(this,g,C));return e.handleClick=e.handleClick.bind(e),e.handleKeyDown=e.handleKeyDown.bind(e),e}return d()(I,A),I.prototype.handleClick=function(A){var I=this.props,g=I.disabled,e=I.href,t=I.onClick;if((g||C(e))&&A.preventDefault(),g)return void A.stopPropagation();t&&t(A)},I.prototype.handleKeyDown=function(A){" "===A.key&&(A.preventDefault(),this.handleClick(A))},I.prototype.render=function(){var A=this.props,I=A.componentClass,g=A.disabled,e=A.onKeyDown,n=a()(A,["componentClass","disabled","onKeyDown"]);return C(n.href)&&(n.role=n.role||"button",n.href=n.href||"#"),g&&(n.tabIndex=-1,n.style=t()({pointerEvents:"none"},n.style)),N.a.createElement(I,t()({},n,{onClick:this.handleClick,onKeyDown:Object(U.a)(this.handleKeyDown,e)}))},I}(N.a.Component);R.propTypes=E,R.defaultProps=u,I.a=R},function(A,I,g){var C=g(15);A.exports=function(A,I){if(!C(A))return A;var g,e;if(I&&"function"==typeof(g=A.toString)&&!C(e=g.call(A)))return e;if("function"==typeof(g=A.valueOf)&&!C(e=g.call(A)))return e;if(!I&&"function"==typeof(g=A.toString)&&!C(e=g.call(A)))return e;throw TypeError("Can't convert object to primitive value")}},function(A,I,g){var C=g(1),e=g(49),t=g(12);A.exports=function(A,I){var g=(e.Object||{})[A]||Object[A],n={};n[A]=I(g),C(C.S+C.F*t(function(){g(1)}),"Object",n)}},function(A,I,g){var C=g(50),e=g(90),t=g(23),n=g(21),a=g(407);A.exports=function(A,I){var g=1==A,i=2==A,o=3==A,l=4==A,r=6==A,c=5==A||r,d=I||a;return function(I,a,s){for(var N,M,V=t(I),T=e(V),p=C(a,s,3),U=n(T.length),E=0,u=g?d(I,U):i?d(I,0):void 0;U>E;E++)if((c||E in T)&&(N=T[E],M=p(N,E,V),A))if(g)u[E]=M;else if(M)switch(A){case 3:return!0;case 5:return N;case 6:return E;case 2:u.push(N)}else if(l)return!1;return r?-1:o||l?l:u}}},function(A,I,g){"use strict";Object.defineProperty(I,"__esModule",{value:!0});var C=I.SET="alert/SET",e=I.CLEAR="alert/CLEAR",t=I.alertId=0;I.set=function(A){var g=(I.alertId=t+=1,t-1);return function(I,t){"danger"!==A.type&&setTimeout(function(){I({type:e,alert:{id:g}})},5e3),I({type:C,alert:Object.assign({},A,{id:g})})}},I.clear=function(){return{type:e}}},function(A,I,g){"use strict";function C(A){if(A&&A.__esModule)return A;var I={};if(null!=A)for(var g in A)Object.prototype.hasOwnProperty.call(A,g)&&(I[g]=A[g]);return I.default=A,I}function e(A){return A&&A.__esModule?A:{default:A}}Object.defineProperty(I,"__esModule",{value:!0}),I.hideBucketPolicy=I.showBucketPolicy=I.setPolicies=I.fetchPolicies=I.hideMakeBucketModal=I.showMakeBucketModal=I.removeBucket=I.addBucket=I.deleteBucket=I.makeBucket=I.setCurrentBucket=I.selectBucket=I.setFilter=I.setList=I.fetchBuckets=I.SET_POLICIES=I.SHOW_BUCKET_POLICY=I.SHOW_MAKE_BUCKET_MODAL=I.SET_CURRENT_BUCKET=I.SET_FILTER=I.REMOVE=I.ADD=I.SET_LIST=void 0;var t=g(27),n=e(t),a=g(95),i=e(a),o=g(44),l=C(o),r=g(39),c=C(r),d=g(167),s=I.SET_LIST="buckets/SET_LIST",N=I.ADD="buckets/ADD",M=I.REMOVE="buckets/REMOVE",V=I.SET_FILTER="buckets/SET_FILTER",T=I.SET_CURRENT_BUCKET="buckets/SET_CURRENT_BUCKET",p=I.SHOW_MAKE_BUCKET_MODAL="buckets/SHOW_MAKE_BUCKET_MODAL",U=I.SHOW_BUCKET_POLICY="buckets/SHOW_BUCKET_POLICY",E=I.SET_POLICIES="buckets/SET_POLICIES",u=I.fetchBuckets=function(){return function(A){return n.default.ListBuckets().then(function(I){var g=I.buckets?I.buckets.map(function(A){return A.name}):[];if(A(R(g)),g.length>0){var C=(0,d.pathSlice)(i.default.location.pathname),e=C.bucket,t=C.prefix;A(e&&g.indexOf(e)>-1?Z(e,t):Z(g[0]))}else A(Z("")),i.default.replace("/")})}},R=I.setList=function(A){return{type:s,buckets:A}},Z=(I.setFilter=function(A){return{type:V,filter:A}},I.selectBucket=function(A,I){return function(g){g(m(A)),g(c.selectPrefix(I||""))}}),m=I.setCurrentBucket=function(A){return{type:T,bucket:A}},h=(I.makeBucket=function(A){return function(I){return n.default.MakeBucket({bucketName:A}).then(function(){I(h(A)),I(Z(A))}).catch(function(A){return I(l.set({type:"danger",message:A.message}))})}},I.deleteBucket=function(A){return function(I){return n.default.DeleteBucket({bucketName:A}).then(function(){I(l.set({type:"info",message:"Bucket '"+A+"' has been deleted."})),I(F(A)),I(u())}).catch(function(A){I(l.set({type:"danger",message:A.message}))})}},I.addBucket=function(A){return{type:N,bucket:A}}),F=I.removeBucket=function(A){return{type:M,bucket:A}},W=(I.showMakeBucketModal=function(){return{type:p,show:!0}},I.hideMakeBucketModal=function(){return{type:p,show:!1}},I.fetchPolicies=function(A){return function(I){return n.default.ListAllBucketPolicies({bucketName:A}).then(function(A){var g=A.policies;I(W(g?g:[]))}).catch(function(A){I(l.set({type:"danger",message:A.message}))})}},I.setPolicies=function(A){return{type:E,policies:A}});I.showBucketPolicy=function(){return{type:U,show:!0}},I.hideBucketPolicy=function(){return{type:U,show:!1}}},function(A,I,g){"use strict";Object.defineProperty(I,"__esModule",{value:!0});var C=g(661);g.d(I,"Accordion",function(){return C.a});var e=g(701);g.d(I,"Alert",function(){return e.a});var t=g(704);g.d(I,"Badge",function(){return t.a});var n=g(705);g.d(I,"Breadcrumb",function(){return n.a});var a=g(271);g.d(I,"BreadcrumbItem",function(){return a.a});var i=g(102);g.d(I,"Button",function(){return i.a});var o=g(187);g.d(I,"ButtonGroup",function(){return o.a});var l=g(706);g.d(I,"ButtonToolbar",function(){return l.a});var r=g(707);g.d(I,"Carousel",function(){return r.a});var c=g(272);g.d(I,"CarouselItem",function(){return c.a});var d=g(717);g.d(I,"Checkbox",function(){return d.a});var s=g(718);g.d(I,"Clearfix",function(){return s.a});var N=g(186);g.d(I,"CloseButton",function(){return N.a});var M=g(719);g.d(I,"ControlLabel",function(){return M.a});var V=g(720);g.d(I,"Col",function(){return V.a});var T=g(190);g.d(I,"Collapse",function(){return T.a});var p=g(122);g.d(I,"Dropdown",function(){return p.a});var U=g(739);g.d(I,"DropdownButton",function(){return U.a});var E=g(125);g.d(I,"Fade",function(){return E.a});var u=g(740);g.d(I,"Form",function(){return u.a});var R=g(741);g.d(I,"FormControl",function(){return R.a});var Z=g(744);g.d(I,"FormGroup",function(){return Z.a});var m=g(189);g.d(I,"Glyphicon",function(){return m.a});var h=g(282);g.d(I,"Grid",function(){return h.a});var F=g(745);g.d(I,"HelpBlock",function(){return F.a});var W=g(746);g.d(I,"Image",function(){return W.a});var Q=g(747);g.d(I,"InputGroup",function(){return Q.a});var x=g(750);g.d(I,"Jumbotron",function(){return x.a});var S=g(751);g.d(I,"Label",function(){return S.a});var b=g(752);g.d(I,"ListGroup",function(){return b.a});var B=g(283);g.d(I,"ListGroupItem",function(){return B.a});var k=g(126);g.d(I,"Media",function(){return k.a});var z=g(759);g.d(I,"MenuItem",function(){return z.a});var D=g(760);g.d(I,"Modal",function(){return D.a});var j=g(290);g.d(I,"ModalBody",function(){return j.a});var Y=g(291);g.d(I,"ModalFooter",function(){return Y.a});var y=g(292);g.d(I,"ModalHeader",function(){return y.a});var w=g(293);g.d(I,"ModalTitle",function(){return w.a});var G=g(294);g.d(I,"Nav",function(){return G.a});var f=g(786);g.d(I,"Navbar",function(){return f.a});var v=g(295);g.d(I,"NavbarBrand",function(){return v.a});var J=g(790);g.d(I,"NavDropdown",function(){return J.a});var O=g(296);g.d(I,"NavItem",function(){return O.a});var L=g(297);g.d(I,"Overlay",function(){return L.a});var X=g(797);g.d(I,"OverlayTrigger",function(){return X.a});var H=g(798);g.d(I,"PageHeader",function(){return H.a});var K=g(799);g.d(I,"PageItem",function(){return K.a});var P=g(801);g.d(I,"Pager",function(){return P.a});var q=g(802);g.d(I,"Pagination",function(){return q.a});var _=g(804);g.d(I,"Panel",function(){return _.a});var $=g(268);g.d(I,"PanelGroup",function(){return $.a});var AA=g(810);g.d(I,"Popover",function(){return AA.a});var IA=g(811);g.d(I,"ProgressBar",function(){return IA.a});var gA=g(812);g.d(I,"Radio",function(){return gA.a});var CA=g(813);g.d(I,"ResponsiveEmbed",function(){return CA.a});var eA=g(814);g.d(I,"Row",function(){return eA.a});var tA=g(40);g.d(I,"SafeAnchor",function(){return tA.a});var nA=g(815);g.d(I,"SplitButton",function(){return nA.a});var aA=g(817);g.d(I,"Tab",function(){return aA.a});var iA=g(196);g.d(I,"TabContainer",function(){return iA.a});var oA=g(197);g.d(I,"TabContent",function(){return oA.a});var lA=g(818);g.d(I,"Table",function(){return lA.a});var rA=g(303);g.d(I,"TabPane",function(){return rA.a});var cA=g(819);g.d(I,"Tabs",function(){return cA.a});var dA=g(820);g.d(I,"Thumbnail",function(){return dA.a});var sA=g(304);g.d(I,"ToggleButton",function(){return sA.a});var NA=g(821);g.d(I,"ToggleButtonGroup",function(){return NA.a});var MA=g(822);g.d(I,"Tooltip",function(){return MA.a});var VA=g(823);g.d(I,"Well",function(){return VA.a});var TA=g(824);g.d(I,"utils",function(){return TA})},function(A,I){var g=A.exports={version:"2.4.0"};"number"==typeof __e&&(__e=g)},function(A,I,g){var C=g(175)("wks"),e=g(119),t=g(59).Symbol,n="function"==typeof t;(A.exports=function(A){return C[A]||(C[A]=n&&t[A]||(n?t:e)("Symbol."+A))}).store=C},function(A,I){var g=A.exports={version:"2.4.0"};"number"==typeof __e&&(__e=g)},function(A,I,g){var C=g(31);A.exports=function(A,I,g){if(C(A),void 0===I)return A;switch(g){case 1:return function(g){return A.call(I,g)};case 2:return function(g,C){return A.call(I,g,C)};case 3:return function(g,C,e){return A.call(I,g,C,e)}}return function(){return A.apply(I,arguments)}}},function(A,I,g){"use strict";if(g(18)){var C=g(62),e=g(11),t=g(12),n=g(1),a=g(113),i=g(155),o=g(50),l=g(68),r=g(53),c=g(29),d=g(69),s=g(55),N=g(21),M=g(64),V=g(41),T=g(26),p=g(207),U=g(92),E=g(15),u=g(23),R=g(147),Z=g(65),m=g(35),h=g(66).f,F=g(149),W=g(61),Q=g(17),x=g(43),S=g(105),b=g(152),B=g(151),k=g(78),z=g(109),D=g(67),j=g(150),Y=g(216),y=g(19),w=g(34),G=y.f,f=w.f,v=e.RangeError,J=e.TypeError,O=e.Uint8Array,L=Array.prototype,X=i.ArrayBuffer,H=i.DataView,K=x(0),P=x(2),q=x(3),_=x(4),$=x(5),AA=x(6),IA=S(!0),gA=S(!1),CA=B.values,eA=B.keys,tA=B.entries,nA=L.lastIndexOf,aA=L.reduce,iA=L.reduceRight,oA=L.join,lA=L.sort,rA=L.slice,cA=L.toString,dA=L.toLocaleString,sA=Q("iterator"),NA=Q("toStringTag"),MA=W("typed_constructor"),VA=W("def_constructor"),TA=a.CONSTR,pA=a.TYPED,UA=a.VIEW,EA=x(1,function(A,I){return FA(b(A,A[VA]),I)}),uA=t(function(){return 1===new O(new Uint16Array([1]).buffer)[0]}),RA=!!O&&!!O.prototype.set&&t(function(){new O(1).set({})}),ZA=function(A,I){if(void 0===A)throw J("Wrong length!");var g=+A,C=N(A);if(I&&!p(g,C))throw v("Wrong length!");return C},mA=function(A,I){var g=s(A);if(g<0||g%I)throw v("Wrong offset!");return g},hA=function(A){if(E(A)&&pA in A)return A;throw J(A+" is not a typed array!")},FA=function(A,I){if(!(E(A)&&MA in A))throw J("It is not a typed array constructor!");return new A(I)},WA=function(A,I){return QA(b(A,A[VA]),I)},QA=function(A,I){for(var g=0,C=I.length,e=FA(A,C);C>g;)e[g]=I[g++];return e},xA=function(A,I,g){G(A,I,{get:function(){return this._d[g]}})},SA=function(A){var I,g,C,e,t,n,a=u(A),i=arguments.length,l=i>1?arguments[1]:void 0,r=void 0!==l,c=F(a);if(void 0!=c&&!R(c)){for(n=c.call(a),C=[],I=0;!(t=n.next()).done;I++)C.push(t.value);a=C}for(r&&i>2&&(l=o(l,arguments[2],2)),I=0,g=N(a.length),e=FA(this,g);g>I;I++)e[I]=r?l(a[I],I):a[I];return e},bA=function(){for(var A=0,I=arguments.length,g=FA(this,I);I>A;)g[A]=arguments[A++];return g},BA=!!O&&t(function(){dA.call(new O(1))}),kA=function(){return dA.apply(BA?rA.call(hA(this)):hA(this),arguments)},zA={copyWithin:function(A,I){return Y.call(hA(this),A,I,arguments.length>2?arguments[2]:void 0)},every:function(A){return _(hA(this),A,arguments.length>1?arguments[1]:void 0)},fill:function(A){return j.apply(hA(this),arguments)},filter:function(A){return WA(this,P(hA(this),A,arguments.length>1?arguments[1]:void 0))},find:function(A){return $(hA(this),A,arguments.length>1?arguments[1]:void 0)},findIndex:function(A){return AA(hA(this),A,arguments.length>1?arguments[1]:void 0)},forEach:function(A){K(hA(this),A,arguments.length>1?arguments[1]:void 0)},indexOf:function(A){return gA(hA(this),A,arguments.length>1?arguments[1]:void 0)},includes:function(A){return IA(hA(this),A,arguments.length>1?arguments[1]:void 0)},join:function(A){return oA.apply(hA(this),arguments)},lastIndexOf:function(A){return nA.apply(hA(this),arguments)},map:function(A){return EA(hA(this),A,arguments.length>1?arguments[1]:void 0)},reduce:function(A){return aA.apply(hA(this),arguments)},reduceRight:function(A){return iA.apply(hA(this),arguments)},reverse:function(){for(var A,I=this,g=hA(I).length,C=Math.floor(g/2),e=0;e1?arguments[1]:void 0)},sort:function(A){return lA.call(hA(this),A)},subarray:function(A,I){var g=hA(this),C=g.length,e=M(A,C);return new(b(g,g[VA]))(g.buffer,g.byteOffset+e*g.BYTES_PER_ELEMENT,N((void 0===I?C:M(I,C))-e))}},DA=function(A,I){return WA(this,rA.call(hA(this),A,I))},jA=function(A){hA(this);var I=mA(arguments[1],1),g=this.length,C=u(A),e=N(C.length),t=0;if(e+I>g)throw v("Wrong length!");for(;t255?255:255&C),e.v[s](g*I+e.o,C,uA)},Q=function(A,I){G(A,I,{get:function(){return F(this,I)},set:function(A){return W(this,I,A)},enumerable:!0})};p?(M=g(function(A,g,C,e){l(A,M,o,"_d");var t,n,a,i,r=0,d=0;if(E(g)){if(!(g instanceof X||"ArrayBuffer"==(i=U(g))||"SharedArrayBuffer"==i))return pA in g?QA(M,g):SA.call(M,g);t=g,d=mA(C,I);var s=g.byteLength;if(void 0===e){if(s%I)throw v("Wrong length!");if((n=s-d)<0)throw v("Wrong length!")}else if((n=N(e)*I)+d>s)throw v("Wrong length!");a=n/I}else a=ZA(g,!0),n=a*I,t=new X(n);for(c(A,"_d",{b:t,o:d,l:n,e:a,v:new H(t)});r0?C:g)(A)}},function(A,I,g){A.exports=g(551)()},function(A,I,g){"use strict";Object.defineProperty(I,"__esModule",{value:!0});var C=window.location.pathname;I.minioBrowserPrefix=C.slice(0,C.indexOf("/",1)),I.READ_ONLY="readonly",I.WRITE_ONLY="writeonly",I.READ_WRITE="readwrite",I.SHARE_OBJECT_EXPIRY_DAYS=5,I.SHARE_OBJECT_EXPIRY_HOURS=0,I.SHARE_OBJECT_EXPIRY_MINUTES=0},function(A,I,g){var C=g(59),e=g(47),t=g(169),n=g(84),a=function(A,I,g){var i,o,l,r=A&a.F,c=A&a.G,d=A&a.S,s=A&a.P,N=A&a.B,M=A&a.W,V=c?e:e[I]||(e[I]={}),T=V.prototype,p=c?C:d?C[I]:(C[I]||{}).prototype;c&&(g=I);for(i in g)(o=!r&&p&&void 0!==p[i])&&i in V||(l=o?p[i]:g[i],V[i]=c&&"function"!=typeof p[i]?g[i]:N&&o?t(l,C):M&&p[i]==l?function(A){var I=function(I,g,C){if(this instanceof A){switch(arguments.length){case 0:return new A;case 1:return new A(I);case 2:return new A(I,g)}return new A(I,g,C)}return A.apply(this,arguments)};return I.prototype=A.prototype,I}(l):s&&"function"==typeof l?t(Function.call,l):l,s&&((V.virtual||(V.virtual={}))[i]=l,A&a.R&&T&&!T[i]&&n(T,i,l)))};a.F=1,a.G=2,a.S=4,a.P=8,a.B=16,a.W=32,a.U=64,a.R=128,A.exports=a},function(A,I){var g=A.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=g)},function(A,I,g){var C=g(261),e=g(172);A.exports=function(A){return C(e(A))}},function(A,I){var g=0,C=Math.random();A.exports=function(A){return"Symbol(".concat(void 0===A?"":A,")_",(++g+C).toString(36))}},function(A,I){A.exports=!1},function(A,I,g){var C=g(203),e=g(133);A.exports=Object.keys||function(A){return C(A,e)}},function(A,I,g){var C=g(55),e=Math.max,t=Math.min;A.exports=function(A,I){return A=C(A),A<0?e(A+I,0):t(A,I)}},function(A,I,g){var C=g(10),e=g(204),t=g(133),n=g(132)("IE_PROTO"),a=function(){},i=function(){var A,I=g(130)("iframe"),C=t.length;for(I.style.display="none",g(135).appendChild(I),I.src="javascript:",A=I.contentWindow.document,A.open(),A.write("