buefy 3.0.6 → 3.0.8

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 (111) hide show
  1. package/dist/buefy.esm.js +6 -6
  2. package/dist/buefy.esm.min.js +2 -2
  3. package/dist/buefy.js +6 -6
  4. package/dist/buefy.min.js +2 -2
  5. package/dist/cjs/{Modal-CVyLPawO.js → Modal-BMPac7tt.js} +3 -3
  6. package/dist/cjs/dialog.js +1 -1
  7. package/dist/cjs/index.js +1 -1
  8. package/dist/cjs/modal.js +2 -2
  9. package/dist/cjs/snackbar.js +1 -1
  10. package/dist/components/autocomplete/index.js +1 -1
  11. package/dist/components/autocomplete/index.min.js +1 -1
  12. package/dist/components/breadcrumb/index.js +1 -1
  13. package/dist/components/breadcrumb/index.min.js +1 -1
  14. package/dist/components/button/index.js +1 -1
  15. package/dist/components/button/index.min.js +1 -1
  16. package/dist/components/carousel/index.js +1 -1
  17. package/dist/components/carousel/index.min.js +1 -1
  18. package/dist/components/checkbox/index.js +1 -1
  19. package/dist/components/checkbox/index.min.js +1 -1
  20. package/dist/components/clockpicker/index.js +1 -1
  21. package/dist/components/clockpicker/index.min.js +1 -1
  22. package/dist/components/collapse/index.js +1 -1
  23. package/dist/components/collapse/index.min.js +1 -1
  24. package/dist/components/colorpicker/index.js +1 -1
  25. package/dist/components/colorpicker/index.min.js +1 -1
  26. package/dist/components/datepicker/index.js +1 -1
  27. package/dist/components/datepicker/index.min.js +1 -1
  28. package/dist/components/datetimepicker/index.js +1 -1
  29. package/dist/components/datetimepicker/index.min.js +1 -1
  30. package/dist/components/dialog/index.js +4 -4
  31. package/dist/components/dialog/index.min.js +2 -2
  32. package/dist/components/dropdown/index.js +1 -1
  33. package/dist/components/dropdown/index.min.js +1 -1
  34. package/dist/components/field/index.js +1 -1
  35. package/dist/components/field/index.min.js +1 -1
  36. package/dist/components/icon/index.js +1 -1
  37. package/dist/components/icon/index.min.js +1 -1
  38. package/dist/components/image/index.js +1 -1
  39. package/dist/components/image/index.min.js +1 -1
  40. package/dist/components/input/index.js +1 -1
  41. package/dist/components/input/index.min.js +1 -1
  42. package/dist/components/loading/index.js +1 -1
  43. package/dist/components/loading/index.min.js +1 -1
  44. package/dist/components/menu/index.js +1 -1
  45. package/dist/components/menu/index.min.js +1 -1
  46. package/dist/components/message/index.js +1 -1
  47. package/dist/components/message/index.min.js +1 -1
  48. package/dist/components/modal/index.js +5 -5
  49. package/dist/components/modal/index.min.js +2 -2
  50. package/dist/components/navbar/index.js +1 -1
  51. package/dist/components/navbar/index.min.js +1 -1
  52. package/dist/components/notification/index.js +1 -1
  53. package/dist/components/notification/index.min.js +1 -1
  54. package/dist/components/numberinput/index.js +1 -1
  55. package/dist/components/numberinput/index.min.js +1 -1
  56. package/dist/components/pagination/index.js +1 -1
  57. package/dist/components/pagination/index.min.js +1 -1
  58. package/dist/components/progress/index.js +1 -1
  59. package/dist/components/progress/index.min.js +1 -1
  60. package/dist/components/radio/index.js +1 -1
  61. package/dist/components/radio/index.min.js +1 -1
  62. package/dist/components/rate/index.js +1 -1
  63. package/dist/components/rate/index.min.js +1 -1
  64. package/dist/components/select/index.js +1 -1
  65. package/dist/components/select/index.min.js +1 -1
  66. package/dist/components/sidebar/index.js +1 -1
  67. package/dist/components/sidebar/index.min.js +1 -1
  68. package/dist/components/skeleton/index.js +1 -1
  69. package/dist/components/skeleton/index.min.js +1 -1
  70. package/dist/components/slider/index.js +1 -1
  71. package/dist/components/slider/index.min.js +1 -1
  72. package/dist/components/snackbar/index.js +2 -2
  73. package/dist/components/snackbar/index.min.js +2 -2
  74. package/dist/components/steps/index.js +1 -1
  75. package/dist/components/steps/index.min.js +1 -1
  76. package/dist/components/switch/index.js +1 -1
  77. package/dist/components/switch/index.min.js +1 -1
  78. package/dist/components/table/index.js +1 -1
  79. package/dist/components/table/index.min.js +1 -1
  80. package/dist/components/tabs/index.js +1 -1
  81. package/dist/components/tabs/index.min.js +1 -1
  82. package/dist/components/tag/index.js +1 -1
  83. package/dist/components/tag/index.min.js +1 -1
  84. package/dist/components/taginput/index.js +1 -1
  85. package/dist/components/taginput/index.min.js +1 -1
  86. package/dist/components/timepicker/index.js +1 -1
  87. package/dist/components/timepicker/index.min.js +1 -1
  88. package/dist/components/toast/index.js +1 -1
  89. package/dist/components/toast/index.min.js +1 -1
  90. package/dist/components/tooltip/index.js +1 -1
  91. package/dist/components/tooltip/index.min.js +1 -1
  92. package/dist/components/upload/index.js +1 -1
  93. package/dist/components/upload/index.min.js +1 -1
  94. package/dist/css/buefy.css +2 -2
  95. package/dist/css/buefy.min.css +1 -1
  96. package/dist/css/versions/buefy-no-reset.css +2 -2
  97. package/dist/css/versions/buefy-no-reset.min.css +1 -1
  98. package/dist/css/versions/buefy-standalone.css +2 -2
  99. package/dist/css/versions/buefy-standalone.min.css +1 -1
  100. package/dist/esm/{Modal-C13NJijf.js → Modal-DXjEE6j6.js} +3 -3
  101. package/dist/esm/dialog.js +1 -1
  102. package/dist/esm/index.js +1 -1
  103. package/dist/esm/modal.js +2 -2
  104. package/dist/esm/snackbar.js +1 -1
  105. package/package.json +5 -4
  106. package/src/components/modal/Modal.spec.ts +6 -3
  107. package/src/components/modal/Modal.vue +3 -4
  108. package/src/components/modal/index.ts +1 -1
  109. package/src/components/snackbar/Snackbar.spec.ts +53 -1
  110. package/src/components/snackbar/index.ts +1 -1
  111. package/src/scss/components/_sidebar.scss +1 -1
