@velkymx/vibeui 0.9.0 → 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 (205) hide show
  1. package/AGENTS.md +44 -0
  2. package/CLAUDE.md +48 -0
  3. package/README.md +222 -197
  4. package/dist/purify.es-1D-VntFD.mjs +679 -0
  5. package/dist/src/App.vue.d.ts +3 -0
  6. package/dist/src/components/HelloWorld.vue.d.ts +6 -0
  7. package/dist/src/components/VibeAccordion.vue.d.ts +89 -0
  8. package/dist/{components → src/components}/VibeAlert.vue.d.ts +18 -34
  9. package/dist/src/components/VibeAutocomplete.vue.d.ts +74 -0
  10. package/dist/{components → src/components}/VibeBadge.vue.d.ts +10 -18
  11. package/dist/src/components/VibeBreadcrumb.vue.d.ts +51 -0
  12. package/dist/{components → src/components}/VibeButton.vue.d.ts +13 -17
  13. package/dist/{components → src/components}/VibeButtonGroup.vue.d.ts +10 -18
  14. package/dist/{components → src/components}/VibeCard.vue.d.ts +51 -24
  15. package/dist/{components → src/components}/VibeCarousel.vue.d.ts +27 -49
  16. package/dist/src/components/VibeChartBar.vue.d.ts +61 -0
  17. package/dist/src/components/VibeChartLine.vue.d.ts +70 -0
  18. package/dist/src/components/VibeChartPie.vue.d.ts +34 -0
  19. package/dist/{components → src/components}/VibeCloseButton.vue.d.ts +9 -7
  20. package/dist/{components → src/components}/VibeCol.vue.d.ts +9 -17
  21. package/dist/src/components/VibeCollapse.vue.d.ts +76 -0
  22. package/dist/src/components/VibeContainer.vue.d.ts +36 -0
  23. package/dist/src/components/VibeDataTable.vue.d.ts +131 -0
  24. package/dist/{components → src/components}/VibeDatePicker.vue.d.ts +4 -6
  25. package/dist/{components → src/components}/VibeDraggable.vue.d.ts +9 -13
  26. package/dist/{components → src/components}/VibeDropdown.vue.d.ts +46 -43
  27. package/dist/{components → src/components}/VibeDroppable.vue.d.ts +9 -13
  28. package/dist/{components → src/components}/VibeFileInput.vue.d.ts +14 -20
  29. package/dist/{components → src/components}/VibeFormCheckbox.vue.d.ts +29 -21
  30. package/dist/{components → src/components}/VibeFormDatepicker.vue.d.ts +26 -29
  31. package/dist/{components → src/components}/VibeFormGroup.vue.d.ts +10 -13
  32. package/dist/{components → src/components}/VibeFormInput.vue.d.ts +22 -23
  33. package/dist/{components → src/components}/VibeFormRadio.vue.d.ts +22 -23
  34. package/dist/{components → src/components}/VibeFormSelect.vue.d.ts +27 -33
  35. package/dist/{components → src/components}/VibeFormSpinbutton.vue.d.ts +30 -33
  36. package/dist/{components → src/components}/VibeFormSwitch.vue.d.ts +21 -22
  37. package/dist/{components → src/components}/VibeFormTextarea.vue.d.ts +23 -24
  38. package/dist/{components → src/components}/VibeFormWysiwyg.vue.d.ts +22 -21
  39. package/dist/src/components/VibeHero.vue.d.ts +108 -0
  40. package/dist/{components → src/components}/VibeIcon.vue.d.ts +27 -7
  41. package/dist/{components → src/components}/VibeInputGroup.vue.d.ts +11 -13
  42. package/dist/{components → src/components}/VibeLink.vue.d.ts +14 -18
  43. package/dist/{components → src/components}/VibeListGroup.vue.d.ts +26 -22
  44. package/dist/{components → src/components}/VibeModal.vue.d.ts +29 -45
  45. package/dist/{components → src/components}/VibeNav.vue.d.ts +40 -20
  46. package/dist/{components → src/components}/VibeNavbar.vue.d.ts +12 -19
  47. package/dist/src/components/VibeNavbarBrand.vue.d.ts +34 -0
  48. package/dist/src/components/VibeNavbarNav.vue.d.ts +80 -0
  49. package/dist/{components → src/components}/VibeNavbarToggle.vue.d.ts +7 -5
  50. package/dist/{components → src/components}/VibeOffcanvas.vue.d.ts +28 -43
  51. package/dist/{components → src/components}/VibePagination.vue.d.ts +38 -29
  52. package/dist/{components → src/components}/VibePlaceholder.vue.d.ts +9 -17
  53. package/dist/src/components/VibePopover.vue.d.ts +72 -0
  54. package/dist/src/components/VibeProgress.vue.d.ts +37 -0
  55. package/dist/{components → src/components}/VibeResizable.vue.d.ts +10 -14
  56. package/dist/{components → src/components}/VibeRow.vue.d.ts +9 -17
  57. package/dist/src/components/VibeScrollspy.vue.d.ts +89 -0
  58. package/dist/{components → src/components}/VibeSkeleton.vue.d.ts +2 -1
  59. package/dist/{components → src/components}/VibeSlider.vue.d.ts +4 -5
  60. package/dist/src/components/VibeSortable.vue.d.ts +59 -0
  61. package/dist/{components → src/components}/VibeSpinner.vue.d.ts +4 -7
  62. package/dist/{components → src/components}/VibeStepper.vue.d.ts +32 -31
  63. package/dist/{components → src/components}/VibeTab.vue.d.ts +7 -11
  64. package/dist/src/components/VibeTabContent.vue.d.ts +56 -0
  65. package/dist/{components → src/components}/VibeTabs.vue.d.ts +9 -13
  66. package/dist/{components → src/components}/VibeToast.vue.d.ts +31 -44
  67. package/dist/{components → src/components}/VibeToastHost.vue.d.ts +2 -1
  68. package/dist/src/components/VibeTooltip.vue.d.ts +63 -0
  69. package/dist/src/components/chart/chartColors.d.ts +3 -0
  70. package/dist/src/components/chart/chartResize.d.ts +2 -0
  71. package/dist/src/components/chart/chartTooltip.d.ts +2 -0
  72. package/dist/src/components/chart/chartTypes.d.ts +6 -0
  73. package/dist/src/components/chart/drawBar.d.ts +5 -0
  74. package/dist/src/components/chart/drawLine.d.ts +18 -0
  75. package/dist/src/components/chart/drawPie.d.ts +4 -0
  76. package/dist/{components → src/components}/dndStore.d.ts +1 -0
  77. package/dist/{components → src/components}/index.d.ts +5 -1
  78. package/dist/{composables → src/composables}/useBreakpoints.d.ts +1 -0
  79. package/dist/{composables → src/composables}/useColorMode.d.ts +1 -1
  80. package/dist/src/composables/useId.d.ts +2 -0
  81. package/dist/{directives → src/directives}/vTooltip.d.ts +2 -3
  82. package/dist/src/injectionKeys.d.ts +28 -0
  83. package/dist/{types.d.ts → src/types.d.ts} +21 -2
  84. package/dist/src/utils/safeCss.d.ts +16 -0
  85. package/dist/src/utils/safeHref.d.ts +7 -0
  86. package/dist/src/utils/sanitizeHtml.d.ts +13 -0
  87. package/dist/vibeui.css +2 -1
  88. package/dist/vibeui.es.js +8269 -5855
  89. package/dist/vibeui.umd.js +3 -1
  90. package/docs/README.md +225 -0
  91. package/docs/components/advanced/popover.md +125 -0
  92. package/docs/components/advanced/scrollspy.md +106 -0
  93. package/docs/components/advanced/tooltip.md +90 -0
  94. package/docs/components/card/card.md +223 -0
  95. package/docs/components/charts/chart-bar.md +129 -0
  96. package/docs/components/charts/chart-line.md +136 -0
  97. package/docs/components/charts/chart-pie.md +102 -0
  98. package/docs/components/core/alert.md +94 -0
  99. package/docs/components/core/badge.md +75 -0
  100. package/docs/components/core/button-group.md +99 -0
  101. package/docs/components/core/button.md +127 -0
  102. package/docs/components/core/close-button.md +82 -0
  103. package/docs/components/core/link.md +79 -0
  104. package/docs/components/core/placeholder.md +129 -0
  105. package/docs/components/core/skeleton.md +40 -0
  106. package/docs/components/core/spinner.md +103 -0
  107. package/docs/components/data/datatable.md +435 -0
  108. package/docs/components/hero/hero.md +64 -0
  109. package/docs/components/interactive/accordion.md +121 -0
  110. package/docs/components/interactive/carousel.md +112 -0
  111. package/docs/components/interactive/collapse.md +106 -0
  112. package/docs/components/interactive/date-picker.md +78 -0
  113. package/docs/components/interactive/draggable.md +91 -0
  114. package/docs/components/interactive/dropdown.md +129 -0
  115. package/docs/components/interactive/modal.md +143 -0
  116. package/docs/components/interactive/offcanvas.md +92 -0
  117. package/docs/components/interactive/resizable.md +73 -0
  118. package/docs/components/interactive/slider.md +57 -0
  119. package/docs/components/interactive/sortable.md +52 -0
  120. package/docs/components/interactive/stepper.md +83 -0
  121. package/docs/components/interactive/tabs.md +66 -0
  122. package/docs/components/interactive/toast.md +177 -0
  123. package/docs/components/layout/col.md +117 -0
  124. package/docs/components/layout/container.md +53 -0
  125. package/docs/components/layout/row.md +107 -0
  126. package/docs/components/list/list-group.md +225 -0
  127. package/docs/components/navigation/breadcrumb.md +120 -0
  128. package/docs/components/navigation/nav.md +151 -0
  129. package/docs/components/navigation/navbar.md +108 -0
  130. package/docs/components/navigation/pagination.md +162 -0
  131. package/docs/components/progress/progress.md +188 -0
  132. package/docs/composables/back-button.md +28 -0
  133. package/docs/composables/breakpoints.md +54 -0
  134. package/docs/composables/color-mode.md +179 -0
  135. package/docs/composables/use-form.md +78 -0
  136. package/docs/composables/use-position.md +68 -0
  137. package/docs/composables/use-toast.md +91 -0
  138. package/docs/directives/v-tooltip.md +58 -0
  139. package/docs/forms/README.md +87 -0
  140. package/docs/forms/autocomplete.md +96 -0
  141. package/docs/forms/file-input.md +97 -0
  142. package/docs/forms/form-checkbox.md +100 -0
  143. package/docs/forms/form-datepicker.md +80 -0
  144. package/docs/forms/form-group.md +115 -0
  145. package/docs/forms/form-input.md +112 -0
  146. package/docs/forms/form-radio.md +82 -0
  147. package/docs/forms/form-select.md +98 -0
  148. package/docs/forms/form-spinbutton.md +94 -0
  149. package/docs/forms/form-switch.md +75 -0
  150. package/docs/forms/form-textarea.md +82 -0
  151. package/docs/forms/form-wysiwyg.md +99 -0
  152. package/docs/forms/input-group.md +70 -0
  153. package/docs/forms/validation.md +213 -0
  154. package/docs/getting-started/starter-template.md +136 -0
  155. package/docs/superpowers/plans/2026-05-12-vibe-charts.md +1999 -0
  156. package/docs/superpowers/plans/2026-05-29-e2e-browser-testing.md +615 -0
  157. package/docs/superpowers/specs/2026-05-12-charting-design.md +185 -0
  158. package/docs/superpowers/specs/2026-05-29-e2e-browser-testing-design.md +168 -0
  159. package/docs/utilities/position.md +82 -0
  160. package/docs/versioning.md +57 -0
  161. package/examples/README.md +201 -0
  162. package/examples/album.html +262 -0
  163. package/examples/blog.html +166 -0
  164. package/examples/carousel.html +114 -0
  165. package/examples/checkout.html +275 -0
  166. package/examples/cover.html +89 -0
  167. package/examples/dashboard.html +156 -0
  168. package/examples/index.html +129 -0
  169. package/examples/jumbotron.html +56 -0
  170. package/examples/mobile-dashboard.html +138 -0
  171. package/examples/pricing.html +172 -0
  172. package/examples/product.html +145 -0
  173. package/examples/sidebars.html +166 -0
  174. package/examples/sign-in.html +119 -0
  175. package/examples/starter.html +314 -0
  176. package/examples/sticky-footer-navbar.html +70 -0
  177. package/examples/sticky-footer.html +60 -0
  178. package/examples/test-simple.html +91 -0
  179. package/llms.txt +782 -0
  180. package/package.json +44 -14
  181. package/dist/App.vue.d.ts +0 -2
  182. package/dist/components/HelloWorld.vue.d.ts +0 -5
  183. package/dist/components/VibeAccordion.vue.d.ts +0 -90
  184. package/dist/components/VibeAutocomplete.vue.d.ts +0 -46
  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/VibeSortable.vue.d.ts +0 -40
  195. package/dist/components/VibeTabContent.vue.d.ts +0 -74
  196. package/dist/components/VibeTooltip.vue.d.ts +0 -86
  197. package/dist/composables/useId.d.ts +0 -5
  198. package/dist/types/index.d.ts +0 -6
  199. /package/dist/{composables → src/composables}/useBackButton.d.ts +0 -0
  200. /package/dist/{composables → src/composables}/useForm.d.ts +0 -0
  201. /package/dist/{composables → src/composables}/useFormValidation.d.ts +0 -0
  202. /package/dist/{composables → src/composables}/usePosition.d.ts +0 -0
  203. /package/dist/{composables → src/composables}/useToast.d.ts +0 -0
  204. /package/dist/{index.d.ts → src/index.d.ts} +0 -0
  205. /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/CLAUDE.md ADDED
