@appscode/design-system 1.0.43-alpha.14 → 1.0.43-alpha.142

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 (112) hide show
  1. package/base/utilities/_default.scss +283 -21
  2. package/base/utilities/_derived-variables.scss +0 -13
  3. package/base/utilities/_initial-variables.scss +78 -56
  4. package/base/utilities/_mixin.scss +10 -17
  5. package/base/utilities/_typography.scss +23 -7
  6. package/base/utilities/dark-theme.scss +25 -0
  7. package/components/_ac-accordion.scss +1 -0
  8. package/components/_ac-alert-box.scss +18 -10
  9. package/components/_ac-card.scss +55 -20
  10. package/components/_ac-code-highlight.scss +7 -1
  11. package/components/_ac-content-layout.scss +4 -4
  12. package/components/_ac-drag.scss +6 -6
  13. package/components/_ac-input.scss +74 -40
  14. package/components/_ac-modal.scss +5 -4
  15. package/components/_ac-multi-select.scss +195 -13
  16. package/components/_ac-options.scss +31 -16
  17. package/components/_ac-select-box.scss +15 -5
  18. package/components/_ac-table.scss +42 -36
  19. package/components/_ac-tabs.scss +72 -23
  20. package/components/_ac-tags.scss +2 -2
  21. package/components/_ac-terminal.scss +272 -0
  22. package/components/_app-drawer.scss +6 -6
  23. package/components/_breadcumb.scss +7 -2
  24. package/components/_buttons.scss +60 -27
  25. package/components/_card-body-wrapper.scss +3 -3
  26. package/components/_dashboard-header.scss +33 -1
  27. package/components/_direct-deploy.scss +69 -0
  28. package/components/_go-to-top.scss +1 -1
  29. package/components/_graph.scss +45 -0
  30. package/components/_image-upload.scss +6 -4
  31. package/components/_left-sidebar-menu.scss +200 -46
  32. package/components/_monaco-editor.scss +1 -1
  33. package/components/_navbar.scss +129 -26
  34. package/components/_overview-info.scss +4 -4
  35. package/components/_overview-page.scss +1 -2
  36. package/components/_pagination.scss +10 -2
  37. package/components/_payment-card.scss +28 -12
  38. package/components/_preview-modal.scss +19 -8
  39. package/components/_pricing-table.scss +1 -1
  40. package/components/_progress-bar.scss +5 -5
  41. package/components/_subscription-card.scss +15 -8
  42. package/components/_table-of-content.scss +1 -1
  43. package/components/_tfa.scss +69 -0
  44. package/components/_transitions.scss +261 -0
  45. package/components/_widget-menu.scss +9 -9
  46. package/components/_wizard.scss +31 -19
  47. package/components/ac-toaster/_ac-toasted.scss +5 -5
  48. package/components/bbum/_card-team.scss +18 -10
  49. package/components/bbum/_information-center.scss +17 -3
  50. package/components/bbum/_mobile-desktop.scss +6 -6
  51. package/components/bbum/_post.scss +5 -4
  52. package/components/bbum/_sign-up-notification.scss +6 -6
  53. package/components/bbum/_single-post-preview.scss +9 -9
  54. package/components/bbum/_user-profile.scss +97 -90
  55. package/components/ui-builder/_ui-builder.scss +29 -10
  56. package/components/ui-builder/_vue-open-api.scss +98 -0
  57. package/layouts/_404.scss +2 -1
  58. package/layouts/_code-preview.scss +14 -7
  59. package/main.scss +4 -0
  60. package/package.json +2 -7
  61. package/plugins/theme.js +4 -0
  62. package/vue-components/v2/banner/Banner.vue +2 -2
  63. package/vue-components/v2/breadcrumbs/Breadcrumb.vue +97 -0
  64. package/vue-components/v2/button/Button.vue +5 -0
  65. package/vue-components/v2/button/DownloadBtn.vue +45 -0
  66. package/vue-components/v2/card/PaymentCards.vue +11 -2
  67. package/vue-components/v2/content/ContentTable.vue +12 -7
  68. package/vue-components/v2/editor/Editor.vue +29 -1
  69. package/vue-components/v2/editor/FilteredFileEditor.vue +188 -0
  70. package/vue-components/v2/editor/ResourceKeyValueEditor.vue +209 -0
  71. package/vue-components/v2/loaders/ResourceLoader.vue +101 -0
  72. package/vue-components/v2/loaders/SidebarLoader.vue +43 -0
  73. package/vue-components/v2/modal/Modal.vue +33 -12
  74. package/vue-components/v2/modals/DeleteConfirmationModal.vue +77 -0
  75. package/vue-components/v2/modals/JsonShowModal.vue +12 -2
  76. package/vue-components/v2/navbar/Appdrawer.vue +10 -9
  77. package/vue-components/v2/navbar/ThemeMode.vue +120 -0
  78. package/vue-components/v2/navbar/User.vue +166 -15
  79. package/vue-components/v2/preloader/Preloader.vue +5 -5
  80. package/vue-components/v2/sidebar/ClusterSwitcher.vue +126 -0
  81. package/vue-components/v2/sidebar/SidebarItem.vue +23 -1
  82. package/vue-components/v2/sidebar/SidebarItemWithDropDown.vue +19 -20
  83. package/vue-components/v2/table/Table.vue +44 -8
  84. package/vue-components/v2/table/TableRow.vue +17 -8
  85. package/vue-components/v2/table/table-cell/CellValue.vue +31 -4
  86. package/vue-components/v2/table/table-cell/GenericCell.vue +56 -0
  87. package/vue-components/v2/table/table-cell/ObjectCell.vue +4 -1
  88. package/vue-components/v2/tabs/EditorTabs.vue +1 -1
  89. package/vue-components/v3/button/Button.vue +5 -0
  90. package/vue-components/v3/content/ContentTable.vue +5 -0
  91. package/vue-components/v3/dropdown/DropdownMenu.vue +1 -1
  92. package/vue-components/v3/editor/Editor.vue +50 -30
  93. package/vue-components/v3/editor/FilteredFileEditor.vue +166 -0
  94. package/vue-components/v3/editor/MonacoEditor.vue +124 -0
  95. package/vue-components/v3/editor/ResourceKeyValueEditor.vue +124 -0
  96. package/vue-components/v3/header/HeaderItem.vue +5 -0
  97. package/vue-components/v3/header/HeaderItems.vue +5 -0
  98. package/vue-components/v3/loaders/ResourceLoader.vue +83 -0
  99. package/vue-components/v3/loaders/SidebarLoader.vue +34 -0
  100. package/vue-components/v3/modal/Modal.vue +10 -1
  101. package/vue-components/v3/modals/JsonShowModal.vue +25 -16
  102. package/vue-components/v3/navbar/Appdrawer.vue +12 -7
  103. package/vue-components/v3/navbar/ThemeMode.vue +128 -0
  104. package/vue-components/v3/navbar/User.vue +166 -15
  105. package/vue-components/v3/sidebar/ClusterSwitcher.vue +133 -0
  106. package/vue-components/v3/sidebar/SidebarItemWithDropDown.vue +120 -0
  107. package/vue-components/v3/table/Table.vue +28 -5
  108. package/vue-components/v3/table/TableRow.vue +1 -1
  109. package/vue-components/v3/table/table-cell/CellValue.vue +26 -3
  110. package/vue-components/v3/table/table-cell/GenericCell.vue +62 -0
  111. package/vue-components/v3/table/table-cell/ObjectCell.vue +5 -1
  112. package/vue-components/v3/tabs/EditorTabs.vue +1 -1
