wave-ui 3.28.0 → 4.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 (93) hide show
  1. package/dist/.nojekyll +0 -0
  2. package/dist/types/types/$waveui.d.ts +15 -1
  3. package/dist/types/types/colors.d.ts +2 -0
  4. package/dist/types/types/components/WAccordion.d.ts +92 -6
  5. package/dist/types/types/components/WAutocomplete.d.ts +437 -0
  6. package/dist/types/types/components/WCheckbox.d.ts +34 -0
  7. package/dist/types/types/components/WCheckboxes.d.ts +30 -0
  8. package/dist/types/types/components/WInput.d.ts +34 -0
  9. package/dist/types/types/components/WMenu.d.ts +14 -7
  10. package/dist/types/types/components/WRadio.d.ts +34 -0
  11. package/dist/types/types/components/WRadios.d.ts +30 -0
  12. package/dist/types/types/components/WSelect.d.ts +34 -0
  13. package/dist/types/types/components/WSwitch.d.ts +34 -0
  14. package/dist/types/types/components/WTable.d.ts +7 -0
  15. package/dist/types/types/components/WTooltip.d.ts +22 -8
  16. package/dist/types/types/components/WTransitions.d.ts +104 -0
  17. package/dist/types/types/components/WTransitions.js +2 -0
  18. package/dist/types/types/components/WTree.d.ts +7 -0
  19. package/dist/types/types/components/index.d.ts +2 -1
  20. package/dist/types/types/index.d.ts +1 -0
  21. package/dist/types/types/mixins/detachable.d.ts +7 -0
  22. package/dist/types/types/mixins/detachable.js +2 -0
  23. package/dist/wave-ui.cjs.js +3 -3
  24. package/dist/wave-ui.css +1 -1
  25. package/dist/wave-ui.esm.js +1743 -1365
  26. package/dist/wave-ui.umd.js +3 -3
  27. package/package.json +1 -1
  28. package/src/wave-ui/components/index.js +0 -1
  29. package/src/wave-ui/components/transitions/w-transition-bounce.vue +2 -1
  30. package/src/wave-ui/components/transitions/w-transition-expand.vue +3 -2
  31. package/src/wave-ui/components/transitions/w-transition-fade.vue +2 -1
  32. package/src/wave-ui/components/transitions/w-transition-scale-fade.vue +2 -1
  33. package/src/wave-ui/components/transitions/w-transition-scale.vue +2 -1
  34. package/src/wave-ui/components/transitions/w-transition-slide-fade.vue +2 -1
  35. package/src/wave-ui/components/transitions/w-transition-slide.vue +2 -1
  36. package/src/wave-ui/components/transitions/w-transition-twist.vue +2 -1
  37. package/src/wave-ui/components/w-accordion/index.vue +10 -5
  38. package/src/wave-ui/components/w-accordion/item.vue +29 -14
  39. package/src/wave-ui/components/w-alert.vue +27 -29
  40. package/src/wave-ui/components/w-autocomplete.vue +626 -192
  41. package/src/wave-ui/components/w-badge.vue +54 -53
  42. package/src/wave-ui/components/w-breadcrumbs.vue +7 -9
  43. package/src/wave-ui/components/w-button/button.vue +21 -23
  44. package/src/wave-ui/components/w-button/index.vue +4 -4
  45. package/src/wave-ui/components/w-card.vue +8 -7
  46. package/src/wave-ui/components/w-checkbox.vue +31 -11
  47. package/src/wave-ui/components/w-checkboxes.vue +21 -3
  48. package/src/wave-ui/components/w-confirm.vue +22 -22
  49. package/src/wave-ui/components/w-dialog.vue +1 -1
  50. package/src/wave-ui/components/w-divider.vue +5 -5
  51. package/src/wave-ui/components/w-drawer.vue +3 -3
  52. package/src/wave-ui/components/w-form-element.vue +2 -2
  53. package/src/wave-ui/components/w-icon.vue +12 -14
  54. package/src/wave-ui/components/w-image.vue +1 -1
  55. package/src/wave-ui/components/w-input.vue +43 -25
  56. package/src/wave-ui/components/w-list.vue +11 -12
  57. package/src/wave-ui/components/w-menu.vue +57 -55
  58. package/src/wave-ui/components/w-notification.vue +4 -4
  59. package/src/wave-ui/components/w-progress.vue +6 -7
  60. package/src/wave-ui/components/w-radio.vue +32 -7
  61. package/src/wave-ui/components/w-radios.vue +28 -3
  62. package/src/wave-ui/components/w-rating.vue +7 -9
  63. package/src/wave-ui/components/w-scrollable.vue +4 -4
  64. package/src/wave-ui/components/w-select.vue +119 -101
  65. package/src/wave-ui/components/w-slider.vue +26 -26
  66. package/src/wave-ui/components/w-spinner.vue +5 -7
  67. package/src/wave-ui/components/w-switch.vue +71 -47
  68. package/src/wave-ui/components/w-table.vue +69 -36
  69. package/src/wave-ui/components/w-tabs/index.vue +21 -24
  70. package/src/wave-ui/components/w-tag.vue +35 -38
  71. package/src/wave-ui/components/w-textarea.vue +22 -22
  72. package/src/wave-ui/components/w-timeline.vue +6 -6
  73. package/src/wave-ui/components/w-toolbar.vue +8 -8
  74. package/src/wave-ui/components/w-tooltip.vue +30 -25
  75. package/src/wave-ui/components/w-tree.vue +35 -16
  76. package/src/wave-ui/core.js +9 -1
  77. package/src/wave-ui/mixins/detachable.js +118 -55
  78. package/src/wave-ui/mixins/ripple.js +2 -2
  79. package/src/wave-ui/scss/_base.scss +82 -17
  80. package/src/wave-ui/scss/_colors.scss +6 -75
  81. package/src/wave-ui/scss/_layout.scss +39 -47
  82. package/src/wave-ui/scss/_ripple.scss +2 -2
  83. package/src/wave-ui/scss/_transitions.scss +19 -19
  84. package/src/wave-ui/scss/_typography.scss +8 -9
  85. package/src/wave-ui/scss/variables/_mixins.scss +24 -25
  86. package/src/wave-ui/scss/variables/_variables.scss +4 -149
  87. package/src/wave-ui/utils/colors.js +7 -4
  88. package/src/wave-ui/utils/config.js +3 -4
  89. package/src/wave-ui/utils/dynamic-css.js +42 -20
  90. package/src/wave-ui/utils/ripple.js +3 -2
  91. package/dist/types/types/components/WApp.d.ts +0 -83
  92. package/src/wave-ui/components/w-app.vue +0 -24
  93. /package/dist/types/types/components/{WApp.js → WAutocomplete.js} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wave-ui",