@@ -0,0 +1,48 @@
1
+ # VibeUI - AI Assistant Guide
2
+
3
+ **DO NOT read the source files in this package to understand how to use VibeUI.**
4
+
5
+ Instead, use these resources:
6
+
7
+ ## Documentation
8
+
9
+ - **Full docs:** `docs/` directory in this package (included in npm install)
10
+ - **Start here:** `docs/README.md` for an overview
11
+ - **Component docs:** `docs/components/` for per-component API reference
12
+ - **Form docs:** `docs/forms/` for form components and validation
13
+ - **Composable docs:** `docs/composables/` for hooks like `useColorMode`
14
+ - **LLM-optimized reference:** `llms.txt` in this package root
15
+
16
+ ## Quick Reference
17
+
18
+ - **Package:** `@velkymx/vibeui`
19
+ - **Repository:** https://github.com/velkymx/vibeui
20
+ - **Stack:** Vue 3 + Bootstrap 5.3 + TypeScript
21
+
22
+ ## How to Use VibeUI
23
+
24
+ ```ts
25
+ import { createApp } from 'vue'
26
+ import VibeUI from '@velkymx/vibeui'
27
+ import 'bootstrap/dist/css/bootstrap.min.css'
28
+
29
+ createApp(App).use(VibeUI).mount('#app')
30
+ ```
31
+
32
+ All components are available globally after `app.use(VibeUI)`, or can be imported individually:
33
+
34
+ ```ts
35
+ import { VibeButton, VibeModal, VibeCard } from '@velkymx/vibeui'
36
+ ```
37
+
38
+ ## Key Patterns
39
+
40
+ - Components use Bootstrap 5.3 class names via props (e.g., `variant="primary"`, `size="lg"`)
41
+ - Interactive components (Modal, Offcanvas, Toast, Collapse) use `v-model` for visibility
42
+ - Data-driven components (Breadcrumb, ListGroup, Dropdown, Accordion) accept `items` arrays
43
+ - Bootstrap JS is managed internally - do NOT import bootstrap JS yourself
44
+ - Bootstrap CSS must be imported by the consumer
45
+
46
+ ## For Complete API Details
47
+
48
+ Read the `docs/` directory or `llms.txt` - do not reverse-engineer behavior from dist files.
package/README.md CHANGED
@@ -1,263 +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>
6
11
 
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.
12
+ # About VibeUI
14
13
 
