@velkymx/vibeui 0.6.0 → 0.8.0

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.
package/README.md CHANGED
@@ -41,19 +41,19 @@ createApp(App).use(VibeUI).mount('#app');
41
41
 
42
42
  ## Advanced Interactivity
43
43
 
44
- VibeUI v0.6.0+ fully abstracts Bootstrap's JavaScript. You no longer need to manually initialize tooltips, modals, or collapses.
44
+ VibeUI v0.8.0 is optimized for mobile and hybrid apps, and fully abstracts Bootstrap's JavaScript. You no longer need to manually initialize tooltips, modals, or collapses.
45
45
 
46
46
  ```vue
47
47
  <template>
48
48
  <div>
49
- <!-- Automatic tooltip initialization -->
49
+ <!-- Automatic tooltip initialization with touch optimization -->
50
50
  <VibeTooltip text="I just work!">
51
- <VibeButton>Hover Me</VibeButton>
51
+ <VibeButton>Hover or Tap Me</VibeButton>
52
52
  </VibeTooltip>
53
53
 
54
- <!-- Full v-model support for Modals -->
54
+ <!-- Full v-model support for Modals with Android back button support -->
55
55
  <VibeModal v-model="showModal" title="Hello!">
56
- Fully reactive and automated.
56
+ Fully reactive, automated, and hybrid-ready.
57
57
  </VibeModal>
58
58
  </div>
59
59
  </template>
@@ -69,6 +69,11 @@ VibeUI handles accessibility and IDs for you.
69
69
  <VibeFormGroup label="Email Address">
70
70
  <VibeFormInput v-model="email" type="email" />
71
71
  </VibeFormGroup>
72
+
73
+ <!-- New in v0.8.0: Input Groups -->
74
+ <VibeInputGroup prepend="@">
75
+ <VibeFormInput v-model="username" noWrapper />
76
+ </VibeInputGroup>
72
77
  </template>
73
78
  ```
74
79
 
@@ -77,11 +82,11 @@ VibeUI handles accessibility and IDs for you.
77
82
  VibeUI includes all major Bootstrap 5.3 components, fully wrapped for Vue 3:
78
83
 
79
84
  * **Layout**: Container, Row, Col
80
- * **Core**: Alert, Badge, Button, ButtonGroup, CloseButton, Spinner, Placeholder, Icon
85
+ * **Core**: Alert, Badge, Button, ButtonGroup, CloseButton, Spinner, Placeholder, Icon, Link
81
86
  * **Navigation**: Breadcrumb, Nav, Navbar, Pagination, Scrollspy
82
87
  * **Interactive**: Accordion, Collapse, Dropdown, Modal, Offcanvas, Toast, Carousel
83
- * **Data**: DataTable
84
- * **Forms**: Input, Select, Textarea, Spinbutton, Datepicker, Checkbox, Radio, Switch, Wysiwyg, FormGroup
88
+ * **Data**: DataTable (with mobile Stack mode)
89
+ * **Forms**: Input, InputGroup, Select, Textarea, Spinbutton, Datepicker, Checkbox, Radio, Switch, Wysiwyg, FormGroup
85
90
 
86
91
  ## Full Documentation
87
92
 
@@ -45,8 +45,8 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
45
45
  refresh: () => Promise<void>;
46
46
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
47
47
  "component-error": (...args: any[]) => void;
48
- "item-click": (...args: any[]) => void;
49
48
  show: (...args: any[]) => void;
49
+ "item-click": (...args: any[]) => void;
50
50
  shown: (...args: any[]) => void;
51
51
  hide: (...args: any[]) => void;
52
52
  hidden: (...args: any[]) => void;
@@ -69,8 +69,8 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
69
69
  };
