@velkymx/vibeui 0.8.2 → 1.0.2

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 (200) hide show
  1. package/AGENTS.md +44 -0
  2. package/README.md +245 -58
  3. package/dist/purify.es-1D-VntFD.mjs +679 -0
  4. package/dist/src/App.vue.d.ts +3 -0
  5. package/dist/src/components/HelloWorld.vue.d.ts +6 -0
  6. package/dist/src/components/VibeAccordion.vue.d.ts +89 -0
  7. package/dist/{components → src/components}/VibeAlert.vue.d.ts +24 -30
  8. package/dist/src/components/VibeAutocomplete.vue.d.ts +74 -0
  9. package/dist/{components → src/components}/VibeBadge.vue.d.ts +10 -18
  10. package/dist/src/components/VibeBreadcrumb.vue.d.ts +51 -0
  11. package/dist/{components → src/components}/VibeButton.vue.d.ts +16 -20
  12. package/dist/{components → src/components}/VibeButtonGroup.vue.d.ts +10 -18
  13. package/dist/{components → src/components}/VibeCard.vue.d.ts +51 -24
  14. package/dist/{components → src/components}/VibeCarousel.vue.d.ts +27 -49
  15. package/dist/src/components/VibeChartBar.vue.d.ts +61 -0
  16. package/dist/src/components/VibeChartLine.vue.d.ts +70 -0
  17. package/dist/src/components/VibeChartPie.vue.d.ts +34 -0
  18. package/dist/{components → src/components}/VibeCloseButton.vue.d.ts +9 -7
  19. package/dist/{components → src/components}/VibeCol.vue.d.ts +9 -17
  20. package/dist/src/components/VibeCollapse.vue.d.ts +76 -0
  21. package/dist/src/components/VibeContainer.vue.d.ts +36 -0
  22. package/dist/src/components/VibeDataTable.vue.d.ts +131 -0
  23. package/dist/src/components/VibeDatePicker.vue.d.ts +120 -0
  24. package/dist/src/components/VibeDraggable.vue.d.ts +77 -0
  25. package/dist/{components → src/components}/VibeDropdown.vue.d.ts +46 -43
  26. package/dist/src/components/VibeDroppable.vue.d.ts +70 -0
  27. package/dist/src/components/VibeFileInput.vue.d.ts +127 -0
  28. package/dist/{components → src/components}/VibeFormCheckbox.vue.d.ts +30 -22
  29. package/dist/{components → src/components}/VibeFormDatepicker.vue.d.ts +27 -30
  30. package/dist/{components → src/components}/VibeFormGroup.vue.d.ts +11 -14
  31. package/dist/{components → src/components}/VibeFormInput.vue.d.ts +22 -23
  32. package/dist/{components → src/components}/VibeFormRadio.vue.d.ts +23 -24
  33. package/dist/{components → src/components}/VibeFormSelect.vue.d.ts +28 -34
  34. package/dist/{components → src/components}/VibeFormSpinbutton.vue.d.ts +31 -34
  35. package/dist/{components → src/components}/VibeFormSwitch.vue.d.ts +22 -23
  36. package/dist/{components → src/components}/VibeFormTextarea.vue.d.ts +24 -25
  37. package/dist/{components → src/components}/VibeFormWysiwyg.vue.d.ts +24 -23
  38. package/dist/src/components/VibeHero.vue.d.ts +108 -0
  39. package/dist/{components → src/components}/VibeIcon.vue.d.ts +27 -7
  40. package/dist/{components → src/components}/VibeInputGroup.vue.d.ts +11 -13
  41. package/dist/{components → src/components}/VibeLink.vue.d.ts +14 -18
  42. package/dist/{components → src/components}/VibeListGroup.vue.d.ts +26 -22
  43. package/dist/{components → src/components}/VibeModal.vue.d.ts +29 -45
  44. package/dist/{components → src/components}/VibeNav.vue.d.ts +40 -20
  45. package/dist/{components → src/components}/VibeNavbar.vue.d.ts +12 -19
  46. package/dist/src/components/VibeNavbarBrand.vue.d.ts +34 -0
  47. package/dist/src/components/VibeNavbarNav.vue.d.ts +80 -0
  48. package/dist/{components → src/components}/VibeNavbarToggle.vue.d.ts +7 -5
  49. package/dist/{components → src/components}/VibeOffcanvas.vue.d.ts +28 -43
  50. package/dist/{components → src/components}/VibePagination.vue.d.ts +38 -29
  51. package/dist/{components → src/components}/VibePlaceholder.vue.d.ts +9 -17
  52. package/dist/src/components/VibePopover.vue.d.ts +72 -0
  53. package/dist/src/components/VibeProgress.vue.d.ts +37 -0
  54. package/dist/src/components/VibeResizable.vue.d.ts +140 -0
  55. package/dist/{components → src/components}/VibeRow.vue.d.ts +9 -17
  56. package/dist/src/components/VibeScrollspy.vue.d.ts +89 -0
  57. package/dist/src/components/VibeSkeleton.vue.d.ts +54 -0
  58. package/dist/src/components/VibeSlider.vue.d.ts +77 -0
  59. package/dist/src/components/VibeSortable.vue.d.ts +59 -0
  60. package/dist/{components → src/components}/VibeSpinner.vue.d.ts +4 -7
  61. package/dist/src/components/VibeStepper.vue.d.ts +133 -0
  62. package/dist/src/components/VibeTab.vue.d.ts +41 -0
  63. package/dist/src/components/VibeTabContent.vue.d.ts +56 -0
  64. package/dist/src/components/VibeTabs.vue.d.ts +78 -0
  65. package/dist/{components → src/components}/VibeToast.vue.d.ts +40 -42
  66. package/dist/src/components/VibeToastHost.vue.d.ts +16 -0
  67. package/dist/src/components/VibeTooltip.vue.d.ts +63 -0
  68. package/dist/src/components/chart/chartColors.d.ts +3 -0
  69. package/dist/src/components/chart/chartResize.d.ts +2 -0
  70. package/dist/src/components/chart/chartTooltip.d.ts +2 -0
  71. package/dist/src/components/chart/chartTypes.d.ts +6 -0
  72. package/dist/src/components/chart/drawBar.d.ts +5 -0
  73. package/dist/src/components/chart/drawLine.d.ts +18 -0
  74. package/dist/src/components/chart/drawPie.d.ts +4 -0
  75. package/dist/src/components/dndStore.d.ts +7 -0
  76. package/dist/{components → src/components}/index.d.ts +18 -1
  77. package/dist/{composables → src/composables}/useBreakpoints.d.ts +1 -0
  78. package/dist/{composables → src/composables}/useColorMode.d.ts +1 -1
  79. package/dist/src/composables/useForm.d.ts +22 -0
  80. package/dist/src/composables/useId.d.ts +2 -0
  81. package/dist/src/composables/usePosition.d.ts +20 -0
  82. package/dist/src/composables/useToast.d.ts +52 -0
  83. package/dist/src/directives/vTooltip.d.ts +24 -0
  84. package/dist/{index.d.ts → src/index.d.ts} +6 -0
  85. package/dist/src/injectionKeys.d.ts +28 -0
  86. package/dist/{types.d.ts → src/types.d.ts} +32 -6
  87. package/dist/src/utils/safeCss.d.ts +16 -0
  88. package/dist/src/utils/safeHref.d.ts +7 -0
  89. package/dist/src/utils/sanitizeHtml.d.ts +13 -0
  90. package/dist/vibeui.css +2 -1
  91. package/dist/vibeui.es.js +8351 -3508
  92. package/dist/vibeui.umd.js +3 -1
  93. package/docs/README.md +85 -13
  94. package/docs/components/advanced/popover.md +27 -52
  95. package/docs/components/advanced/scrollspy.md +57 -15
  96. package/docs/components/advanced/tooltip.md +26 -47
  97. package/docs/components/card/card.md +9 -1
  98. package/docs/components/charts/chart-bar.md +129 -0
  99. package/docs/components/charts/chart-line.md +136 -0
  100. package/docs/components/charts/chart-pie.md +102 -0
  101. package/docs/components/core/alert.md +27 -5
  102. package/docs/components/core/badge.md +0 -6
  103. package/docs/components/core/button-group.md +0 -6
  104. package/docs/components/core/button.md +1 -1
  105. package/docs/components/core/close-button.md +5 -5
  106. package/docs/components/core/link.md +60 -17
  107. package/docs/components/core/placeholder.md +0 -6
  108. package/docs/components/core/skeleton.md +40 -0
  109. package/docs/components/core/spinner.md +0 -6
  110. package/docs/components/data/datatable.md +29 -10
  111. package/docs/components/hero/hero.md +64 -0
  112. package/docs/components/interactive/accordion.md +29 -0
  113. package/docs/components/interactive/carousel.md +19 -4
  114. package/docs/components/interactive/collapse.md +3 -2
  115. package/docs/components/interactive/date-picker.md +78 -0
  116. package/docs/components/interactive/draggable.md +91 -0
  117. package/docs/components/interactive/dropdown.md +54 -18
  118. package/docs/components/interactive/modal.md +15 -20
  119. package/docs/components/interactive/offcanvas.md +4 -1
  120. package/docs/components/interactive/resizable.md +73 -0
  121. package/docs/components/interactive/slider.md +57 -0
  122. package/docs/components/interactive/sortable.md +52 -0
  123. package/docs/components/interactive/stepper.md +83 -0
  124. package/docs/components/interactive/tabs.md +66 -0
  125. package/docs/components/interactive/toast.md +93 -30
  126. package/docs/components/layout/col.md +0 -6
  127. package/docs/components/layout/container.md +0 -6
  128. package/docs/components/layout/row.md +0 -6
  129. package/docs/components/list/list-group.md +4 -0
  130. package/docs/components/navigation/breadcrumb.md +4 -0
  131. package/docs/components/navigation/nav.md +64 -1
  132. package/docs/components/navigation/navbar.md +2 -0
  133. package/docs/components/navigation/pagination.md +16 -0
  134. package/docs/components/progress/progress.md +7 -1
  135. package/docs/composables/color-mode.md +44 -6
  136. package/docs/composables/use-form.md +78 -0
  137. package/docs/composables/use-position.md +68 -0
  138. package/docs/composables/use-toast.md +91 -0
  139. package/docs/directives/v-tooltip.md +58 -0
  140. package/docs/forms/README.md +60 -61
  141. package/docs/forms/autocomplete.md +96 -0
  142. package/docs/forms/file-input.md +97 -0
  143. package/docs/forms/form-checkbox.md +75 -25
  144. package/docs/forms/form-datepicker.md +58 -28
  145. package/docs/forms/form-group.md +79 -44
  146. package/docs/forms/form-input.md +88 -31
  147. package/docs/forms/form-radio.md +60 -36
  148. package/docs/forms/form-select.md +75 -31
  149. package/docs/forms/form-spinbutton.md +72 -33
  150. package/docs/forms/form-switch.md +53 -25
  151. package/docs/forms/form-textarea.md +60 -29
  152. package/docs/forms/form-wysiwyg.md +73 -38
  153. package/docs/forms/input-group.md +53 -34
  154. package/docs/forms/validation.md +135 -521
  155. package/docs/getting-started/starter-template.md +136 -0
  156. package/docs/superpowers/plans/2026-05-12-vibe-charts.md +1999 -0
  157. package/docs/superpowers/plans/2026-05-29-e2e-browser-testing.md +615 -0
  158. package/docs/superpowers/specs/2026-05-12-charting-design.md +185 -0
  159. package/docs/superpowers/specs/2026-05-29-e2e-browser-testing-design.md +168 -0
  160. package/docs/utilities/position.md +82 -0
  161. package/docs/versioning.md +57 -0
  162. package/examples/README.md +201 -0
  163. package/examples/album.html +262 -0
  164. package/examples/blog.html +166 -0
  165. package/examples/carousel.html +114 -0
  166. package/examples/checkout.html +275 -0
  167. package/examples/cover.html +89 -0
  168. package/examples/dashboard.html +156 -0
  169. package/examples/index.html +129 -0
  170. package/examples/jumbotron.html +56 -0
  171. package/examples/mobile-dashboard.html +138 -0
  172. package/examples/pricing.html +172 -0
  173. package/examples/product.html +145 -0
  174. package/examples/sidebars.html +166 -0
  175. package/examples/sign-in.html +119 -0
  176. package/examples/starter.html +314 -0
  177. package/examples/sticky-footer-navbar.html +70 -0
  178. package/examples/sticky-footer.html +60 -0
  179. package/examples/test-simple.html +91 -0
  180. package/llms.txt +407 -47
  181. package/package.json +42 -13
  182. package/dist/App.vue.d.ts +0 -2
  183. package/dist/components/HelloWorld.vue.d.ts +0 -5
  184. package/dist/components/VibeAccordion.vue.d.ts +0 -90
  185. package/dist/components/VibeBreadcrumb.vue.d.ts +0 -47
  186. package/dist/components/VibeCollapse.vue.d.ts +0 -84
  187. package/dist/components/VibeContainer.vue.d.ts +0 -44
  188. package/dist/components/VibeDataTable.vue.d.ts +0 -76
  189. package/dist/components/VibeNavbarBrand.vue.d.ts +0 -42
  190. package/dist/components/VibeNavbarNav.vue.d.ts +0 -61
  191. package/dist/components/VibePopover.vue.d.ts +0 -95
  192. package/dist/components/VibeProgress.vue.d.ts +0 -45
  193. package/dist/components/VibeScrollspy.vue.d.ts +0 -77
  194. package/dist/components/VibeTabContent.vue.d.ts +0 -74
  195. package/dist/components/VibeTooltip.vue.d.ts +0 -86
  196. package/dist/composables/useId.d.ts +0 -5
  197. package/dist/types/index.d.ts +0 -6
  198. /package/dist/{composables → src/composables}/useBackButton.d.ts +0 -0
  199. /package/dist/{composables → src/composables}/useFormValidation.d.ts +0 -0
  200. /package/dist/{main.d.ts → src/main.d.ts} +0 -0