@@ -184,9 +184,6 @@ const Modal$1 = defineComponent({
184
184
  this.$emit("update:modelValue", false);
185
185
  if (this.programmatic) {
186
186
  this.isActive = false;
187
- setTimeout(() => {
188
- removeElement(this.$el);
189
- }, 150);
190
187
  }
191
188
  },
192
189
  /*
@@ -232,6 +229,9 @@ const Modal$1 = defineComponent({
232
229
  beforeUnmount() {
233
230
  if (typeof window !== "undefined") {
234
231
  document.removeEventListener("keyup", this.keyPress);
232
+ if (this.programmatic) {
233
+ removeElement(this.$el);
234
+ }
235
235
  document.documentElement.classList.remove("is-clipped");
236
236
  const savedScrollTop = !this.savedScrollTop ? document.documentElement.scrollTop : this.savedScrollTop;
237
237
  document.body.classList.remove("is-noscroll");
@@ -1,7 +1,7 @@
1
1
  import { defineComponent, resolveComponent, resolveDirective, openBlock, createBlock, Transition, withCtx, withDirectives, createElementBlock, normalizeClass, createElementVNode, toDisplayString, createCommentVNode, createVNode, renderSlot, Fragment, mergeProps, withKeys, vModelDynamic, createTextVNode, inject, createApp, h } from 'vue';
2
2
  import { d as directive } from './trapFocus-KHP_kCNE.js';
3
3
  import { B as BIcon } from './Icon-pQAdaqZb.js';
4
- import { M as Modal } from './Modal-C13NJijf.js';
4
+ import { M as Modal } from './Modal-DXjEE6j6.js';
5
5
  import { B as BButton } from './Button-BTP__-p5.js';
6
6
  import { c as config } from './config-f4Dyy8TN.js';
7
7
  import { removeElement, getComponentFromVNode, copyAppContext } from './helpers.js';
package/dist/esm/index.js CHANGED
@@ -88,7 +88,7 @@ export { B as BIcon } from './Icon-pQAdaqZb.js';
88
88
  export { I as BImage } from './Image-COmzg-EK.js';
89
89
  export { B as BInput } from './Input-CErQ1Jyw.js';
90
90
  export { B as BLoading } from './Loading-BSqhV1Gi.js';
91
- export { M as BModal } from './Modal-C13NJijf.js';
91
+ export { M as BModal } from './Modal-DXjEE6j6.js';
92
92
  export { B as BPagination, P as BPaginationButton } from './Pagination-DvgzxH87.js';
93
93
  export { P as BProgress } from './Progress-AeKn1Ttq.js';
94
94
  export { B as BSelect } from './Select-CbkuxvSQ.js';
package/dist/esm/modal.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { createApp, h, inject } from 'vue';
2
- import { M as Modal } from './Modal-C13NJijf.js';
2
+ import { M as Modal } from './Modal-DXjEE6j6.js';
3
3
  import { getComponentFromVNode, copyAppContext } from './helpers.js';
4
4
  import { a as registerComponent, r as registerComponentProgrammatic } from './plugins-1tLsuIZF.js';
5
5
  import './trapFocus-KHP_kCNE.js';
@@ -63,7 +63,7 @@ class ModalProgrammatic {
63
63
  Modal,
64
64
  __spreadProps(__spreadValues({}, propsData), {
65
65
  programmatic: true,
66
- onClose: () => {
66
+ onAfterLeave: () => {
67
67
  vueInstance.unmount();
68
68
  },
69
69
  // intentionally overrides propsData.onCancel
@@ -165,7 +165,7 @@ class SnackbarProgrammatic {
165
165
  const propsData = __spreadValues({
166
166
  type: "is-success",
167
167
  position: config.defaultSnackbarPosition || "is-bottom-right",
168
- queue: true,
168
+ queue: config.defaultNoticeQueue,
169
169
  message
170
170
  }, restParams);
171
171
  const container = document.createElement("div");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "buefy",
3
- "version": "3.0.6",
3
+ "version": "3.0.8",
4
4
  "description": "Lightweight UI components for Vue.js (v3) based on Bulma",
5
5
  "keywords": [
6
6
  "vuejs",
@@ -53,7 +53,8 @@
53
53
  "build:scss-buefy": "sass --load-path=../../node_modules --load-path=node_modules src/scss/versions/buefy-bulma-bundle.scss dist/css/buefy.css && node ./build/banner.js < dist/css/buefy.css > dist/css/buefy.banner.css && mv dist/css/buefy.banner.css dist/css/buefy.css && cleancss -o dist/css/buefy.min.css dist/css/buefy.css",
54
54
  "build:scss-buefy-standalone": "sass --load-path=../../node_modules --load-path=node_modules src/scss/buefy.scss dist/css/versions/buefy-standalone.css && node ./build/banner.js < dist/css/versions/buefy-standalone.css > dist/css/buefy.banner.css && mv dist/css/buefy.banner.css dist/css/versions/buefy-standalone.css && cleancss -o dist/css/versions/buefy-standalone.min.css dist/css/versions/buefy-standalone.css",
55
55
  "build:scss-no-reset": "sass --load-path=../../node_modules --load-path=node_modules src/scss/versions/buefy-no-reset.scss dist/css/versions/buefy-no-reset.css && node ./build/banner.js < dist/css/versions/buefy-no-reset.css > dist/css/buefy.banner.css && mv dist/css/buefy.banner.css dist/css/versions/buefy-no-reset.css && cleancss -o dist/css/versions/buefy-no-reset.min.css dist/css/versions/buefy-no-reset.css",
56
- "vetur": "node -r esm build/vetur.js"
56
+ "vetur": "node -r esm build/vetur.js",
57
+ "generate:mcp": "node build/generate-mcp.mjs"
57
58
  },
58
59
  "dependencies": {
59
60
  "bulma": "^1.0.4"
@@ -63,7 +64,7 @@
63
64
  },
64
65
  "devDependencies": {
65
66
  "@babel/plugin-transform-runtime": "^7.26.9",
66
- "@babel/preset-env": "^7.26.9",
67
+ "@babel/preset-env": "^7.29.5",
67
68
  "@microsoft/api-extractor": "^7.50.0",
68
69
  "@rollup/plugin-babel": "^6.0.4",
69
70
  "@rollup/plugin-commonjs": "^28.0.2",
@@ -78,6 +79,6 @@
78
79
  "jsdom": "^26.0.0",
79
80
  "rimraf": "^5.0.10",
80
81
  "rollup-plugin-esbuild": "^6.1.0",
81
- "vitest": "^3.0.6"
82
+ "vitest": "^4.1.8"
82
83
  }
83
84
  }
@@ -117,11 +117,14 @@ describe('BModal', () => {
117
117
  })
118
118
  await modal.$nextTick() // makes sure DOM is updated
119
119
  expect(document.querySelector('.modal')).toBeTruthy()
120
- vi.useFakeTimers()
120
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
121
+ const modalProxy = (modal.$data as any).modalVNode?.component?.proxy
122
+ const modalVm = modalProxy as InstanceType<typeof BModal>
121
123
  modal.close()
122
- vi.advanceTimersByTime(150)
124
+ // JSDOM has no CSS transitions; manually trigger the after-leave hook
125
+ modalVm.afterLeave()
126
+ await modal.$nextTick()
123
127
  expect(document.querySelector('.modal')).toBeFalsy()
124
- vi.useRealTimers()
125
128
  })
126
129
  })
127
130
 
@@ -260,12 +260,8 @@ const Modal = defineComponent({
260
260
  this.$emit('close')
261
261
  this.$emit('update:modelValue', false)
262
262
 
263
- // Timeout for the animation complete before destroying
264
263
  if (this.programmatic) {
265
264
  this.isActive = false
266
- setTimeout(() => {
267
- removeElement(this.$el)
268
- }, 150)
269
265
  }
270
266
  },
271
267
 
@@ -319,6 +315,9 @@ const Modal = defineComponent({
319
315
  beforeUnmount() {
320
316
  if (typeof window !== 'undefined') {
321
317
  document.removeEventListener('keyup', this.keyPress)
318
+ if (this.programmatic) {
319
+ removeElement(this.$el)
320
+ }
322
321
  // reset scroll
323
322
  document.documentElement.classList.remove('is-clipped')
324
323
  const savedScrollTop = !this.savedScrollTop
@@ -68,7 +68,7 @@ class ModalProgrammatic {
68
68
  {
69
69
  ...propsData,
70
70
  programmatic: true,
71
- onClose: () => {
71
+ onAfterLeave: () => {
72
72
  vueInstance.unmount()
73
73
  },
74
74
  // intentionally overrides propsData.onCancel
@@ -1,9 +1,13 @@
1
+ import { transformVNodeArgs } from 'vue'
1
2
  import { shallowMount } from '@vue/test-utils'
2
3
  import type { VueWrapper } from '@vue/test-utils'
3
- import { beforeEach, describe, expect, it, vi } from 'vitest'
4
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
4
5
  import BSnackbar from '@components/snackbar/Snackbar.vue'
6
+ import { SnackbarProgrammatic } from '@components/snackbar'
7
+ import config, { setOptions } from '@utils/config'
5
8
 
6
9
  let wrapper: VueWrapper<InstanceType<typeof BSnackbar>>
10
+ const realInsertAdjacentElement = HTMLElement.prototype.insertAdjacentElement
7
11
 
8
12
  describe('BSnackbar', () => {
9
13
  HTMLElement.prototype.insertAdjacentElement = vi.fn()
@@ -32,4 +36,52 @@ describe('BSnackbar', () => {
32
36
  expect(wrapper.vm.onAction).toHaveBeenCalled()
33
37
  expect(wrapper.vm.close).toHaveBeenCalled()
34
38
  })
39
+
40
+ describe('programmatically opened', () => {
41
+ const savedNoticeQueue = config.defaultNoticeQueue
42
+
43
+ beforeEach(() => {
44
+ transformVNodeArgs(undefined)
45
+ HTMLElement.prototype.insertAdjacentElement = realInsertAdjacentElement
46
+ })
47
+
48
+ afterEach(() => {
49
+ HTMLElement.prototype.insertAdjacentElement = vi.fn()
50
+ setOptions(Object.assign(config, { defaultNoticeQueue: savedNoticeQueue }))
51
+ document.querySelectorAll('.notices').forEach((el) => el.remove())
52
+ })
53
+
54
+ it('should not dismiss existing snackbar when queue is disabled globally', () => {
55
+ setOptions(Object.assign(config, { defaultNoticeQueue: false }))
56
+
57
+ new SnackbarProgrammatic().open({ message: 'first', indefinite: true })
58
+ const parent = document.querySelector('body > .notices.is-bottom')!
59
+ expect(parent.childElementCount).toBe(1)
60
+
61
+ new SnackbarProgrammatic().open({ message: 'second', indefinite: true })
62
+ expect(parent.childElementCount).toBe(2)
63
+ })
64
+
65
+ it('should dismiss existing snackbar when queue is enabled', () => {
66
+ setOptions(Object.assign(config, { defaultNoticeQueue: true }))
67
+
68
+ new SnackbarProgrammatic().open({ message: 'first', indefinite: true })
69
+ const parent = document.querySelector('body > .notices.is-bottom')!
70
+ expect(parent.childElementCount).toBe(1)
71
+
72
+ new SnackbarProgrammatic().open({ message: 'second', indefinite: true })
73
+ expect(parent.childElementCount).toBe(1)
74
+ })
75
+
76
+ it('explicit queue param should override the global config', () => {
77
+ setOptions(Object.assign(config, { defaultNoticeQueue: false }))
78
+
79
+ new SnackbarProgrammatic().open({ message: 'first', indefinite: true })
80
+ const parent = document.querySelector('body > .notices.is-bottom')!
81
+ expect(parent.childElementCount).toBe(1)
82
+
83
+ new SnackbarProgrammatic().open({ message: 'second', indefinite: true, queue: true })
84
+ expect(parent.childElementCount).toBe(1)
85
+ })
86
+ })
35
87
  })
@@ -51,7 +51,7 @@ class SnackbarProgrammatic {
51
51
  const propsData: SnackbarProps = {
52
52
  type: 'is-success',
53
53
  position: config.defaultSnackbarPosition || 'is-bottom-right',
54
- queue: true,
54
+ queue: config.defaultNoticeQueue,
55
55
  message,
56
56
  ...restParams
57
57
  }
@@ -80,7 +80,7 @@ $sidebar-close-button-dark-background: rgba(10,10,10,.86) !default;
80
80
  flex-direction: column;
81
81
  align-content: stretch;
82
82
  }
83
- @media screen and (max-width: calc(cv.getVar("sidebar-mobile-breakpoint") - 1px)) {
83
+ @media screen and (max-width: #{$sidebar-mobile-breakpoint - 1px}) {
84
84
  &.is-mini-mobile {
85
85
  width: cv.getVar("sidebar-mobile-width");
86
86
  &.is-mini-expand:hover {