70
70
  }>> & Readonly<{
71
71
  "onComponent-error"?: ((...args: any[]) => any) | undefined;
72
- "onItem-click"?: ((...args: any[]) => any) | undefined;
73
72
  onShow?: ((...args: any[]) => any) | undefined;
73
+ "onItem-click"?: ((...args: any[]) => any) | undefined;
74
74
  onShown?: ((...args: any[]) => any) | undefined;
75
75
  onHide?: ((...args: any[]) => any) | undefined;
76
76
  onHidden?: ((...args: any[]) => any) | undefined;
@@ -14,6 +14,10 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
14
14
  type: StringConstructor;
15
15
  default: string;
16
16
  };
17
+ subtle: {
18
+ type: BooleanConstructor;
19
+ default: boolean;
20
+ };
17
21
  modelValue: {
18
22
  type: BooleanConstructor;
19
23
  default: boolean;
@@ -40,6 +44,10 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
40
44
  type: StringConstructor;
41
45
  default: string;
42
46
  };
47
+ subtle: {
48
+ type: BooleanConstructor;
49
+ default: boolean;
50
+ };
43
51
  modelValue: {
44
52
  type: BooleanConstructor;
45
53
  default: boolean;
@@ -63,6 +71,7 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
63
71
  "onComponent-error"?: ((...args: any[]) => any) | undefined;
64
72
  }>, {
65
73
  variant: string;
74
+ subtle: boolean;
66
75
  modelValue: boolean;
67
76
  dismissable: boolean;
68
77
  fade: boolean;
@@ -13,6 +13,10 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
13
13
  type: () => Variant;
14
14
  default: string;
15
15
  };
16
+ subtle: {
17
+ type: BooleanConstructor;
18
+ default: boolean;
19
+ };
16
20
  pill: {
17
21
  type: BooleanConstructor;
18
22
  default: boolean;
@@ -28,6 +32,10 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
28
32
  type: () => Variant;
29
33
  default: string;
30
34
  };
35
+ subtle: {
36
+ type: BooleanConstructor;
37
+ default: boolean;
38
+ };
31
39
  pill: {
32
40
  type: BooleanConstructor;
33
41
  default: boolean;
@@ -40,6 +48,7 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
40
48
  "onComponent-error"?: ((...args: any[]) => any) | undefined;
41
49
  }>, {
42
50
  variant: Variant;
51
+ subtle: boolean;
43
52
  pill: boolean;
44
53
  tag: "a" | Tag;
45
54
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
@@ -41,6 +41,10 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
41
41
  type: BooleanConstructor;
42
42
  default: boolean;
43
43
  };
44
+ focusRing: {
45
+ type: BooleanConstructor;
46
+ default: boolean;
47
+ };
44
48
  }>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
45
49
  "component-error": (...args: any[]) => void;
46
50
  click: (...args: any[]) => void;
@@ -77,6 +81,10 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
77
81
  type: BooleanConstructor;
78
82
  default: boolean;
79
83
  };
