@appsbd/vue3-appsbd-ui 1.0.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/.ai/ai_ref_AbAvatar.md +43 -0
- package/.ai/ai_ref_AbBadge.md +44 -0
- package/.ai/ai_ref_AbButton.md +71 -0
- package/.ai/ai_ref_AbCard.md +53 -0
- package/.ai/ai_ref_AbCarousel.md +47 -0
- package/.ai/ai_ref_AbColorPicker.md +55 -0
- package/.ai/ai_ref_AbConfirmPopover.md +59 -0
- package/.ai/ai_ref_AbCustomField.md +74 -0
- package/.ai/ai_ref_AbDarkModeToggler.md +42 -0
- package/.ai/ai_ref_AbDateTimePicker.md +105 -0
- package/.ai/ai_ref_AbEasyModal.md +62 -0
- package/.ai/ai_ref_AbField.md +93 -0
- package/.ai/ai_ref_AbFileUploader.md +63 -0
- package/.ai/ai_ref_AbFilterPanel.md +71 -0
- package/.ai/ai_ref_AbFormCheck.md +75 -0
- package/.ai/ai_ref_AbImageRadioInput.md +63 -0
- package/.ai/ai_ref_AbInputField.md +71 -0
- package/.ai/ai_ref_AbInputTag.md +73 -0
- package/.ai/ai_ref_AbKbd.md +35 -0
- package/.ai/ai_ref_AbKbdGroup.md +33 -0
- package/.ai/ai_ref_AbModal.md +103 -0
- package/.ai/ai_ref_AbMultiSelect.md +108 -0
- package/.ai/ai_ref_AbNumberField.md +84 -0
- package/.ai/ai_ref_AbPinInput.md +45 -0
- package/.ai/ai_ref_AbPopover.md +64 -0
- package/.ai/ai_ref_AbPricingCard.md +64 -0
- package/.ai/ai_ref_AbPricingContainer.md +49 -0
- package/.ai/ai_ref_AbPricingTable.md +72 -0
- package/.ai/ai_ref_AbProgressbar.md +37 -0
- package/.ai/ai_ref_AbScrollbar.md +48 -0
- package/.ai/ai_ref_AbSettingsForm.md +54 -0
- package/.ai/ai_ref_AbSideMenuItem.md +58 -0
- package/.ai/ai_ref_AbSidebar.md +70 -0
- package/.ai/ai_ref_AbSkeleton.md +41 -0
- package/.ai/ai_ref_AbSlider.md +71 -0
- package/.ai/ai_ref_AbTab.md +38 -0
- package/.ai/ai_ref_AbTable.md +59 -0
- package/.ai/ai_ref_AbTabs.md +47 -0
- package/.ai/ai_ref_AbToggle.md +65 -0
- package/.ai/ai_ref_AbTooltip.md +53 -0
- package/.ai/ai_ref_AbWizard.md +77 -0
- package/.ai/ai_ref_AbWizardStep.md +48 -0
- package/.ai/ai_ref_global_config.md +66 -0
- package/.ai/ltr-after.png +0 -0
- package/.ai/rtl-after.png +0 -0
- package/.ai/rtl-before.png +0 -0
- package/AI_REFERENCE.md +1178 -0
- package/dist/skins/_prefix.scss +1 -0
- package/dist/skins/black.css +1 -0
- package/dist/skins/black.scss +3 -0
- package/dist/skins/cyan.css +1 -0
- package/dist/skins/cyan.scss +3 -0
- package/dist/skins/default.css +1 -0
- package/dist/skins/default.scss +5 -0
- package/dist/skins/gray.css +1 -0
- package/dist/skins/gray.scss +3 -0
- package/dist/skins/green.css +1 -0
- package/dist/skins/green.scss +5 -0
- package/dist/skins/orange.css +1 -0
- package/dist/skins/orange.scss +3 -0
- package/dist/skins/pink.css +1 -0
- package/dist/skins/pink.scss +3 -0
- package/dist/skins/purple.css +1 -0
- package/dist/skins/purple.scss +3 -0
- package/dist/skins/red.css +1 -0
- package/dist/skins/red.scss +3 -0
- package/dist/skins/themes/_black.scss +6 -0
- package/dist/skins/themes/_blue.scss +43 -0
- package/dist/skins/themes/_common_variable.scss +589 -0
- package/dist/skins/themes/_cyan.scss +6 -0
- package/dist/skins/themes/_gray.scss +6 -0
- package/dist/skins/themes/_green.scss +6 -0
- package/dist/skins/themes/_grid.scss +27 -0
- package/dist/skins/themes/_orange.scss +6 -0
- package/dist/skins/themes/_pink.scss +6 -0
- package/dist/skins/themes/_purple.scss +6 -0
- package/dist/skins/themes/_red.scss +6 -0
- package/dist/skins/themes/_violet.scss +6 -0
- package/dist/skins/violet.css +1 -0
- package/dist/skins/violet.scss +3 -0
- package/dist/style.css +1 -0
- package/dist/vue3-appsbd-ui.cjs.js +201 -0
- package/dist/vue3-appsbd-ui.es.js +9294 -0
- package/package.json +60 -0
- package/readme.md +136 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# AbMultiSelect — AI Reference
|
|
2
|
+
|
|
3
|
+
Searchable single/multi/tag select. Custom built-in replacement for `@vueform/multiselect` — no third-party theme CSS required.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Globally registered by the plugin.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```vue
|
|
12
|
+
<template>
|
|
13
|
+
<!-- Single select -->
|
|
14
|
+
<ab-multi-select
|
|
15
|
+
v-model="country"
|
|
16
|
+
name="country"
|
|
17
|
+
label="Country"
|
|
18
|
+
:options="countries"
|
|
19
|
+
label-key="title"
|
|
20
|
+
value-key="val"
|
|
21
|
+
searchable
|
|
22
|
+
/>
|
|
23
|
+
|
|
24
|
+
<!-- Multiple -->
|
|
25
|
+
<ab-multi-select
|
|
26
|
+
v-model="skills"
|
|
27
|
+
name="skills"
|
|
28
|
+
label="Skills"
|
|
29
|
+
mode="multiple"
|
|
30
|
+
:options="skillOptions"
|
|
31
|
+
:max="5"
|
|
32
|
+
/>
|
|
33
|
+
|
|
34
|
+
<!-- Tags mode -->
|
|
35
|
+
<ab-multi-select v-model="hashtags" name="hashtags" mode="tags" searchable />
|
|
36
|
+
|
|
37
|
+
<!-- AJAX search -->
|
|
38
|
+
<ab-multi-select
|
|
39
|
+
v-model="user"
|
|
40
|
+
name="user"
|
|
41
|
+
is-ajax-search
|
|
42
|
+
searchable
|
|
43
|
+
:on-search="searchUsers"
|
|
44
|
+
:loading="isSearching"
|
|
45
|
+
/>
|
|
46
|
+
</template>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Props
|
|
50
|
+
|
|
51
|
+
| Name | Type | Default | Description |
|
|
52
|
+
| --- | --- | --- | --- |
|
|
53
|
+
| `modelValue` | `any` | `null` | v-model value. |
|
|
54
|
+
| `label` | `String` | `""` | Field label. |
|
|
55
|
+
| `placeholder` | `String` | `""` | Placeholder text. |
|
|
56
|
+
| `type` | `String` | `"text"` | Input type. |
|
|
57
|
+
| `name` | `String` | **required** | VeeValidate field name. |
|
|
58
|
+
| `rules` | `String \| Object` | `""` | VeeValidate rules. |
|
|
59
|
+
| `containerClass` | `String` | `"mb-3"` | Wrapper class. |
|
|
60
|
+
| `hints` | `String` | `""` | Helper text. |
|
|
61
|
+
| `multiple` | `Boolean` | `false` | Deprecated — use `mode` instead. |
|
|
62
|
+
| `searchable` | `Boolean` | `false` | Enable option search/filter. |
|
|
63
|
+
| `mode` | `String` | `"single"` | `single`, `multiple`, or `tags`. |
|
|
64
|
+
| `size` | `String` | `"md"` | Adjusts component size (`xs`, `sm`, `md`, `lg`, `xl`, `xxl`). |
|
|
65
|
+
| `options` | `Array` | `[]` | Available options. |
|
|
66
|
+
| `labelKey` | `String` | `"title"` | Property to use for label. |
|
|
67
|
+
| `valueKey` | `String` | `"val"` | Property to use for value. |
|
|
68
|
+
| `max` | `Number` | `-1` | Max selections; `-1` = unlimited. |
|
|
69
|
+
| `object` | `Boolean` | `false` | Return full objects instead of values. |
|
|
70
|
+
| `prefix` | `String` | `""` | Prefix text. |
|
|
71
|
+
| `postfix` | `String` | `""` | Postfix text. |
|
|
72
|
+
| `isAjaxSearch` | `Boolean` | `false` | Enable async search via `onSearch`. |
|
|
73
|
+
| `onSearch` | `Function` | `null` | Async handler `(query) => Promise<options>`. |
|
|
74
|
+
| `hideSelected` | `Boolean` | `true` | Hide already-selected items from dropdown. |
|
|
75
|
+
| `loading` | `Boolean` | `false` | Show a loading spinner. |
|
|
76
|
+
| `disabled` | `Boolean` | `false` | Disable the field. |
|
|
77
|
+
| `appendToBody` | `Boolean` | `true` | Teleport the dropdown to `<body>`. |
|
|
78
|
+
| `isLeftIconBorder` | `Boolean` | `false` | Border on prefix icon. |
|
|
79
|
+
| `isRightIconBorder` | `Boolean` | `false` | Border on postfix icon. |
|
|
80
|
+
|
|
81
|
+
## Events
|
|
82
|
+
|
|
83
|
+
| Event | Payload | Description |
|
|
84
|
+
| --- | --- | --- |
|
|
85
|
+
| `update:modelValue` | `value` | v-model sync. |
|
|
86
|
+
| `clear` | — | Selection cleared. |
|
|
87
|
+
| `change` | `value` | Value changed. |
|
|
88
|
+
| `select` | `value` | An option was selected. |
|
|
89
|
+
| `open` | — | Dropdown opened. |
|
|
90
|
+
| `close` | — | Dropdown closed. |
|
|
91
|
+
| `search-change` | `query` | Search input changed. |
|
|
92
|
+
|
|
93
|
+
## Slots
|
|
94
|
+
|
|
95
|
+
| Name | Scope | Description |
|
|
96
|
+
| --- | --- | --- |
|
|
97
|
+
| `label` | — | Custom label. |
|
|
98
|
+
| `prefix` | — | Prefix slot. |
|
|
99
|
+
| `postfix` | — | Postfix slot. |
|
|
100
|
+
| `singlelabel` | `value` | Custom single-mode label rendering. |
|
|
101
|
+
| `option` | `{ option, isSelected }` | Custom option rendering. |
|
|
102
|
+
| `noresults` | — | Empty state content. |
|
|
103
|
+
| `option-loading` | — | Loading message. |
|
|
104
|
+
| `loader-icon` | — | Custom loader icon. |
|
|
105
|
+
|
|
106
|
+
## v-model
|
|
107
|
+
|
|
108
|
+
Yes.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# AbNumberField — AI Reference
|
|
2
|
+
|
|
3
|
+
Numeric input with built-in minus/plus buttons, min/max clamping, custom step, and VeeValidate integration. Renders as a seamless pill by default; pass `is-border` to show the internal dividers between the buttons and the input.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Globally registered by the plugin. Peer dependencies: `vee-validate`, `@vee-validate/rules`, `lucide-vue-next` (for the plus/minus icons).
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```vue
|
|
12
|
+
<template>
|
|
13
|
+
<ab-number-field
|
|
14
|
+
v-model="qty"
|
|
15
|
+
name="quantity"
|
|
16
|
+
label="Quantity"
|
|
17
|
+
:min="1"
|
|
18
|
+
:max="10"
|
|
19
|
+
:step="1"
|
|
20
|
+
hints="Clamped between 1 and 10"
|
|
21
|
+
/>
|
|
22
|
+
</template>
|
|
23
|
+
|
|
24
|
+
<script setup>
|
|
25
|
+
import { ref } from 'vue';
|
|
26
|
+
const qty = ref(1);
|
|
27
|
+
</script>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Bordered variant (inner borders around buttons):
|
|
31
|
+
|
|
32
|
+
```vue
|
|
33
|
+
<ab-number-field
|
|
34
|
+
v-model="qty"
|
|
35
|
+
name="quantity"
|
|
36
|
+
label="Quantity"
|
|
37
|
+
is-border
|
|
38
|
+
/>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Props
|
|
42
|
+
|
|
43
|
+
| Name | Type | Default | Description |
|
|
44
|
+
| --- | --- | --- | --- |
|
|
45
|
+
| `modelValue` | `any` | `null` | Two-way-bound numeric value. |
|
|
46
|
+
| `label` | `String` | `""` | Field label. |
|
|
47
|
+
| `placeholder` | `String` | `""` | Input placeholder. |
|
|
48
|
+
| `name` | `String` | **required** | VeeValidate field name. |
|
|
49
|
+
| `rules` | `String \| Object` | `""` | VeeValidate rules. |
|
|
50
|
+
| `containerClass` | `String` | `"mb-3"` | Class on the wrapper `<div>`. |
|
|
51
|
+
| `hints` | `String` | `""` | Helper text beneath the input. |
|
|
52
|
+
| `prefix` | `String` | `""` | Prefix text/icon (shortcut for `#prefix` slot). |
|
|
53
|
+
| `postfix` | `String` | `""` | Postfix text/icon. |
|
|
54
|
+
| `min` | `Number \| String` | `null` | Minimum allowed value. Clamps input and disables the minus button at the floor. |
|
|
55
|
+
| `max` | `Number \| String` | `null` | Maximum allowed value. Clamps input and disables the plus button at the ceiling. |
|
|
56
|
+
| `step` | `Number \| String` | `1` | Increment/decrement amount. |
|
|
57
|
+
| `showButtons` | `Boolean` | `true` | Render the minus/plus controls. |
|
|
58
|
+
| `disabled` | `Boolean` | `false` | Disable the field and both buttons. |
|
|
59
|
+
| `isBorder` | `Boolean` | `false` | Show inner borders between minus/input/plus. Default is a seamless pill. |
|
|
60
|
+
| `isLeftIconBorder` | `Boolean` | `false` | Render border between the prefix icon and the input. |
|
|
61
|
+
| `isRightIconBorder` | `Boolean` | `false` | Render border between the postfix icon and the input. |
|
|
62
|
+
|
|
63
|
+
## Events
|
|
64
|
+
|
|
65
|
+
| Event | Payload | Description |
|
|
66
|
+
| --- | --- | --- |
|
|
67
|
+
| `update:modelValue` | `number \| null` | v-model sync. |
|
|
68
|
+
| `input` | `number` | Fired on input after clamping. |
|
|
69
|
+
| `keyup` | `KeyboardEvent` | Forwarded native event. |
|
|
70
|
+
| `keydown` | `KeyboardEvent` | Forwarded native event. |
|
|
71
|
+
| `paste` | `ClipboardEvent` | Forwarded native event. |
|
|
72
|
+
|
|
73
|
+
## Slots
|
|
74
|
+
|
|
75
|
+
| Name | Description |
|
|
76
|
+
| --- | --- |
|
|
77
|
+
| `label` | Custom label content. |
|
|
78
|
+
| `prefix` | Prefix icon / text (rendered before the minus button). |
|
|
79
|
+
| `postfix` | Postfix icon / text (rendered after the plus button). |
|
|
80
|
+
| `hints` | Helper text (overrides `hints` prop). |
|
|
81
|
+
|
|
82
|
+
## v-model
|
|
83
|
+
|
|
84
|
+
Yes — `modelValue` + `update:modelValue`. Value is `number` after clamping, or `null` when the user clears the input.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# AbPinInput — AI Reference
|
|
2
|
+
|
|
3
|
+
Segmented PIN / OTP entry input. Renders `length` single-character boxes, optionally split into groups with a separator.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Globally registered by the plugin.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```vue
|
|
12
|
+
<template>
|
|
13
|
+
<ab-pin-input v-model="pin" :length="6" :group-size="3" show-separator />
|
|
14
|
+
<p v-if="pin.length === 6">Entered: {{ pin }}</p>
|
|
15
|
+
</template>
|
|
16
|
+
|
|
17
|
+
<script setup>
|
|
18
|
+
import { ref } from 'vue';
|
|
19
|
+
const pin = ref('');
|
|
20
|
+
</script>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Props
|
|
24
|
+
|
|
25
|
+
| Name | Type | Default | Description |
|
|
26
|
+
| --- | --- | --- | --- |
|
|
27
|
+
| `modelValue` | `String` | — | Two-way-bound PIN string. |
|
|
28
|
+
| `length` | `Number` | `6` | Number of digit boxes. |
|
|
29
|
+
| `size` | `String` | `"md"` | Size: `sm`, `md`, `lg`. |
|
|
30
|
+
| `showSeparator` | `Boolean` | `false` | Render a separator between groups. |
|
|
31
|
+
| `groupSize` | `Number` | `3` | Digits per group when `showSeparator` is true. |
|
|
32
|
+
|
|
33
|
+
## Events
|
|
34
|
+
|
|
35
|
+
| Event | Payload | Description |
|
|
36
|
+
| --- | --- | --- |
|
|
37
|
+
| `update:modelValue` | `pin` | v-model sync on every input change. |
|
|
38
|
+
|
|
39
|
+
## Slots
|
|
40
|
+
|
|
41
|
+
None.
|
|
42
|
+
|
|
43
|
+
## v-model
|
|
44
|
+
|
|
45
|
+
Yes.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# AbPopover — AI Reference
|
|
2
|
+
|
|
3
|
+
Dependency-free interactive popover with click, hover, focus, touch, or manual triggers. Content slot receives imperative `close`, `hide`, `show`, and `toggle` helpers.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Globally registered by the plugin.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```vue
|
|
12
|
+
<template>
|
|
13
|
+
<ab-popover placement="bottom" trigger="click">
|
|
14
|
+
<ab-button class="btn-primary">Menu</ab-button>
|
|
15
|
+
<template #content="{ close }">
|
|
16
|
+
<div class="popover-menu">
|
|
17
|
+
<button @click="edit(); close()">Edit</button>
|
|
18
|
+
<button @click="duplicate(); close()">Duplicate</button>
|
|
19
|
+
<button class="text-danger" @click="remove(); close()">Delete</button>
|
|
20
|
+
</div>
|
|
21
|
+
</template>
|
|
22
|
+
</ab-popover>
|
|
23
|
+
|
|
24
|
+
<!-- Hover + focus triggers -->
|
|
25
|
+
<ab-popover :trigger="['hover', 'focus']" placement="top">
|
|
26
|
+
<span>Hover me</span>
|
|
27
|
+
<template #content>Rich popover content</template>
|
|
28
|
+
</ab-popover>
|
|
29
|
+
</template>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Props
|
|
33
|
+
|
|
34
|
+
| Name | Type | Default | Description |
|
|
35
|
+
| --- | --- | --- | --- |
|
|
36
|
+
| `placement` | `String` | `"bottom"` | `top`, `bottom`, `left`, `right`, or `auto-*`. |
|
|
37
|
+
| `offset` | `Number \| String` | `8` | Offset from the reference. |
|
|
38
|
+
| `gap` | `Number \| String` | `null` | Gap override (used instead of `offset` when set). |
|
|
39
|
+
| `disabled` | `Boolean` | `false` | Disable the popover. |
|
|
40
|
+
| `arrow` | `Boolean` | `true` | Render the arrow pointer. |
|
|
41
|
+
| `arrowPadding` | `Number` | `4` | Padding between arrow and corner. |
|
|
42
|
+
| `trigger` | `String \| Array` | `"click"` | `click`, `hover`, `focus`, `touch`, `manual`. Space-separated string or array. |
|
|
43
|
+
| `autoHide` | `Boolean` | `true` | Close when clicking outside. |
|
|
44
|
+
| `contentClass` | `String` | `""` | Extra class on the content element. |
|
|
45
|
+
| `referenceSelector` | `String` | `null` | CSS selector inside the trigger to anchor positioning. |
|
|
46
|
+
|
|
47
|
+
## Events
|
|
48
|
+
|
|
49
|
+
| Event | Payload | Description |
|
|
50
|
+
| --- | --- | --- |
|
|
51
|
+
| `update:modelValue` | `visible: Boolean` | Visibility change (supports `v-model`). |
|
|
52
|
+
| `show` | — | Popover shown. |
|
|
53
|
+
| `hide` | — | Popover hidden. |
|
|
54
|
+
|
|
55
|
+
## Slots
|
|
56
|
+
|
|
57
|
+
| Name | Scope | Description |
|
|
58
|
+
| --- | --- | --- |
|
|
59
|
+
| `default` | — | Trigger element. |
|
|
60
|
+
| `content` | `{ close, hide, show, toggle }` | Popover content — receives imperative controls. |
|
|
61
|
+
|
|
62
|
+
## v-model
|
|
63
|
+
|
|
64
|
+
Yes — binds visibility.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# AbPricingCard — AI Reference
|
|
2
|
+
|
|
3
|
+
Single pricing tier card. Use multiple inside `AbPricingContainer` to build a pricing table.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Globally registered by the plugin.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```vue
|
|
12
|
+
<template>
|
|
13
|
+
<ab-pricing-card
|
|
14
|
+
title="Pro"
|
|
15
|
+
amount="49"
|
|
16
|
+
regular-amount="79"
|
|
17
|
+
frequency="/month"
|
|
18
|
+
badge="Popular"
|
|
19
|
+
color="primary"
|
|
20
|
+
variant="highlighted"
|
|
21
|
+
recommended
|
|
22
|
+
:features="[
|
|
23
|
+
{ text: 'Unlimited projects' },
|
|
24
|
+
{ text: 'Priority support' },
|
|
25
|
+
{ text: 'Custom domain', disabled: true },
|
|
26
|
+
]"
|
|
27
|
+
>
|
|
28
|
+
<template #action>
|
|
29
|
+
<ab-button class="btn-primary w-100">Choose Pro</ab-button>
|
|
30
|
+
</template>
|
|
31
|
+
</ab-pricing-card>
|
|
32
|
+
</template>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Props
|
|
36
|
+
|
|
37
|
+
| Name | Type | Default | Description |
|
|
38
|
+
| --- | --- | --- | --- |
|
|
39
|
+
| `title` | `String` | `""` | Tier title. |
|
|
40
|
+
| `amount` | `String \| Number` | `undefined` | Current price. |
|
|
41
|
+
| `regularAmount` | `String \| Number` | `undefined` | Original price (rendered with strikethrough). |
|
|
42
|
+
| `frequency` | `String` | `""` | Billing frequency suffix (e.g. `/month`). |
|
|
43
|
+
| `badge` | `String` | `""` | Badge text (e.g. "Popular"). |
|
|
44
|
+
| `active` | `Boolean` | `false` | Highlight this card as currently active. |
|
|
45
|
+
| `recommended` | `Boolean` | `false` | Show a "Recommended" ribbon. |
|
|
46
|
+
| `color` | `String` | `"primary"` | Color theme (Bootstrap color). |
|
|
47
|
+
| `variant` | `String` | `"default"` | `default`, `minimal`, `highlighted`, `badge-price`. |
|
|
48
|
+
| `features` | `Array` | `[]` | Each `{ text, disabled? }` or a string. |
|
|
49
|
+
|
|
50
|
+
## Events
|
|
51
|
+
|
|
52
|
+
None.
|
|
53
|
+
|
|
54
|
+
## Slots
|
|
55
|
+
|
|
56
|
+
| Name | Scope | Description |
|
|
57
|
+
| --- | --- | --- |
|
|
58
|
+
| `header` | — | Custom header content. |
|
|
59
|
+
| `badge` | — | Custom badge. |
|
|
60
|
+
| `badge-icon` | — | Icon inside the badge. |
|
|
61
|
+
| `price` | — | Custom price section. |
|
|
62
|
+
| `features` | — | Custom features list. |
|
|
63
|
+
| `feature-icon` | `{ feature, index }` | Custom icon per feature row. |
|
|
64
|
+
| `action` | — | CTA button / actions. |
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# AbPricingContainer — AI Reference
|
|
2
|
+
|
|
3
|
+
Layout wrapper for pricing tables. Arranges `AbPricingCard` children in a flex row or responsive grid with optional breakpoint column counts.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Globally registered by the plugin.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```vue
|
|
12
|
+
<template>
|
|
13
|
+
<ab-pricing-container max-width="1100px" gap="1rem" :md-cols="3">
|
|
14
|
+
<template #toggle>
|
|
15
|
+
<ab-toggle v-model="isYearly" name="billing" title="Bill yearly" />
|
|
16
|
+
</template>
|
|
17
|
+
|
|
18
|
+
<ab-pricing-card title="Starter" amount="0" frequency="/mo" :features="[…]" />
|
|
19
|
+
<ab-pricing-card title="Pro" amount="49" frequency="/mo" recommended :features="[…]" />
|
|
20
|
+
<ab-pricing-card title="Team" amount="99" frequency="/mo" :features="[…]" />
|
|
21
|
+
</ab-pricing-container>
|
|
22
|
+
</template>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Props
|
|
26
|
+
|
|
27
|
+
| Name | Type | Default | Description |
|
|
28
|
+
| --- | --- | --- | --- |
|
|
29
|
+
| `width` | `String` | `"100%"` | Container width. |
|
|
30
|
+
| `maxWidth` | `String` | `"1200px"` | Max width. |
|
|
31
|
+
| `gap` | `String` | `"1.5rem"` | Gap between cards. |
|
|
32
|
+
| `justify` | `String` | `"center"` | `justify-content` value. |
|
|
33
|
+
| `align` | `String` | `"stretch"` | `align-items` value. |
|
|
34
|
+
| `columns` | `Number \| String` | `0` | `0` → flex layout, `>0` → CSS grid with that column count. |
|
|
35
|
+
| `smCols` | `Number \| String` | `""` | Columns at sm breakpoint. |
|
|
36
|
+
| `mdCols` | `Number \| String` | `""` | Columns at md breakpoint. |
|
|
37
|
+
| `lgCols` | `Number \| String` | `""` | Columns at lg breakpoint. |
|
|
38
|
+
| `itemWidth` | `String` | `""` | Per-card width override (exposed as CSS custom property). |
|
|
39
|
+
|
|
40
|
+
## Events
|
|
41
|
+
|
|
42
|
+
None.
|
|
43
|
+
|
|
44
|
+
## Slots
|
|
45
|
+
|
|
46
|
+
| Name | Description |
|
|
47
|
+
| --- | --- |
|
|
48
|
+
| `toggle` | Optional toggle area (e.g. monthly/yearly switch) rendered above the cards. |
|
|
49
|
+
| `default` | `<ab-pricing-card>` children. |
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# AbPricingTable — AI Reference
|
|
2
|
+
|
|
3
|
+
The `AbPricingTable` component renders a stylized, responsive pricing table. It displays a list of features on the left side and multiple package tiers on the right side. It is designed to consume structured JSON data for features and packages and handles the layout and responsive reflowing automatically.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
No extra dependencies are required. The component is globally registered by the library plugin.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```vue
|
|
12
|
+
<script setup>
|
|
13
|
+
import { computed } from 'vue'
|
|
14
|
+
|
|
15
|
+
const features = [
|
|
16
|
+
{ key: "links", title: "All limited links" },
|
|
17
|
+
{ key: "analytics", title: "Own analytics platform" }
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
const packages = computed(() => {
|
|
21
|
+
return [
|
|
22
|
+
{
|
|
23
|
+
id: "p1",
|
|
24
|
+
name: "Intro",
|
|
25
|
+
price: 19,
|
|
26
|
+
regularPrice: 24,
|
|
27
|
+
badge: "Save 20%",
|
|
28
|
+
features: { links: "Y", analytics: "Y" },
|
|
29
|
+
showButton: true,
|
|
30
|
+
buttonText: "Choose Plan",
|
|
31
|
+
isActive: false
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
})
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<template>
|
|
38
|
+
<ab-pricing-table
|
|
39
|
+
:features="features"
|
|
40
|
+
:packages="packages"
|
|
41
|
+
@select-package="(pkg) => console.log('Selected:', pkg)"
|
|
42
|
+
/>
|
|
43
|
+
</template>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Props
|
|
47
|
+
|
|
48
|
+
| Name | Type | Default | Description |
|
|
49
|
+
| ---- | ---- | ------- | ----------- |
|
|
50
|
+
| `features` | Array | `**required**` | Array of feature definitions. Example: `{ key: "chat", title: "Chat support" }`. |
|
|
51
|
+
| `packages` | Array | `**required**` | Array of package configurations. Supports price, regularPrice, badge, features (Y/N map), and button options. |
|
|
52
|
+
|
|
53
|
+
## Events
|
|
54
|
+
|
|
55
|
+
| Event | Payload | Description |
|
|
56
|
+
| ----- | ------- | ----------- |
|
|
57
|
+
| `select-package` | `(packageObject)` | Emitted when a package's action button is clicked. |
|
|
58
|
+
|
|
59
|
+
## Slots
|
|
60
|
+
|
|
61
|
+
| Slot Name | Props | Description |
|
|
62
|
+
| --------- | ----- | ----------- |
|
|
63
|
+
| `features-header` | None | Replaces the header in the left-hand features column. |
|
|
64
|
+
| `feature-label` | `{ feature }` | Customizes how the feature name is displayed in the features list. |
|
|
65
|
+
| `package-badge` | `{ pkg }` | Customizes the badge at the top of the package card. |
|
|
66
|
+
| `package-header` | `{ pkg }` | Customizes the top section of the package card (name and pricing info). |
|
|
67
|
+
| `package-feature` | `{ pkg, feature }` | Replaces the default check/cross icon rendering for a feature row in a package. |
|
|
68
|
+
| `package-footer` | `{ pkg }` | Customizes the footer area (usually contains the action button). |
|
|
69
|
+
|
|
70
|
+
## v-model
|
|
71
|
+
|
|
72
|
+
No — use the `@select-package` event to handle user selection.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# AbProgressbar — AI Reference
|
|
2
|
+
|
|
3
|
+
Animated Bootstrap-style progress bar with multiple color and size variants. Accepts a custom label via the default slot.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Globally registered by the plugin.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```vue
|
|
12
|
+
<template>
|
|
13
|
+
<ab-progressbar :progress-value="75" color="success" size="lg">
|
|
14
|
+
75%
|
|
15
|
+
</ab-progressbar>
|
|
16
|
+
</template>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Props
|
|
20
|
+
|
|
21
|
+
| Name | Type | Default | Description |
|
|
22
|
+
| --- | --- | --- | --- |
|
|
23
|
+
| `minValue` | `Number` | `0` | Minimum value (used for ARIA attributes). |
|
|
24
|
+
| `maxValue` | `Number` | `100` | Maximum value. |
|
|
25
|
+
| `progressValue` | `Number` | `0` | Current value — typically `0–100`. |
|
|
26
|
+
| `color` | `String` | `"primary"` | One of: `primary`, `secondary`, `success`, `danger`, `info`, `warning`. |
|
|
27
|
+
| `size` | `String` | `"md"` | One of: `xs`, `sm`, `md`, `lg`, `xl`, `xxl`. |
|
|
28
|
+
|
|
29
|
+
## Events
|
|
30
|
+
|
|
31
|
+
None.
|
|
32
|
+
|
|
33
|
+
## Slots
|
|
34
|
+
|
|
35
|
+
| Name | Description |
|
|
36
|
+
| --- | --- |
|
|
37
|
+
| `default` | Custom label rendered alongside the bar. The CSS custom property `--progress-value` is exposed for advanced positioning. |
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# AbScrollbar — AI Reference
|
|
2
|
+
|
|
3
|
+
Styled custom scrollbar wrapper for overflowing content. Emits scroll position events and supports hover-expand.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Globally registered by the plugin.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```vue
|
|
12
|
+
<template>
|
|
13
|
+
<ab-scrollbar
|
|
14
|
+
size="md"
|
|
15
|
+
is-hover-increase
|
|
16
|
+
@scroll-end="loadMore"
|
|
17
|
+
>
|
|
18
|
+
<div style="height: 2000px">
|
|
19
|
+
<!-- long content -->
|
|
20
|
+
</div>
|
|
21
|
+
</ab-scrollbar>
|
|
22
|
+
</template>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Props
|
|
26
|
+
|
|
27
|
+
| Name | Type | Default | Description |
|
|
28
|
+
| --- | --- | --- | --- |
|
|
29
|
+
| `size` | `String` | `"md"` | `sm` (4px), `md` (6px), `lg` (8px). |
|
|
30
|
+
| `isHoverIncrease` | `Boolean` | `false` | Expand scrollbar on hover. |
|
|
31
|
+
| `transparentTrack` | `Boolean` | `true` | Transparent track background. |
|
|
32
|
+
| `showAlways` | `Boolean` | `false` | Always show the scrollbar (vs auto-hide). |
|
|
33
|
+
|
|
34
|
+
## Events
|
|
35
|
+
|
|
36
|
+
Each event payload is an object with `scrollTop`, `scrollHeight`, `scrollRatio`, `scrollPercentage`, and related fields.
|
|
37
|
+
|
|
38
|
+
| Event | Description |
|
|
39
|
+
| --- | --- |
|
|
40
|
+
| `scroll` | Fires on every scroll event. |
|
|
41
|
+
| `scroll-start` | Fires when scrolled to the top. |
|
|
42
|
+
| `scroll-end` | Fires when scrolled to the bottom. |
|
|
43
|
+
|
|
44
|
+
## Slots
|
|
45
|
+
|
|
46
|
+
| Name | Description |
|
|
47
|
+
| --- | --- |
|
|
48
|
+
| `default` | Scrollable content. |
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# AbSettingsForm — AI Reference
|
|
2
|
+
|
|
3
|
+
Composite settings-style form layout. When nested inside an `AbWizardStep` / `AbWizard`, auto-registers itself as the wizard step's validator — returning `false` from `onSubmit` blocks the wizard from advancing.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Globally registered by the plugin.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```vue
|
|
12
|
+
<template>
|
|
13
|
+
<ab-wizard @finished="handleFinished">
|
|
14
|
+
<ab-wizard-step title="Profile">
|
|
15
|
+
<ab-settings-form :on-submit="validateProfile">
|
|
16
|
+
<ab-input-field v-model="form.name" name="name" label="Name" rules="required" />
|
|
17
|
+
<ab-input-field v-model="form.email" name="email" label="Email" rules="required|email" />
|
|
18
|
+
</ab-settings-form>
|
|
19
|
+
</ab-wizard-step>
|
|
20
|
+
|
|
21
|
+
<ab-wizard-step title="Preferences">
|
|
22
|
+
<ab-settings-form>
|
|
23
|
+
<ab-toggle v-model="form.emails" name="emails" title="Email me updates" />
|
|
24
|
+
</ab-settings-form>
|
|
25
|
+
</ab-wizard-step>
|
|
26
|
+
</ab-wizard>
|
|
27
|
+
</template>
|
|
28
|
+
|
|
29
|
+
<script setup>
|
|
30
|
+
async function validateProfile(values) {
|
|
31
|
+
if (!(await api.checkEmail(values.email))) return false; // blocks next
|
|
32
|
+
}
|
|
33
|
+
</script>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Props
|
|
37
|
+
|
|
38
|
+
| Name | Type | Default | Description |
|
|
39
|
+
| --- | --- | --- | --- |
|
|
40
|
+
| `onSubmit` | `Function` | `() => {}` | Called with form values on submit. Return `false` (or throw) to block wizard progression. |
|
|
41
|
+
|
|
42
|
+
## Events
|
|
43
|
+
|
|
44
|
+
None at the component level — form submission is handled via the `onSubmit` prop.
|
|
45
|
+
|
|
46
|
+
## Slots
|
|
47
|
+
|
|
48
|
+
| Name | Description |
|
|
49
|
+
| --- | --- |
|
|
50
|
+
| `default` | Form fields. |
|
|
51
|
+
|
|
52
|
+
## Notes
|
|
53
|
+
|
|
54
|
+
Standalone use (outside a wizard) is supported — the component works as a plain VeeValidate `<Form>` wrapper.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# AbSideMenuItem — AI Reference
|
|
2
|
+
|
|
3
|
+
Single entry in an `AbSidebar`. Can render as a router-link, a plain anchor, a section title, or a parent node with a submenu.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Globally registered by the plugin.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```vue
|
|
12
|
+
<!-- Router-link item -->
|
|
13
|
+
<ab-side-menu-item :to="{ name: 'dashboard' }">
|
|
14
|
+
<template #icon><i class="bi bi-house"></i></template>
|
|
15
|
+
Dashboard
|
|
16
|
+
</ab-side-menu-item>
|
|
17
|
+
|
|
18
|
+
<!-- Section title -->
|
|
19
|
+
<ab-side-menu-item>
|
|
20
|
+
<template #sectiontitle>Account</template>
|
|
21
|
+
</ab-side-menu-item>
|
|
22
|
+
|
|
23
|
+
<!-- Parent with submenu -->
|
|
24
|
+
<ab-side-menu-item href="#">
|
|
25
|
+
<template #icon><i class="bi bi-gear"></i></template>
|
|
26
|
+
Settings
|
|
27
|
+
<template #submenu>
|
|
28
|
+
<ab-side-menu-item :to="{ name: 'profile' }">Profile</ab-side-menu-item>
|
|
29
|
+
<ab-side-menu-item :to="{ name: 'billing' }">Billing</ab-side-menu-item>
|
|
30
|
+
</template>
|
|
31
|
+
</ab-side-menu-item>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Props
|
|
35
|
+
|
|
36
|
+
| Name | Type | Description |
|
|
37
|
+
| --- | --- | --- |
|
|
38
|
+
| `to` | `String \| Object` | Router-link target. When this item has a submenu, `to` makes the label clickable as a link. |
|
|
39
|
+
| `href` | `String` | Plain anchor target. With a submenu, `href` makes the item a submenu toggle instead of a link. |
|
|
40
|
+
|
|
41
|
+
## Events
|
|
42
|
+
|
|
43
|
+
None.
|
|
44
|
+
|
|
45
|
+
## Slots
|
|
46
|
+
|
|
47
|
+
| Name | Description |
|
|
48
|
+
| --- | --- |
|
|
49
|
+
| `default` | Label text. |
|
|
50
|
+
| `icon` | Leading icon. |
|
|
51
|
+
| `submenu` | Submenu items (nested `AbSideMenuItem`s). |
|
|
52
|
+
| `sectiontitle` | When provided, the item renders as a section heading instead of a nav item. |
|
|
53
|
+
|
|
54
|
+
## Injects
|
|
55
|
+
|
|
56
|
+
- `isCollapsed` — from `AbSidebar`.
|
|
57
|
+
- `isMobileFullHeight` — from `AbSidebar`.
|
|
58
|
+
- `layoutState` — from `AbSidebar`.
|