15
- ## Installation
14
+ **The Vue 3 component library for people who already love Bootstrap.**
16
15
 
17
- Install via npm:
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).
18
17
 
19
- ```bash
20
- npm install @velkymx/vibeui bootstrap
21
- ```
22
18
 
23
- Optionally, install Bootstrap Icons or Quill for enhanced features:
24
19
 
25
- ```bash
26
- npm install bootstrap-icons quill
27
- ```
28
20
 
29
- ## Quick Setup
30
21
 
31
- In your Vue app's entry file (`main.ts` or `main.js`):
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.
35
+
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.
37
+
38
+ ## Contents
32
39
 
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';
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)
38
55
 
39
- createApp(App).use(VibeUI).mount('#app');
56
+ ## Quick Start
57
+
58
+ ```bash
59
+ npm install @velkymx/vibeui bootstrap
40
60
  ```
41
61
 
42
- ## What's New in v0.9
62
+ Optional peers (only if you use the features that need them):
43
63
 
44
- A big release driven by real-app migration feedback and a jQuery UI parity push.
64
+ ```bash
65
+ npm install bootstrap-icons # VibeIcon
66
+ npm install quill dompurify # VibeFormWysiwyg (dompurify sanitizes editor HTML)
67
+ ```
45
68
 
46
- **New components**
47
- - `VibeFileInput` — file picker with drag-drop, accept enforcement, size limit
48
- - `VibeSkeleton` — text / rect / circle / card loading placeholders with shimmer
49
- - `VibeDatePicker` — calendar popover with single + range mode, keyboard nav
50
- - `VibeAutocomplete` — search-as-you-type, sync or async source, debounced
51
- - `VibeTabs` / `VibeTab` — tab container with content switching, lazy mode
52
- - `VibeStepper` — multi-step wizard with sync/async guards
53
- - `VibeSortable` — drag-to-reorder list
54
- - `VibeDraggable` / `VibeDroppable` — kanban / builder primitives
55
- - `VibeResizable` — corner / edge handle resizing with aspect / grid
56
- - `VibeSlider` — single + range slider with handle swap, track click, keyboard
57
- - `VibeToastHost` — host component for the new toast service
69
+ In your app entry (`main.ts`):
58
70
 