84
+ focusRing: {
85
+ type: BooleanConstructor;
86
+ default: boolean;
87
+ };
80
88
  }>> & Readonly<{
81
89
  "onComponent-error"?: ((...args: any[]) => any) | undefined;
82
90
  onClick?: ((...args: any[]) => any) | undefined;
@@ -89,6 +97,7 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
89
97
  href: string;
90
98
  to: string | Record<string, any>;
91
99
  active: boolean;
100
+ focusRing: boolean;
92
101
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
93
102
  declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
94
103
  export default _default;
@@ -10,6 +10,7 @@ declare const _default: <T extends Record<string, unknown>>(__VLS_props: NonNull
10
10
  bordered: boolean;
11
11
  borderless: boolean;
12
12
  responsive: boolean;
13
+ stack: boolean;
13
14
  searchable: boolean;
14
15
  sortable: boolean;
15
16
  paginated: boolean;
@@ -32,6 +33,7 @@ declare const _default: <T extends Record<string, unknown>>(__VLS_props: NonNull
32
33
  readonly bordered: boolean;
33
34
  readonly borderless: boolean;
34
35
  readonly responsive: boolean;
36
+ readonly stack: boolean;
35
37
  readonly searchable: boolean;
36
38
  readonly sortable: boolean;
37
39
  readonly paginated: boolean;
@@ -51,7 +53,7 @@ declare const _default: <T extends Record<string, unknown>>(__VLS_props: NonNull
51
53
  readonly "onUpdate:sortBy"?: ((value: string | undefined) => any) | undefined;
52
54
  readonly "onUpdate:sortDesc"?: ((value: boolean) => any) | undefined;
53
55
  readonly "onRow-clicked"?: ((...args: any[]) => any) | undefined;
54
- } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, "variant" | "small" | "items" | "hover" | "rowKey" | "striped" | "bordered" | "borderless" | "responsive" | "searchable" | "sortable" | "paginated" | "searchPlaceholder" | "searchDebounce" | "showEmpty" | "emptyText" | "showPerPage" | "showInfo" | "infoText" | "filteredInfoText" | "perPageOptions">, "onComponent-error" | "onUpdate:currentPage" | "columns" | "onUpdate:perPage" | "onUpdate:sortBy" | "onUpdate:sortDesc" | "onRow-clicked" | ("variant" | "small" | "items" | "hover" | "rowKey" | "striped" | "bordered" | "borderless" | "responsive" | "searchable" | "sortable" | "paginated" | "searchPlaceholder" | "searchDebounce" | "showEmpty" | "emptyText" | "showPerPage" | "showInfo" | "infoText" | "filteredInfoText" | "perPageOptions")> & {
56
+ } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, "variant" | "small" | "items" | "hover" | "rowKey" | "striped" | "bordered" | "borderless" | "responsive" | "stack" | "searchable" | "sortable" | "paginated" | "searchPlaceholder" | "searchDebounce" | "showEmpty" | "emptyText" | "showPerPage" | "showInfo" | "infoText" | "filteredInfoText" | "perPageOptions">, "onComponent-error" | "onUpdate:currentPage" | "columns" | "onUpdate:perPage" | "onUpdate:sortBy" | "onUpdate:sortDesc" | "onRow-clicked" | ("variant" | "small" | "items" | "hover" | "rowKey" | "striped" | "bordered" | "borderless" | "responsive" | "stack" | "searchable" | "sortable" | "paginated" | "searchPlaceholder" | "searchDebounce" | "showEmpty" | "emptyText" | "showPerPage" | "showInfo" | "infoText" | "filteredInfoText" | "perPageOptions")> & {
55
57
  currentPage?: number;
56
58
  perPage?: number;
57
59
  sortBy?: string | undefined;
@@ -62,8 +62,8 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
62
62
  toggle: () => void | undefined;
63
63
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
64
64
  "component-error": (...args: any[]) => void;
65
- "item-click": (...args: any[]) => void;
66
65
  show: (...args: any[]) => void;
66
+ "item-click": (...args: any[]) => void;
67
67
  shown: (...args: any[]) => void;
68
68
  hide: (...args: any[]) => void;
69
69
  hidden: (...args: any[]) => void;
@@ -106,8 +106,8 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
106
106
  };
107
107
  }>> & Readonly<{
108
108
  "onComponent-error"?: ((...args: any[]) => any) | undefined;
109
- "onItem-click"?: ((...args: any[]) => any) | undefined;
110
109
  onShow?: ((...args: any[]) => any) | undefined;
110
+ "onItem-click"?: ((...args: any[]) => any) | undefined;
111
111
  onShown?: ((...args: any[]) => any) | undefined;
112
112
  onHide?: ((...args: any[]) => any) | undefined;
113
113
  onHidden?: ((...args: any[]) => any) | undefined;
@@ -61,6 +61,14 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
61
61
  type: BooleanConstructor;
62
62
  default: boolean;
63
63
  };
64
+ noWrapper: {
65
+ type: BooleanConstructor;
66
+ default: boolean;
67
+ };
68
+ focusRing: {
69
+ type: BooleanConstructor;
70
+ default: boolean;
71
+ };
64
72
  }>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
65
73
  "update:modelValue": (...args: any[]) => void;
66
74
  blur: (...args: any[]) => void;
@@ -129,6 +137,14 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
129
137
  type: BooleanConstructor;
130
138
  default: boolean;
131
139
  };
