bitboss-ui 2.1.122 → 2.1.124

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.
@@ -147,14 +147,22 @@
147
147
  @option:unselected="onOptionUnselected"
148
148
  >
149
149
  <template #options:prepend
150
- ><slot v-if="shown" name="options:prepend" :focus="focusInput"
150
+ ><slot
151
+ v-if="shown"
152
+ name="options:prepend"
153
+ :focus="focusInput"
154
+ :close="close"
151
155
  /></template>
152
156
  <template #loading><slot name="loading" :query="query" /></template>
153
157
  <template #no-data
154
158
  ><slot name="no-data" :query="query" :focus="focusInput"
155
159
  /></template>
156
160
  <template #options:append
157
- ><slot v-if="shown" name="options:append" :focus="focusInput"
161
+ ><slot
162
+ v-if="shown"
163
+ name="options:append"
164
+ :focus="focusInput"
165
+ :close="close"
158
166
  /></template>
159
167
  <template #option="data"
160
168
  ><slot
@@ -1263,6 +1271,20 @@ export type BaseSelectFocusSlotProps = {
1263
1271
  * Focuses the search input.
1264
1272
  */
1265
1273
  focus: () => void;
1274
+ /**
1275
+ * Closes the dropdown popover.
1276
+ */
1277
+ close?: () => Promise<void>;
1278
+ };
1279
+
1280
+ /**
1281
+ * Props exposed by inner options panel slots (`options:append`, `options:prepend`).
1282
+ */
1283
+ export type BaseSelectOptionsPanelSlotProps = BaseSelectFocusSlotProps & {
1284
+ /**
1285
+ * Closes the dropdown popover.
1286
+ */
1287
+ close: () => Promise<void>;
1266
1288
  };
1267
1289
 