3
- "version": "3.28.0",
3
+ "version": "4.0.1",
4
4
  "description": "A UI framework for Vue.js 3 (and 2) with only the bright side. :sunny:",
5
5
  "author": "Antoni Andre <antoniandre.web@gmail.com>",
6
6
  "homepage": "https://antoniandre.github.io/wave-ui",
@@ -2,7 +2,6 @@ export { default as WAccordion } from './w-accordion/index.vue'
2
2
  export { default as WAccordionItem } from './w-accordion/item.vue'
3
3
  export { default as WAlert } from './w-alert.vue'
4
4
  export { default as WAutocomplete } from './w-autocomplete.vue'
5
- export { default as WApp } from './w-app.vue'
6
5
  export { default as WBadge } from './w-badge.vue'
7
6
  export { default as WBreadcrumbs } from './w-breadcrumbs.vue'
8
7
  export { default as WButton } from './w-button/index.vue'
@@ -8,7 +8,8 @@ export default {
8
8
  name: 'w-transition-bounce',
9
9
  props: {
10
10
  appear: { type: Boolean },
11
- duration: { type: [Number, String] }
11
+ duration: { type: [Number, String] },
12
+ mode: { type: String }
12
13
  }
13
14
  }
14
15
  </script>
@@ -1,7 +1,7 @@
1
1
  <template lang="pug">
