@enso-ui/ui 6.2.7 → 7.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/LICENSE +1 -1
  2. package/bulma/index.js +2 -2
  3. package/package.json +34 -31
  4. package/renderless/components/settings/index.js +1 -8
  5. package/renderless/index.js +2 -2
  6. package/src/bulma/components/AppFooter.vue +11 -11
  7. package/src/bulma/components/Breadcrumbs.vue +32 -5
  8. package/src/bulma/components/VueAside.vue +7 -11
  9. package/src/bulma/components/menu/Sidebar.vue +26 -10
  10. package/src/bulma/components/navbar/AppUpdate.vue +38 -14
  11. package/src/bulma/components/navbar/Navbar.vue +17 -15
  12. package/src/bulma/components/navbar/NavbarItem.vue +2 -4
  13. package/src/bulma/components/navbar/Search.vue +6 -5
  14. package/src/bulma/components/navbar/SettingsControl.vue +6 -5
  15. package/src/bulma/components/settings/Settings.vue +17 -3
  16. package/src/bulma/components/settings/SidebarState.vue +1 -2
  17. package/src/bulma/layouts/Default.vue +8 -22
  18. package/src/bulma/pages/MaintenanceMode.vue +5 -7
  19. package/src/bulma/pages/NotFound.vue +6 -5
  20. package/src/bulma/pages/Unauthorized.vue +5 -4
  21. package/src/bulma/styles/components/form.scss +151 -0
  22. package/src/bulma/styles/components/tables.scss +695 -0
  23. package/src/bulma/styles/components/vue-filter.scss +173 -0
  24. package/src/bulma/styles/components.sass +3 -0
  25. package/src/core/Root.vue +26 -7
  26. package/src/core/app.js +1 -1
  27. package/src/core/components/AppFooter.vue +2 -6
  28. package/src/core/components/DocumentTitle.vue +8 -3
  29. package/src/core/components/PageHeader.vue +7 -3
  30. package/src/core/components/menu/Sidebar.vue +2 -6
  31. package/src/core/components/navbar/Navbar.vue +17 -19
  32. package/src/core/components/navbar/Search.vue +10 -3
  33. package/src/core/components/navbar/SettingsControl.vue +4 -2
  34. package/src/core/components/settings/Settings.vue +6 -20
  35. package/src/core/components/settings/SidebarState.vue +5 -7
  36. package/src/core/layouts/Default.vue +96 -65
  37. package/src/core/layouts/Home.vue +27 -28
  38. package/src/core/services/contexts.js +51 -11
  39. package/src/core/services/errorHandler.js +4 -4
  40. package/src/core/services/pinia.js +7 -0
  41. package/src/core/services/resources.js +22 -17
  42. package/src/core/services/router.js +2 -3
  43. package/src/icons.js +8 -2
  44. package/src/middleware/before/auth.js +9 -5
  45. package/src/middleware/before/guest.js +6 -2
  46. package/src/middleware/before.js +5 -4
  47. package/src/modules/importers/routeImporter.js +23 -0
  48. package/src/modules/plugins/bootEnums.js +10 -1
  49. package/src/modules/plugins/date-fns/format.js +11 -6
  50. package/src/modules/plugins/date-fns/formatDistance.js +2 -2
  51. package/src/modules/plugins/i18n.js +7 -5
  52. package/src/modules/plugins/route.js +3 -3
  53. package/src/pinia/app.js +75 -0
  54. package/src/pinia/layout.js +115 -0
  55. package/src/pinia/loadState.js +78 -0
  56. package/src/pinia/preferences.js +90 -0
  57. package/src/pinia/websockets.js +48 -0
  58. package/src/core/services/store.js +0 -26
  59. package/src/modules/importers/storeImporter.js +0 -8
  60. package/src/modules/importers/themeImporter.js +0 -5
  61. package/src/modules/store/layout/navbar.js +0 -8
  62. package/src/modules/store/layout/settings.js +0 -7
  63. package/src/modules/store/layout/sidebar.js +0 -22
  64. package/src/modules/store/layout.js +0 -72
  65. package/src/modules/store/preferences.js +0 -80
  66. package/src/modules/store/websockets.js +0 -39
  67. package/src/modules/store.js +0 -115
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2017 laravel-enso
3
+ Copyright (c) 2026 laravel-enso
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/bulma/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import App from '../src/bulma/App.vue';
1
+ import Root from '../src/bulma/Root.vue';
2
2
 