package/AGENTS.md ADDED
@@ -0,0 +1,44 @@
1
+ # VibeUI — Guidance for AI Coding Agents
2
+
3
+ You are generating code that uses **`@velkymx/vibeui`** — a Vue 3 component library wrapping Bootstrap 5.3. Follow this and you'll produce correct code on the first try.
4
+
5
+ ## Read the docs before you build — do not guess
6
+
7
+ These all ship inside the installed package:
8
+
9
+ - **Start here:** [`llms.txt`](./llms.txt) (package root) — the load → use → leverage workflow, a "common mistakes" cheat sheet, and a link index to every doc page.
10
+ - **Full API reference:** [`docs/`](./docs/README.md) — one page per component with its exact props, events, and slots.
11
+ - **Working examples:** [`examples/`](./examples/index.html) — full-page templates to copy patterns from.
12
+
13
+ **Do NOT** infer the API from `dist/`, from the compiled `.d.ts` types alone, or from memory. The documented props, `:items` shapes, and slot names are the source of truth. When unsure about a component, open its doc page first.
14
+
15
+ ## Core rules
16
+
17
+ 1. **Bootstrap CSS yes, Bootstrap JS never.** Import `bootstrap/dist/css/bootstrap.min.css` in your app. Do **not** import Bootstrap's JS — VibeUI loads it internally, on demand. (Non-bundler / UMD / CDN pages need a `bootstrap` import map, e.g. `{ "imports": { "bootstrap": "https://esm.sh/bootstrap@5.3" } }`, or interactive components silently fail.)
18
+ 2. **Style with props.** `variant`, `size`, `outline` (a boolean — use `variant="secondary" outline`, **not** `variant="outline-secondary"`). For one-offs, pass `class`/`style`; they merge onto the component root.
19
+ 3. **Visibility is `v-model`.** `<VibeModal v-model="open" />` (also Offcanvas / Toast / Collapse / Alert). Don't call Bootstrap `show`/`hide`.
20
+ 4. **Data-driven components take arrays — never hand-write the Bootstrap markup:**
21
+ - `:items` → `VibeNav`, `VibeDropdown`, `VibeListGroup`, `VibeBreadcrumb`, `VibeNavbarNav`, `VibeCarousel` (`CarouselItem[]`, each needs `src`)
22
+ - `:options` → `VibeFormSelect`
23
+ - `:bars` → `VibeProgress`
24
+ - `:columns` + `:items` → `VibeDataTable`
25
+ 5. **Custom content uses slots:** `#item` (Nav/Dropdown/ListGroup), `#header`/`#footer`/`#image` (Card), `cell(<key>)` (DataTable), default slot for body.
26
+ 6. **These tags do NOT exist** — use the slot / `:items` API instead: `<vibe-card-body>`, `<vibe-card-header>`, `<vibe-list-group-item>`, `<vibe-nav-item>`, `<vibe-dropdown-item>`, `<vibe-progress-bar>`.
27
+ 7. **`VibeIcon` uses `icon=`**, not `name=`.
28
+ 8. **Drive components through props / `v-model` / slots / exposed methods** (`modal.value?.show()` / `.hide()` / `.toggle()` / `.refresh()` via a template ref). Never reach around the component to Bootstrap's own instance.
29
+ 9. **Forms:** wrap controls in `<VibeFormGroup label="…">` (auto-links label + id + accessibility). Validate with `useForm` + `validators`; bind `:validation-state` / `:validation-message` per field.
30
+
31
+ ## Setup
32
+
33
+ ```ts
34
+ import { createApp } from 'vue'
35
+ import VibeUI from '@velkymx/vibeui'
36
+ import 'bootstrap/dist/css/bootstrap.min.css'
37
+ createApp(App).use(VibeUI).mount('#app') // registers all components + the v-vibe-tooltip directive
38
+ ```
39
+
40
+ Or import components by name for tree-shaking and full template type-checking:
41
+
42
+ ```ts
43
+ import { VibeButton, VibeModal, VibeCard } from '@velkymx/vibeui'
44
+ ```
package/README.md CHANGED
@@ -1,101 +1,288 @@
1
- # VibeUI
1
+ <div align="center"><img src="https://github.com/velkymx/vibeui/blob/1.0-main/vibeui.png?raw=true">
2
2
 