@@ -1,113 +1,120 @@
1
- .user-profile-wrapper {
2
- .user-profile-photo {
3
- background-color: $ac-white;
4
- border-radius: 4px;
5
- overflow: hidden;
6
- padding: 10px;
7
- position: relative;
8
- z-index: 1;
9
- margin-bottom: 10px;
10
-
11
- .thumbnail {
12
- height: 240px;
13
- background-size: cover;
14
- background-position: center;
15
- background-color: $ac-gray-lightest;
16
- background-repeat: no-repeat;
17
- border-radius: 10px;
18
-
19
- &.profile-1 {
20
- background-image: url("~@appscode/design-system-images/icons/appscode-large-icon.jpg");
21
- }
22
- }
23
-
24
- .setting-button {
25
- position: absolute;
26
- left: 15px;
27
- top: 15px;
28
- font-size: 18px;
29
- color: $ac-white;
30
- background-color: transparent;
31
- border: none;
32
- cursor: pointer;
33
- }
34
- }
35
-
36
- .profile-information {
37
- .profile-top-info {
38
- display: flex;
39
- align-items: center;
40
- justify-content: space-between;
41
-
42
- h3 {
43
- font-size: 26px;
44
- line-height: 1.4;
45
-
46
- span {
47
- font-size: 14px;
48
- line-height: 1.5;
49
- font-weight: 400;
50
- display: block;
51
- color: #74818d;
1
+ .ac-system-body.bb-user-management {
2
+ .user-profile-wrapper {
3
+ padding: 20px;
4
+ border-right: 1px solid $ac-white-light;
5
+ height: calc(100vh - 52px);
6
+ position: sticky;
7
+ top: 52px;
8
+
9
+ .user-profile-photo {
10
+ background-color: $ac-white;
11
+ border-radius: 4px;
12
+ overflow: hidden;
13
+ position: relative;
14
+ z-index: 1;
15
+ margin-bottom: 10px;
16
+
17
+ .thumbnail {
18
+ height: 240px;
19
+ background-size: cover;
20
+ background-position: center;
21
+ background-color: $ac-gray-lightest;
22
+ background-repeat: no-repeat;
23
+ border-radius: 10px;
24
+
25
+ &.profile-1 {
26
+ background-image: url("~@appscode/design-system-images/icons/appscode-large-icon.jpg");
52
27
  }
53
28
  }
54
- }
55
29
 
56
- .edit-icon {
57
- max-width: 16px;
58
- }
59
-
60
- p {
61
- font-size: 14px;
62
- color: #74818d;
63
- line-height: 160%;
64
- margin-bottom: 20px;
30
+ .setting-button {
31
+ position: absolute;
32
+ left: 15px;
33
+ top: 15px;
34
+ font-size: 18px;
35
+ color: $ac-white;
36
+ background-color: transparent;
37
+ border: none;
38
+ cursor: pointer;
39
+ }
65
40
  }
66
41
 
67
- .social-links {
68
- margin-bottom: 20px;
69
-
70
- a {
71
- max-width: 26px;
72
- margin-right: 10px;
73
- display: inline-block;
74
-
75
- &:last-child {
76
- margin-right: 0;
77
- }
42
+ .profile-information {
43
+ .profile-top-info {
44
+ display: flex;
45
+ align-items: center;
46
+ justify-content: space-between;
47
+ margin-bottom: 10px;
78
48
 
79
- img {
80
- width: 100%;
49
+ h3 {
50
+ font-size: 26px;
51
+ line-height: 1.4;
52
+
53
+ span {
54
+ font-size: 14px;
55
+ line-height: 1.5;
56
+ font-weight: 400;
57
+ display: block;
58
+ color: $ac-color-value;
59
+ }
81
60
  }
82
61
  }
83
- }
84
-
85
- .edit-profile {
86
- background-color: transparent;
87
- }
88
62
 
89
- .website-link {
90
- margin-top: 20px;
63
+ .edit-icon {
64
+ max-width: 16px;
65
+ }
91
66
 
92
- a {
93
- color: $ac-primary;
94
- display: flex;
95
- align-items: center;
67
+ p {
68
+ font-size: 14px;
69
+ color: $ac-color-text;
70
+ line-height: 160%;
96
71
  margin-bottom: 10px;
72
+ }
97
73
 
98
- &:last-child {
99
- margin-bottom: 0;
100
- }
74
+ .social-links {
75
+ margin-bottom: 20px;
101
76
 
102
- img {
103
- max-width: 18px;
77
+ a {
78
+ max-width: 26px;
104
79
  margin-right: 10px;
80
+ display: inline-block;
81
+
82
+ &:last-child {
83
+ margin-right: 0;
84
+ }
85
+
86
+ img {
87
+ width: 100%;
88
+ }
89
+ }
90
+ }
91
+ .website-link {
92
+ margin-top: 20px;
93
+
94
+ a {
95
+ color: $ac-primary;
96
+ display: flex;
97
+ align-items: center;
98
+ margin-bottom: 10px;
99
+ font-size: 13px;
100
+ &:last-child {
101
+ margin-bottom: 0;
102
+ }
103
+
104
+ img {
105
+ max-width: 15px;
106
+ margin-right: 10px;
107
+ }
105
108
  }
106
109
  }
107
110
  }
108
111
  }
109
112
  }
110
113
 
114
+ .sign-up-notification {
115
+ border: 1px solid $ac-white-light;
116
+ padding: 20px;
117
+ }
111
118
  // circle type profile start
112
119
  .ac-profile-photo {
113
120
  figure {
@@ -18,6 +18,7 @@
18
18
  p {
19
19
  font-size: 13px;
20
20
  margin-bottom: 10px;
21
+ color: $ac-color-value;
21
22
  }
22
23
  }
23
24
  .key-value-save {
@@ -60,10 +61,10 @@
60
61
  position: absolute;
61
62
  content: "";
62
63
  left: 27px;
63
- top: 5px;
64
+ top: 10px;
64
65
  width: 1px;
65
66
  height: calc(100% - 20px);
66
- border: 1px dashed #ddd;
67
+ border: 1px dashed $ac-white-light;
67
68
  z-index: -1;
68
69
  }
69
70
 
@@ -74,7 +75,7 @@
74
75
  bottom: 6px;
75
76
  width: 12px;
76
77
  height: 12px;
77
- background: #eee;
78
+ background-color: $ac-white-light;
78
79
  border-radius: 50%;
79
80
  z-index: -1;
80
81
  }
@@ -94,11 +95,15 @@
94
95
  display: inline-block;
95
96
  text-align: center;
96
97
  font-size: 10px;
97
- border: 1px solid #a6abbd;
98
+ border: 1px solid $ac-white-light;
98
99
  border-radius: 50%;
99
100
  margin-right: 10px;
100
101
  cursor: pointer;
101
- background-color: #fff;
102
+ background-color: $ac-white;
103
+ color: $ac-color-value;
104
+ &.is-disabled {
105
+ cursor: not-allowed;
106
+ }
102
107
  }
103
108
  }
104
109
  }
@@ -114,13 +119,13 @@
114
119
  .table-inner {
115
120
  min-width: 630px;
116
121
  .thead {
117
- background-color: #f1f1f1;
122
+ background-color: $ac-white-lighter;
118
123
  .tr {
119
124
  .th {
120
125
  font-weight: 600;
121
126
  }
122
- border-top: 1px solid #e7e7e7;
123
- border-bottom: 1px solid #e7e7e7;
127
+ border-top: 1px solid var(--ac-white-light);
128
+ border-bottom: 1px solid var(--ac-white-light);
124
129
  }
125
130
  }
126
131
  .thead,
@@ -143,7 +148,7 @@
143
148
 
144
149
  .tbody {
145
150
  .tr {
146
- border-bottom: 1px solid #e7e7e7;
151
+ border-bottom: 1px solid $ac-white-light;
147
152
  }
148
153
  }
149
154
  }
@@ -153,7 +158,12 @@
153
158
  border-radius: 4px;
154
159
  }
155
160
  }
156
-
161
+ .is-collapsed {
162
+ &.ac-nested-elements::before,
163
+ &.ac-nested-elements::after {
164
+ display: none;
165
+ }
166
+ }
157
167
  // details with checkradio
158
168
  .details-with-checkradio-wrapper {
159
169
  display: grid;
@@ -161,6 +171,15 @@
161
171
  grid-gap: 15px;
162
172
  }
163
173
 
174
+ // dark theme start
175
+ .is-dark-theme {
176
+ .nested-body {
177
+ code {
178
+ background-color: var(--dark-bg-light);
179
+ }
180
+ }
181
+ }
182
+ // dark theme end
164
183
  /****************************************
165
184
  Responsive Classes
166
185
  *****************************************/
@@ -0,0 +1,98 @@
1
+ .vue-schema-form-array {
2
+ .nested-body {
3
+ // margin-bottom: 15px;
4
+ display: flex;
5
+
6
+ .form-left-item {
7
+ margin-right: 10px;
8
+ width: calc(100% - 92px);
9
+ }
10
+ }
11
+ }
12
+
13
+ .nested-header {
14
+ .tabs.ac-tabs {
15
+ margin-bottom: 0;
16
+ opacity: 0;
17
+ visibility: hidden;
18
+ transition: 0.3s ease-in-out;
19
+ }
20
+
21
+ &:hover {
22
+ .tabs.ac-tabs {
23
+ opacity: 1;
24
+ visibility: visible;
25
+ }
26
+ }
27
+ }
28
+
29
+ .vue-openapi-form {
30
+ margin-left: -20px;
31
+ .is-warning {
32
+ font-size: 12px;
33
+ color: #ea3d2f;
34
+ padding-left: 10px;
35
+ }
36
+
37
+ .ac-nested-elements {
38
+ &:first-child {
39
+ margin-left: 0;
40
+ }
41
+
42
+ .nested-body {
43
+ padding-left: 0px;
44
+ }
45
+
46
+ .nested-header {
47
+ width: 100%;
48
+ }
49
+ }
50
+
51
+ .ac-single-switch {
52
+ margin-left: -15px;
53
+ }
54
+
55
+ .ac-single-input {
56
+ margin-left: 25px;
57
+
58
+ &:last-child {
59
+ margin-bottom: 15px;
60
+ }
61
+ }
62
+ }
63
+
64
+ .vue-form-scema-body {
65
+ .left-content {
66
+ width: 650px;
67
+ background-color: $ac-white-lighter;
68
+ padding: 30px;
69
+ }
70
+
71
+ .right-content {
72
+ width: 100%;
73
+ margin-top: 30px;
74
+ }
75
+ }
76
+
77
+ .v-tooltip-open {
78
+ background-color: $ac-white;
79
+ }
80
+
81
+ .ac-nested-elements::after {
82
+ top: 25px;
83
+ width: 1px;
84
+ height: calc(100% - 50px);
85
+ }
86
+
87
+ .ac-nested-elements::before {
88
+ bottom: 12px;
89
+ }
90
+
91
+ .is-collapsed {
92
+ &.ac-nested-elements::before,
93
+ &.ac-nested-elements::after {
94
+ display: none;
95
+ }
96
+ }
97
+
98
+ // for vue-tooltip
package/layouts/_404.scss CHANGED
@@ -80,7 +80,8 @@
80
80
  Full HD Min Width 1407
81
81
  **************************************************************** */
82
82
  /* Full HD Min Width 1408px */
83
- @media (min-width: 1408px) {}
83
+ @media (min-width: 1408px) {
84
+ }
84
85
 
85
86
  /****************************************************************
86
87
  Widescreen Between 1216px and 1407px
@@ -18,6 +18,10 @@
18
18
  .ac-html-preview {
19
19
  width: 100%;
20
20
 
21
+ i.is-block {
22
+ color: $ac-color-value;
23
+ }
24
+
21
25
  .ac-navbar-area {
22
26
  position: inherit;
23
27
  }
@@ -29,7 +33,7 @@
29
33
  }
30
34
 
31
35
  &.ac-bg-dark {
32
- background-color: $ac-bg-dark;
36
+ background-color: $ac-color-heading;
33
37
  }
34
38
 
35
39
  .ac-html-preview {
@@ -54,13 +58,13 @@
54
58
 
55
59
  /* Handle */
56
60
  &::-webkit-scrollbar-thumb {
57
- background: #8392a5;
61
+ background-color: $ac-gray-light;
58
62
  border-radius: 10px;
59
63
  }
60
64
 
61
65
  /* Handle on hover */
62
66
  &::-webkit-scrollbar-thumb:hover {
63
- background: #8392a5;
67
+ background-color: $ac-gray-light;
64
68
  }
65
69
 
66
70
  .number {
@@ -91,7 +95,7 @@
91
95
  }
92
96
 
93
97
  .ac-code-preview-wrapper {
94
- border: 1px solid #e5e8ea;
98
+ border: 1px solid $ac-white-light;
95
99
  border-radius: 4px;
96
100
 
97
101
  .ac-code-header {
@@ -113,7 +117,7 @@
113
117
  .component-header {
114
118
  display: flex;
115
119
  justify-content: space-between;
116
- border-bottom: 1px solid #edf2f7;
120
+ border-bottom: 1px solid $ac-white-light;
117
121
  background-color: $ac-white;
118
122
 
119
123
  h3 {
@@ -121,7 +125,7 @@
121
125
  font-size: 16px;
122
126
  font-weight: 500;
123
127
  font-family: $ac-family-paragraph;
124
- color: #333;
128
+ color: $ac-color-value;
125
129
  }
126
130
 
127
131
  .component-switch {
@@ -145,18 +149,21 @@
145
149
  z-index: 1;
146
150
  max-height: 500px;
147
151
  overflow-y: auto;
152
+
148
153
  .copy-button {
149
154
  position: absolute;
150
155
  right: 5px;
151
156
  top: 5px;
157
+
152
158
  &:hover {
153
159
  box-shadow: none;
154
160
  }
155
161
  }
162
+
156
163
  pre {
157
164
  margin: 0;
158
165
  border-radius: 4px;
159
- font-size: 12px;
166
+ font-size: 14px;
160
167
 
161
168
  .token {
162
169
  &.tag {
package/main.scss CHANGED
@@ -3,10 +3,12 @@
3
3
  @import "~bulma-checkradio";
4
4
  @import "~bulma-switch";
5
5
  @import "~bulma-tooltip";
6
+ @import url("https://fonts.googleapis.com/css2?family=Material+Icons&display=swap");
6
7
  @import "vue-multiselect/dist/vue-multiselect.min.css";
7
8
 
8
9
  // BASE
9
10
  @import "~assets/design-system/base/utilities/initial-variables";
11
+ @import "~assets/design-system/base/utilities/dark-theme";
10
12
  @import "~assets/design-system/base/utilities/derived-variables";
11
13
  @import "~assets/design-system/base/utilities/typography";
12
14
  @import "~assets/design-system/base/utilities/default";
@@ -48,10 +50,12 @@
48
50
  @import "~assets/design-system/components/overview-info";
49
51
  @import "~assets/design-system/components/pricing-table";
50
52
  @import "~assets/design-system/components/table-of-content";
53
+ @import "~assets/design-system/components/direct-deploy";
51
54
  @import "~assets/design-system/components/preview-modal";
52
55
  @import "~assets/design-system/components/wizard";
53
56
  @import "~assets/design-system/components/preloader";
54
57
  @import "~assets/design-system/components/pagination";
58
+ @import "~assets/design-system/components/graph";
55
59
  @import "~assets/design-system/components/ui-builder/ui-builder";
56
60
  @import "~assets/design-system/components/ac-toaster/ac-toasted";
57
61
  @import "~assets/design-system/components/bbum/post";
package/package.json CHANGED
@@ -1,18 +1,13 @@
1
1
  {
2
2
  "name": "@appscode/design-system",
3
- "version": "1.0.43-alpha.14",
3
+ "version": "1.0.43-alpha.142",
4
4
  "description": "A design system for Appscode websites and dashboards made using Bulma",
5
5
  "main": "main.scss",
6
6
  "scripts": {
7
7
  "test": "echo \"Error: no test specified\" && exit 1"
8
8
  },
9
9
  "dependencies": {
10
- "@appscode/design-system-images": "0.0.13",
11
- "bulma-checkradio": "^1.1.1",
12
- "bulma-switch": "^2.0.0",
13
- "bulma-tooltip": "^3.0.2",
14
- "v-calendar": "^1.0.6",
15
- "vue-multiselect": "^2.1.6"
10
+ "@appscode/design-system-images": "0.0.13"
16
11
  },
17
12
  "repository": {
18
13
  "type": "git",
package/plugins/theme.js CHANGED
@@ -136,3 +136,7 @@ export function getFontHSL() {
136
136
  lightness,
137
137
  };
138
138
  }
139
+ export const loaderLightThemePrimaryColor = "#f5f7f9";
140
+ export const loaderDarkThemePrimaryColor = "#2e323c";
141
+ export const loaderLightThemeSecondaryColor = "#ecebeb";
142
+ export const loaderDarkThemeSecondaryColor = "#21272e";
@@ -1,8 +1,8 @@
1
1
  <template>
2
2
  <div class="sign-up-notification mb-20">
3
3
  <div class="notification-inner has-text-centered">
4
- <h3><slot name="banner-title" /></h3>
5
- <slot />
4
+ <h3><slot name="banner-title">Error!</slot></h3>
5
+ <slot><p>Oops!! There was an error while loading!</p></slot>
6
6
  </div>
7
7
  </div>
8
8
  </template>
@@ -0,0 +1,97 @@
1
+ <template>
2
+ <div class="ac-breadcrumb">
3
+ <nav aria-label="breadcrumbs" class="breadcrumb">
4
+ <ul>
5
+ <li
6
+ v-for="(item, idx) in list"
7
+ :key="idx"
8
+ :class="{ 'is-active': idx === list.length - 1 }"
9
+ >
10
+ <router-link
11
+ class="router-link-active"
12
+ :class="{ 'is-active': idx === list.length - 1 }"
13
+ :to="item.path"
14
+ >{{ item.name }}
15
+ </router-link>
16
+ </li>
17
+ </ul>
18
+ </nav>
19
+ </div>
20
+ </template>
21
+ <script>
22
+ export default {
23
+ data() {
24
+ return {
25
+ list: []
26
+ };
27
+ },
28
+ methods: {
29
+ createBreadcrumbs(n) {
30
+ //Adding dynamic path to the route
31
+ const listPaths = this.$route.matched.map(element =>
32
+ this.pathReplaceWithParam(element.path)
33
+ );
34
+
35
+ //Removing the last duplicate value from the listpaths array
36
+ listPaths.pop();
37
+
38
+ //Createing the breadcrumb name
39
+ const listName = this.createList(listPaths);
40
+
41
+ //Set the new breadcrumb name and path value to list
42
+ this.list = listName.map((element, index) => {
43
+ return {
44
+ name: element,
45
+ path: listPaths[index]
46
+ };
47
+ });
48
+ },
49
+ pathReplaceWithParam(path) {
50
+ //Split the path and remove the first and last empty block
51
+ let splitPath = path.split("/").filter(element => element !== "");
52
+
53
+ //Replace all element with query params where the element start with ":"
54
+ // Then again add them wthi "/" and return the path value
55
+ return splitPath.reduce((pval, cval) => {
56
+ if (cval[0] === ":") {
57
+ const cutIndex =
58
+ cval.indexOf("?") !== -1 ? cval.indexOf("?") : cval.length;
59
+ return (pval += this.$route.params[cval.slice(1, cutIndex)] + "/");
60
+ } else return (pval += cval + "/");
61
+ }, "/");
62
+ },
63
+ createList(paths) {
64
+ //Split all the path and remove all empty block
65
+ let spath = paths.map(element => {
66
+ return element.split("/").filter(word => word !== "");
67
+ });
68
+
69
+ // Convert all the path arry in one arry where each element is the different fo previous element
70
+ return spath.reduce((prev, curr, currentIdx) => {
71
+ if (currentIdx === 0) return prev.concat([this.createVal(0, curr)]);
72
+ else
73
+ return prev.concat([
74
+ this.createVal(spath[currentIdx - 1].length, curr)
75
+ ]);
76
+ }, []);
77
+ },
78
+ createVal(startIdx, paths) {
79
+ return paths.reduce((prev, curr, idx) => {
80
+ if (idx >= startIdx) {
81
+ if (idx + 1 === paths.length) return (prev += curr);
82
+ else return (prev += curr + " / ");
83
+ } else return prev + "";
84
+ }, "");
85
+ }
86
+ },
87
+ watch: {
88
+ "$route.path": {
89
+ deep: true,
90
+ immediate: true,
91
+ handler(n) {
92
+ this.createBreadcrumbs(n);
93
+ }
94
+ }
95
+ }
96
+ };
97
+ </script>
@@ -4,6 +4,7 @@
4
4
  :class="`${modifierClasses}${isLoaderActive ? ' is-loading' : ''}`"
5
5
  :disabled="disabled"
6
6
  @click="handleClick"
7
+ :title="tooltip"
7
8
  >
8
9
  <span v-if="iconClass || iconImage" class="icon is-small">
9
10
  <img
@@ -27,6 +28,10 @@ export default {
27
28
  type: String,
28
29
  default: "",
29
30
  },
31
+ tooltip: {
32
+ type: String,
33
+ defualt: undefined
34
+ },
30
35
  // for loader
31
36
  isLoaderActive: {
32
37
  type: Boolean,