3
- export default App;
3
+ export default Root;
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@enso-ui/ui",
3
- "version": "6.2.7",
3
+ "version": "7.0.1",
4
4
  "description": "Laravel Enso UI",
5
- "main": "index.js",
5
+ "main": "bulma/index.js",
6
6
  "scripts": {
7
7
  "test": "echo \"Error: no test specified\" && exit 1"
8
8
  },
@@ -17,7 +17,7 @@
17
17
  "template"
18
18
  ],
19
19
  "author": "Adrian Ocneanu <aocneanu@gmail.com>",
20
- "license": "ISC",
20
+ "license": "MIT",
21
21
  "bugs": {
22
22
  "url": "https://github.com/enso-ui/ui/issues"
23
23
  },
@@ -57,44 +57,47 @@
57
57
  "@enso-ui/switch": "^2.0",
58
58
  "@enso-ui/tables": "^3.0",
59
59
  "@enso-ui/tabs": "^2.0",
60
- "@enso-ui/themes": "^3.0",
61
60
  "@enso-ui/toastr": "^3.0",
62
61
  "@enso-ui/transitions": "^2.0",
63
62
  "@enso-ui/typeahead": "^3.0",
64
63
  "@enso-ui/uploader": "^2.0",
65
64
  "@enso-ui/user-groups": "^3.0",
66
65
  "@enso-ui/users": "^3.0",
67
- "@fortawesome/fontawesome-free": "^5.2.0",
68
- "@fortawesome/fontawesome-svg-core": "^1.2.2",
69
- "@fortawesome/free-brands-svg-icons": "^5.11.2",
70
- "@fortawesome/free-regular-svg-icons": "^5.2.0",
71
- "@fortawesome/free-solid-svg-icons": "^5.11.2",
72
- "@fortawesome/vue-fontawesome": "3.0.0-5",
66
+ "tiny-emitter": "^2.1.0"
67
+ },
68
+ "peerDependencies": {
69
+ "@fortawesome/fontawesome-svg-core": "^7.2.0",
70
+ "@fortawesome/free-brands-svg-icons": "^7.2.0",
71
+ "@fortawesome/free-solid-svg-icons": "^7.2.0",
72
+ "@fortawesome/vue-fontawesome": "3.1.3",
73
+ "@sentry/browser": "^6.16.1",
73
74
  "@sentry/tracing": "^6.16.1",
74
75
  "@sentry/vue": "^6.16.1",
75
- "animate.css": "^4.0.0",
76
- "axios": "^0.27.0",
77
- "bulma": "^0.9.0",
78
- "flag-icon-css": "^3.0.0",
79
- "laravel-echo": "^1.5.3",
80
- "lodash": "^4.17.11",
81
- "pusher-js": "^7.0.0",
82
- "tiny-emitter": "^2.1.0",
76
+ "axios": "^1.0.0",
77
+ "bulma": "^1.0.0",
78
+ "date-fns": "^2.0.0 || ^4.0.0",
79
+ "laravel-echo": "^1.0.0 || ^2.0.0",
80
+ "pinia": "^3.0.3",
81
+ "pusher-js": "^7.0.0 || ^8.0.0",
83
82
  "v-tooltip": "^4.0.0-beta.2",
84
83
  "vue": "^3.0",
85
- "vue-router": "^4.0.0",
86
- "vuedraggable": "^4.1.0",
87
- "vuex": "^4.0.0"
84
+ "vue-router": "^4.0.0"
88
85
  },