59
- **New composables / directive**
60
- - `useForm` multi-field forms with reactive `fields`, `errors`, `touched`
61
- - `useToast` `toast.success() / error() / warn() / info() / dismiss()`
62
- - `usePosition` floating-ui-backed anchor positioning
63
- - `v-vibe-tooltip` — inline tooltip directive
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'
64
76
 
65
- **API improvements**
66
- - `VibeAlert`: rich slot content; `dismissible` (correctly spelled) alias
67
- - `VibeButton`: `variant="link"`
68
- - `VibeDataTable`: generic columns (`DataTableColumn<MyRow>`)
69
- - `VibeFormSelect`: typed primitive option values (`null`, `undefined`, `boolean`)
70
- - `VibeFormWysiwyg`: toolbar string presets (`'minimal' | 'standard' | 'full'`)
77
+ createApp(App).use(VibeUI).mount('#app')
78
+ ```
71
79
 
72
- **Dependency**: `@floating-ui/dom` added (used by `usePosition`).
80
+ All components register globally. Prefer explicit imports? Tree-shakeable:
73
81
 
74
- ## Advanced Interactivity
82
+ ```ts
83
+ import { VibeButton, VibeModal, VibeCard } from '@velkymx/vibeui'
84
+ ```
75
85
 
76
- VibeUI fully abstracts Bootstrap's JavaScript you don't manually initialize tooltips, modals, or collapses. Touch devices get sensible defaults out of the box.
86
+ > Bootstrap **CSS** is imported by you. Bootstrap **JS** is managed internally - do not import it yourself.
87
+
88
+ ### 30-second taste
77
89
 
78
90
  ```vue