2
2
  transition(
3
3
  name="expand"
4
- mode="out-in"
4
+ :mode="mode"
5
5
  :css="false"
6
6
  @before-appear="beforeAppear"
7
7
  @appear="appear"
@@ -22,7 +22,8 @@ export default {
22
22
  props: {
23
23
  x: { type: Boolean },
24
24
  y: { type: Boolean },
25
- duration: { type: Number, default: 250 }
25
+ duration: { type: Number, default: 250 },
26
+ mode: { type: String, default: 'out-in' }
26
27
  },
27
28
 
28
29
  data: () => ({
@@ -8,7 +8,8 @@ export default {
8
8
  name: 'w-transition-fade',
9
9
  props: {
10
10
  appear: { type: Boolean },
11
- duration: { type: [Number, String] }
11
+ duration: { type: [Number, String] },
12
+ mode: { type: String }
12
13
  }
13
14
  }
14
15
  </script>
@@ -8,7 +8,8 @@ export default {
8
8
  name: 'w-transition-scale-fade',
9
9
  props: {
10
10
  appear: { type: Boolean },
11
- duration: { type: [Number, String] }
11
+ duration: { type: [Number, String] },
12
+ mode: { type: String }
12
13
  }
13
14
  }
14
15
  </script>
@@ -8,7 +8,8 @@ export default {
8
8
  name: 'w-transition-scale',
9
9
  props: {
10
10
  appear: { type: Boolean },
11
- duration: { type: [Number, String] }
11
+ duration: { type: [Number, String] },
12
+ mode: { type: String }
12
13
  }
13
14
  }
14
15
  </script>
@@ -12,7 +12,8 @@ export default {
12
12
  right: { type: Boolean },
13
13
  up: { type: Boolean },
14
14
  down: { type: Boolean },
15
- duration: { type: [Number, String] }
15
+ duration: { type: [Number, String] },
16
+ mode: { type: String }
16
17
  },
17
18
 
18
19
  computed: {
@@ -12,7 +12,8 @@ export default {
12
12
  right: { type: Boolean },
13
13
  up: { type: Boolean },
14
14
  down: { type: Boolean },
15
- duration: { type: [Number, String] }
15
+ duration: { type: [Number, String] },
16
+ mode: { type: String }
16
17
  },
17
18
 
18
19
  computed: {
@@ -8,7 +8,8 @@ export default {
8
8
  name: 'w-transition-twist',
9
9
  props: {
10
10
  appear: { type: Boolean },
11
- duration: { type: [Number, String] }
11
+ duration: { type: [Number, String] },
12
+ mode: { type: String }
12
13
  }
13
14
  }
14
15
  </script>
@@ -45,6 +45,7 @@
45
45
  </template>
46
46
 
47
47
  <script>
48
+ import { computed } from 'vue'
48
49
  import { objectifyClasses } from '../../utils/index'
49
50
  import { consoleError } from '../../utils/console'
50
51
  import RippleMixin from '../../mixins/ripple'
@@ -68,6 +69,7 @@ export default {
68
69
  itemClass: { type: [String, Array, Object] },
69
70
  titleClass: { type: [String, Array, Object] },
70
71
  contentClass: { type: [String, Array, Object] },
72
+ expandedClass: { type: [String, Array, Object] },
71
73
  expandIcon: { type: [String, Boolean], default: 'wi-triangle-down' },
72
74
  expandIconRight: { type: Boolean },
73
75
  expandIconRotate90: { type: Boolean },
@@ -89,8 +91,9 @@ export default {
89
91
  // All provided to the WAccordionItem, not passed as prop since it could be used externally.
90
92
  provide () {
91
93
  return {
92
- titleClasses: this.titleClasses,
93
- contentClasses: this.contentClasses,
94
+ titleClasses: computed(() => this.titleClasses),
95
+ contentClasses: computed(() => this.contentClasses),
96
+ expandedClass: computed(() => this.expandedClass),
94
97
  onItemToggle: this.onItemToggle,
95
98
  onEndOfCollapse: this.onEndOfCollapse,
96
99
  getOriginalItem: this.getOriginalItem,
@@ -116,7 +119,7 @@ export default {
116
119
 
117
120
  // Detect if the accordion items are directly provided through slot using WAccordionItem.
118
121
  accordionItemsProvided () {
119
- return this.$slots.default?.()?.some(item => item?.type?.name)
122
+ return this.$slots.default?.()?.some(item => item?.type?.name === 'w-accordion-item')
120
123
  },
121
124
 
122
125
  accordionClasses () {
@@ -133,7 +136,9 @@ export default {
133
136
  },
134
137
 
135
138
  itemClasses () {
136
- return objectifyClasses(this.itemClass)
139
+ const classes = [this.itemClass]
140
+ if (this.expandedClass) classes.push(this.expandedClass)
141
+ return objectifyClasses(classes)
137
142
  },
138
143
 
139
144
  titleClasses () {
@@ -217,6 +222,6 @@ export default {
217
222
 
218
223
  @include themeable;
219
224
 
220
- &--shadow {box-shadow: $box-shadow;}
225
+ &--shadow {box-shadow: var(--w-box-shadow);}
221
226
  }
222
227
  </style>
@@ -45,11 +45,19 @@
45
45
  :item="accordionItem"
46
46
  :class="contentClasses")
47
47
  slot(
48
+ v-if="$slots.content"
48
49
  name="content"
49
50
  :item="getOriginalItem(accordionItem)"
50
51
  :expanded="accordionItem._expanded"
51
52
  :index="accordionItem._index + 1")
52
53
  div(v-html="accordionItem[options.itemContentKey]")
54
+ slot(
55
+ v-else
56
+ name="default"
57
+ :item="getOriginalItem(accordionItem)"
58
+ :expanded="accordionItem._expanded"
59
+ :index="accordionItem._index + 1")
60
+ div(v-html="accordionItem[options.itemContentKey]")
53
61
  w-transition-expand(
54
62
  v-else
55
63
  y
@@ -62,11 +70,19 @@
62
70
  :item="accordionItem"
63
71
  :class="contentClasses")
64
72
  slot(
73
+ v-if="$slots.content"
65
74
  name="content"
66
75
  :item="getOriginalItem(accordionItem)"
67
76
  :expanded="accordionItem._expanded"
68
77
  :index="accordionItem._index + 1")
69
78
  div(v-html="accordionItem[options.itemContentKey]")
79
+ slot(
80
+ v-else
81
+ name="default"
82
+ :item="getOriginalItem(accordionItem)"
83
+ :expanded="accordionItem._expanded"
84
+ :index="accordionItem._index + 1")
85
+ div(v-html="accordionItem[options.itemContentKey]")
70
86
  </template>
71
87
 
72
88
  <script>
@@ -97,6 +113,7 @@ export default {
97
113
  options: { from: 'options' },
98
114
  titleClasses: { from: 'titleClasses' },
99
115
  contentClasses: { from: 'contentClasses' },
116
+ expandedClass: { from: 'expandedClass' },
100
117
  onItemToggle: { from: 'onItemToggle' },
101
118
  onEndOfCollapse: { from: 'onEndOfCollapse' },
102
119
  getOriginalItem: { from: 'getOriginalItem' },
@@ -137,7 +154,8 @@ export default {
137
154
  return {
138
155
  'w-accordion__item--expanded': this.accordionItem._expanded,
139
156
  'w-accordion__item--disabled': this.accordionItem._disabled,
140
- [this.accordionItem[this.options.itemColorKey]]: this.accordionItem[this.options.itemColorKey]
157
+ [this.accordionItem[this.options.itemColorKey]]: this.accordionItem[this.options.itemColorKey],
158
+ [this.expandedClass]: this.accordionItem._expanded
141
159
  }
142
160
  }
143
161
  },
@@ -181,13 +199,11 @@ export default {
181
199
  </script>
182
200
 
183
201
  <style lang="scss">
184
- @use "sass:math";
185
-
186
202
  .w-accordion__item {position: relative;}
187
203
 
188
204
  button.w-accordion__expand-icon {color: color-mix(in srgb, var(--w-base-color) 40%, transparent);}
189
205
  .w-accordion__expand-icon {
190
- margin-right: $base-increment;
206
+ margin-right: var(--w-base-increment);
191
207
 
192
208
  .w-accordion--rotate-icon & {@include default-transition;}
193
209
  &--rotate90 {transform: rotate(-90deg);}
@@ -201,11 +217,11 @@ button.w-accordion__expand-icon {color: color-mix(in srgb, var(--w-base-color) 4
201
217
  position: relative;
202
218
  display: flex;
203
219
  align-items: center;
204
- font-size: math.round(1.2 * $base-font-size);
205
- padding: 1 * $base-increment;
220
+ font-size: round(nearest, calc(1.2 * var(--w-base-font-size)), 1px);
221
+ padding: var(--w-base-increment);
206
222
  user-select: none;
207
223
  cursor: pointer;
208
- border-top: $border;
224
+ border-top: var(--w-border);
209
225
  -webkit-tap-highlight-color: transparent;
210
226
 
211
227
  .w-accordion__item--disabled & {
@@ -213,7 +229,7 @@ button.w-accordion__expand-icon {color: color-mix(in srgb, var(--w-base-color) 4
213
229
  opacity: 0.6;
214
230
  -webkit-tap-highlight-color: transparent;
215
231
  }
216
- .w-accordion--no-icon &, .w-accordion--icon-right & {padding-left: 3 * $base-increment;}
232
+ .w-accordion--no-icon &, .w-accordion--icon-right & {padding-left: calc(var(--w-base-increment) * 3);}
217
233
 
218
234
  .w-accordion__item:first-child & {border-top-color: transparent;}
219
235
 
@@ -221,18 +237,17 @@ button.w-accordion__expand-icon {color: color-mix(in srgb, var(--w-base-color) 4
221
237
  content: '';
222
238
  position: absolute;
223
239
  inset: 0;
224
- background-color: currentColor;
225
- opacity: 0;
226
- transition: $fast-transition-duration;
240
+ background-color: transparent;
241
+ transition: background-color var(--w-transition-duration-fast);
227
242
  pointer-events: none;
228
243
  }
229
244
 
230
- &:focus:before, &:hover:before {opacity: 0.03;}
231
- &:active:before {opacity: 0.05;}
245
+ &:focus:before, &:hover:before {background-color: color-mix(in srgb, currentColor 3%, transparent);}
246
+ &:active:before {background-color: color-mix(in srgb, currentColor 5%, transparent);}
232
247
  .w-accordion__item--disabled &:before {display: none;}
233
248
  }
234
249
 
235
250
  .w-accordion__item-content {
236
- padding: (2 * $base-increment) (3 * $base-increment);
251
+ padding: calc(var(--w-base-increment) * 2) calc(var(--w-base-increment) * 3);
237
252
  }
238
253
  </style>
@@ -131,15 +131,13 @@ export default {
131
131
  </script>
132
132
 
133
133
  <style lang="scss">
134
- @use "sass:math";
135
-
136
134
  .w-alert {
137
135
  position: relative;
138
- margin-top: 4 * $base-increment;
139
- margin-bottom: 4 * $base-increment;
140
- padding: 2 * $base-increment;
141
- font-size: $base-font-size;
142
- border-radius: $border-radius;
136
+ margin-top: calc(var(--w-base-increment) * 4);
137
+ margin-bottom: calc(var(--w-base-increment) * 4);
138
+ padding: calc(var(--w-base-increment) * 2);
139
+ font-size: var(--w-base-font-size);
140
+ border-radius: var(--w-border-radius);
143
141
  border: 0 solid currentColor;
144
142
 
145
143
  @include themeable;
@@ -154,10 +152,10 @@ export default {
154
152
  &--tile {border-radius: 0;}
155
153
  &--round {
156
154
  border-radius: 99em;
157
- padding-left: 3 * $base-increment;
158
- padding-right: 3 * $base-increment;
155
+ padding-left: calc(var(--w-base-increment) * 3);
156
+ padding-right: calc(var(--w-base-increment) * 3);
159
157
  }
160
- &--shadow {box-shadow: $box-shadow;}
158
+ &--shadow {box-shadow: var(--w-box-shadow);}
161
159
  &--one-border, &--plain {border: transparent;}
162
160
 
163
161
  // Before for the border, after for the background color.
@@ -171,33 +169,33 @@ export default {
171
169
 
172
170
  // Single side border.
173
171
  // ------------------------------------------------------
174
- &--border-left {padding-left: 3 * $base-increment;}
175
- &--border-right {padding-right: 3 * $base-increment;}
176
- &--border-top {padding-top: 3 * $base-increment;}
177
- &--border-bottom {padding-bottom: 3 * $base-increment;}
172
+ &--border-left {padding-left: calc(var(--w-base-increment) * 3);}
173
+ &--border-right {padding-right: calc(var(--w-base-increment) * 3);}
174
+ &--border-top {padding-top: calc(var(--w-base-increment) * 3);}
175
+ &--border-bottom {padding-bottom: calc(var(--w-base-increment) * 3);}
178
176
 
179
177
  &--one-border:before {content: '';opacity: 0.3;}
180
178
  &--border-left:before {
181
179
  right: auto;
182
- width: $base-increment;
180
+ width: var(--w-base-increment);
183
181
  border-top-left-radius: inherit;
184
182
  border-bottom-left-radius: inherit;
185
183
  }
186
184
  &--border-right:before {
187
185
  left: auto;
188
- width: $base-increment;
186
+ width: var(--w-base-increment);
189
187
  border-top-right-radius: inherit;
190
188
  border-bottom-right-radius: inherit;
191
189
  }
192
190
  &--border-top:before {
193
191
  bottom: auto;
194
- height: $base-increment;
192
+ height: var(--w-base-increment);
195
193
  border-top-left-radius: inherit;
196
194
  border-top-right-radius: inherit;
197
195
  }
198
196
  &--border-bottom:before {
199
197
  top: auto;
200
- height: $base-increment;
198
+ height: var(--w-base-increment);
201
199
  border-bottom-left-radius: inherit;
202
200
  border-bottom-right-radius: inherit;
203
201
  }
@@ -215,15 +213,15 @@ export default {
215
213
  // ------------------------------------------------------
216
214
  &__dismiss.w-button {
217
215
  align-self: flex-start;
218
- margin-left: 2 * $base-increment;
219
- margin-top: math.round(-0.5 * $base-increment);
220
- margin-right: math.round(-0.5 * $base-increment);
216
+ margin-left: calc(var(--w-base-increment) * 2);
217
+ margin-top: calc(var(--w-base-increment) * -0.5);
218
+ margin-right: calc(var(--w-base-increment) * -0.5);
221
219
  }
222
220
 
223
221
  & &__icon {
224
222
  opacity: 0.9;
225
223
  align-self: flex-start;
226
- margin-right: 2 * $base-increment;
224
+ margin-right: calc(var(--w-base-increment) * 2);
227
225
  font-size: 1.3em;
228
226
  }
229
227
  &--has-icon &__content {flex-grow: 1;}
@@ -238,18 +236,18 @@ export default {
238
236
  z-index: 1;
239
237
  transform: translateX(-50%);
240
238
  border: 1px solid color-mix(in srgb, var(--w-base-bg-color) 70%, transparent);
241
- background-color: $base-bg-color;
239
+ background-color: var(--w-base-bg-color);
242
240
  }
243
241
  &--icon-outside &__icon:before {transform: scale(1.05);}
244
242
 
245
- &--icon-outside &__content {padding-left: 3 * $base-increment;}
243
+ &--icon-outside &__content {padding-left: calc(var(--w-base-increment) * 3);}
246
244
 
247
245
  // Sizes.
248
246
  // ------------------------------------------------------
249
- &.size--xs {padding-top: $base-increment;padding-bottom: $base-increment;}
250
- &.size--sm {padding-top: $base-increment;padding-bottom: $base-increment;}
251
- &.size--md {padding-top: math.round(2 * $base-increment);padding-bottom: math.round(2 * $base-increment);}
252
- &.size--lg {padding-top: math.round(3 * $base-increment);padding-bottom: math.round(2.5 * $base-increment);}
253
- &.size--xl {padding-top: math.round(3 * $base-increment);padding-bottom: math.round(3 * $base-increment);}
247
+ &.size--xs {padding-top: var(--w-base-increment);padding-bottom: var(--w-base-increment);}
248
+ &.size--sm {padding-top: var(--w-base-increment);padding-bottom: var(--w-base-increment);}
249
+ &.size--md {padding-top: calc(var(--w-base-increment) * 2);padding-bottom: calc(var(--w-base-increment) * 2);}
250
+ &.size--lg {padding-top: calc(var(--w-base-increment) * 3);padding-bottom: calc(var(--w-base-increment) * 2.5);}
251
+ &.size--xl {padding-top: calc(var(--w-base-increment) * 3);padding-bottom: calc(var(--w-base-increment) * 3);}
254
252
  }
255
253
  </style>