bitboss-ui 2.1.123 → 2.1.125

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.
@@ -43,17 +43,17 @@
43
43
  class="bb-button__append-icon"
44
44
  :type="props['append:icon']"
45
45
  />
46
- </BaseButton>
47
46
 
48
- <BbTooltipAsync
49
- v-if="tooltip != null || $slots.tooltip"
50
- :activator="buttonDom"
51
- :placement="tooltipPlacement"
52
- :show-close="false"
53
- :timeout="tooltipTimeout"
54
- >
55
- <slot name="tooltip" :text="tooltip">{{ tooltip }}</slot>
56
- </BbTooltipAsync>
47
+ <BbTooltipAsync
48
+ v-if="tooltip != null || $slots.tooltip"
49
+ :activator="buttonDom"
50
+ :placement="tooltipPlacement"
51
+ :show-close="false"
52
+ :timeout="tooltipTimeout"
53
+ >
54
+ <slot name="tooltip" :text="tooltip">{{ tooltip }}</slot>
55
+ </BbTooltipAsync>
56
+ </BaseButton>
57
57
  </template>
58
58
 
59
59
  <script setup lang="ts">
@@ -63,6 +63,7 @@ import { computed, defineAsyncComponent, ref, toRef, useAttrs } from 'vue';
63
63
  import { pickBy } from '@/utilities/functions/pickBy';
64
64
  import { noop } from '@/utilities/functions/noop';
65
65
  import { useLocale } from '@/composables/useLocale';
66
+ import { useLogger } from '@/composables/useLogger';
66
67
  import { extractDomContainer } from '@/utilities/functions/extractDomContainer';
67
68
  import { isEqual } from '@/utilities/functions/isEqual';
68
69
  import type { BbButtonProps, BbButtonSlots } from './types';
@@ -70,7 +71,7 @@ import type { BbButtonProps, BbButtonSlots } from './types';
70
71
  const BbTooltipAsync = defineAsyncComponent(
71
72
  () => import('../BbTooltip/BbTooltip.vue')
72
73
  );
73
-
74
+ let hasWarnedDeprecatedTooltipProp = false;
74
75
  type Sizes = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
75
76
 
76
77
  defineOptions({
@@ -91,6 +92,7 @@ const isPressed = computed(() => isEqual(modelValue.value, props.trueValue));
91
92
  defineSlots<BbButtonSlots>();
92
93
 
93
94
  const { t } = useLocale();
95
+ const logger = useLogger();
94
96
  const attrs = useAttrs();
95
97
  const buttonDom = ref<HTMLElement>();
96
98
 
@@ -98,6 +100,13 @@ const setButtonRef = (el: unknown) => {
98
100
  buttonDom.value = extractDomContainer(el) ?? undefined;
99
101
  };
100
102
 
103
+ if (import.meta.env.DEV && props.tooltip && !hasWarnedDeprecatedTooltipProp) {
104
+ logger.warn(
105
+ 'BbButton: the `tooltip` prop is deprecated and will be removed in the next major version. Use `v-bb-tooltip` for more flexible handling and uniform behavior across components.'
106
+ );
107
+ hasWarnedDeprecatedTooltipProp = true;
108
+ }
109
+
101
110
  const forwardedAttrs = computed(() => {
102
111
  const { onClick: _, ...rest } = attrs;
103
112
  return rest;
@@ -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; close: () => Promise<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; close: () => Promise<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>;
@@ -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 };