79
91
  <template>
80
- <div>
81
- <!-- Automatic tooltip initialization with touch optimization -->
82
- <VibeTooltip text="I just work!">
83
- <VibeButton>Hover or Tap Me</VibeButton>
84
- </VibeTooltip>
85
-
86
- <!-- Or as a directive (v0.9) -->
87
- <VibeButton v-vibe-tooltip="'Inline tooltip'">Save</VibeButton>
88
-
89
- <!-- Full v-model support for Modals with Android back button support -->
90
- <VibeModal v-model="showModal" title="Hello!">
91
- Fully reactive, automated, and hybrid-ready.
92
- </VibeModal>
93
- </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>
94
101
  </template>
95
102
  ```
96
103
 
97
- ## Smart Forms
98
-
99
- VibeUI handles accessibility and IDs for you.
104
+ Forms wire their own accessibility:
100
105
 
101
106
  ```vue
102
107
  <template>
103
- <!-- No IDs required! Labels are automatically linked -->
108
+ <!-- No id needed - label, control, and feedback linked automatically -->
104
109
  <VibeFormGroup label="Email Address">
105
- <VibeFormInput v-model="email" type="email" />
110
+ <VibeFormInput v-model="fields.email" type="email" />
106
111
  </VibeFormGroup>
107
-
108
- <VibeInputGroup prepend="@">
109
- <VibeFormInput v-model="username" noWrapper />
110
- </VibeInputGroup>
111
-
112
- <!-- New in v0.9: useForm composable for multi-field state -->
113
- <script setup>
114
- import { useForm, validators } from '@velkymx/vibeui'
115
- const { fields, errors, validate, isDirty } = useForm({ name: '', email: '' })
116
- </script>
117
112
  </template>