140
+ noWrapper: {
141
+ type: BooleanConstructor;
142
+ default: boolean;
143
+ };
144
+ focusRing: {
145
+ type: BooleanConstructor;
146
+ default: boolean;
147
+ };
132
148
  }>> & Readonly<{
133
149
  "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
134
150
  onBlur?: ((...args: any[]) => any) | undefined;
@@ -143,6 +159,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
143
159
  label: string;
144
160
  size: Size;
145
161
  disabled: boolean;
162
+ focusRing: boolean;
146
163
  placeholder: string;
147
164
  plaintext: boolean;
148
165
  id: string;
@@ -152,5 +169,6 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
152
169
  validationRules: ValidatorFunction | ValidationRule[];
153
170
  validateOn: "blur" | "change" | "input";
154
171
  helpText: string;
155
- }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, HTMLDivElement>;
172
+ noWrapper: boolean;
173
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
156
174
  export default _default;
@@ -37,6 +37,10 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
37
37
  type: PropType<unknown[] | string | boolean>;
38
38
  default: undefined;
39
39
  };
40
+ mobileToolbar: {
41
+ type: PropType<unknown[] | string | boolean>;
42
+ default: undefined;
43
+ };
40
44
  validationState: {
41
45
  type: PropType<ValidationState>;
42
46
  default: null;
@@ -105,6 +109,10 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
105
109
  type: PropType<unknown[] | string | boolean>;
106
110
  default: undefined;
107
111
  };