1268
1290
  export type BaseSelectSlots<Item = any> = {
@@ -1301,7 +1323,7 @@ export type BaseSelectSlots<Item = any> = {
1301
1323
  /**
1302
1324
  * Content rendered after the option list, inside the dropdown panel.
1303
1325
  */
1304
- 'options:append'?: (props: BaseSelectFocusSlotProps) => any;
1326
+ 'options:append'?: (props: BaseSelectOptionsPanelSlotProps) => any;
1305
1327
  /**
1306
1328
  * Content rendered after the dropdown panel, outside the scrollable options area.
1307
1329
  */
@@ -1309,7 +1331,7 @@ export type BaseSelectSlots<Item = any> = {
1309
1331
  /**
1310
1332
  * Content rendered before the option list, inside the dropdown panel.
1311
1333
  */
1312
- 'options:prepend'?: (props: BaseSelectFocusSlotProps) => any;
1334
+ 'options:prepend'?: (props: BaseSelectOptionsPanelSlotProps) => any;
1313
1335
  /**
1314
1336
  * Content rendered before the dropdown panel, outside the scrollable options area.
1315
1337
  */
@@ -36,8 +36,8 @@
36
36
  >
37
37
  <span
38
38
  :id="`menu_${id}`"
39
- :aria-labelledby="id"
40
- aria-role="menu"
39
+ :aria-labelledby="activatorId"
40
+ role="menu"
41
41
  class="bb-dropdown__items-container"
42
42
  :inert="!open"
43
43
  :style="parsedWidth ? { width: parsedWidth } : undefined"
@@ -62,7 +62,7 @@
62
62
  :text="item.text"
63
63
  ></slot>
64
64
  <BaseButton
65
- :aria-role="'menuitem'"
65
+ role="menuitem"
66
66
  class="bb-dropdown__item"
67
67
  :class="{
68
68
  'bb-dropdown__item--first': index === 0,
@@ -149,6 +149,12 @@ defineOptions({
149
149
  });
150
150
 
151
151
  const id = props.id ?? `bb_${useId().id.value}`;
152
+ /**
153
+ * Id used to label the menu (`aria-labelledby`). Defaults to the component id,
154
+ * but adopts the activator's pre-existing id when there is one — so attaching to
155
+ * a user-owned element (e.g. via a directive) never clobbers its id.
156
+ */
157
+ const activatorId = ref(id);
152
158
  const activator = ref<HTMLElement>();
153
159
  const activatorDom = computed(() => extractDomContainer(activator.value));
154
160
  const hasExternalActivator = computed(() => props.activator != null);
@@ -465,7 +471,15 @@ watch(
465
471
  }
466
472
  if (!el) return;
467
473
 
468
- el.id = id;
474
+ // Adopt an existing id rather than overwriting it (the menu is labelled by
475
+ // the activator via `aria-labelledby`); only assign one when absent.
476
+ let assignedId = false;
477
+ if (!el.id) {
478
+ el.id = id;
479
+ assignedId = true;
480
+ }
481
+ activatorId.value = el.id;
482
+ el.setAttribute('aria-haspopup', 'menu');
469
483
 
470
484
  const removers: (() => void)[] = [];
471
485
 
@@ -495,7 +509,8 @@ watch(
495
509
 
496
510
  cleanupActivator = () => {
497
511
  removers.forEach((fn) => fn());
498
- el.removeAttribute('id');
512
+ if (assignedId) el.removeAttribute('id');
513
+ el.removeAttribute('aria-haspopup');
499
514
  el.removeAttribute('aria-expanded');
500
515
  el.removeAttribute('aria-controls');
501
516
  };
@@ -514,7 +514,10 @@ export type BbSelectSlots<T> = {
514
514
  /**
515
515
  * Content appended inside the options list, after the last option.
516
516
  */
517
- 'options:append'?: (props: { focus: () => void }) => any;
517
+ 'options:append'?: (props: {
518
+ focus: () => void;
519
+ close: () => Promise<void>;
520
+ }) => any;
518
521
  /**
519
522
  * Content appended outside the options list container.
520
523
  */
@@ -522,7 +525,10 @@ export type BbSelectSlots<T> = {
522
525
  /**
523
526
  * Content prepended inside the options list, before the first option.
524
527
  */
525
- 'options:prepend'?: (props: { focus: () => void }) => any;
528
+ 'options:prepend'?: (props: {
529
+ focus: () => void;
530
+ close: () => Promise<void>;
531
+ }) => any;
526
532
  /**
527
533
  * Content prepended outside the options list container.
528
534
  */
@@ -4,6 +4,10 @@
4
4
 
5
5
  ```vue
6
6
  <template>
7
+ <span v-if="resolvedDescription" :id="descId" class="sr-only">{{
8
+ resolvedDescription
9
+ }}</span>
10
+
7
11
  <slot
8
12
  v-if="!hasExternalActivator"
9
13
  name="activator"
@@ -49,13 +53,22 @@
49
53
  />
50
54
  </svg>
51
55
  </BaseButton>
52
- <slot></slot>
56
+ <slot>{{ text }}</slot>
53
57
  </span>
54
58
  </CommonPopover>
55
59
  </template>
56
60
 
57
61
  <script setup lang="ts">
58
- import { computed, onBeforeUnmount, ref, useTemplateRef, watch } from 'vue';
62
+ import {
63
+ Comment,
64
+ computed,
65
+ onBeforeUnmount,
66
+ onMounted,
67
+ ref,
68
+ useTemplateRef,
69
+ watch,
70
+ type VNode,
71
+ } from 'vue';
59
72
  import { useId } from '@/composables/useId';
60
73
  import { useLocale } from '@/composables/useLocale';
61
74
  import { useUntil } from '@/composables/useUntil';
@@ -76,7 +89,7 @@ const props = withDefaults(defineProps<BbTooltipProps>(), {
76
89
  timeout: 0,
77
90
  });
78
91
 
79
- defineSlots<BbTooltipSlots>();
92
+ const slots = defineSlots<BbTooltipSlots>();
80
93
 
81
94
  defineOptions({
82
95
  inheritAttrs: false,
@@ -84,6 +97,47 @@ defineOptions({
84
97
 
85
98
  const { t } = useLocale();
86
99
  const id = `bb_${props.id ?? useId().id.value}`;
100
+ const descId = `${id}_desc`;
101
+
102
+ /**
103
+ * Recursively collect plain text from slot vnodes so a description can be
104
+ * resolved from the default slot (e.g. `<BbTooltip>Some text</BbTooltip>`)
105
+ * without forcing the consumer to also pass the `text` prop. Component vnodes
106
+ * are skipped on purpose, so wrappers used only for styling still resolve while
107
+ * nested components don't leak their content.
108
+ */
109
+ const slotToText = (nodes?: VNode[]): string => {
110
+ if (!nodes) return '';
111
+ let out = '';
112
+ for (const node of nodes) {
113
+ if (node.type === Comment) continue;
114
+ const children = node.children;
115
+ if (typeof children === 'string') {
116
+ out += children;
117
+ } else if (Array.isArray(children)) {
118
+ out += slotToText(children as VNode[]);
119
+ }
120
+ }
121
+ return out;
122
+ };
123
+
124
+ /**
125
+ * The description exposed to assistive technology. Prefers the explicit `text`
126
+ * prop, falling back to text extracted from the default slot. When empty, the
127
+ * component keeps its lazy `aria-describedby`-on-open behaviour.
128
+ */
129
+ /**
130
+ * Slot reading is disabled until the component is mounted so the slot is only
131
+ * ever invoked inside the render function (reading it during setup — e.g. from
132
+ * a watcher baseline — triggers Vue's "slot invoked outside render" warning).
133
+ */
134
+ const canReadSlots = ref(false);
135
+
136
+ const resolvedDescription = computed(() => {
137
+ const raw =
138
+ props.text ?? (canReadSlots.value ? slotToText(slots.default?.({})) : '');
139
+ return raw.replace(/\s+/g, ' ').trim();
140
+ });
87
141
  const activatorEl = ref<HTMLElement>();
88
142
  const hasExternalActivator = computed(() => props.activator != null);
89
143
  const popoverRef = useTemplateRef('popover');
@@ -196,16 +250,31 @@ watch(
196
250
  { immediate: true }
197
251
  );
198
252
 
199
- watch(
200
- [activatorEl, hasOpenedOnce] as const,
201
- ([el, opened]) => {
202
- if (!el) return;
203
- if (opened) {
204
- el.setAttribute('aria-describedby', id);
205
- }
206
- },
207
- { immediate: true }
208
- );
253
+ const applyDescribedBy = () => {
254
+ const el = activatorEl.value;
255
+ if (!el) return;
256
+ // When a description can be resolved up front, associate it eagerly so it is
257
+ // announced on first focus. Otherwise fall back to the lazy popover content,
258
+ // which only exists once the tooltip has opened.
259
+ if (resolvedDescription.value) {
260
+ el.setAttribute('aria-describedby', descId);
261
+ } else if (hasOpenedOnce.value) {
262
+ el.setAttribute('aria-describedby', id);
263
+ }
264
+ };
265
+
266
+ onMounted(() => {
267
+ // Apply the prop-based description first (slot reading is still off, so this
268
+ // never invokes the slot outside render), then enable slot extraction.
269
+ applyDescribedBy();
270
+ canReadSlots.value = true;
271
+ });
272
+
273
+ // `flush: 'post'` so the slot-derived description is read from the cached
274
+ // computed *after* render — never by invoking the slot outside the render fn.
275
+ watch([activatorEl, hasOpenedOnce, resolvedDescription], applyDescribedBy, {
276
+ flush: 'post',
277
+ });
209
278
 
210
279
  onBeforeUnmount(() => {
211
280
  cleanupActivator?.();
@@ -257,6 +326,7 @@ export type BbTooltipProps = Pick<
257
326
  | 'padding'
258
327
  | 'placement'
259
328
  | 'showClose'
329
+ | 'text'
260
330
  | 'theme'
261
331
  | 'transitionDuration'
262
332
  > & {
@@ -51,7 +51,14 @@ import {
51
51
  hide,
52
52
  size,
53
53
  } from '@floating-ui/vue';
54
- import { computed, nextTick, onMounted, ref, watch } from 'vue';
54
+ import {
55
+ computed,
56
+ nextTick,
57
+ onBeforeUnmount,
58
+ onMounted,
59
+ ref,
60
+ watch,
61
+ } from 'vue';
55
62
  import type { CommonPopoverProps, CommonPopoverSlots } from './types';
56
63
 
57
64
  const props = withDefaults(defineProps<CommonPopoverProps>(), {
@@ -131,12 +138,37 @@ const { floatingStyles, placement, middlewareData, update } = useFloating(
131
138
  wrapper,
132
139
  {
133
140
  placement: props.placement,
134
- whileElementsMounted: autoUpdate,
135
141
  middleware,
136
142
  strategy: 'fixed',
137
143
  }
138
144
  );
139
145
 
146
+ /**
147
+ * `autoUpdate` attaches scroll/resize listeners and `ResizeObserver`s for as
148
+ * long as it runs, so we only keep it alive while the popover is visible (or
149
+ * when `forceAutoUpdate` opts back into always-on tracking). Idle popovers then
150
+ * hold no listeners. `toggle()` still calls `update()` on open for the first
151
+ * frame, so gating this loses no positioning accuracy.
152
+ */
153
+ let stopAutoUpdate: (() => void) | null = null;
154
+
155
+ watch(
156
+ [shown, anchor, wrapper, () => props.forceAutoUpdate] as const,
157
+ ([isShown, anchorEl, floatingEl, force]) => {
158
+ stopAutoUpdate?.();
159
+ stopAutoUpdate = null;
160
+ if ((isShown || force) && anchorEl && floatingEl) {
161
+ stopAutoUpdate = autoUpdate(anchorEl, floatingEl, update);
162
+ }
163
+ },
164
+ { immediate: true }
165
+ );
166
+
167
+ onBeforeUnmount(() => {
168
+ stopAutoUpdate?.();
169
+ stopAutoUpdate = null;
170
+ });
171
+
140
172
  /**
141
173
  * This mess is due to:
142
174
  * - lazy rendering of content
@@ -465,6 +497,17 @@ export type CommonPopoverProps = Pick<
465
497
  * @defaultValue `false`
466
498
  */
467
499
  scrollable?: boolean;
500
+ /**
501
+ * Keeps floating-ui's `autoUpdate` (scroll/resize/resize-observer tracking)
502
+ * running while the popover is closed.
503
+ *
504
+ * By default the position is only tracked while the popover is open, so idle
505
+ * popovers attach no listeners. Enable this only when the anchor moves while
506
+ * the popover is closed and the next open must be pixel-perfect immediately.
507
+ *
508
+ * @defaultValue `false`
509
+ */
510
+ forceAutoUpdate?: boolean;
468
511
  };
469
512
 
470
513
  export type CommonPopoverEvents = Record<never, never>;
@@ -388,6 +388,19 @@ export type BaseSelectFocusSlotProps = {
388
388
  * Focuses the search input.
389
389
  */
390
390
  focus: () => void;
391
+ /**
392
+ * Closes the dropdown popover.
393
+ */
394
+ close?: () => Promise<void>;
395
+ };
396
+ /**
397
+ * Props exposed by inner options panel slots (`options:append`, `options:prepend`).
398
+ */
399
+ export type BaseSelectOptionsPanelSlotProps = BaseSelectFocusSlotProps & {
400
+ /**
401
+ * Closes the dropdown popover.
402
+ */
403
+ close: () => Promise<void>;
391
404
  };
392
405
  export type BaseSelectSlots<Item = any> = {
393
406
  /**
@@ -425,7 +438,7 @@ export type BaseSelectSlots<Item = any> = {
425
438
  /**
426
439
  * Content rendered after the option list, inside the dropdown panel.
427
440
  */
428
- 'options:append'?: (props: BaseSelectFocusSlotProps) => any;
441
+ 'options:append'?: (props: BaseSelectOptionsPanelSlotProps) => any;
429
442
  /**
430
443
  * Content rendered after the dropdown panel, outside the scrollable options area.
431
444
  */
@@ -433,7 +446,7 @@ export type BaseSelectSlots<Item = any> = {
433
446
  /**
434
447
  * Content rendered before the option list, inside the dropdown panel.
435
448
  */
436
- 'options:prepend'?: (props: BaseSelectFocusSlotProps) => any;
449
+ 'options:prepend'?: (props: BaseSelectOptionsPanelSlotProps) => any;
437
450
  /**
438
451
  * Content rendered before the dropdown panel, outside the scrollable options area.
439
452
  */
@@ -308,6 +308,7 @@ export type BbSelectSlots<T> = {
308
308
  */
309
309
  'options:append'?: (props: {
310
310
  focus: () => void;
311
+ close: () => Promise<void>;
311
312
  }) => any;
312
313
  /**
313
314
  * Content appended outside the options list container.
@@ -320,6 +321,7 @@ export type BbSelectSlots<T> = {
320
321
  */
321
322
  'options:prepend'?: (props: {
322
323
  focus: () => void;
324
+ close: () => Promise<void>;
323
325
  }) => any;
324
326
  /**
325
327
  * Content prepended outside the options list container.
@@ -1,6 +1,6 @@
1
1
  import { CommonProps } from '../../types/CommonProps';
2
2
  import { Placement } from '@floating-ui/vue';
3
- export type BbTooltipProps = Pick<CommonProps, 'arrowPadding' | 'block' | 'disabled' | 'eager' | 'id' | 'padding' | 'placement' | 'showClose' | 'theme' | 'transitionDuration'> & {
3
+ export type BbTooltipProps = Pick<CommonProps, 'arrowPadding' | 'block' | 'disabled' | 'eager' | 'id' | 'padding' | 'placement' | 'showClose' | 'text' | 'theme' | 'transitionDuration'> & {
4
4
  /**
5
5
  * External activator element or component ref.
6
6
  * When provided, the activator slot is not rendered and event listeners
@@ -40,6 +40,17 @@ export type CommonPopoverProps = Pick<CommonProps, 'arrowPadding' | 'eager' | 'o
40
40
  * @defaultValue `false`
41
41
  */
42
42
  scrollable?: boolean;
43
+ /**
44
+ * Keeps floating-ui's `autoUpdate` (scroll/resize/resize-observer tracking)
45
+ * running while the popover is closed.
46
+ *
47
+ * By default the position is only tracked while the popover is open, so idle
48
+ * popovers attach no listeners. Enable this only when the anchor moves while
49
+ * the popover is closed and the next open must be pixel-perfect immediately.
50
+ *
51
+ * @defaultValue `false`
52
+ */
53
+ forceAutoUpdate?: boolean;
43
54
  };
44
55
  export type CommonPopoverEvents = Record<never, never>;
45
56
  export type CommonPopoverSlots = {
@@ -0,0 +1,38 @@
1
+ import { App } from 'vue';
2
+ import { BbDropdownProps, Item } from '../components/BbDropdown/types';
3
+ /**
4
+ * Value accepted by the `v-bb-dropdown` directive.
5
+ *
6
+ * - an array of {@link Item} is used directly as the dropdown items
7
+ * - an object spreads every `BbDropdown` prop plus a required `items` array
8
+ */
9
+ export type BbDropdownDirectiveValue = Item[] | (Partial<Omit<BbDropdownProps, 'items'>> & {
10
+ items: Item[];
11
+ });
12
+ /**
13
+ * `v-bb-dropdown` — attach a {@link BbDropdown} menu to any element without
14
+ * wrapping it. Best used on a focusable/clickable element (e.g. a `<button>`);
15
+ * the keyboard and ARIA wiring is applied to the host element directly.
16
+ *
17
+ * @example
18
+ * ```html
19
+ * <button v-bb-dropdown="items">Menu</button>
20
+ * <button v-bb-dropdown:bottom="items">Menu</button>
21
+ * <button v-bb-dropdown="{ items, trigger: 'contextMenu', placement: 'right' }">Menu</button>
22
+ * ```
23
+ */
24
+ export declare const vBbDropdown: import('vue').Directive<HTMLElement, BbDropdownDirectiveValue>;
25
+ /**
26
+ * Vue plugin that registers {@link vBbDropdown} globally.
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * import { BbDropdownDirective } from '@bitboss/ui-components';
31
+ * app.use(BbDropdownDirective); // registers `v-bb-dropdown`
32
+ * app.use(BbDropdownDirective, 'dropdown'); // registers `v-dropdown`
33
+ * ```
34
+ */
35
+ export declare const BbDropdownDirectivePlugin: {
36
+ install(app: App, name?: string): void;
37
+ };
38
+ export default vBbDropdown;
@@ -0,0 +1,36 @@
1
+ import { App } from 'vue';
2
+ import { BbTooltipProps } from '../components/BbTooltip/types';
3
+ /**
4
+ * Value accepted by the `v-bb-tooltip` directive.
5
+ *
6
+ * - a string/number is used directly as the tooltip text
7
+ * - an object spreads every `BbTooltip` prop plus a required `text`
8
+ */
9
+ export type BbTooltipDirectiveValue = string | number | (Partial<BbTooltipProps> & {
10
+ text: string;
11
+ });
12
+ /**
13
+ * `v-bb-tooltip` — attach a {@link BbTooltip} to any element without wrapping it.
14
+ *
15
+ * @example
16
+ * ```html
17
+ * <span v-bb-tooltip="'North Atlantic Treaty Organization'">Nato</span>
18
+ * <span v-bb-tooltip:bottom="'North Atlantic…'">Nato</span>
19
+ * <span v-bb-tooltip="{ text: 'North Atlantic…', placement: 'right', timeout: 300 }">Nato</span>
20
+ * ```
21
+ */
22
+ export declare const vBbTooltip: import('vue').Directive<HTMLElement, BbTooltipDirectiveValue>;
23
+ /**
24
+ * Vue plugin that registers {@link vBbTooltip} globally.
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * import { BbTooltipDirective } from '@bitboss/ui-components';
29
+ * app.use(BbTooltipDirective); // registers `v-bb-tooltip`
30
+ * app.use(BbTooltipDirective, 'tooltip'); // registers `v-tooltip`
31
+ * ```
32
+ */
33
+ export declare const BbTooltipDirectivePlugin: {
34
+ install(app: App, name?: string): void;
35
+ };
36
+ export default vBbTooltip;
@@ -0,0 +1,25 @@
1
+ import { Directive, DirectiveBinding, VNode } from 'vue';
2
+ /**
3
+ * Shared machinery for directives that attach a floating component (tooltip,
4
+ * dropdown…) to an arbitrary element via that component's external `activator`
5
+ * prop.
6
+ *
7
+ * Every instance for a given app renders into a single
8
+ * `<div data-<name>-host>` container, so the DOM holds one host per directive
9
+ * per app rather than a wrapper element per usage. Keying the host by
10
+ * `AppContext` keeps `useId` prefixes, global config and registered
11
+ * components/icons correct when several Vue apps coexist on a page.
12
+ */
13
+ export interface PopoverDirectiveConfig<Value, Options> {
14
+ /** Used for the host element's `data-*` attribute and the entry id prefix. */
15
+ name: string;
16
+ /** Normalise the raw binding into the options consumed by {@link build}. */
17
+ resolve: (binding: DirectiveBinding<Value>) => Options;
18
+ /**
19
+ * Build the component vnode for one entry, or return `null` to render
20
+ * nothing (e.g. an empty value). `id` is a stable, unique key/id and `el` is
21
+ * the activator element.
22
+ */
23
+ build: (id: string, el: HTMLElement, options: Options) => VNode | null;
24
+ }
25
+ export declare const createPopoverDirective: <Value, Options>(config: PopoverDirectiveConfig<Value, Options>) => Directive<HTMLElement, Value>;
package/dist/index.d.ts CHANGED
@@ -86,6 +86,10 @@ export { default as BbTextInput } from './components/BbTextInput/BbTextInput.vue
86
86
  export { default as BbToast } from './components/BbToast/BbToast.vue';
87
87
  export { default as BbTooltip } from './components/BbTooltip/BbTooltip.vue';
88
88
  export { default as BbTree } from './components/BbTree/BbTree.vue';
89
+ export { vBbTooltip, BbTooltipDirectivePlugin } from './directives/bbTooltip';
90
+ export type { BbTooltipDirectiveValue } from './directives/bbTooltip';
91
+ export { vBbDropdown, BbDropdownDirectivePlugin, } from './directives/bbDropdown';
92
+ export type { BbDropdownDirectiveValue } from './directives/bbDropdown';
89
93
  export { default as CommonInputInnerContainer } from './components/CommonInputInnerContainer/CommonInputInnerContainer.vue';
90
94
  export { default as CommonInputOuterContainer } from './components/CommonInputOuterContainer/CommonInputOuterContainer.vue';
91
95
  export type { BaseButtonProps } from './components/BaseButton/types';
package/dist/index.js CHANGED
@@ -77,4 +77,6 @@ import be from "./index337.js";
77
77
  import xe from "./index342.js";
78
78
  import Se from "./index345.js";
79
79
  import Ce from "./index349.js";
80
- export { d as BaseButton, g as BaseCheckbox, _ as BaseCheckboxGroup, h as BaseColorInput, v as BaseDatePicker, y as BaseDatePickerInput, b as BaseDialog, x as BaseInputContainer, S as BaseNumberInput, C as BaseRadio, w as BaseRadioGroup, T as BaseRating, O as BaseSelect, k as BaseSlider, A as BaseSwitch, j as BaseSwitchGroup, M as BaseTag, P as BaseTextInput, N as BaseTextarea, I as BbAccordion, R as BbAlert, z as BbAvatar, B as BbBadge, H as BbBreadcrumbs, U as BbButton, W as BbCheckbox, G as BbCheckboxGroup, D as BbChip, F as BbCollapsible, K as BbColorInput, f as BbColorPalette, J as BbConfirm, Y as BbConfirmPortal, X as BbDatePickerInput, Z as BbDialog, V as BbDropdown, Q as BbDropdownButton, $ as BbDropzone, L as BbIcon, ee as BbIntersection, te as BbNumberInput, ne as BbOffCanvas, re as BbPagination, ie as BbPopover, ae as BbProgress, oe as BbRadio, se as BbRadioGroup, ce as BbRating, le as BbRatio, ue as BbRows, fe as BbSelect, de as BbSelectPopover, pe as BbSlider, E as BbSmoothHeight, q as BbSpinner, me as BbSwitch, he as BbSwitchGroup, ge as BbTab, _e as BbTable, ve as BbTag, be as BbTextInput, ye as BbTextarea, xe as BbToast, Se as BbTooltip, Ce as BbTree, p as CommonInputInnerContainer, m as CommonInputOuterContainer, e as useBbConfig, t as useBroadcastChannelInstance, n as useConfirm, r as useCountdown, i as useId, a as useMobile, s as useQuery, o as useQueue, c as useToast, l as useWizard, u as wizardInjectionKey };
80
+ import we, { BbTooltipDirectivePlugin as Te } from "./index351.js";
81
+ import Ee, { BbDropdownDirectivePlugin as De } from "./index352.js";
82
+ export { d as BaseButton, g as BaseCheckbox, _ as BaseCheckboxGroup, h as BaseColorInput, v as BaseDatePicker, y as BaseDatePickerInput, b as BaseDialog, x as BaseInputContainer, S as BaseNumberInput, C as BaseRadio, w as BaseRadioGroup, T as BaseRating, O as BaseSelect, k as BaseSlider, A as BaseSwitch, j as BaseSwitchGroup, M as BaseTag, P as BaseTextInput, N as BaseTextarea, I as BbAccordion, R as BbAlert, z as BbAvatar, B as BbBadge, H as BbBreadcrumbs, U as BbButton, W as BbCheckbox, G as BbCheckboxGroup, D as BbChip, F as BbCollapsible, K as BbColorInput, f as BbColorPalette, J as BbConfirm, Y as BbConfirmPortal, X as BbDatePickerInput, Z as BbDialog, V as BbDropdown, Q as BbDropdownButton, De as BbDropdownDirectivePlugin, $ as BbDropzone, L as BbIcon, ee as BbIntersection, te as BbNumberInput, ne as BbOffCanvas, re as BbPagination, ie as BbPopover, ae as BbProgress, oe as BbRadio, se as BbRadioGroup, ce as BbRating, le as BbRatio, ue as BbRows, fe as BbSelect, de as BbSelectPopover, pe as BbSlider, E as BbSmoothHeight, q as BbSpinner, me as BbSwitch, he as BbSwitchGroup, ge as BbTab, _e as BbTable, ve as BbTag, be as BbTextInput, ye as BbTextarea, xe as BbToast, Se as BbTooltip, Te as BbTooltipDirectivePlugin, Ce as BbTree, p as CommonInputInnerContainer, m as CommonInputOuterContainer, e as useBbConfig, t as useBroadcastChannelInstance, n as useConfirm, r as useCountdown, i as useId, a as useMobile, s as useQuery, o as useQueue, c as useToast, l as useWizard, Ee as vBbDropdown, we as vBbTooltip, u as wizardInjectionKey };
package/dist/index186.js CHANGED
@@ -403,7 +403,8 @@ var Ne = { class: "bb-base-select__input-container" }, Pe = {
403
403
  }, {
404
404
  "options:prepend": b(() => [Y.value ? _(e.$slots, "options:prepend", {
405
405
  key: 0,
406
- focus: P
406
+ focus: P,
407
+ close: Q
407
408
  }) : u("", !0)]),
408
409
  loading: b(() => [_(e.$slots, "loading", { query: L.value })]),
409
410
  "no-data": b(() => [_(e.$slots, "no-data", {
@@ -412,7 +413,8 @@ var Ne = { class: "bb-base-select__input-container" }, Pe = {
412
413
  })]),
413
414
  "options:append": b(() => [Y.value ? _(e.$slots, "options:append", {
414
415
  key: 0,
415
- focus: P
416
+ focus: P,
417
+ close: Q
416
418
  }) : u("", !0)]),
417
419
  option: b((t) => [_(e.$slots, "option", Te({
418
420
  hasErrors: e.hasErrors,