118
113
  ```
119
114
 
120
- ## Toasts (v0.9 service form)
115
+ Toasts from anywhere:
121
116
 
122
117
  ```ts
123
118
  import { useToast } from '@velkymx/vibeui'
124
-
125
119
  const toast = useToast()
126
120
  toast.success('Saved')
127
121
  toast.error('Network error', { delay: 8000 })
128
122
  ```
129
123
 
130
- Mount `<VibeToastHost />` once at the root and dispatch from anywhere.
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. |
131
137
 
132
138
  ## Components
133
139
 
134
- VibeUI ships every major Bootstrap 5.3 component plus an interaction suite (drag/drop, sortable, resizable, slider, calendar) that fills the gap left by jQuery UI.
140
+ 60+ components covering Bootstrap 5.3 plus an interaction and data-viz suite.
135
141
 
136
142
  ### Layout
137
143
 
138
- | Component | Description |
139
- |-----------|-------------|
140
- | `VibeContainer` | Bootstrap container w/ breakpoints |
141
- | `VibeRow` | Grid row |
142
- | `VibeCol` | Grid column |
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) |
143
149
 
144
150
  ### Core
145
151
 
146
- | Component | Doc |
147
- |-----------|-----|
148
- | `VibeAlert` | [docs](./docs/components/core/alert.md) |
149
- | `VibeBadge` | [docs](./docs/components/core/badge.md) |
150
- | `VibeButton` | [docs](./docs/components/core/button.md) |
151
- | `VibeButtonGroup` | [docs](./docs/components/core/button-group.md) |
152
- | `VibeCloseButton` | [docs](./docs/components/core/close-button.md) |
153
- | `VibeIcon` | Bootstrap-icons wrapper |
154
- | `VibeLink` | [docs](./docs/components/core/link.md) |
155
- | `VibePlaceholder` | [docs](./docs/components/core/placeholder.md) |
156
- | `VibeSkeleton` *(v0.9)* | [docs](./docs/components/core/skeleton.md) |
157
- | `VibeSpinner` | [docs](./docs/components/core/spinner.md) |
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) |
158
164
 
159
165
  ### Navigation
160
166
 
161
- | Component | Doc |
162
- |-----------|-----|
163
- | `VibeBreadcrumb` | [docs](./docs/components/navigation/breadcrumb.md) |
164
- | `VibeNav` | [docs](./docs/components/navigation/nav.md) |
165
- | `VibeNavbar` (+ `Brand`, `Toggle`, `Nav`) | [docs](./docs/components/navigation/navbar.md) |
166
- | `VibePagination` | [docs](./docs/components/navigation/pagination.md) |
167
- | `VibeScrollspy` | [docs](./docs/components/advanced/scrollspy.md) |
168
-
169
- ### Layout containers
170
-
171
- | Component | Doc |
172
- |-----------|-----|
173
- | `VibeCard` | [docs](./docs/components/card/card.md) |
174
- | `VibeListGroup` | [docs](./docs/components/list/list-group.md) |
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) |
175
185
 
176
186
  ### Interactive
177
187
 
178
- | Component | Doc |
179
- |-----------|-----|
180
- | `VibeAccordion` | [docs](./docs/components/interactive/accordion.md) |
181
- | `VibeCarousel` | [docs](./docs/components/interactive/carousel.md) |
182
- | `VibeCollapse` | [docs](./docs/components/interactive/collapse.md) |
183
- | `VibeDatePicker` *(v0.9)* | [docs](./docs/components/interactive/date-picker.md) |
184
- | `VibeDraggable` *(v0.9)* | [docs](./docs/components/interactive/draggable.md) |
185
- | `VibeDroppable` *(v0.9)* | [docs](./docs/components/interactive/draggable.md) |
186
- | `VibeDropdown` | [docs](./docs/components/interactive/dropdown.md) |
187
- | `VibeModal` | [docs](./docs/components/interactive/modal.md) |
188
- | `VibeOffcanvas` | [docs](./docs/components/interactive/offcanvas.md) |
189
- | `VibeResizable` *(v0.9)* | [docs](./docs/components/interactive/resizable.md) |
190
- | `VibeSlider` *(v0.9)* | [docs](./docs/components/interactive/slider.md) |
191
- | `VibeSortable` *(v0.9)* | [docs](./docs/components/interactive/sortable.md) |
192
- | `VibeStepper` *(v0.9)* | [docs](./docs/components/interactive/stepper.md) |
193
- | `VibeTabs` / `VibeTab` *(v0.9)* | [docs](./docs/components/interactive/tabs.md) |
194
- | `VibeToast` / `VibeToastHost` *(v0.9)* | [component](./docs/components/interactive/toast.md), [service](./docs/composables/use-toast.md) |
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) |
195
208
 
196
209
  ### Tooltips & Popovers
197
210
 
198
- | Component | Doc |
199
- |-----------|-----|
200
- | `VibePopover` | [docs](./docs/components/advanced/popover.md) |
201
- | `VibeTooltip` | [docs](./docs/components/advanced/tooltip.md) |
202
-
203
- ### Data
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) |
204
215
 
205
- | Component | Doc |
206
- |-----------|-----|
207
- | `VibeDataTable` | [docs](./docs/components/data/datatable.md) |
208
- | `VibeProgress` | [docs](./docs/components/progress/progress.md) |
209
-
210
- ### Forms
216
+ ### Data & Charts
211
217
 
212
- | Component | Doc |
213
- |-----------|-----|
214
- | `VibeAutocomplete` *(v0.9)* | [docs](./docs/forms/autocomplete.md) |
215
- | `VibeFileInput` *(v0.9)* | [docs](./docs/forms/file-input.md) |
216
- | `VibeFormCheckbox` | [docs](./docs/forms/form-checkbox.md) |
217
- | `VibeFormDatepicker` (native) | [docs](./docs/forms/form-datepicker.md) |
218
- | `VibeFormGroup` | [docs](./docs/forms/form-group.md) |
219
- | `VibeFormInput` | [docs](./docs/forms/form-input.md) |
220
- | `VibeFormRadio` | [docs](./docs/forms/form-radio.md) |
221
- | `VibeFormSelect` | [docs](./docs/forms/form-select.md) |
222
- | `VibeFormSpinbutton` | [docs](./docs/forms/form-spinbutton.md) |
223
- | `VibeFormSwitch` | [docs](./docs/forms/form-switch.md) |
224
- | `VibeFormTextarea` | [docs](./docs/forms/form-textarea.md) |
225
- | `VibeFormWysiwyg` | [docs](./docs/forms/form-wysiwyg.md) |
226
- | `VibeInputGroup` | [docs](./docs/forms/input-group.md) |
227
- | Validation rules | [docs](./docs/forms/validation.md) |
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) |
228
225
 
229
- ### Composables
226
+ > Charts are dependency-free, canvas-rendered, and lazy-loaded - no Chart.js or D3.
230
227
 
231
- | Composable | Doc |
232
- |------------|-----|
233
- | `useBackButton` | [docs](./docs/composables/back-button.md) |
234
- | `useBreakpoints` | [docs](./docs/composables/breakpoints.md) |
235
- | `useColorMode` | [docs](./docs/composables/color-mode.md) |
236
- | `useForm` *(v0.9)* | [docs](./docs/composables/use-form.md) |
237
- | `useFormValidation` | [docs](./docs/forms/validation.md) |
238
- | `usePosition` *(v0.9)* | [docs](./docs/composables/use-position.md) |
239
- | `useToast` *(v0.9)* | [docs](./docs/composables/use-toast.md) |
240
-
241
- ### Directives
242
-
243
- | Directive | Doc |
244
- |-----------|-----|
245
- | `v-vibe-tooltip` *(v0.9)* | [docs](./docs/directives/v-tooltip.md) |
246
-
247
- ### Utilities
248
-
249
- | Topic | Doc |
250
- |-------|-----|
251
- | Position utility classes | [docs](./docs/utilities/position.md) |
252
-
253
- ## Full Documentation
254
-
255
- For detailed documentation and examples, visit our [Docs](./docs/README.md).
256
-
257
- ## License
258
-
259
- [MIT License](LICENSE)
260
-
261
- ## TechnoSorcery.com
228
+ ### Forms
262
229
 
263
- Built with by [TechnoSorcery.com](https://technosorcery.com)
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) |
259
+
260
+ ## Directives
261
+
262
+ | Directive | Description | Docs |
263
+ |-----------|-------------|------|
264
+ | `v-vibe-tooltip` | Directive-based tooltip on any element | [docs](./docs/directives/v-tooltip.md) |
265
+
266
+ ## Examples
267
+
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):
269
+
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` |
284
+
285
+ ## Documentation
286
+
287
+ Full API reference: [`docs/`](./docs/README.md)
288
+ LLM-optimized reference: [`llms.txt`](./llms.txt)