3
- A modern Vue 3 UI component library built with Bootstrap 5, designed to simplify your development and enhance your application's aesthetic.
3
+ [![Vue 3](https://img.shields.io/badge/Vue-3-42b883?logo=vuedotjs&logoColor=white)](https://vuejs.org/)
4
+ [![Bootstrap 5.3](https://img.shields.io/badge/Bootstrap-5.3-7952B3?logo=bootstrap&logoColor=white)](https://getbootstrap.com/)
5
+ [![TypeScript](https://img.shields.io/badge/TypeScript-strict-blue?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
6
+ [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
7
+ [![npm](https://img.shields.io/npm/v/@velkymx/vibeui)](https://www.npmjs.com/package/@velkymx/vibeui)
8
+ [![CI](https://github.com/velkymx/vibeui/actions/workflows/ci.yml/badge.svg)](https://github.com/velkymx/vibeui/actions/workflows/ci.yml)
4
9
 
5
- ## Features
10
+ </div>
11
+
12
+ # About VibeUI
13
+
14
+ **The Vue 3 component library for people who already love Bootstrap.**
15
+
16
+ > **🤖 Building with an AI assistant?** Point it at [`llms.txt`](./llms.txt) (quick-start guardrails + a link to every doc) and [`docs/`](./docs/README.md). Every component's props, events, and slots are documented — **don't let it guess props or reverse-engineer from `dist/`.** Quick reminders: data-driven components use `:items` / `:bars` / `:options`, visibility uses `v-model`, outline buttons use the `outline` prop, and granular tags like `<vibe-card-body>` / `<vibe-nav-item>` do **not** exist (use slots). All of this ships inside the npm package — see also [`AGENTS.md`](./AGENTS.md).
17
+
18
+
19
+
20
+
21
+
22
+ Bootstrap components in Vue are painful. Every modal, tooltip, dropdown, and collapse needs manual JS instantiation, event wiring, unique ID generation, ARIA linking, and teardown on unmount. Miss one step and you ship memory leaks, broken focus, duplicate IDs, or detached-DOM crashes.
23
+
24
+ VibeUI handles all of it. 60+ strictly-typed Vue 3 components that wrap Bootstrap 5.3 - and quietly own every piece of plumbing:
25
+ - JS lifecycle (init, reconfigure, dispose) with race-condition and unmount guards
26
+ - `v-model` on every interactive component
27
+ - Auto-generated IDs, labels, and `aria-describedby` via `VibeFormGroup`
28
+ - Focus return to trigger on modal/offcanvas close (WCAG 2.4.3)
29
+ - Touch/hybrid detection for tooltips, modals, and Android back button
30
+ - Lazy-loaded heavy dependencies (charts, WYSIWYG editor, Bootstrap JS)
31
+
32
+ Plus an interaction suite - drag/drop, sortable, resizable, slider, stepper, autocomplete, calendar, and canvas charts - filling the gap jQuery UI left behind.
33
+
34
+ You keep the Bootstrap you know. VibeUI handles the Vue you'd rather not write.
6
35
 
7
- * **Vue 3 Composition API**: Built from the ground up using modern, reactive Vue.js practices.
8
- * **Full Bootstrap 5 Integration**: Automatically manages Bootstrap's JavaScript lifecycle, including dynamic initialization, reactive configuration, and memory cleanup.
9
- * **Data-Driven & Reactive**: Components are fully reactive with `v-model` support and automatic updates when props or data change.
10
- * **Smart Form Intelligence**: Automated ID generation and accessibility linking via `VibeFormGroup` context.
11
- * **Zero-Boilerplate**: Components handle their own IDs, Teleportation, and Bootstrap instances internally.
12
- * **TypeScript Support**: Fully typed components for a great developer experience.
13
- * **Accessibility First**: Automatic ARIA attribute management and focus trapping.
36
+ > **Coming from BootstrapVue?** If you built on Bootstrap + Vue 2, VibeUI will feel familiar: component-per-feature, data-driven `items` arrays, `v-model` everywhere, and Bootstrap styling via props. Not a drop-in port, but the mental model carries over.
14
37
 
15
- ## Installation
38
+ ## Contents
16
39
 
17
- Install via npm:
40
+ - [Quick Start](#quick-start)
41
+ - [Features](#features)
42
+ - [Components](#components)
43
+ - [Layout](#layout)
44
+ - [Core](#core)
45
+ - [Navigation](#navigation)
46
+ - [Containers](#containers)
47
+ - [Interactive](#interactive)
48
+ - [Tooltips & Popovers](#tooltips--popovers)
49
+ - [Data & Charts](#data--charts)
50
+ - [Forms](#forms)
51
+ - [Composables](#composables)
52
+ - [Directives](#directives)
53
+ - [Examples](#examples)
54
+ - [Documentation](#documentation)
55
+
56
+ ## Quick Start
18
57
 
19
58
  ```bash
20
59
  npm install @velkymx/vibeui bootstrap
21
60
  ```
22
61
 
23
- Optionally, install Bootstrap Icons or Quill for enhanced features:
62
+ Optional peers (only if you use the features that need them):
24
63
 
25
64
  ```bash
26
- npm install bootstrap-icons quill
65
+ npm install bootstrap-icons # VibeIcon
66
+ npm install quill dompurify # VibeFormWysiwyg (dompurify sanitizes editor HTML)
27
67
  ```
28
68
 
29
- ## Quick Setup
69
+ In your app entry (`main.ts`):
70
+
71
+ ```ts
72
+ import { createApp } from 'vue'
73
+ import App from './App.vue'
74
+ import VibeUI from '@velkymx/vibeui'
75
+ import 'bootstrap/dist/css/bootstrap.min.css'
30
76
 
31
- In your Vue app's entry file (`main.ts` or `main.js`):
77
+ createApp(App).use(VibeUI).mount('#app')
78
+ ```
32
79
 
33
- ```typescript
34
- import { createApp } from 'vue';
35
- import App from './App.vue';
36
- import VibeUI from '@velkymx/vibeui';
37
- import 'bootstrap/dist/css/bootstrap.min.css';
80
+ All components register globally. Prefer explicit imports? Tree-shakeable:
38
81
 
39
- createApp(App).use(VibeUI).mount('#app');
82
+ ```ts
83
+ import { VibeButton, VibeModal, VibeCard } from '@velkymx/vibeui'
40
84
  ```
41
85
 
42
- ## Advanced Interactivity
86
+ > Bootstrap **CSS** is imported by you. Bootstrap **JS** is managed internally - do not import it yourself.
43
87
 
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.
88
+ ### 30-second taste
45
89
 
46
90
  ```vue
47
91
  <template>
48
- <div>
49
- <!-- Automatic tooltip initialization with touch optimization -->
50
- <VibeTooltip text="I just work!">
51
- <VibeButton>Hover or Tap Me</VibeButton>
52
- </VibeTooltip>
53
-
54
- <!-- Full v-model support for Modals with Android back button support -->
55
- <VibeModal v-model="showModal" title="Hello!">
56
- Fully reactive, automated, and hybrid-ready.
57
- </VibeModal>
58
- </div>
92
+ <!-- Tooltip: auto-inits, taps on touch, hovers on desktop -->
93
+ <VibeTooltip text="I just work!">
94
+ <VibeButton>Hover or Tap Me</VibeButton>
95
+ </VibeTooltip>
96
+
97
+ <!-- v-model modal, hybrid-ready, focus-safe -->
98
+ <VibeModal v-model="showModal" title="Hello!">
99
+ Fully reactive, automated, and accessible.
100
+ </VibeModal>
59
101
  </template>
60
102
  ```
61
103
 
62
- ## Smart Forms
63
-
64
- VibeUI handles accessibility and IDs for you.
104
+ Forms wire their own accessibility:
65
105
 
66
106
  ```vue
67
107
  <template>
68
- <!-- No IDs required! Labels are automatically linked -->
108
+ <!-- No id needed - label, control, and feedback linked automatically -->
69
109
  <VibeFormGroup label="Email Address">
70
- <VibeFormInput v-model="email" type="email" />
110
+ <VibeFormInput v-model="fields.email" type="email" />
71
111
  </VibeFormGroup>
72
-
73
- <!-- New in v0.8.0: Input Groups -->
74
- <VibeInputGroup prepend="@">
75
- <VibeFormInput v-model="username" noWrapper />
76
- </VibeInputGroup>
77
112
  </template>
78
113
  ```
79
114
 
115
+ Toasts from anywhere:
116
+
117
+ ```ts
118
+ import { useToast } from '@velkymx/vibeui'
119
+ const toast = useToast()
120
+ toast.success('Saved')
121
+ toast.error('Network error', { delay: 8000 })
122
+ ```
123
+
124
+ Mount `<VibeToastHost />` once at app root, dispatch from any component.
125
+
126
+ ## Features
127
+
128
+ | Feature | What it means |
129
+ |---------|---------------|
130
+ | **Bootstrap JS abstracted** | No `new bootstrap.Modal(...)`. Init, reconfigure, and dispose are automatic - with unmount guards. |
131
+ | **v-model everywhere** | Modals, offcanvas, toasts, collapses, tabs, accordions, sliders, and every form control. |
132
+ | **Self-wiring accessibility** | `VibeFormGroup` generates IDs, links labels, `aria-describedby`, help text, and validation feedback. Modals/offcanvas return focus on close. |
133
+ | **Strict TypeScript** | Typed props, emit payloads, and `provide`/`inject` keys. Full editor autocomplete, no `any`. |
134
+ | **Touch & hybrid aware** | Tooltips switch to tap on touch. Modals and offcanvas honor Android back button. |
135
+ | **Lazy-loaded** | Charts, WYSIWYG editor, and Bootstrap's JS load on demand - ship only what you use. |
136
+ | **Interaction suite** | Drag/drop, sortable, resizable, slider, stepper, autocomplete, calendar, and canvas charts. |
137
+
80
138
  ## Components
81
139
 
82
- VibeUI includes all major Bootstrap 5.3 components, fully wrapped for Vue 3:
140
+ 60+ components covering Bootstrap 5.3 plus an interaction and data-viz suite.
141
+
142
+ ### Layout
143
+
144
+ | Component | Description | Docs |
145
+ |-----------|-------------|------|
146
+ | `VibeContainer` | Responsive fixed/fluid container | [docs](./docs/components/layout/container.md) |
147
+ | `VibeRow` | Flexbox grid row | [docs](./docs/components/layout/row.md) |
148
+ | `VibeCol` | Flexbox grid column with breakpoints | [docs](./docs/components/layout/col.md) |
149
+
150
+ ### Core
151
+
152
+ | Component | Description | Docs |
153
+ |-----------|-------------|------|
154
+ | `VibeAlert` | Contextual alert with dismiss and fade animation | [docs](./docs/components/core/alert.md) |
155
+ | `VibeBadge` | Inline badge with variant and pill styles | [docs](./docs/components/core/badge.md) |
156
+ | `VibeButton` | Button with variant, size, and outline styles | [docs](./docs/components/core/button.md) |
157
+ | `VibeButtonGroup` | Horizontal or vertical button group | [docs](./docs/components/core/button-group.md) |
158
+ | `VibeCloseButton` | Accessible dismiss button | [docs](./docs/components/core/close-button.md) |
159
+ | `VibeIcon` | Bootstrap Icons wrapper with sizing and color | - |
160
+ | `VibeLink` | Styled anchor with href validation | [docs](./docs/components/core/link.md) |
161
+ | `VibePlaceholder` | Animated loading placeholder | [docs](./docs/components/core/placeholder.md) |
162
+ | `VibeSkeleton` | Multi-variant skeleton loading component | [docs](./docs/components/core/skeleton.md) |
163
+ | `VibeSpinner` | Loading spinner with variant and size | [docs](./docs/components/core/spinner.md) |
164
+
165
+ ### Navigation
166
+
167
+ | Component | Description | Docs |
168
+ |-----------|-------------|------|
169
+ | `VibeBreadcrumb` | Breadcrumb trail from items array | [docs](./docs/components/navigation/breadcrumb.md) |
170
+ | `VibeNav` | Tab/pill nav with router-link support | [docs](./docs/components/navigation/nav.md) |
171
+ | `VibeNavbar` | Responsive navbar with collapse | [docs](./docs/components/navigation/navbar.md) |
172
+ | `VibeNavbarBrand` | Navbar brand/logo link | [docs](./docs/components/navigation/navbar.md) |
173
+ | `VibeNavbarToggle` | Navbar collapse toggle button | [docs](./docs/components/navigation/navbar.md) |
174
+ | `VibeNavbarNav` | Navbar nav list from items array | [docs](./docs/components/navigation/navbar.md) |
175
+ | `VibePagination` | Pagination with ellipsis and page window | [docs](./docs/components/navigation/pagination.md) |
176
+ | `VibeScrollspy` | Scroll-aware nav highlighting | [docs](./docs/components/advanced/scrollspy.md) |
177
+
178
+ ### Containers
179
+
180
+ | Component | Description | Docs |
181
+ |-----------|-------------|------|
182
+ | `VibeCard` | Card container with header/body/footer slots, section classes, and an image slot | [docs](./docs/components/card/card.md) |
183
+ | `VibeHero` | Hero / banner section (variant, bordered, bgImage, gradient, overlay) | [docs](./docs/components/hero/hero.md) |
184
+ | `VibeListGroup` | List group with router-link support | [docs](./docs/components/list/list-group.md) |
185
+
186
+ ### Interactive
187
+
188
+ | Component | Description | Docs |
189
+ |-----------|-------------|------|
190
+ | `VibeAccordion` | Accordion with always-open and flush options | [docs](./docs/components/interactive/accordion.md) |
191
+ | `VibeCarousel` | Image carousel with indicators and captions | [docs](./docs/components/interactive/carousel.md) |
192
+ | `VibeCollapse` | Toggle visibility with Bootstrap animation | [docs](./docs/components/interactive/collapse.md) |
193
+ | `VibeDatePicker` | Calendar date picker with range and min/max | [docs](./docs/components/interactive/date-picker.md) |
194
+ | `VibeDraggable` | Drag source wrapper | [docs](./docs/components/interactive/draggable.md) |
195
+ | `VibeDroppable` | Drop target zone | [docs](./docs/components/interactive/draggable.md) |
196
+ | `VibeDropdown` | Dropdown menu with items array | [docs](./docs/components/interactive/dropdown.md) |
197
+ | `VibeModal` | Modal dialog with v-model, sizes, scrollable | [docs](./docs/components/interactive/modal.md) |
198
+ | `VibeOffcanvas` | Offcanvas panel with placement options | [docs](./docs/components/interactive/offcanvas.md) |
199
+ | `VibeResizable` | Resizable container with aspect-ratio lock | [docs](./docs/components/interactive/resizable.md) |
200
+ | `VibeSlider` | Range slider with single or dual handles | [docs](./docs/components/interactive/slider.md) |
201
+ | `VibeSortable` | Sortable list with drag reorder | [docs](./docs/components/interactive/sortable.md) |
202
+ | `VibeStepper` | Multi-step wizard with validation | [docs](./docs/components/interactive/stepper.md) |
203
+ | `VibeTabs` | Tabbed interface from items array | [docs](./docs/components/interactive/tabs.md) |
204
+ | `VibeTab` | Individual tab panel | [docs](./docs/components/interactive/tabs.md) |
205
+ | `VibeTabContent` | Standalone tab-pane content host | [docs](./docs/components/interactive/tabs.md) |
206
+ | `VibeToast` | Toast notification component with v-model | [docs](./docs/components/interactive/toast.md) |
207
+ | `VibeToastHost` | Toast container for `useToast()` service | [docs](./docs/composables/use-toast.md) |
208
+
209
+ ### Tooltips & Popovers
210
+
211
+ | Component | Description | Docs |
212
+ |-----------|-------------|------|
213
+ | `VibePopover` | Popover with title and text content | [docs](./docs/components/advanced/popover.md) |
214
+ | `VibeTooltip` | Tooltip with hover/tap detection | [docs](./docs/components/advanced/tooltip.md) |
215
+
216
+ ### Data & Charts
217
+
218
+ | Component | Description | Docs |
219
+ |-----------|-------------|------|
220
+ | `VibeDataTable` | Sortable, searchable, paginated data table | [docs](./docs/components/data/datatable.md) |
221
+ | `VibeProgress` | Progress bar with multi-bar and animated | [docs](./docs/components/progress/progress.md) |
222
+ | `VibeChartBar` | Bar chart (stacked, grouped) | [docs](./docs/components/charts/chart-bar.md) |
223
+ | `VibeChartLine` | Line chart with smooth curves and fill | [docs](./docs/components/charts/chart-line.md) |
224
+ | `VibeChartPie` | Pie chart | [docs](./docs/components/charts/chart-pie.md) |
225
+
226
+ > Charts are dependency-free, canvas-rendered, and lazy-loaded - no Chart.js or D3.
227
+
228
+ ### Forms
229
+
230
+ | Component | Description | Docs |
231
+ |-----------|-------------|------|
232
+ | `VibeAutocomplete` | Typeahead with keyboard nav and async search | [docs](./docs/forms/autocomplete.md) |
233
+ | `VibeFileInput` | File picker with drag/drop and size validation | [docs](./docs/forms/file-input.md) |
234
+ | `VibeFormCheckbox` | Checkbox with indeterminate and group support | [docs](./docs/forms/form-checkbox.md) |
235
+ | `VibeFormDatepicker` | Native date input wrapper | [docs](./docs/forms/form-datepicker.md) |
236
+ | `VibeFormGroup` | Auto-wires label, IDs, help text, and validation | [docs](./docs/forms/form-group.md) |
237
+ | `VibeFormInput` | Text input with types, sizes, and states | [docs](./docs/forms/form-input.md) |
238
+ | `VibeFormRadio` | Radio button with group and inline layout | [docs](./docs/forms/form-radio.md) |
239
+ | `VibeFormSelect` | Select dropdown with single and multiple selection | [docs](./docs/forms/form-select.md) |
240
+ | `VibeFormSpinbutton` | Numeric stepper with min/max/step | [docs](./docs/forms/form-spinbutton.md) |
241
+ | `VibeFormSwitch` | Toggle switch with label | [docs](./docs/forms/form-switch.md) |
242
+ | `VibeFormTextarea` | Multi-line text input with character count | [docs](./docs/forms/form-textarea.md) |
243
+ | `VibeFormWysiwyg` | Rich-text editor (Quill) with DOMPurify sanitization | [docs](./docs/forms/form-wysiwyg.md) |
244
+ | `VibeInputGroup` | Input with prepend/append slots | [docs](./docs/forms/input-group.md) |
245
+
246
+ Form validation rules and `useForm()` API: [docs](./docs/forms/validation.md)
247
+
248
+ ## Composables
249
+
250
+ | Composable | Description | Docs |
251
+ |------------|-------------|------|
252
+ | `useBackButton` | Android back button handler | [docs](./docs/composables/back-button.md) |
253
+ | `useBreakpoints` | Reactive Bootstrap breakpoint detection | [docs](./docs/composables/breakpoints.md) |
254
+ | `useColorMode` | Light/dark/auto mode with system detection | [docs](./docs/composables/color-mode.md) |
255
+ | `useForm` | Form state, dirty detection, and validation | [docs](./docs/composables/use-form.md) |
256
+ | `useFormValidation` | Standalone validator runner with concurrency guard | [docs](./docs/forms/validation.md) |
257
+ | `usePosition` | Popper-style positioning utility | [docs](./docs/composables/use-position.md) |
258
+ | `useToast` | Programmatic toast dispatch (success, error, etc.) | [docs](./docs/composables/use-toast.md) |
83
259
 
84
- * **Layout**: Container, Row, Col
85
- * **Core**: Alert, Badge, Button, ButtonGroup, CloseButton, Spinner, Placeholder, Icon, Link
86
- * **Navigation**: Breadcrumb, Nav, Navbar, Pagination, Scrollspy
87
- * **Interactive**: Accordion, Collapse, Dropdown, Modal, Offcanvas, Toast, Carousel
88
- * **Data**: DataTable (with mobile Stack mode)
89
- * **Forms**: Input, InputGroup, Select, Textarea, Spinbutton, Datepicker, Checkbox, Radio, Switch, Wysiwyg, FormGroup
260
+ ## Directives
90
261
 
91
- ## Full Documentation
262
+ | Directive | Description | Docs |
263
+ |-----------|-------------|------|
264
+ | `v-vibe-tooltip` | Directive-based tooltip on any element | [docs](./docs/directives/v-tooltip.md) |
92
265
 
93
- For detailed documentation and examples, visit our [Docs](./docs/README.md).
266
+ ## Examples
94
267
 
95
- ## License
268
+ Full-page templates built entirely with VibeUI components — open [`examples/index.html`](./examples/index.html) (see [`examples/README.md`](./examples/README.md) for how to run them):
96
269
 
97
- [MIT License](LICENSE)
270
+ | Example | Shows |
271
+ |---------|-------|
272
+ | [Starter](./examples/starter.html) | Navbar, hero, features, interactive components, footer |
273
+ | [Album](./examples/album.html) | Photo grid with cards, badges, and an icon nav |
274
+ | [Pricing](./examples/pricing.html) | Pricing cards with variant-colored headers |
275
+ | [Checkout](./examples/checkout.html) | Full billing form, order summary, and validation |
276
+ | [Sign-in](./examples/sign-in.html) | Centered form with `useForm` validation |
277
+ | [Dashboard](./examples/dashboard.html) | Admin shell with sidebar and `VibeDataTable` |
278
+ | [Sidebars](./examples/sidebars.html) | Desktop sidebar + mobile offcanvas nav |
279
+ | [Product](./examples/product.html) | Marketing page with hero, feature grid, product cards |
280
+ | [Carousel](./examples/carousel.html) | Full-width `VibeCarousel` + featurettes |
281
+ | [Cover](./examples/cover.html) | Full-viewport one-page `VibeHero` |
282
+ | [Blog](./examples/blog.html) | Magazine layout with pagination and sidebar |
283
+ | [Jumbotron](./examples/jumbotron.html) | Modern jumbotron via the bordered `VibeHero` |
98
284
 
99
- ## TechnoSorcery.com
285
+ ## Documentation
100
286
 
101
- Built with by [TechnoSorcery.com](https://technosorcery.com)
287
+ Full API reference: [`docs/`](./docs/README.md)
288
+ LLM-optimized reference: [`llms.txt`](./llms.txt)