89
- "devDependencies": {
90
- "@vue/cli-plugin-babel": "5.0.0-beta.6",
91
- "@vue/cli-plugin-eslint": "5.0.0-beta.6",
92
- "@vue/eslint-config-airbnb": "^5.0.0",
93
- "autoprefixer": "^9.6.1",
94
- "babel-eslint": "^10.0.1",
95
- "cross-env": "^6.0.0",
96
- "eslint": "^7.0.0",
97
- "eslint-import-resolver-alias": "^1.1.2",
98
- "eslint-plugin-vue": "^8.0.3"
86
+ "peerDependenciesMeta": {
87
+ "@sentry/browser": {
88
+ "optional": true
89
+ },
90
+ "@sentry/tracing": {
91
+ "optional": true
92
+ },
93
+ "@sentry/vue": {
94
+ "optional": true
95
+ },
96
+ "laravel-echo": {
97
+ "optional": true
98
+ },
99
+ "pusher-js": {
100
+ "optional": true
101
+ }
99
102
  }
100
103
  }
@@ -1,13 +1,6 @@
1
- import BookmarksState from '../../../src/core/components/settings/BookmarksState.vue';
2
- import KeyCollector from '../../../src/core/components/settings/KeyCollector.vue';
3
- import LanguageSelector from '../../../src/core/components/settings/LanguageSelector.vue';
4
1
  import SidebarState from '../../../src/core/components/settings/SidebarState.vue';
5
2
  import Settings from '../../../src/core/components/settings/Settings.vue';
6
- import ThemeSelector from '../../../src/core/components/settings/ThemeSelector.vue';
7
- import ToastrPosition from '../../../src/core/components/settings/ToastrPosition.vue';
8
- import Tutorial from '../../../src/core/components/settings/Tutorial.vue';
9
3
 
10
4
  export {
11
- BookmarksState, KeyCollector, LanguageSelector, SidebarState, Settings, ThemeSelector,
12
- ToastrPosition, Tutorial,
5
+ SidebarState, Settings,
13
6
  };
@@ -1,3 +1,3 @@
1
- import App from '../src/core/App.vue';
1
+ import Root from '../src/core/Root.vue';
2
2
 
3
- export default App;
3
+ export default Root;
@@ -10,7 +10,7 @@
10
10
  </strong>
11
11
  {{ i18n('built with') }}
12
12
  <span class="icon has-text-danger">
13
- <fa icon="heart"/>
13
+ <fa :icon="faHeart"/>
14
14
  </span>
15
15
  <span class="ml-1">
16
16
  +
@@ -60,7 +60,7 @@
60
60
  <a href="https://github.com/laravel-enso/enso"
61
61
  target="_blank">
62
62
  <span class="icon">
63
- <fa :icon="['fab', 'github']"/>
63
+ <fa :icon="faGithub"/>
64
64
  </span>
65
65
  </a>
66
66
  </div>
@@ -70,42 +70,42 @@
70
70
 
71
71
  <script>
72
72
  import { FontAwesomeIcon as Fa } from '@fortawesome/vue-fontawesome';
73
- import { library } from '@fortawesome/fontawesome-svg-core';
74
73
  import { faHeart } from '@fortawesome/free-solid-svg-icons';
75
74
  import { faGithub } from '@fortawesome/free-brands-svg-icons';
76
75
  import BaseAppFooter from '../../core/components/AppFooter.vue';
77
76
 
78
- library.add(faHeart, faGithub);
79
-
80
77
  export default {
81
78
  name: 'AppFooter',
82
79
 
83
80
  components: { BaseAppFooter, Fa },
84
81
 
85
82
  inject: ['i18n'],
83
+
84
+ data: () => ({
85
+ faGithub,
86
+ faHeart,
87
+ }),
86
88
  };
87
89
  </script>
88
90
 
89
91
  <style lang="scss">