112
+ mobileToolbar: {
113
+ type: PropType<unknown[] | string | boolean>;
114
+ default: undefined;
115
+ };
108
116
  validationState: {
109
117
  type: PropType<ValidationState>;
110
118
  default: null;
@@ -152,6 +160,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
152
160
  validateOn: "blur" | "change";
153
161
  helpText: string;
154
162
  toolbar: string | boolean | unknown[];
163
+ mobileToolbar: string | boolean | unknown[];
155
164
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {
156
165
  editorContainer: HTMLDivElement;
157
166
  }, HTMLDivElement>;
@@ -0,0 +1,60 @@
1
+ import { PropType } from 'vue';
2
+ import { Size, Tag } from '../types';
3
+ declare function __VLS_template(): {
4
+ attrs: Partial<{}>;
5
+ slots: {
6
+ prepend?(_: {}): any;
7
+ default?(_: {}): any;
8
+ append?(_: {}): any;
9
+ };
10
+ refs: {};
11
+ rootEl: any;
12
+ };
13
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
14
+ declare const __VLS_component: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
15
+ size: {
16
+ type: PropType<Size>;
17
+ default: undefined;
18
+ };
19
+ prepend: {
20
+ type: StringConstructor;
21
+ default: undefined;
22
+ };
23
+ append: {
24
+ type: StringConstructor;
25
+ default: undefined;
26
+ };
27
+ tag: {
28
+ type: PropType<Tag>;
29
+ default: string;
30
+ };
31
+ }>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
32
+ size: {
33
+ type: PropType<Size>;
34
+ default: undefined;
35
+ };
36
+ prepend: {
37
+ type: StringConstructor;
38
+ default: undefined;
39
+ };
40
+ append: {
41
+ type: StringConstructor;
42
+ default: undefined;
43
+ };
44
+ tag: {
45
+ type: PropType<Tag>;
46
+ default: string;
47
+ };
48
+ }>> & Readonly<{}>, {
49
+ tag: Tag;
50
+ size: Size;
51
+ prepend: string;
52
+ append: string;
53
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
54
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
55
+ export default _default;
56
+ type __VLS_WithTemplateSlots<T, S> = T & {
57
+ new (): {
58
+ $slots: S;
59
+ };
60
+ };
@@ -0,0 +1,112 @@
1
+ import { PropType } from 'vue';
2
+ import { Tag, Variant } from '../types';
3
+ declare function __VLS_template(): {
4
+ attrs: Partial<{}>;
5
+ slots: {
6
+ default?(_: {}): any;
7
+ };
8
+ refs: {};
9
+ rootEl: any;
10
+ };
11
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
12
+ declare const __VLS_component: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
13
+ tag: {
14
+ type: PropType<Tag | "a">;
15
+ default: string;
16
+ };
17
+ href: {
18
+ type: StringConstructor;
19
+ default: undefined;
20
+ };
21
+ to: {
22
+ type: (StringConstructor | ObjectConstructor)[];
23
+ default: undefined;
24
+ };
25
+ variant: {
26
+ type: PropType<Variant>;
27
+ default: undefined;
28
+ };
29
+ underline: {
30
+ type: PropType<boolean | "0" | "1" | "2" | "3">;
31
+ default: boolean;
32
+ };
33
+ underlineVariant: {
34
+ type: PropType<Variant>;
35
+ default: undefined;
36
+ };
37
+ underlineOpacity: {
38
+ type: PropType<"0" | "10" | "25" | "50" | "75" | "100" | 0 | 10 | 25 | 50 | 75 | 100>;
39
+ default: undefined;
40
+ };
41
+ offset: {
42
+ type: PropType<"1" | "2" | "3" | 1 | 2 | 3>;
43
+ default: undefined;
44
+ };
45
+ opacity: {
46
+ type: PropType<"10" | "25" | "50" | "75" | "100" | 10 | 25 | 50 | 75 | 100>;
47
+ default: undefined;
48
+ };
49
+ focusRing: {
50
+ type: BooleanConstructor;
51
+ default: boolean;
52
+ };
53
+ }>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
54
+ tag: {
55
+ type: PropType<Tag | "a">;
56
+ default: string;
57
+ };
58
+ href: {
59
+ type: StringConstructor;
60
+ default: undefined;
61
+ };
62
+ to: {
63
+ type: (StringConstructor | ObjectConstructor)[];
64
+ default: undefined;
65
+ };
66
+ variant: {
67
+ type: PropType<Variant>;
68
+ default: undefined;
69
+ };
70
+ underline: {
71
+ type: PropType<boolean | "0" | "1" | "2" | "3">;
72
+ default: boolean;
73
+ };
74
+ underlineVariant: {
75
+ type: PropType<Variant>;
76
+ default: undefined;
77
+ };
78
+ underlineOpacity: {
79
+ type: PropType<"0" | "10" | "25" | "50" | "75" | "100" | 0 | 10 | 25 | 50 | 75 | 100>;
80
+ default: undefined;
81
+ };
82
+ offset: {
83
+ type: PropType<"1" | "2" | "3" | 1 | 2 | 3>;
84
+ default: undefined;
85
+ };
86
+ opacity: {
87
+ type: PropType<"10" | "25" | "50" | "75" | "100" | 10 | 25 | 50 | 75 | 100>;
88
+ default: undefined;
89
+ };
90
+ focusRing: {
91
+ type: BooleanConstructor;
92
+ default: boolean;
93
+ };
94
+ }>> & Readonly<{}>, {
95
+ variant: Variant;
96
+ tag: "a" | Tag;
97
+ href: string;
98
+ to: string | Record<string, any>;
99
+ focusRing: boolean;
100
+ offset: 1 | "1" | "2" | "3" | 2 | 3;
101
+ underline: boolean | "0" | "1" | "2" | "3";
102
+ underlineVariant: Variant;
103
+ underlineOpacity: 0 | "0" | 10 | 100 | "10" | 25 | 50 | "25" | "50" | "75" | "100" | 75;
104
+ opacity: 10 | 100 | "10" | 25 | 50 | "25" | "50" | "75" | "100" | 75;
105
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
106
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
107
+ export default _default;
108
+ type __VLS_WithTemplateSlots<T, S> = T & {
109
+ new (): {
110
+ $slots: S;
111
+ };
112
+ };
@@ -28,6 +28,10 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
28
28
  type: BooleanConstructor;
29
29
  default: boolean;
30
30
  };
