@velkymx/vibeui 0.9.0 → 1.1.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/AGENTS.md +44 -0
- package/CLAUDE.md +48 -0
- package/README.md +222 -197
- package/dist/App.vue.d.ts +2 -1
- package/dist/components/HelloWorld.vue.d.ts +2 -1
- package/dist/components/VibeAccordion.vue.d.ts +39 -40
- package/dist/components/VibeAlert.vue.d.ts +21 -37
- package/dist/components/VibeAutocomplete.vue.d.ts +59 -31
- package/dist/components/VibeBadge.vue.d.ts +10 -18
- package/dist/components/VibeBreadcrumb.vue.d.ts +25 -21
- package/dist/components/VibeButton.vue.d.ts +13 -17
- package/dist/components/VibeButtonGroup.vue.d.ts +11 -19
- package/dist/components/VibeCard.vue.d.ts +51 -24
- package/dist/components/VibeCarousel.vue.d.ts +27 -49
- package/dist/components/VibeChartBar.vue.d.ts +61 -0
- package/dist/components/VibeChartLine.vue.d.ts +70 -0
- package/dist/components/VibeChartPie.vue.d.ts +34 -0
- package/dist/components/VibeCloseButton.vue.d.ts +9 -7
- package/dist/components/VibeCol.vue.d.ts +9 -17
- package/dist/components/VibeCollapse.vue.d.ts +24 -32
- package/dist/components/VibeContainer.vue.d.ts +9 -17
- package/dist/components/VibeDataTable.vue.d.ts +122 -63
- package/dist/components/VibeDatePicker.vue.d.ts +4 -6
- package/dist/components/VibeDraggable.vue.d.ts +9 -13
- package/dist/components/VibeDropdown.vue.d.ts +46 -43
- package/dist/components/VibeDroppable.vue.d.ts +9 -13
- package/dist/components/VibeFileInput.vue.d.ts +14 -20
- package/dist/components/VibeFormCheckbox.vue.d.ts +30 -22
- package/dist/components/VibeFormDatepicker.vue.d.ts +27 -30
- package/dist/components/VibeFormErrorSummary.vue.d.ts +17 -0
- package/dist/components/VibeFormGroup.vue.d.ts +10 -13
- package/dist/components/VibeFormInput.vue.d.ts +60 -25
- package/dist/components/VibeFormRadio.vue.d.ts +23 -24
- package/dist/components/VibeFormSelect.vue.d.ts +28 -34
- package/dist/components/VibeFormSpinbutton.vue.d.ts +31 -34
- package/dist/components/VibeFormSwitch.vue.d.ts +22 -23
- package/dist/components/VibeFormTextarea.vue.d.ts +24 -25
- package/dist/components/VibeFormWysiwyg.vue.d.ts +23 -22
- package/dist/components/VibeHero.vue.d.ts +117 -0
- package/dist/components/VibeIcon.vue.d.ts +27 -7
- package/dist/components/VibeInputGroup.vue.d.ts +12 -14
- package/dist/components/VibeLink.vue.d.ts +14 -18
- package/dist/components/VibeListGroup.vue.d.ts +26 -22
- package/dist/components/VibeModal.vue.d.ts +47 -45
- package/dist/components/VibeNav.vue.d.ts +40 -20
- package/dist/components/VibeNavbar.vue.d.ts +12 -19
- package/dist/components/VibeNavbarBrand.vue.d.ts +9 -17
- package/dist/components/VibeNavbarNav.vue.d.ts +52 -33
- package/dist/components/VibeNavbarToggle.vue.d.ts +7 -5
- package/dist/components/VibeOffcanvas.vue.d.ts +28 -43
- package/dist/components/VibePagination.vue.d.ts +38 -29
- package/dist/components/VibePlaceholder.vue.d.ts +9 -17
- package/dist/components/VibePopover.vue.d.ts +17 -40
- package/dist/components/VibeProgress.vue.d.ts +13 -21
- package/dist/components/VibeResizable.vue.d.ts +10 -14
- package/dist/components/VibeRow.vue.d.ts +9 -17
- package/dist/components/VibeScrollspy.vue.d.ts +37 -25
- package/dist/components/VibeSkeleton.vue.d.ts +2 -1
- package/dist/components/VibeSlider.vue.d.ts +4 -5
- package/dist/components/VibeSortable.vue.d.ts +37 -18
- package/dist/components/VibeSpinner.vue.d.ts +4 -7
- package/dist/components/VibeStepper.vue.d.ts +32 -31
- package/dist/components/VibeTab.vue.d.ts +7 -11
- package/dist/components/VibeTabContent.vue.d.ts +13 -31
- package/dist/components/VibeTabs.vue.d.ts +9 -13
- package/dist/components/VibeToast.vue.d.ts +31 -44
- package/dist/components/VibeToastHost.vue.d.ts +2 -1
- package/dist/components/VibeTooltip.vue.d.ts +16 -39
- package/dist/components/chart/chartColors.d.ts +3 -0
- package/dist/components/chart/chartResize.d.ts +2 -0
- package/dist/components/chart/chartTooltip.d.ts +2 -0
- package/dist/components/chart/chartTypes.d.ts +6 -0
- package/dist/components/chart/drawBar.d.ts +5 -0
- package/dist/components/chart/drawLine.d.ts +18 -0
- package/dist/components/chart/drawPie.d.ts +4 -0
- package/dist/components/dndStore.d.ts +1 -0
- package/dist/components/index.d.ts +6 -1
- package/dist/composables/useBreakpoints.d.ts +1 -0
- package/dist/composables/useColorMode.d.ts +1 -1
- package/dist/composables/useId.d.ts +1 -4
- package/dist/directives/vTooltip.d.ts +2 -3
- package/dist/injectionKeys.d.ts +34 -0
- package/dist/purify.es-eYghtX9j.mjs +735 -0
- package/dist/types.d.ts +23 -2
- package/dist/utils/routeKey.d.ts +11 -0
- package/dist/utils/safeCss.d.ts +16 -0
- package/dist/utils/safeHref.d.ts +7 -0
- package/dist/utils/sanitizeHtml.d.ts +13 -0
- package/dist/vibeui.css +2 -1
- package/dist/vibeui.es.js +8527 -5855
- package/dist/vibeui.umd.js +3 -1
- package/docs/README.md +225 -0
- package/docs/components/advanced/popover.md +125 -0
- package/docs/components/advanced/scrollspy.md +106 -0
- package/docs/components/advanced/tooltip.md +90 -0
- package/docs/components/card/card.md +223 -0
- package/docs/components/charts/chart-bar.md +129 -0
- package/docs/components/charts/chart-line.md +136 -0
- package/docs/components/charts/chart-pie.md +102 -0
- package/docs/components/core/alert.md +94 -0
- package/docs/components/core/badge.md +75 -0
- package/docs/components/core/button-group.md +99 -0
- package/docs/components/core/button.md +145 -0
- package/docs/components/core/close-button.md +82 -0
- package/docs/components/core/link.md +79 -0
- package/docs/components/core/placeholder.md +129 -0
- package/docs/components/core/skeleton.md +40 -0
- package/docs/components/core/spinner.md +103 -0
- package/docs/components/data/datatable.md +437 -0
- package/docs/components/hero/hero.md +65 -0
- package/docs/components/interactive/accordion.md +121 -0
- package/docs/components/interactive/carousel.md +112 -0
- package/docs/components/interactive/collapse.md +106 -0
- package/docs/components/interactive/date-picker.md +78 -0
- package/docs/components/interactive/draggable.md +91 -0
- package/docs/components/interactive/dropdown.md +129 -0
- package/docs/components/interactive/modal.md +151 -0
- package/docs/components/interactive/offcanvas.md +92 -0
- package/docs/components/interactive/resizable.md +73 -0
- package/docs/components/interactive/slider.md +57 -0
- package/docs/components/interactive/sortable.md +52 -0
- package/docs/components/interactive/stepper.md +83 -0
- package/docs/components/interactive/tabs.md +66 -0
- package/docs/components/interactive/toast.md +177 -0
- package/docs/components/layout/col.md +117 -0
- package/docs/components/layout/container.md +53 -0
- package/docs/components/layout/row.md +107 -0
- package/docs/components/list/list-group.md +225 -0
- package/docs/components/navigation/breadcrumb.md +120 -0
- package/docs/components/navigation/nav.md +151 -0
- package/docs/components/navigation/navbar.md +114 -0
- package/docs/components/navigation/pagination.md +163 -0
- package/docs/components/progress/progress.md +188 -0
- package/docs/composables/back-button.md +28 -0
- package/docs/composables/breakpoints.md +54 -0
- package/docs/composables/color-mode.md +179 -0
- package/docs/composables/use-form.md +78 -0
- package/docs/composables/use-position.md +68 -0
- package/docs/composables/use-toast.md +91 -0
- package/docs/directives/v-tooltip.md +58 -0
- package/docs/forms/README.md +87 -0
- package/docs/forms/autocomplete.md +96 -0
- package/docs/forms/file-input.md +97 -0
- package/docs/forms/form-checkbox.md +100 -0
- package/docs/forms/form-datepicker.md +80 -0
- package/docs/forms/form-error-summary.md +96 -0
- package/docs/forms/form-group.md +118 -0
- package/docs/forms/form-input.md +140 -0
- package/docs/forms/form-radio.md +82 -0
- package/docs/forms/form-select.md +98 -0
- package/docs/forms/form-spinbutton.md +94 -0
- package/docs/forms/form-switch.md +75 -0
- package/docs/forms/form-textarea.md +82 -0
- package/docs/forms/form-wysiwyg.md +99 -0
- package/docs/forms/input-group.md +70 -0
- package/docs/forms/validation.md +213 -0
- package/docs/getting-started/starter-template.md +136 -0
- package/docs/superpowers/plans/2026-05-12-vibe-charts.md +1999 -0
- package/docs/superpowers/plans/2026-05-29-e2e-browser-testing.md +615 -0
- package/docs/superpowers/specs/2026-05-12-charting-design.md +185 -0
- package/docs/superpowers/specs/2026-05-29-e2e-browser-testing-design.md +168 -0
- package/docs/utilities/position.md +82 -0
- package/docs/versioning.md +57 -0
- package/examples/README.md +201 -0
- package/examples/album.html +262 -0
- package/examples/blog.html +166 -0
- package/examples/carousel.html +114 -0
- package/examples/checkout.html +275 -0
- package/examples/cover.html +89 -0
- package/examples/dashboard.html +156 -0
- package/examples/index.html +129 -0
- package/examples/jumbotron.html +56 -0
- package/examples/mobile-dashboard.html +138 -0
- package/examples/pricing.html +172 -0
- package/examples/product.html +145 -0
- package/examples/sidebars.html +166 -0
- package/examples/sign-in.html +119 -0
- package/examples/starter.html +314 -0
- package/examples/sticky-footer-navbar.html +70 -0
- package/examples/sticky-footer.html +60 -0
- package/examples/test-simple.html +91 -0
- package/llms.txt +801 -0
- package/package.json +44 -14
- package/dist/types/index.d.ts +0 -6
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
|
-
|
|
1
|
+
<div align="center"><img src="https://github.com/velkymx/vibeui/blob/1.0-main/vibeui.png?raw=true">
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://vuejs.org/)
|
|
4
|
+
[](https://getbootstrap.com/)
|
|
5
|
+
[](https://www.typescriptlang.org/)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
[](https://www.npmjs.com/package/@velkymx/vibeui)
|
|
8
|
+
[](https://github.com/velkymx/vibeui/actions/workflows/ci.yml)
|
|
4
9
|
|
|
5
|
-
|
|
10
|
+
</div>
|
|
6
11
|
|
|
7
|
-
|
|
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
|
-
|
|
14
|
+
**The Vue 3 component library for people who already love Bootstrap.**
|
|
16
15
|
|
|
17
|
-
|
|
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
|
-
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
56
|
+
## Quick Start
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
npm install @velkymx/vibeui bootstrap
|
|
40
60
|
```
|
|
41
61
|
|
|
42
|
-
|
|
62
|
+
Optional peers (only if you use the features that need them):
|
|
43
63
|
|
|
44
|
-
|
|
64
|
+
```bash
|
|
65
|
+
npm install bootstrap-icons # VibeIcon
|
|
66
|
+
npm install quill dompurify # VibeFormWysiwyg (dompurify sanitizes editor HTML)
|
|
67
|
+
```
|
|
45
68
|
|
|
46
|
-
|
|
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
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
66
|
-
|
|
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
|
-
|
|
80
|
+
All components register globally. Prefer explicit imports? Tree-shakeable:
|
|
73
81
|
|
|
74
|
-
|
|
82
|
+
```ts
|
|
83
|
+
import { VibeButton, VibeModal, VibeCard } from '@velkymx/vibeui'
|
|
84
|
+
```
|
|
75
85
|
|
|
76
|
-
|
|
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
|
-
|
|
81
|
-
|
|
82
|
-
<
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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` |
|
|
141
|
-
| `VibeRow` |
|
|
142
|
-
| `VibeCol` |
|
|
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 |
|
|
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
|
|
154
|
-
| `VibeLink` | [docs](./docs/components/core/link.md) |
|
|
155
|
-
| `VibePlaceholder` | [docs](./docs/components/core/placeholder.md) |
|
|
156
|
-
| `VibeSkeleton`
|
|
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 |
|
|
162
|
-
|
|
163
|
-
| `VibeBreadcrumb` | [docs](./docs/components/navigation/breadcrumb.md) |
|
|
164
|
-
| `VibeNav` | [docs](./docs/components/navigation/nav.md) |
|
|
165
|
-
| `VibeNavbar`
|
|
166
|
-
| `
|
|
167
|
-
| `
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
|
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 |
|
|
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`
|
|
184
|
-
| `VibeDraggable`
|
|
185
|
-
| `VibeDroppable`
|
|
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`
|
|
190
|
-
| `VibeSlider`
|
|
191
|
-
| `VibeSortable`
|
|
192
|
-
| `VibeStepper`
|
|
193
|
-
| `VibeTabs`
|
|
194
|
-
| `
|
|
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 |
|
|
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
|
-
|
|
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 |
|
|
213
|
-
|
|
214
|
-
| `
|
|
215
|
-
| `
|
|
216
|
-
| `
|
|
217
|
-
| `
|
|
218
|
-
| `
|
|
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
|
-
|
|
226
|
+
> Charts are dependency-free, canvas-rendered, and lazy-loaded - no Chart.js or D3.
|
|
230
227
|
|
|
231
|
-
|
|
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
|
-
|
|
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)
|
package/dist/App.vue.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
declare const
|
|
1
|
+
declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
2
3
|
export default _default;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
type __VLS_Props = {
|
|
2
2
|
msg: string;
|
|
3
3
|
};
|
|
4
|
-
declare const
|
|
4
|
+
declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
5
|
+
declare const _default: typeof __VLS_export;
|
|
5
6
|
export default _default;
|