@appsbd/vue3-appsbd-ui 1.0.17 → 1.0.19
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_AbBadge.md +8 -2
- package/.ai/ai_ref_AbButton.md +7 -2
- package/.ai/ai_ref_AbCard.md +28 -12
- package/.ai/ai_ref_AbConfirmPopover.md +16 -1
- package/.ai/ai_ref_AbField.md +27 -2
- package/.ai/ai_ref_AbFilterPanel.md +10 -7
- package/.ai/ai_ref_AbFormCheck.md +1 -1
- package/.ai/ai_ref_AbInputField.md +61 -2
- package/.ai/ai_ref_AbMainLayout.md +1 -1
- package/.ai/ai_ref_AbModal.md +6 -3
- package/.ai/ai_ref_AbNumberField.md +2 -0
- package/.ai/ai_ref_AbTabs.md +12 -2
- package/.ai/ai_ref_EliteGrid.md +212 -0
- package/.ai/ai_ref_migration_guide.md +10 -1
- package/.ai/ai_ref_useAlert.md +2 -0
- package/.ai/ai_ref_useToast.md +2 -0
- package/AI_REFERENCE.md +8 -7
- package/CHANGELOG.md +29 -0
- package/dist/style.css +1 -1
- package/dist/vue3-appsbd-ui.cjs.js +78 -73
- package/dist/vue3-appsbd-ui.es.js +9262 -9154
- package/package.json +1 -1
- package/skills/commands/generate-module.md +1 -1
package/.ai/ai_ref_AbBadge.md
CHANGED
|
@@ -2,13 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
Bootstrap badge wrapper for statuses or counts with size, variant, shape, and icon variations.
|
|
4
4
|
|
|
5
|
+
**Default variant is `solid`** — when asked to generate `AbBadge` with no specific style requested, generate it as-is (don't pass `variant` at all) and it renders as a plain filled badge, the way it's used everywhere in this library.
|
|
6
|
+
|
|
5
7
|
## Usage
|
|
6
8
|
|
|
7
9
|
```vue
|
|
8
10
|
<template>
|
|
11
|
+
<!-- Default: solid variant (no variant prop needed) -->
|
|
9
12
|
<ab-badge color="primary">New</ab-badge>
|
|
10
13
|
<ab-badge color="success" is-rounded-pill>12</ab-badge>
|
|
11
|
-
|
|
14
|
+
|
|
15
|
+
<!-- Outline variant -->
|
|
16
|
+
<ab-badge color="warning" variant="outline">Pending</ab-badge>
|
|
12
17
|
</template>
|
|
13
18
|
```
|
|
14
19
|
|
|
@@ -18,7 +23,8 @@ Bootstrap badge wrapper for statuses or counts with size, variant, shape, and ic
|
|
|
18
23
|
| --- | --- | --- | --- |
|
|
19
24
|
| `size` | `String` | `"md"` | Size of the badge (`sm`, `md`, `lg`). |
|
|
20
25
|
| `color` | `String` | `"primary"` | Color theme (`primary`, `secondary`, `danger`, `warning`, `success`, `info`). |
|
|
21
|
-
| `
|
|
26
|
+
| `variant` | `String` | `"solid"` | Design variant — `"solid"` (plain filled badge) or `"outline"` (bordered, transparent background; matches `isOutline`). |
|
|
27
|
+
| `isOutline` | `Boolean` | `false` | Deprecated — equivalent to `variant="outline"`, kept for backward compatibility. Prefer `variant="outline"` in new code. |
|
|
22
28
|
| `isRoundedPill` | `Boolean` | `false` | Transforms badge to a fully rounded pill shape. |
|
|
23
29
|
| `isDot` | `Boolean` | `false` | Prepends a dot indicator layout. |
|
|
24
30
|
| `isAdd` | `Boolean` | `false` | Adjusts styling for an add/plus icon badge. |
|
package/.ai/ai_ref_AbButton.md
CHANGED
|
@@ -2,13 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
Customizable button with optional loader animation and leading icon slot.
|
|
4
4
|
|
|
5
|
+
**Default variant is `solid`** — when asked to generate `AbButton` with no specific style requested, generate it as-is (don't pass `variant` at all) and it renders as a plain filled button, the way it's used everywhere in this library.
|
|
6
|
+
|
|
5
7
|
## Usage
|
|
6
8
|
|
|
7
9
|
```vue
|
|
8
10
|
<template>
|
|
11
|
+
<!-- Default: solid variant (no variant prop needed) -->
|
|
9
12
|
<ab-button color="primary">Save</ab-button>
|
|
10
13
|
|
|
11
|
-
|
|
14
|
+
<!-- Outline variant -->
|
|
15
|
+
<ab-button color="secondary" variant="outline" show-icon-divider>
|
|
12
16
|
<template #icon><i class="bi bi-plus-lg"></i></template>
|
|
13
17
|
New Item
|
|
14
18
|
</ab-button>
|
|
@@ -31,8 +35,9 @@ const isSaving = ref(false);
|
|
|
31
35
|
| `mode` | `String` | `"button"` | Sets the root tag (`button`, `link`, `router-link`). |
|
|
32
36
|
| `type` | `String` | `"button"` | Native button type (`button`, `submit`, `reset`). |
|
|
33
37
|
| `color` | `String` | `"primary"` | Color variant (primary, secondary, success, danger, warning, info, light, dark). |
|
|
38
|
+
| `variant` | `String` | `"solid"` | Design variant — `"solid"` (plain filled button) or `"outline"` (border-only, matches `isOutline`). Drives which class is generated for `color` (e.g. `"outline"` → `btn-outline-{color}`). |
|
|
34
39
|
| `size` | `String` | `"md"` | Button size (`xs`, `sm`, `md`, `lg`, `xl`, `xxl`). |
|
|
35
|
-
| `isOutline` | `Boolean` | `false` |
|
|
40
|
+
| `isOutline` | `Boolean` | `false` | Deprecated — equivalent to `variant="outline"`, kept for backward compatibility. Prefer `variant="outline"` in new code. |
|
|
36
41
|
| `isIconBtn` | `Boolean` | `false` | Formats the button styling for a single icon. |
|
|
37
42
|
| `isRounded` | `Boolean` | `false` | Applies a fully rounded, pill-like border radius to the button. |
|
|
38
43
|
| `isAnimated` | `Boolean` | `false` | When `true`, renders the loader SVG and optionally hides the label. |
|
package/.ai/ai_ref_AbCard.md
CHANGED
|
@@ -1,33 +1,30 @@
|
|
|
1
1
|
# AbCard — AI Reference
|
|
2
2
|
|
|
3
|
-
Bootstrap-style card container with `header`, `body`, and `footer` slots. Visual variations (`tile-card`, `item-card`, `insight-card`, …) are applied through CSS classes
|
|
3
|
+
Bootstrap-style card container with `header`, `body`, and `footer` slots. Visual variations (`tile-card`, `item-card`, `insight-card`, …) are applied through CSS classes rather than separate components.
|
|
4
|
+
|
|
5
|
+
**Default variant is `default`** (a plain card, no layout class) — when asked to generate `AbCard` with no specific style requested, generate it as-is (don't pass `variant` at all).
|
|
4
6
|
|
|
5
7
|
## Props
|
|
6
8
|
|
|
7
9
|
| Name | Type | Default | Description |
|
|
8
10
|
| --- | --- | --- | --- |
|
|
9
|
-
| `containerClass` | `String` | `undefined` | CSS class applied to the card root. |
|
|
11
|
+
| `containerClass` | `String` | `undefined` | CSS class applied to the card root. General-purpose — also still the way to reach a custom, one-off class that isn't one of the built-in `variant` values. |
|
|
10
12
|
| `headerClass` | `String` | `""` | CSS class for the header section. |
|
|
11
13
|
| `bodyClass` | `String` | `""` | CSS class for the body section. |
|
|
12
14
|
| `footerClass` | `String` | `""` | CSS class for the footer section. |
|
|
15
|
+
| `variant` | `String` | `"default"` | Design variant — `"default"` (plain card), `"tile"` (→ `.tile-card`, stat blocks), `"item"` (→ `.item-card`, list rows), or `"insight"` (→ `.insight-card`, insight panels). |
|
|
13
16
|
| `isBorderCard` | `Boolean` | `true` | Whether to display the default card border. |
|
|
14
17
|
| `bgColorVariant` | `String` | `""` | Bootstrap color variant for background (`primary`, `success`, etc.). |
|
|
15
18
|
| `borderBottomVariant` | `String` | `""` | Adds a colored bottom border with the specified variant. |
|
|
16
|
-
| `isTileCard` | `Boolean` | `false` |
|
|
19
|
+
| `isTileCard` | `Boolean` | `false` | Deprecated — equivalent to `variant="tile"`, kept for backward compatibility. Prefer `variant="tile"` in new code. |
|
|
17
20
|
| `showBorder` | `Boolean` | `false` | Whether to display the header and footer borders. |
|
|
18
|
-
| `variation` | `String` | `""` | Generic
|
|
21
|
+
| `variation` | `String` | `""` | Generic escape hatch: any string passed here is appended as a raw class on the root, unvalidated — for one-off/custom classes beyond the four `variant` values. |
|
|
19
22
|
|
|
20
23
|
## Usage
|
|
21
24
|
|
|
22
25
|
```vue
|
|
23
26
|
<template>
|
|
24
|
-
|
|
25
|
-
<template #body>
|
|
26
|
-
<span class="tile-title">Total Revenue</span>
|
|
27
|
-
<span class="tile-value">$12,480</span>
|
|
28
|
-
</template>
|
|
29
|
-
</ab-card>
|
|
30
|
-
|
|
27
|
+
<!-- Default: plain card (no variant prop needed) -->
|
|
31
28
|
<ab-card container-class="shadow-sm" border-bottom-variant="primary" header-class="bg-light">
|
|
32
29
|
<template #header>Card Title</template>
|
|
33
30
|
<template #body>Card Content</template>
|
|
@@ -35,6 +32,25 @@ Bootstrap-style card container with `header`, `body`, and `footer` slots. Visual
|
|
|
35
32
|
<ab-button size="sm">Action</ab-button>
|
|
36
33
|
</template>
|
|
37
34
|
</ab-card>
|
|
35
|
+
|
|
36
|
+
<!-- Tile variant: high-level stat blocks -->
|
|
37
|
+
<ab-card variant="tile" :is-border-card="false">
|
|
38
|
+
<template #body>
|
|
39
|
+
<span class="tile-title">Total Revenue</span>
|
|
40
|
+
<span class="tile-value">$12,480</span>
|
|
41
|
+
</template>
|
|
42
|
+
</ab-card>
|
|
43
|
+
|
|
44
|
+
<!-- Item variant: flexible list-row layout -->
|
|
45
|
+
<ab-card variant="item">
|
|
46
|
+
<template #body>...</template>
|
|
47
|
+
</ab-card>
|
|
48
|
+
|
|
49
|
+
<!-- Insight variant: insight/suggestion panel -->
|
|
50
|
+
<ab-card variant="insight">
|
|
51
|
+
<template #header>...</template>
|
|
52
|
+
<template #body>...</template>
|
|
53
|
+
</ab-card>
|
|
38
54
|
</template>
|
|
39
55
|
```
|
|
40
56
|
|
|
@@ -48,4 +64,4 @@ Bootstrap-style card container with `header`, `body`, and `footer` slots. Visual
|
|
|
48
64
|
|
|
49
65
|
## Notes
|
|
50
66
|
|
|
51
|
-
Do **not** create a new `.vue` file for card variations — define the variant as a CSS class in `src/styles/components/_card.scss` and
|
|
67
|
+
Do **not** create a new `.vue` file for card variations — define the variant as a CSS class in `src/styles/components/_card.scss` and expose it through the `variant` enum (or `containerClass`/`variation` for a one-off class).
|
|
@@ -21,11 +21,26 @@ Confirmation popover with an async `onConfirm` handler and built-in loader. Usef
|
|
|
21
21
|
<script setup>
|
|
22
22
|
async function handleDelete(record) {
|
|
23
23
|
await api.delete(record.id);
|
|
24
|
-
// loader
|
|
24
|
+
// loader is handled by the component; returning nothing here closes the
|
|
25
|
+
// popover automatically — see "onConfirm return contract" below for the
|
|
26
|
+
// other return shapes (chaining a second confirm step, a success/error alert).
|
|
25
27
|
}
|
|
26
28
|
</script>
|
|
27
29
|
```
|
|
28
30
|
|
|
31
|
+
## `onConfirm` return contract
|
|
32
|
+
|
|
33
|
+
`onConfirm(itemData)` is awaited; what it resolves to (or throws) decides what happens next:
|
|
34
|
+
|
|
35
|
+
| Resolves to | Result |
|
|
36
|
+
| --- | --- |
|
|
37
|
+
| Nothing (`undefined`/`null`) — the common case, a plain `async () => { await doWork(); }` | Popover closes. |
|
|
38
|
+
| `{ next: 'close' }` | Popover closes (same as returning nothing; use when you also want to pass through other fields, but no other field is read here). |
|
|
39
|
+
| `{ next: 'confirm', title?, message?, icon?, confirmText?, cancelText?, onConfirm? }` | Popover swaps to a new `type: "confirm"` step (Cancel button shown) — for a secondary confirmation. |
|
|
40
|
+
| `{ next: 'confirm-ajax', ...same fields, onConfirm }` | Same as above but `type: "confirm-ajax"` for the next step. |
|
|
41
|
+
| Any other truthy object, e.g. `{ status: true \| false, message? }` | Popover swaps to a terminal `type: "alert"` panel (icon/color from `status`, message from `message`/`msg`, default "Completed successfully" / falls back to "Something went wrong" when `status === false`) — the user must click OK to dismiss. Use this only when you deliberately want that extra confirmation screen. |
|
|
42
|
+
| Throws | Popover shows an `type: "alert"` error panel ("Unexpected error"), dismissed by OK. |
|
|
43
|
+
|
|
29
44
|
## Props
|
|
30
45
|
|
|
31
46
|
| Name | Type | Default | Description |
|
package/.ai/ai_ref_AbField.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# AbField — AI Reference
|
|
2
2
|
|
|
3
|
-
Polymorphic field wrapper — renders text, textarea, select, multiselect, tag, checkbox, radio, toggle, or switch based on the `type` prop.
|
|
3
|
+
Polymorphic field wrapper — renders text, textarea, select, multiselect, tag, checkbox, radio, toggle, or switch based on the `type` prop. For `type="number"` it renders `AbInputField` (a plain native number input by default); add `variant="stepper"` to get `AbInputField`'s numeric-stepper behavior (min/max/step clamping, +/- buttons) instead.
|
|
4
4
|
|
|
5
5
|
## Usage
|
|
6
6
|
|
|
@@ -29,6 +29,26 @@ Polymorphic field wrapper — renders text, textarea, select, multiselect, tag,
|
|
|
29
29
|
</template>
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
+
Number field — plain by default, stepper via `variant`:
|
|
33
|
+
|
|
34
|
+
```vue
|
|
35
|
+
<template>
|
|
36
|
+
<!-- Plain native number input (default) -->
|
|
37
|
+
<ab-field type="number" v-model="form.age" name="age" label="Age" />
|
|
38
|
+
|
|
39
|
+
<!-- Numeric stepper: +/- buttons, min/max/step clamping -->
|
|
40
|
+
<ab-field
|
|
41
|
+
type="number"
|
|
42
|
+
variant="stepper"
|
|
43
|
+
v-model="form.qty"
|
|
44
|
+
name="qty"
|
|
45
|
+
label="Quantity"
|
|
46
|
+
:min="1"
|
|
47
|
+
:max="10"
|
|
48
|
+
/>
|
|
49
|
+
</template>
|
|
50
|
+
```
|
|
51
|
+
|
|
32
52
|
## Props
|
|
33
53
|
|
|
34
54
|
| Name | Type | Default | Description |
|
|
@@ -50,7 +70,7 @@ Polymorphic field wrapper — renders text, textarea, select, multiselect, tag,
|
|
|
50
70
|
| `options` | `Array` | `[]` | Options for select / checkbox / radio. |
|
|
51
71
|
| `labelKey` | `String` | `"title"` | Option label property. |
|
|
52
72
|
| `valueKey` | `String` | `"val"` | Option value property. |
|
|
53
|
-
| `max` | `Number` | `-1` | Max selections (multiselect/tag); `-1` = unlimited. |
|
|
73
|
+
| `max` | `Number` | `-1` | Max selections (multiselect/tag); `-1` = unlimited. For a `type="number"` field, this doubles as the stepper's numeric ceiling (`min`/`max`/`step` clamping) — `-1`/unset means no ceiling. |
|
|
54
74
|
| `size` | `String` | `undefined` | Field size. |
|
|
55
75
|
| `object` | `Boolean` | `false` | Return full objects instead of values (multiselect). |
|
|
56
76
|
| `searchable` | `Boolean` | `false` | Enable search (select). |
|
|
@@ -70,6 +90,11 @@ Polymorphic field wrapper — renders text, textarea, select, multiselect, tag,
|
|
|
70
90
|
| `hideSelected` | `Boolean` | `true` | Hide already-selected items from dropdown. |
|
|
71
91
|
| `loading` | `Boolean` | `false` | Show a loading spinner. |
|
|
72
92
|
| `appendToBody` | `Boolean` | `true` | Teleport the dropdown to `<body>`. |
|
|
93
|
+
| `variant` | `String` | `undefined` | `type="number"` only. `"stepper"` renders `AbInputField`'s numeric stepper (forces a native number input, shows minus/plus buttons, enables `min`/`max`/`step` clamping) instead of a plain number input. |
|
|
94
|
+
| `min` | `Number \| String` | `null` | `type="number"` only. Minimum allowed value (native constraint always; also clamped + disables the minus button when `variant="stepper"`). |
|
|
95
|
+
| `step` | `Number \| String` | `1` | `type="number"` only. Increment/decrement amount (stepper variant) / native `step` attribute. |
|
|
96
|
+
| `showButtons` | `Boolean` | `true` | `type="number"` + `variant="stepper"` only. Whether to render the minus/plus buttons. |
|
|
97
|
+
| `isBorder` | `Boolean` | `false` | `type="number"` + `variant="stepper"` only. Show inner borders between minus/input/plus. Default is a seamless pill. |
|
|
73
98
|
|
|
74
99
|
## Events
|
|
75
100
|
|
|
@@ -4,7 +4,7 @@ Advanced filter panel for list and table views. Supports quick/advance modes, si
|
|
|
4
4
|
|
|
5
5
|
`isMultiple` is functional in `isQuickAdvance` mode for `dd` fields: selections toggle on/off and render as removable tag chips on the popover trigger (no `AbMultiSelect` involved). The popover's option list is searchable — locally against `options`, or via `isAjaxSearch` + `onSearch` for server-side search.
|
|
6
6
|
|
|
7
|
-
`isBuilderFilter` is a Shopify-style filter builder: no field is visible until the user clicks the `+` button. That opens a popover which first lists every not-yet-applied `filterOptions` entry by `name`; picking one swaps the same popover to a value editor matching that field's `type` (`dd`→`AbMultiSelect`, `t`→`AbInputField`, `tr`→min/max inputs, `d`/`dr`→`AbDateTimePicker`) plus Cancel/Apply Filter buttons. Apply pushes it in as a removable chip (e.g. "Email
|
|
7
|
+
`isBuilderFilter` is a Shopify-style filter builder: no field is visible until the user clicks the `+` button. That opens a popover which first lists every not-yet-applied `filterOptions` entry by `name`; picking one swaps the same popover to a value editor matching that field's `type` (`dd`→`AbMultiSelect`, `t`→`AbInputField`, `tr`→min/max inputs, `d`/`dr`→`AbDateTimePicker`) plus Cancel/Apply Filter buttons. A `"t"` (plain text/number) field also applies on `Enter` in its input — same no-op-when-empty guard as clicking Apply Filter. Apply pushes it in as a removable chip (e.g. "Email : gmail" — see `builderChipSeparator` slot below). By default (`isBuilderAutoSearch: false`), a global Search button is shown so search fires only on clicking Search, and Reset clears all applied chips. When `isBuilderAutoSearch: true`, every Apply and chip removal immediately fires `searchFilter` without showing a Search button. A field's `operators` is fixed by its schema entry, same as other modes — this mode does not add an is/is-not/contains operator picker, only the value input changes per `type`.
|
|
8
8
|
|
|
9
9
|
Standard-search, advance-search, and quick-advance field layouts are all plain flex (`d-flex flex-wrap gap-2`) — no Bootstrap grid. Each field grows/shrinks on its own, which means a field left alone on the last row will stretch to fill the remaining row width; give a `filterOptions` entry a `width`, `minWidth`, and/or `maxWidth` key (`String | Number` — a number is px, e.g. `maxWidth: 280`, or a CSS string like `"50%"`) to control that specific field's size. All three are forwarded straight to the underlying `AbInputField`/`AbMultiSelect`/`AbDateTimePicker`'s own same-named props, and also constrain that field's flex-item wrapper directly (`width` sets `flex: 0 0 <width>` so it stops growing/shrinking; `minWidth`/`maxWidth` clamp it while it keeps growing/shrinking with its siblings).
|
|
10
10
|
|
|
@@ -44,6 +44,7 @@ function handleSearch(data) {
|
|
|
44
44
|
| `isAdvance` | `Boolean` | `false` | Show all filters in an expanded layout. |
|
|
45
45
|
| `isQuickAdvance` | `Boolean` | `false` | Quick advance mode. |
|
|
46
46
|
| `isBuilderFilter` | `Boolean` | `false` | Shopify-style "+" add-filter builder — see mode description above. |
|
|
47
|
+
| `isBuilderAutoSearch` | `Boolean` | `false` | In `isBuilderFilter` mode, automatically fire `searchFilter` on Apply/Remove chip (no Search button). Default is `false` (shows Search button). |
|
|
47
48
|
| `isSingle` | `Boolean` | `false` | Single-field search mode. |
|
|
48
49
|
| `isAutoSearch` | `Boolean` | `false` | Auto search on input change (single mode). |
|
|
49
50
|
| `isAllowed` | `Boolean` | `false` | Permission flag consumed by the template. |
|
|
@@ -73,9 +74,11 @@ function handleSearch(data) {
|
|
|
73
74
|
|
|
74
75
|
## Slots
|
|
75
76
|
|
|
76
|
-
| Name
|
|
77
|
-
|
|
|
78
|
-
| `prefix`
|
|
79
|
-
| `postfix`
|
|
80
|
-
| `icon`
|
|
81
|
-
| `hints`
|
|
77
|
+
| Name | Description |
|
|
78
|
+
| ---------------------- | --------------- |
|
|
79
|
+
| `prefix` | Filter prefix. |
|
|
80
|
+
| `postfix` | Filter postfix. |
|
|
81
|
+
| `icon` | Filter icon. |
|
|
82
|
+
| `hints` | Helper text. |
|
|
83
|
+
| `builderChipSeparator` | `isBuilderFilter` mode only. Overrides the connector text rendered between an applied chip's field name and its value (e.g. "Email **:** gmail", "Revenue **:** 12 - 23" for `tr`/`dr` range fields). Receives `{ field }`. Default content is `:`. |
|
|
84
|
+
| `builderAddLabel` | `isBuilderFilter` mode only. Renders before the static `+` icon inside the "Add filter" button — use it to add a label next to the icon. Not scoped. Empty by default. |
|
|
@@ -101,7 +101,7 @@ item). If different options need different content, branch inside the template o
|
|
|
101
101
|
<ab-form-check variant="card" :options="plans" v-model="plan" type="radio" name="plan">
|
|
102
102
|
<template #option-label="{ check }">
|
|
103
103
|
<template v-if="check.val === 'pro'">
|
|
104
|
-
<ab-badge
|
|
104
|
+
<ab-badge color="danger">Popular</ab-badge> {{ check.title }}
|
|
105
105
|
</template>
|
|
106
106
|
<template v-else>{{ check.title }}</template>
|
|
107
107
|
</template>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# AbInputField — AI Reference
|
|
2
2
|
|
|
3
|
-
Core text input with VeeValidate integration, localized feedback, and prefix/postfix/hint slots. Use for single-line text inputs; use `AbField` for a polymorphic field that can render selects, toggles, etc.
|
|
3
|
+
Core text input with VeeValidate integration, localized feedback, and prefix/postfix/hint slots. Use for single-line text inputs; use `AbField` for a polymorphic field that can render selects, toggles, etc. Pass `variant="stepper"` to turn it into a numeric stepper input (min/max/step clamping, +/- buttons) — this replaces the deprecated `AbNumberField`.
|
|
4
4
|
|
|
5
5
|
## Usage
|
|
6
6
|
|
|
@@ -24,6 +24,54 @@ const form = reactive({ email: '' });
|
|
|
24
24
|
</script>
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
+
Stepper variant:
|
|
28
|
+
|
|
29
|
+
```vue
|
|
30
|
+
<template>
|
|
31
|
+
<ab-input-field
|
|
32
|
+
v-model="qty"
|
|
33
|
+
variant="stepper"
|
|
34
|
+
name="quantity"
|
|
35
|
+
label="Quantity"
|
|
36
|
+
:min="1"
|
|
37
|
+
:max="10"
|
|
38
|
+
:step="1"
|
|
39
|
+
hints="Clamped between 1 and 10"
|
|
40
|
+
/>
|
|
41
|
+
|
|
42
|
+
<!-- Inner borders between minus/input/plus -->
|
|
43
|
+
<ab-input-field v-model="qty" variant="stepper" name="quantity2" label="Quantity" is-border />
|
|
44
|
+
</template>
|
|
45
|
+
|
|
46
|
+
<script setup>
|
|
47
|
+
import { ref } from 'vue';
|
|
48
|
+
const qty = ref(1);
|
|
49
|
+
</script>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Copyable (read-only value with a copy-to-clipboard button — no built-in confirmation UI, wire your own via the `copy-success`/`copy-error` events):
|
|
53
|
+
|
|
54
|
+
```vue
|
|
55
|
+
<template>
|
|
56
|
+
<ab-input-field
|
|
57
|
+
v-model="apiKey"
|
|
58
|
+
name="api_key"
|
|
59
|
+
label="API Key"
|
|
60
|
+
readonly
|
|
61
|
+
copyable
|
|
62
|
+
@copy-success="(msg) => toast.success(msg)"
|
|
63
|
+
@copy-error="(msg) => toast.error(msg)"
|
|
64
|
+
/>
|
|
65
|
+
</template>
|
|
66
|
+
|
|
67
|
+
<script setup>
|
|
68
|
+
import { ref } from 'vue';
|
|
69
|
+
import { useToast } from 'vue3-appsbd-ui';
|
|
70
|
+
const apiKey = ref('sk_live_...');
|
|
71
|
+
const { toast } = useToast();
|
|
72
|
+
</script>
|
|
73
|
+
```
|
|
74
|
+
|
|
27
75
|
## Props
|
|
28
76
|
|
|
29
77
|
| Name | Type | Default | Description |
|
|
@@ -33,7 +81,7 @@ const form = reactive({ email: '' });
|
|
|
33
81
|
| `placeholder` | `String` | `""` | Input placeholder. |
|
|
34
82
|
| `type` | `String` | `"text"` | Native input type (`text`, `email`, `password`, `number`, `tel`, …). |
|
|
35
83
|
| `name` | `String` | `""` | VeeValidate field name. |
|
|
36
|
-
| `isCodeInput` | `Boolean` | `false` |
|
|
84
|
+
| `isCodeInput` | `Boolean` | `false` | Renders a small, fixed-size, large-type single-character box — the same `.mega-input-field` style `AbPinInput` uses per digit. For one OTP/PIN digit only; pair with `maxlength="1"` yourself (not set automatically). Not a monospace/code-display style — too narrow for a token, key, or URL, which will visually scroll inside the box. |
|
|
37
85
|
| `size` | `String` | `undefined` | Adjusts component size (`xs`, `sm`, `md`, `lg`, `xl`, `xxl`). |
|
|
38
86
|
| `rules` | `String \| Object` | `""` | VeeValidate rules. |
|
|
39
87
|
| `containerClass` | `String` | `undefined` | Class on the wrapper `<div>`. |
|
|
@@ -53,6 +101,15 @@ const form = reactive({ email: '' });
|
|
|
53
101
|
| `iconPosition` | `String` | `undefined` | Position of the custom `#icon` slot (`"left"`, `"right"`). |
|
|
54
102
|
| `inputClass` | `String \| Object \| Array` | `undefined` | Additional class(es) for the input element. |
|
|
55
103
|
| `inputStyle` | `String \| Object \| Array` | `undefined` | Additional style(s) for the input element. |
|
|
104
|
+
| `variant` | `String` | `undefined` | Layout variant. `"stepper"` renders a numeric stepper (forces `type="number"`, shows +/- buttons, enables `min`/`max`/`step` clamping). |
|
|
105
|
+
| `min` | `Number \| String` | `null` | *(stepper variant)* Minimum allowed value. Clamps input and disables the minus button at the floor. |
|
|
106
|
+
| `max` | `Number \| String` | `null` | *(stepper variant)* Maximum allowed value. Clamps input and disables the plus button at the ceiling. |
|
|
107
|
+
| `step` | `Number \| String` | `1` | *(stepper variant)* Increment/decrement amount. |
|
|
108
|
+
| `showButtons` | `Boolean` | `true` | *(stepper variant)* Render the minus/plus controls. |
|
|
109
|
+
| `isBorder` | `Boolean` | `false` | *(stepper variant)* Show inner borders between minus/input/plus. Default is a seamless pill. |
|
|
110
|
+
| `copyable` | `Boolean` | `false` | Renders a plain, borderless postfix button that copies the current value to the clipboard (via the Clipboard API). No built-in confirmation UI — listen for `copy-success`/`copy-error` to show your own (e.g. `useToast()`). Pair with a native `readonly` attribute for a display-only copyable value — there is no built-in read-only mode, `readonly`/`disabled` fall through to the native input via `$attrs`. |
|
|
111
|
+
| `copySuccessMsg` | `String` | `"Copied to clipboard"` | Message text passed to the `copy-success` event after a successful copy (`copyable` only). Runs through the same translation pipeline as `label`/`hints`. |
|
|
112
|
+
| `copyErrorMsg` | `String` | `"Failed to copy"` | Message text passed to the `copy-error` event when copying fails, e.g. the Clipboard API is unavailable outside a secure context (`copyable` only). |
|
|
56
113
|
|
|
57
114
|
## Events
|
|
58
115
|
|
|
@@ -63,6 +120,8 @@ const form = reactive({ email: '' });
|
|
|
63
120
|
| `keyup` | `KeyboardEvent` | Forwarded native event. |
|
|
64
121
|
| `keydown` | `KeyboardEvent` | Forwarded native event. |
|
|
65
122
|
| `paste` | `ClipboardEvent` | Forwarded native event. |
|
|
123
|
+
| `copy-success` | `(message: String, value: String)` | *(`copyable` only)* Fired after a successful clipboard write. `message` is the already-translated `copySuccessMsg` — hand it directly to your own confirmation UI. |
|
|
124
|
+
| `copy-error` | `(message: String, error: Error)` | *(`copyable` only)* Fired when the clipboard write fails (e.g. Clipboard API unavailable outside a secure context). `message` is the already-translated `copyErrorMsg`. |
|
|
66
125
|
|
|
67
126
|
## Slots
|
|
68
127
|
|
|
@@ -83,7 +83,7 @@ On mobile, call `toggleLeftSidebar()` via the template ref to open/close the dra
|
|
|
83
83
|
| `body` | — | Main scrollable content area. |
|
|
84
84
|
| `bodyFooter` | — | Content rendered below the scrollable body area. |
|
|
85
85
|
| `pageFooter` | — | Bottom footer bar. |
|
|
86
|
-
| `rightSidebar` | — | Right sidebar panel. Only rendered when `isRightSidebarOpen` is `true
|
|
86
|
+
| `rightSidebar` | — | Right sidebar panel. Only rendered when `isRightSidebarOpen` is `true`; has no mobile/overlay treatment, so it's hidden entirely below `1199.98px` (Bootstrap's `xl` breakpoint). |
|
|
87
87
|
|
|
88
88
|
## Exposed methods
|
|
89
89
|
|
package/.ai/ai_ref_AbModal.md
CHANGED
|
@@ -9,8 +9,8 @@ Full-featured dialog with a built-in VeeValidate `<Form>`, loader overlay, and "
|
|
|
9
9
|
<ab-button class="btn-primary" @click="isOpen = true">Open</ab-button>
|
|
10
10
|
|
|
11
11
|
<ab-modal
|
|
12
|
+
v-if="isOpen"
|
|
12
13
|
ref="modal"
|
|
13
|
-
v-model:is-modal-visible="isOpen"
|
|
14
14
|
modal-size="modal-lg"
|
|
15
15
|
@on-submit="handleSubmit"
|
|
16
16
|
@close="isOpen = false"
|
|
@@ -47,7 +47,6 @@ async function handleSubmit(values, { resetForm }) {
|
|
|
47
47
|
|
|
48
48
|
| Name | Type | Default | Description |
|
|
49
49
|
| --- | --- | --- | --- |
|
|
50
|
-
| `isModalVisible` | `Boolean` | — | Visibility state (`v-model:is-modal-visible`). |
|
|
51
50
|
| `modalSize` | `String` | `""` | Bootstrap size class (`modal-sm`, `modal-lg`, `modal-xl`). |
|
|
52
51
|
| `modalMsg` | `[String, Object]` | `{}` | Default message for message-only mode. |
|
|
53
52
|
| `hideHeader` | `Boolean` | `false` | Hide the header section. |
|
|
@@ -92,9 +91,13 @@ async function handleSubmit(values, { resetForm }) {
|
|
|
92
91
|
| `close()` | Close the modal. |
|
|
93
92
|
| `clearForm()` | Reset the VeeValidate form and close. |
|
|
94
93
|
| `returnClear()` | Reset the form without closing. |
|
|
95
|
-
| `showMsgOnly(msg, isHideFooter?)` | Switch to message-only mode. |
|
|
94
|
+
| `showMsgOnly(msg, isHideFooter?)` | Switch to message-only mode, replacing the body with `AbResponseMsg` rendering `msg`. `isHideFooter: true` swaps the footer for a single static "Close" button (`close()`) instead of the default/slotted footer — it does **not** auto-dismiss the modal; without user action the modal stays open indefinitely. |
|
|
96
95
|
| `setMessageOnly(status)` | Toggle message-only mode programmatically. |
|
|
97
96
|
|
|
97
|
+
## v-model
|
|
98
|
+
|
|
99
|
+
None — there is no internal show/hide state. Mount/unmount the whole component with `v-if` (or `v-show`) on a boolean in the parent, as shown in Usage above.
|
|
100
|
+
|
|
98
101
|
## Notes
|
|
99
102
|
|
|
100
103
|
Use `AbEasyModal` when you only need a simple trigger-and-close dialog without a form.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# AbNumberField — AI Reference
|
|
2
2
|
|
|
3
|
+
> **Deprecated.** `AbNumberField` is now a thin wrapper around [`AbInputField`](./ai_ref_AbInputField.md) with `variant="stepper"`. It is kept for backward compatibility and still works exactly as documented below, but prefer `<ab-input-field variant="stepper" ... />` in new code.
|
|
4
|
+
|
|
3
5
|
Numeric input with minus/plus buttons, min/max clamping, custom step, and VeeValidate integration. Renders as a seamless pill by default; pass `is-border` to show internal dividers between buttons and input.
|
|
4
6
|
|
|
5
7
|
## Usage
|
package/.ai/ai_ref_AbTabs.md
CHANGED
|
@@ -2,16 +2,25 @@
|
|
|
2
2
|
|
|
3
3
|
Parent container for tabbed interfaces. Pair with `AbTab` children. Supports content-switching mode (default) and router-link mode for navigation-driven tabs.
|
|
4
4
|
|
|
5
|
+
**Default variation is `outline`** — when asked to generate `AbTabs` with no specific style requested, generate it as-is (don't pass `variation` at all) and it renders with the outlined design.
|
|
6
|
+
|
|
5
7
|
## Usage
|
|
6
8
|
|
|
7
9
|
```vue
|
|
8
10
|
<template>
|
|
9
|
-
|
|
11
|
+
<!-- Default: outline variation (no props needed) -->
|
|
12
|
+
<ab-tabs>
|
|
10
13
|
<ab-tab title="Overview" selected>Overview content</ab-tab>
|
|
11
14
|
<ab-tab title="Billing">Billing content</ab-tab>
|
|
12
15
|
<ab-tab title="Security">Security content</ab-tab>
|
|
13
16
|
</ab-tabs>
|
|
14
17
|
|
|
18
|
+
<!-- Other variation -->
|
|
19
|
+
<ab-tabs variation="pills">
|
|
20
|
+
<ab-tab title="Overview" selected>Overview content</ab-tab>
|
|
21
|
+
<ab-tab title="Billing">Billing content</ab-tab>
|
|
22
|
+
</ab-tabs>
|
|
23
|
+
|
|
15
24
|
<ab-tabs is-route-mode>
|
|
16
25
|
<ab-tab title="Users" :to="{ name: 'users' }" />
|
|
17
26
|
<ab-tab title="Teams" :to="{ name: 'teams' }" />
|
|
@@ -26,7 +35,8 @@ Parent container for tabbed interfaces. Pair with `AbTab` children. Supports con
|
|
|
26
35
|
| `tabContainerClass` | `String` | — | Root wrapper class. |
|
|
27
36
|
| `navContainerClass` | `String` | — | Wrapper around the nav list. |
|
|
28
37
|
| `tabDetailsClass` | `String` | — | Wrapper around the tab content. |
|
|
29
|
-
| `
|
|
38
|
+
| `variation` | `String` | `"outline"` | Design variation of the nav. Generates a `nav-{variation}` class automatically — e.g. `"outline"` → `nav-outline`, `"pills"` → `nav-pills`, `"underline"` → `nav-underline`, `"bg-secondary"` → `nav-bg-secondary`. Pass `""` to skip auto-generation and rely on `navClass` only. |
|
|
39
|
+
| `navClass` | `String` | `""` | Extra classes on the nav list, merged after the `variation` class — use for size (`nav-xs`/`nav-md`/`nav-lg`/`nav-xl`), layout (`nav-fill`, `nav-vertical`), or color (`nav-secondary`) modifiers. |
|
|
30
40
|
| `tabClass` | `String` | `""` | Class on each individual tab link. |
|
|
31
41
|
| `isRouteMode` | `Boolean` | `false` | When `true`, tab clicks perform router navigation. |
|
|
32
42
|
|