31
+ underline: {
32
+ type: BooleanConstructor;
33
+ default: boolean;
34
+ };
31
35
  tag: {
32
36
  type: StringConstructor;
33
37
  default: string;
@@ -37,8 +41,8 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
37
41
  refresh: () => Promise<void>;
38
42
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
39
43
  "component-error": (...args: any[]) => void;
40
- "item-click": (...args: any[]) => void;
41
44
  show: (...args: any[]) => void;
45
+ "item-click": (...args: any[]) => void;
42
46
  shown: (...args: any[]) => void;
43
47
  hide: (...args: any[]) => void;
44
48
  hidden: (...args: any[]) => void;
@@ -67,14 +71,18 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
67
71
  type: BooleanConstructor;
68
72
  default: boolean;
69
73
  };
74
+ underline: {
75
+ type: BooleanConstructor;
76
+ default: boolean;
77
+ };
70
78
  tag: {
71
79
  type: StringConstructor;
72
80
  default: string;
73
81
  };
74
82
  }>> & Readonly<{
75
83
  "onComponent-error"?: ((...args: any[]) => any) | undefined;
76
- "onItem-click"?: ((...args: any[]) => any) | undefined;
77
84
  onShow?: ((...args: any[]) => any) | undefined;
85
+ "onItem-click"?: ((...args: any[]) => any) | undefined;
78
86
  onShown?: ((...args: any[]) => any) | undefined;
79
87
  onHide?: ((...args: any[]) => any) | undefined;
80
88
  onHidden?: ((...args: any[]) => any) | undefined;
@@ -85,6 +93,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
85
93
  pills: boolean;
86
94
  tabs: boolean;
87
95
  justified: boolean;
96
+ underline: boolean;
88
97
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {
89
98
  navRef: unknown;
90
99
  }, any>;
@@ -41,7 +41,9 @@ import { default as VibeFormRadio } from './VibeFormRadio.vue';
41
41
  import { default as VibeFormSwitch } from './VibeFormSwitch.vue';
42
42
  import { default as VibeFormGroup } from './VibeFormGroup.vue';
43
43
  import { default as VibeFormWysiwyg } from './VibeFormWysiwyg.vue';
44
+ import { default as VibeInputGroup } from './VibeInputGroup.vue';
45
+ import { default as VibeLink } from './VibeLink.vue';
44
46
  import { Plugin } from 'vue';
45
- export { VibeAlert, VibeBadge, VibeButton, VibeButtonGroup, VibeCloseButton, VibeSpinner, VibePlaceholder, VibeContainer, VibeRow, VibeCol, VibeCard, VibeBreadcrumb, VibeNav, VibeNavbar, VibeNavbarBrand, VibeNavbarToggle, VibeNavbarNav, VibePagination, VibeTabContent, VibeListGroup, VibeProgress, VibeAccordion, VibeCollapse, VibeDropdown, VibeModal, VibeOffcanvas, VibeToast, VibeCarousel, VibeTooltip, VibePopover, VibeScrollspy, VibeIcon, VibeDataTable, VibeFormInput, VibeFormSelect, VibeFormTextarea, VibeFormSpinbutton, VibeFormDatepicker, VibeFormCheckbox, VibeFormRadio, VibeFormSwitch, VibeFormGroup, VibeFormWysiwyg };
47
+ export { VibeAlert, VibeBadge, VibeButton, VibeButtonGroup, VibeCloseButton, VibeSpinner, VibePlaceholder, VibeContainer, VibeRow, VibeCol, VibeCard, VibeBreadcrumb, VibeNav, VibeNavbar, VibeNavbarBrand, VibeNavbarToggle, VibeNavbarNav, VibePagination, VibeTabContent, VibeListGroup, VibeProgress, VibeAccordion, VibeCollapse, VibeDropdown, VibeModal, VibeOffcanvas, VibeToast, VibeCarousel, VibeTooltip, VibePopover, VibeScrollspy, VibeIcon, VibeDataTable, VibeFormInput, VibeFormSelect, VibeFormTextarea, VibeFormSpinbutton, VibeFormDatepicker, VibeFormCheckbox, VibeFormRadio, VibeFormSwitch, VibeFormGroup, VibeFormWysiwyg, VibeInputGroup, VibeLink };
46
48
  declare const VibeUIPlugin: Plugin;
47
49
  export default VibeUIPlugin;
@@ -0,0 +1,9 @@
1
+ type CloseAction = () => void;
2
+ /**
3
+ * Composable to manage closing active UI layers when the hardware back button is pressed.
4
+ * Useful for Android devices in hybrid mobile environments.
5
+ *
6
+ * @param closeAction The function to call when the back button is pressed.
7
+ */
8
+ export declare function useBackButton(closeAction: CloseAction): void;
9
+ export {};
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Composable for programmatic breakpoint detection using Bootstrap standard sizes.
3
+ */
4
+ export declare function useBreakpoints(): {
5
+ isXs: import('vue').ComputedRef<boolean>;
6
+ isSm: import('vue').Ref<boolean, boolean>;
7
+ isMd: import('vue').Ref<boolean, boolean>;
8
+ isLg: import('vue').Ref<boolean, boolean>;
9
+ isXl: import('vue').Ref<boolean, boolean>;
10
+ isXxl: import('vue').Ref<boolean, boolean>;
11
+ isMobile: import('vue').ComputedRef<boolean>;
12
+ isTablet: import('vue').ComputedRef<boolean>;
13
+ };
@@ -0,0 +1,15 @@
1
+ import { ColorMode } from '../types';
2
+ export declare function useColorMode(): {
3
+ colorMode: import('vue').Ref<ColorMode, ColorMode>;
4
+ setColorMode: (mode: ColorMode) => void;
5
+ toggleColorMode: () => void;
6
+ initColorMode: () => void;
7
+ clearColorMode: () => void;
8
+ onColorModeChange: (callback: (mode: ColorMode) => void) => void;
9
+ };
10
+ /**
11
+ * For testing only — not re-exported from the package index.
12
+ * Resets singleton state and removes the storage key.
13
+ * Must be called in beforeEach to guarantee clean state between tests.
14
+ */
15
+ export declare function _resetColorMode(): void;
package/dist/index.d.ts CHANGED
@@ -3,4 +3,7 @@ export * from './components';
3
3
  export * from './types';
4
4
  export * from './composables/useFormValidation';
5
5
  export { useId } from './composables/useId';
6
+ export { useColorMode } from './composables/useColorMode';
7
+ export { useBreakpoints } from './composables/useBreakpoints';
8
+ export { useBackButton } from './composables/useBackButton';
6
9
  export default VibeUIPlugin;
package/dist/types.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export type ColorMode = 'light' | 'dark' | 'auto';
1
2
  export type Variant = 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'light' | 'dark';
2
3
  export type Size = 'sm' | 'lg';
3
4
  export type ButtonType = 'button' | 'submit' | 'reset';
package/dist/vibeui.css CHANGED
@@ -1 +1 @@
1
- .vibe-datatable[data-v-d5aa8072]{width:100%}.datatable-info[data-v-d5aa8072]{padding:.5rem 0;color:#6c757d}.input-group-vertical[data-v-49746a62]{flex-direction:column}.input-group-vertical[data-v-49746a62]>*{width:100%}.vibe-wysiwyg-container[data-v-1ed73fd7]{border:1px solid #ced4da;border-radius:.375rem}.vibe-wysiwyg-container.is-valid[data-v-1ed73fd7]{border-color:#198754}.vibe-wysiwyg-container.is-invalid[data-v-1ed73fd7]{border-color:#dc3545}.vibe-wysiwyg-container.disabled[data-v-1ed73fd7]{background-color:#e9ecef;opacity:.6;cursor:not-allowed}.vibe-wysiwyg-container[data-v-1ed73fd7] .ql-container{border:none;font-size:1rem}.vibe-wysiwyg-container[data-v-1ed73fd7] .ql-toolbar{border:none;border-bottom:1px solid #ced4da;border-top-left-radius:.375rem;border-top-right-radius:.375rem}.vibe-wysiwyg-container[data-v-1ed73fd7] .ql-editor{min-height:150px}
1
+ .navbar.fixed-top[data-v-8228b170],.navbar.sticky-top[data-v-8228b170]{padding-top:env(safe-area-inset-top,0)}.navbar.fixed-bottom[data-v-8228b170]{padding-bottom:env(safe-area-inset-bottom,0)}.modal.show .modal-dialog.modal-fullscreen[data-v-c11ac690],.modal.show .modal-dialog.modal-fullscreen .modal-content[data-v-c11ac690]{height:100dvh}.modal-header[data-v-c11ac690]{padding-top:calc(1rem + env(safe-area-inset-top,0))}.modal-footer[data-v-c11ac690]{padding-bottom:calc(.75rem + env(safe-area-inset-bottom,0))}.offcanvas.offcanvas-start[data-v-f03bd194],.offcanvas.offcanvas-end[data-v-f03bd194]{height:100dvh}.offcanvas.offcanvas-top[data-v-f03bd194],.offcanvas.offcanvas-bottom[data-v-f03bd194]{max-height:100dvh}.offcanvas-header[data-v-f03bd194]{padding-top:calc(1rem + env(safe-area-inset-top,0))}.offcanvas-body[data-v-f03bd194]{padding-bottom:calc(1rem + env(safe-area-inset-bottom,0))}.vibe-datatable[data-v-c496dc70]{width:100%}.datatable-info[data-v-c496dc70]{padding:.5rem 0;color:var(--bs-secondary-color)}@media(max-width:767.98px){.vibe-table-stack[data-v-c496dc70],.vibe-table-stack tbody[data-v-c496dc70],.vibe-table-stack tr[data-v-c496dc70],.vibe-table-stack td[data-v-c496dc70]{display:block;width:100%}.vibe-table-stack thead[data-v-c496dc70]{display:none}.vibe-table-stack tr[data-v-c496dc70]{margin-bottom:1rem;border:1px solid var(--bs-border-color);border-radius:.375rem;background-color:var(--bs-body-bg)}.vibe-table-stack td[data-v-c496dc70]{text-align:right;padding:.5rem 1rem;position:relative;padding-left:50%;border-top:none;border-bottom:1px solid var(--bs-border-color)}.vibe-table-stack td[data-v-c496dc70]:last-child{border-bottom:none}.vibe-table-stack td[data-v-c496dc70]:before{content:attr(data-label);position:absolute;left:1rem;width:45%;text-align:left;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}}.input-group-vertical[data-v-49746a62]{flex-direction:column}.input-group-vertical[data-v-49746a62]>*{width:100%}.vibe-wysiwyg-container[data-v-952f7269]{border:1px solid var(--bs-border-color);border-radius:.375rem}.vibe-wysiwyg-container.is-valid[data-v-952f7269]{border-color:var(--bs-success)}.vibe-wysiwyg-container.is-invalid[data-v-952f7269]{border-color:var(--bs-danger)}.vibe-wysiwyg-container.disabled[data-v-952f7269]{background-color:var(--bs-secondary-bg);opacity:.6;cursor:not-allowed}.vibe-wysiwyg-container[data-v-952f7269] .ql-container{border:none;font-size:1rem}.vibe-wysiwyg-container[data-v-952f7269] .ql-toolbar{border:none;border-bottom:1px solid var(--bs-border-color);border-top-left-radius:.375rem;border-top-right-radius:.375rem}.vibe-wysiwyg-container[data-v-952f7269] .ql-editor{min-height:150px}