90
- @import '@enso-ui/themes/bulma/variables';
91
-
92
92
  .footer {
93
93
  background: inherit;
94
94
  [dir='ltr'] & {
95
- margin-left: $sidebar-width;
95
+ margin-left: var(--enso-sidebar-width);
96
96
  transition: margin-left .5s, width .5s;
97
97
  }
98
98
  [dir='rtl'] & {
99
- margin-right: $sidebar-width;
99
+ margin-right: var(--enso-sidebar-width);
100
100
  transition: margin-right .5s, width .5s;
101
101
  }
102
102
 
103
103
  &.sidebar-collapsed {
104
104
  [dir='ltr'] & {
105
- margin-left: $sidebar-collapsed-width;
105
+ margin-left: var(--enso-sidebar-collapsed-width);
106
106
  }
107
107
  [dir='rtl'] & {
108
- margin-right: $sidebar-collapsed-width;
108
+ margin-right: var(--enso-sidebar-collapsed-width);
109
109
  }
110
110
  }
111
111
 
@@ -3,16 +3,18 @@
3
3
  <ul>
4
4
  <core-breadcrumbs>
5
5
  <template #default="{ breadcrumbs, hasNavigation }">
6
- <li v-for="breadcrumb in breadcrumbs"
6
+ <li v-for="(breadcrumb, index) in breadcrumbs"
7
7
  :key="breadcrumb.name"
8
- :class="{'is-active': !hasNavigation(breadcrumb)}">
9
- <router-link v-if="breadcrumb.route"
8
+ :class="{ 'is-active': index === breadcrumbs.length - 1 }">
9
+ <router-link v-if="hasNavigation(breadcrumb)"
10
+ class="breadcrumb-link"
10
11
  :to="{ name: breadcrumb.route }">
11
12
  {{ i18n(breadcrumb.name) }}
12
13
  </router-link>
13
- <a v-else>
14
+ <span class="breadcrumb-link breadcrumb-current"
15
+ v-else>
14
16
  {{ i18n(breadcrumb.name) }}
15
- </a>
17
+ </span>
16
18
  </li>
17
19
  </template>
18
20
  </core-breadcrumbs>
@@ -31,3 +33,28 @@ export default {
31
33
  inject: ['i18n'],
32
34
  };
33
35
  </script>
36
+
37
+ <style lang="scss">
38
+ .breadcrumb {
39
+ color: var(--bulma-text-light);
40
+
41
+ &.has-dot-separator li + li::before {
42
+ color: var(--bulma-grey-light);
43
+ }
44
+
45
+ .breadcrumb-link {
46
+ display: flex;
47
+ align-items: center;
48
+ color: inherit;
49
+ padding: var(--bulma-breadcrumb-item-padding-vertical) var(--bulma-breadcrumb-item-padding-horizontal);
50
+ }
51
+
52
+ li:first-child .breadcrumb-link {
53
+ padding-inline-start: 0;
54
+ }
55
+
56
+ li.is-active {
57
+ color: var(--bulma-text-strong);
58
+ }
59
+ }
60
+ </style>
@@ -11,20 +11,16 @@ export default {
11
11
  </script>
12
12
 
13
13
  <style lang="scss">
14
- @import '@enso-ui/themes/bulma/variables';
15
-
16
14
  .aside {
17
15
  position: fixed;
18
16
  bottom: 0;
19
- top: $navbar-height;
20
- padding-top: 20px;
21
- padding-bottom: 20px;
22
- width: $sidebar-width;
23
- font-size: 0.95em;
24
- font-family: $family-secondary;
17
+ top: var(--bulma-navbar-height);
18
+ padding-top: 1.25rem;
19
+ padding-bottom: 1.25rem;
20
+ width: var(--enso-sidebar-width);
25
21
  max-height: 100vh;
26
- z-index: 2;
27
- -webkit-box-shadow: 0 1px 1px hsla(0,0%,4%,.65);
28
- box-shadow: 0 1px 1px hsla(0,0%,4%,.65);
22
+ z-index: 4;
23
+ background: var(--enso-shell-surface);
24
+ border-right: 1px solid var(--bulma-border);
29
25
  }
30
26
  </style>
@@ -4,12 +4,14 @@
4
4
  <p class="menu-label is-bold has-text-centered">
5
5
  {{ i18n("Menu") }}
6
6
  </p>
7
- <core-sidebar>
8
- <template #default="{ menus }">
9
- <menus v-bind="$attrs"
10
- :menus="menus"/>
11
- </template>
12
- </core-sidebar>
7
+ <div class="sidebar-scroll no-scrollbars">
8
+ <core-sidebar>
9
+ <template #default="{ menus }">
10
+ <menus v-bind="$attrs"
11
+ :menus="menus"/>
12
+ </template>
13
+ </core-sidebar>
14
+ </div>
13
15
  </vue-aside>
14
16
  </template>
15
17
 
@@ -30,14 +32,28 @@ export default {
30
32
  </script>
31
33
 
32
34
  <style lang="scss">
33
- @import '@enso-ui/themes/bulma/variables';
34
-
35
35
  .aside.sidebar {
36
- overflow-y: auto;
36
+ display: flex;
37
+ flex-direction: column;
38
+ overflow: visible;
37
39
  transition: width .5s;
38
40
 
41
+ .menu-label {
42
+ margin-bottom: 0.8rem;
43
+ flex: 0 0 auto;
44
+ font-size: 0.8rem;
45
+ font-weight: 600;
46
+ }
47
+
48
+ .sidebar-scroll {
49
+ flex: 1 1 auto;
50
+ min-height: 0;
51
+ overflow-y: auto;
52
+ overflow-x: visible;
53
+ }
54
+
39
55
  &.is-collapsed {
40
- width: $sidebar-collapsed-width;
56
+ width: var(--enso-sidebar-collapsed-width);
41
57
  }
42
58
  }
43
59
  </style>
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <navbar-item manual
3
- icon="exclamation-triangle"
3
+ :icon="faTriangleExclamation"
4
4
  v-if="appUpdate"
5
5
  ref="navbarItem">
6
6
  <template #default>
@@ -16,15 +16,11 @@
16
16
  </template>
17
17
 
18
18
  <script>
19
- import {
20
- mapState, mapActions, mapGetters, mapMutations,
21
- } from 'vuex';
22
- import { library } from '@fortawesome/fontawesome-svg-core';
23
- import { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';
19
+ import { app } from '../../../pinia/app';
20
+ import { websockets } from '../../../pinia/websockets';
21
+ import { faTriangleExclamation } from '@fortawesome/free-solid-svg-icons';
24
22
  import NavbarItem from './NavbarItem.vue';
25
23
 
26
- library.add(faExclamationTriangle);
27
-
28
24
  export default {
29
25
  name: 'AppUpdate',
30
26
 
@@ -33,22 +29,50 @@ export default {
33
29
  inject: ['i18n'],
34
30
 
35
31
  data: () => ({
32
+ faTriangleExclamation,
33
+ listenTimer: null,
34
+ listening: false,
36
35
  message: 'The application was updated, please refresh your page to load the latest application version',
37
36
  }),
38
37
 
39
38
  computed: {
40
- ...mapState(['appUpdate']),
41
- ...mapGetters('websockets', ['channels']),
39
+ appUpdate() {
40
+ return app().appUpdate;
41
+ },
42
+ channels() {
43
+ return websockets().channels;
44
+ },
42
45
  },
43
46
 
44
47
  created() {
45
- this.connect()
46
- .then(() => this.listen());
48
+ this.ensureListener();
49
+ },
50
+
51
+ beforeUnmount() {
52
+ clearTimeout(this.listenTimer);
47
53
  },
48
54
 
49
55
  methods: {
50
- ...mapActions('websockets', ['connect']),
51
- ...mapMutations(['newRelease']),
56
+ connect() {
57
+ return websockets().connect(app().meta.csrfToken);
58
+ },
59
+ newRelease() {
60
+ return app().newRelease();
61
+ },
62
+ ensureListener() {
63
+ if (this.listening) {
64
+ return;
65
+ }
66
+
67
+ if (!window.Echo || !this.channels?.appUpdates) {
68
+ this.listenTimer = setTimeout(() => this.ensureListener(), 250);
69
+ return;
70
+ }
71
+
72
+ this.listening = true;
73
+ this.connect()
74
+ .then(() => this.listen());
75
+ },
52
76
  listen() {
53
77
  window.Echo.private(this.channels.appUpdates)
54
78
  .listen('.app-update', this.handle);
@@ -2,14 +2,14 @@
2
2
  <nav class="navbar app-navbar is-fixed-top">
3
3
  <core-navbar>
4
4
  <template #default="{
5
- isMobile, isTouch, sidebar, meta, impersonating,
5
+ isMobile, sidebar, meta, impersonating,
6
6
  stopImpersonating, toggleSidebar, items,
7
7
  }">
8
8
  <div class="navbar-brand">
9
9
  <a class="navbar-item"
10
- @click="toggleSidebar(isTouch)">
10
+ @click="toggleSidebar()">
11
11
  <span class="icon">
12
- <fa icon="bars"
12
+ <fa :icon="faBars"
13
13
  :class="{ 'rotate': !sidebar.isExpanded || !sidebar.isVisible }"/>
14
14
  </span>
15
15
  </a>
@@ -18,17 +18,17 @@
18
18
  <figure class="image is-32x32 is-flex">
19
19
  <img src="/images/logo.svg">
20
20
  </figure>
21
- <h4 class="title is-4 ml-1"
21
+ <span class="navbar-brand-title ml-1"
22
22
  v-if="!isMobile">
23
23
  {{ meta.appName }}
24
- </h4>
24
+ </span>
25
25
  </a>
26
26
  <div class="navbar-item"
27
27
  v-if="meta.env !== 'production'">
28
28
  <span class="tag is-warning is-clickable"
29
29
  v-tooltip="meta.env">
30
30
  <span class="icon is-small">
31
- <fa icon="code"/>
31
+ <fa :icon="faCode"/>
32
32
  </span>
33
33
  </span>
34
34
  </div>
@@ -38,10 +38,10 @@
38
38
  class="button is-small is-warning"
39
39
  @click="stopImpersonating">
40
40
  <span class="icon is-small">
41
- <fa icon="user"/>
41
+ <fa :icon="faUser"/>
42
42
  </span>
43
43
  <span class="icon is-small">
44
- <fa icon="times"/>
44
+ <fa :icon="faXmark"/>
45
45
  </span>
46
46
  </a>
47
47
  </div>
@@ -63,17 +63,14 @@
63
63
 
64
64
  <script>
65
65
  import { FontAwesomeIcon as Fa } from '@fortawesome/vue-fontawesome';
66
- import { library } from '@fortawesome/fontawesome-svg-core';
67
66
  import {
68
- faBars, faCode, faUser, faTimes,
67
+ faBars, faCode, faUser, faXmark,
69
68
  } from '@fortawesome/free-solid-svg-icons';
70
69
  import CoreNavbar from '../../../core/components/navbar/Navbar.vue';
71
70
  import AppUpdate from './AppUpdate.vue';
72
71
  import SettingsControl from './SettingsControl.vue';
73
72
  import Search from './Search.vue';
74
73
 
75
- library.add(faBars, faCode, faUser, faTimes);
76
-
77
74
  export default {
78
75
  name: 'Navbar',
79
76
 
@@ -86,14 +83,19 @@ export default {
86
83
  },
87
84
 
88
85
  inject: ['i18n'],
86
+
87
+ data: () => ({
88
+ faBars,
89
+ faCode,
90
+ faXmark,
91
+ faUser,
92
+ }),
89
93
  };
90
94
  </script>
91
95
 
92
96
  <style lang="scss">
93
- @import '@enso-ui/themes/bulma/variables';
94
-
95
97
  .navbar {
96
- height: $navbar-height;
98
+ height: var(--bulma-navbar-height);
97
99
  z-index: 3;
98
100
  -webkit-box-shadow: 0 1px 1px hsla(0, 0%, 4%, .35);
99
101
  box-shadow: 0 1px 1px hsla(0, 0%, 4%, .35);
@@ -26,10 +26,10 @@
26
26
  </template>
27
27
 
28
28
  <script>
29
- import { mapState } from 'vuex';
30
29
  import { FontAwesomeIcon as Fa } from '@fortawesome/vue-fontawesome';
31
30
  import { clickOutside } from '@enso-ui/directives';
32
31
  import Loader from '@enso-ui/loader/bulma';
32
+ import { layout } from '../../../pinia/layout';
33
33
 
34
34
  export default {
35
35
  name: 'NavbarItem',
@@ -61,8 +61,6 @@ export default {
61
61
  dropdown: false,
62
62
  }),
63
63
 
64
- computed: mapState('layout', ['isTouch']),
65
-
66
64
  methods: {
67
65
  attemptHide() {
68
66
  if (!this.manual) {
@@ -78,7 +76,7 @@ export default {
78
76
  this.dropdown = true;
79
77
  },
80
78
  toggle() {
81
- if (this.isTouch) {
79
+ if (layout().isTouch) {
82
80
  this.$emit('touch');
83
81
  } else if (!this.manual) {
84
82
  if (this.dropdown) {
@@ -49,7 +49,7 @@
49
49
  v-else>
50
50
  <fade>
51
51
  <span class="icon is-small">
52
- <fa icon="search"/>
52
+ <fa :icon="faMagnifyingGlass"/>
53
53
  </span>
54
54
  </fade>
55
55
  </a>
@@ -60,14 +60,11 @@
60
60
  <script>
61
61
  import { Fade } from '@enso-ui/transitions';
62
62
  import { FontAwesomeIcon as Fa } from '@fortawesome/vue-fontawesome';
63
- import { library } from '@fortawesome/fontawesome-svg-core';
64
- import { faEye, faPencilAlt, faListUl } from '@fortawesome/free-solid-svg-icons';
63
+ import { faMagnifyingGlass } from '@fortawesome/free-solid-svg-icons';
65
64
  import { EnsoTypeahead } from '@enso-ui/typeahead/bulma';
66
65
  import { clickOutside } from '@enso-ui/directives';
67
66
  import CoreSearch from '../../../core/components/navbar/Search.vue';
68
67
 
69
- library.add(faEye, faPencilAlt, faListUl);
70
-
71
68
  export default {
72
69
  name: 'Search',
73
70
 
@@ -79,6 +76,10 @@ export default {
79
76
 
80
77
  inject: ['i18n'],
81
78
 
79
+ data: () => ({
80
+ faMagnifyingGlass,
81
+ }),
82
+
82
83
  methods: {
83
84
  clear() {
84
85
  this.$refs.typeahead.clear();
@@ -4,7 +4,7 @@
4
4
  <a class="navbar-item settings"
5
5
  @click="toggle">
6
6
  <span class="icon">
7
- <fa icon="cogs"/>
7
+ <fa :icon="faGears"/>
8
8
  </span>
9
9
  </a>
10
10
  </template>
@@ -13,15 +13,16 @@
13
13
 
14
14
  <script>
15
15
  import { FontAwesomeIcon as Fa } from '@fortawesome/vue-fontawesome';
16
- import { library } from '@fortawesome/fontawesome-svg-core';
17
- import { faCogs } from '@fortawesome/free-solid-svg-icons';
16
+ import { faGears } from '@fortawesome/free-solid-svg-icons';
18
17
  import CoreSettingsControl from '../../../core/components/navbar/SettingsControl.vue';
19
18
 
20
- library.add(faCogs);
21
-
22
19
  export default {
23
20
  name: 'SettingsControl',
24
21
 
25
22
  components: { CoreSettingsControl, Fa },
23
+
24
+ data: () => ({
25
+ faGears,
26
+ }),
26
27
  };
27
28
  </script>
@@ -40,9 +40,23 @@ export default {
40
40
  </script>
41
41
 
42
42
  <style lang="scss">
43
-
44
- .settings {
43
+ .aside.settings {
44
+ position: fixed;
45
+ top: var(--bulma-navbar-height);
46
+ bottom: 0;
47
+ height: calc(100dvh - var(--bulma-navbar-height));
48
+ max-height: calc(100dvh - var(--bulma-navbar-height));
49
+ z-index: 40;
45
50
  overflow-y: auto;
51
+ border-top: 1px solid var(--bulma-border);
52
+
53
+ .menu-label {
54
+ margin-bottom: 0.4rem;
55
+ flex: 0 0 auto;
56
+ font-size: 0.8rem;
57
+ font-weight: 600;
58
+ }
59
+
46
60
  [dir='ltr'] & {
47
61
  right: 0;
48
62
  }
@@ -52,7 +66,7 @@ export default {
52
66
 
53
67
  .settings-item {
54
68
  &:not(:empty) {
55
- padding: 6px;
69
+ padding: 6px 12px;
56
70
  }
57
71
 
58
72
  .level-item {
@@ -9,8 +9,7 @@
9
9
  </div>
10
10
  <div class="level-right">
11
11
  <div class="level-item">
12
- <vue-switch class="is-medium"
13
- v-bind="bindings"
12
+ <vue-switch v-bind="bindings"
14
13
  v-on="events"/>
15
14
  </div>
16
15
  </div>