@appsbd/vue3-appsbd-ui 1.0.4 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/.ai/ai_ref_AbAvatar.md +41 -41
  2. package/.ai/ai_ref_AbBadge.md +36 -36
  3. package/.ai/ai_ref_AbButton.md +52 -51
  4. package/.ai/ai_ref_AbCard.md +51 -51
  5. package/.ai/ai_ref_AbCarousel.md +36 -36
  6. package/.ai/ai_ref_AbChart.md +46 -46
  7. package/.ai/ai_ref_AbColorPicker.md +42 -42
  8. package/.ai/ai_ref_AbConfirmPopover.md +54 -54
  9. package/.ai/ai_ref_AbCustomField.md +66 -66
  10. package/.ai/ai_ref_AbDarkModeToggler.md +33 -33
  11. package/.ai/ai_ref_AbDateTimePicker.md +74 -74
  12. package/.ai/ai_ref_AbEasyModal.md +56 -56
  13. package/.ai/ai_ref_AbField.md +88 -88
  14. package/.ai/ai_ref_AbFileUploader.md +47 -47
  15. package/.ai/ai_ref_AbFilterPanel.md +67 -67
  16. package/.ai/ai_ref_AbFormCheck.md +58 -58
  17. package/.ai/ai_ref_AbImageRadioInput.md +55 -55
  18. package/.ai/ai_ref_AbInputField.md +66 -66
  19. package/.ai/ai_ref_AbInputTag.md +56 -56
  20. package/.ai/ai_ref_AbKbd.md +23 -23
  21. package/.ai/ai_ref_AbKbdGroup.md +21 -21
  22. package/.ai/ai_ref_AbMainLayout.md +106 -0
  23. package/.ai/ai_ref_AbMultiSelect.md +78 -78
  24. package/.ai/ai_ref_AbNumberField.md +59 -59
  25. package/.ai/ai_ref_AbPinInput.md +33 -33
  26. package/.ai/ai_ref_AbPopover.md +54 -54
  27. package/.ai/ai_ref_AbPricingCard.md +56 -56
  28. package/.ai/ai_ref_AbPricingContainer.md +41 -41
  29. package/.ai/ai_ref_AbPricingTable.md +56 -56
  30. package/.ai/ai_ref_AbProgressbar.md +34 -34
  31. package/.ai/ai_ref_AbScrollbar.md +38 -38
  32. package/.ai/ai_ref_AbSettingsForm.md +46 -46
  33. package/.ai/ai_ref_AbSideMenuItem.md +47 -47
  34. package/.ai/ai_ref_AbSidebar.md +62 -62
  35. package/.ai/ai_ref_AbSkeleton.md +23 -23
  36. package/.ai/ai_ref_AbSlider.md +52 -52
  37. package/.ai/ai_ref_AbTab.md +30 -30
  38. package/.ai/ai_ref_AbTable.md +49 -49
  39. package/.ai/ai_ref_AbTabs.md +37 -37
  40. package/.ai/ai_ref_AbToggle.md +46 -46
  41. package/.ai/ai_ref_AbTooltip.md +39 -39
  42. package/.ai/ai_ref_AbWizard.md +64 -64
  43. package/.ai/ai_ref_AbWizardStep.md +36 -36
  44. package/.ai/ai_ref_abEventBus.md +66 -66
  45. package/.ai/ai_ref_abRequestParam.md +40 -40
  46. package/.ai/ai_ref_abVeeRules.md +33 -33
  47. package/.ai/ai_ref_global_config.md +57 -56
  48. package/.ai/ai_ref_useAlert.md +50 -45
  49. package/.ai/ai_ref_useFileValidator.md +31 -31
  50. package/.ai/ai_ref_useResponsive.md +41 -41
  51. package/.ai/ai_ref_useTheme.md +28 -28
  52. package/.ai/ai_ref_useToast.md +30 -30
  53. package/AI_REFERENCE.md +87 -86
  54. package/design-system.md +403 -403
  55. package/dist/skins/black.css +1 -1
  56. package/dist/skins/black.scss +3 -3
  57. package/dist/skins/cyan.css +1 -1
  58. package/dist/skins/cyan.scss +3 -3
  59. package/dist/skins/default.css +1 -1
  60. package/dist/skins/default.scss +5 -5
  61. package/dist/skins/gray.css +1 -1
  62. package/dist/skins/gray.scss +3 -3
  63. package/dist/skins/green.css +1 -1
  64. package/dist/skins/green.scss +5 -5
  65. package/dist/skins/orange.css +1 -1
  66. package/dist/skins/orange.scss +3 -3
  67. package/dist/skins/pink.css +1 -1
  68. package/dist/skins/pink.scss +3 -3
  69. package/dist/skins/purple.css +1 -1
  70. package/dist/skins/purple.scss +3 -3
  71. package/dist/skins/red.css +1 -1
  72. package/dist/skins/red.scss +3 -3
  73. package/dist/skins/themes/_black.scss +18 -6
  74. package/dist/skins/themes/_blue.scss +18 -43
  75. package/dist/skins/themes/_common_variable.scss +695 -685
  76. package/dist/skins/themes/_cyan.scss +18 -6
  77. package/dist/skins/themes/_gray.scss +18 -7
  78. package/dist/skins/themes/_green.scss +18 -6
  79. package/dist/skins/themes/_grid.scss +32 -30
  80. package/dist/skins/themes/_orange.scss +18 -6
  81. package/dist/skins/themes/_pink.scss +18 -6
  82. package/dist/skins/themes/_purple.scss +18 -6
  83. package/dist/skins/themes/_red.scss +18 -6
  84. package/dist/skins/themes/_violet.scss +18 -6
  85. package/dist/skins/violet.css +1 -1
  86. package/dist/skins/violet.scss +3 -3
  87. package/dist/style.css +1 -1
  88. package/dist/vue3-appsbd-ui.cjs.js +130 -142
  89. package/dist/vue3-appsbd-ui.es.js +21758 -20241
  90. package/package.json +72 -72
  91. package/readme.md +194 -194
@@ -1,66 +1,66 @@
1
- # AbInputField — AI Reference
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.
4
-
5
- ## Usage
6
-
7
- ```vue
8
- <template>
9
- <ab-input-field
10
- v-model="form.email"
11
- name="email"
12
- label="Email"
13
- placeholder="you@example.com"
14
- rules="required|email"
15
- hints="We'll never share your email."
16
- >
17
- <template #prefix><i class="bi bi-envelope"></i></template>
18
- </ab-input-field>
19
- </template>
20
-
21
- <script setup>
22
- import { reactive } from 'vue';
23
- const form = reactive({ email: '' });
24
- </script>
25
- ```
26
-
27
- ## Props
28
-
29
- | Name | Type | Default | Description |
30
- | --- | --- | --- | --- |
31
- | `modelValue` | `any` | `null` | Two-way-bound value. |
32
- | `label` | `String` | `""` | Field label. |
33
- | `placeholder` | `String` | `""` | Input placeholder. |
34
- | `type` | `String` | `"text"` | Native input type (`text`, `email`, `password`, `number`, `tel`, …). |
35
- | `name` | `String` | **required** | VeeValidate field name. |
36
- | `isCodeInput` | `Boolean` | `false` | Applies monospace / code-input styling. |
37
- | `rules` | `String \| Object` | `""` | VeeValidate rules. |
38
- | `containerClass` | `String` | `"mb-3"` | Class on the wrapper `<div>`. |
39
- | `hints` | `String` | `""` | Helper text beneath the input. |
40
- | `prefix` | `String` | `""` | Prefix text/icon (shortcut for `#prefix` slot). |
41
- | `postfix` | `String` | `""` | Postfix text/icon. |
42
- | `maxlength` | `any` | `null` | Native `maxlength`. |
43
- | `isLeftIconBorder` | `Boolean` | `false` | Renders border between the prefix icon and the input. |
44
- | `isRightIconBorder` | `Boolean` | `false` | Renders border between the postfix icon and the input. |
45
- | `isHideLabel` | `Boolean` | `false` | Hide the label visually. |
46
- | `iconPosition` | `String` | `"right"` | Position of the custom `#icon` slot (`"left"`, `"right"`). |
47
-
48
- ## Events
49
-
50
- | Event | Payload | Description |
51
- | --- | --- | --- |
52
- | `update:modelValue` | `value` | v-model sync. |
53
- | `input` | `value` | Fired on input. |
54
- | `keyup` | `KeyboardEvent` | Forwarded native event. |
55
- | `keydown` | `KeyboardEvent` | Forwarded native event. |
56
- | `paste` | `ClipboardEvent` | Forwarded native event. |
57
-
58
- ## Slots
59
-
60
- | Name | Description |
61
- | --- | --- |
62
- | `label` | Custom label content. |
63
- | `prefix` | Prefix icon / text. |
64
- | `icon` | Custom icon inside the input field. |
65
- | `postfix` | Postfix icon / text. |
66
- | `hints` | Helper text (overrides `hints` prop). |
1
+ # AbInputField — AI Reference
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.
4
+
5
+ ## Usage
6
+
7
+ ```vue
8
+ <template>
9
+ <ab-input-field
10
+ v-model="form.email"
11
+ name="email"
12
+ label="Email"
13
+ placeholder="you@example.com"
14
+ rules="required|email"
15
+ hints="We'll never share your email."
16
+ >
17
+ <template #prefix><i class="bi bi-envelope"></i></template>
18
+ </ab-input-field>
19
+ </template>
20
+
21
+ <script setup>
22
+ import { reactive } from 'vue';
23
+ const form = reactive({ email: '' });
24
+ </script>
25
+ ```
26
+
27
+ ## Props
28
+
29
+ | Name | Type | Default | Description |
30
+ | --- | --- | --- | --- |
31
+ | `modelValue` | `any` | `null` | Two-way-bound value. |
32
+ | `label` | `String` | `""` | Field label. |
33
+ | `placeholder` | `String` | `""` | Input placeholder. |
34
+ | `type` | `String` | `"text"` | Native input type (`text`, `email`, `password`, `number`, `tel`, …). |
35
+ | `name` | `String` | **required** | VeeValidate field name. |
36
+ | `isCodeInput` | `Boolean` | `false` | Applies monospace / code-input styling. |
37
+ | `rules` | `String \| Object` | `""` | VeeValidate rules. |
38
+ | `containerClass` | `String` | `"mb-3"` | Class on the wrapper `<div>`. |
39
+ | `hints` | `String` | `""` | Helper text beneath the input. |
40
+ | `prefix` | `String` | `""` | Prefix text/icon (shortcut for `#prefix` slot). |
41
+ | `postfix` | `String` | `""` | Postfix text/icon. |
42
+ | `maxlength` | `any` | `null` | Native `maxlength`. |
43
+ | `isLeftIconBorder` | `Boolean` | `false` | Renders border between the prefix icon and the input. |
44
+ | `isRightIconBorder` | `Boolean` | `false` | Renders border between the postfix icon and the input. |
45
+ | `isHideLabel` | `Boolean` | `false` | Hide the label visually. |
46
+ | `iconPosition` | `String` | `"right"` | Position of the custom `#icon` slot (`"left"`, `"right"`). |
47
+
48
+ ## Events
49
+
50
+ | Event | Payload | Description |
51
+ | --- | --- | --- |
52
+ | `update:modelValue` | `value` | v-model sync. |
53
+ | `input` | `value` | Fired on input. |
54
+ | `keyup` | `KeyboardEvent` | Forwarded native event. |
55
+ | `keydown` | `KeyboardEvent` | Forwarded native event. |
56
+ | `paste` | `ClipboardEvent` | Forwarded native event. |
57
+
58
+ ## Slots
59
+
60
+ | Name | Description |
61
+ | --- | --- |
62
+ | `label` | Custom label content. |
63
+ | `prefix` | Prefix icon / text. |
64
+ | `icon` | Custom icon inside the input field. |
65
+ | `postfix` | Postfix icon / text. |
66
+ | `hints` | Helper text (overrides `hints` prop). |
@@ -1,56 +1,56 @@
1
- # AbInputTag — AI Reference
2
-
3
- Multi-tag input — lets users enter and manage a list of tags. Optionally supports an `options` array for autocomplete-style selection.
4
-
5
- ## Usage
6
-
7
- ```vue
8
- <template>
9
- <ab-input-tag v-model="tags" name="tags" label="Tags" placeholder="Type and press Enter" :max="10" hints="Up to 10 tags" />
10
-
11
- <ab-input-tag v-model="skills" name="skills" :options="['Vue', 'React', 'Angular', 'Svelte']" />
12
- </template>
13
-
14
- <script setup>
15
- import { ref } from 'vue';
16
- const tags = ref([]);
17
- const skills = ref([]);
18
- </script>
19
- ```
20
-
21
- ## Props
22
-
23
- | Name | Type | Default | Description |
24
- | --- | --- | --- | --- |
25
- | `modelValue` | `Array` | `[]` | v-model array of selected tags. |
26
- | `options` | `Array` | `[]` | Each entry: `{ val, title }` or a plain string. |
27
- | `label` | `String` | `""` | Field label. |
28
- | `size` | `String` | `"md"` | Adjusts component size (`xs`, `sm`, `md`, `lg`, `xl`, `xxl`). |
29
- | `placeholder` | `String` | `""` | Placeholder text. |
30
- | `name` | `String` | **required** | VeeValidate field name. |
31
- | `rules` | `String \| Object` | `""` | VeeValidate rules. |
32
- | `containerClass` | `String` | `"mb-3"` | Wrapper class. |
33
- | `hints` | `String` | `""` | Helper text. |
34
- | `prefix` | `String` | `""` | Prefix icon/text. |
35
- | `postfix` | `String` | `""` | Postfix icon/text. |
36
- | `max` | `Number` | `0` | Max number of tags (0 = unlimited). |
37
- | `isLeftIconBorder` | `Boolean` | `false` | Border on prefix icon. |
38
- | `isRightIconBorder` | `Boolean` | `false` | Border on postfix icon. |
39
- | `isHideLabel` | `Boolean` | `false` | Hide the label visually. |
40
- | `iconPosition` | `String` | `"right"` | Position of the custom `#icon` slot (`"left"`, `"right"`). |
41
-
42
- ## Events
43
-
44
- | Event | Payload | Description |
45
- | --- | --- | --- |
46
- | `update:modelValue` | `Array` | v-model sync. |
47
-
48
- ## Slots
49
-
50
- | Name | Description |
51
- | --- | --- |
52
- | `label` | Custom label. |
53
- | `prefix` | Prefix icon/text. |
54
- | `icon` | Custom icon inside the input. |
55
- | `postfix` | Postfix icon/text. |
56
- | `hints` | Custom hints. |
1
+ # AbInputTag — AI Reference
2
+
3
+ Multi-tag input — lets users enter and manage a list of tags. Optionally supports an `options` array for autocomplete-style selection.
4
+
5
+ ## Usage
6
+
7
+ ```vue
8
+ <template>
9
+ <ab-input-tag v-model="tags" name="tags" label="Tags" placeholder="Type and press Enter" :max="10" hints="Up to 10 tags" />
10
+
11
+ <ab-input-tag v-model="skills" name="skills" :options="['Vue', 'React', 'Angular', 'Svelte']" />
12
+ </template>
13
+
14
+ <script setup>
15
+ import { ref } from 'vue';
16
+ const tags = ref([]);
17
+ const skills = ref([]);
18
+ </script>
19
+ ```
20
+
21
+ ## Props
22
+
23
+ | Name | Type | Default | Description |
24
+ | --- | --- | --- | --- |
25
+ | `modelValue` | `Array` | `[]` | v-model array of selected tags. |
26
+ | `options` | `Array` | `[]` | Each entry: `{ val, title }` or a plain string. |
27
+ | `label` | `String` | `""` | Field label. |
28
+ | `size` | `String` | `"md"` | Adjusts component size (`xs`, `sm`, `md`, `lg`, `xl`, `xxl`). |
29
+ | `placeholder` | `String` | `""` | Placeholder text. |
30
+ | `name` | `String` | **required** | VeeValidate field name. |
31
+ | `rules` | `String \| Object` | `""` | VeeValidate rules. |
32
+ | `containerClass` | `String` | `"mb-3"` | Wrapper class. |
33
+ | `hints` | `String` | `""` | Helper text. |
34
+ | `prefix` | `String` | `""` | Prefix icon/text. |
35
+ | `postfix` | `String` | `""` | Postfix icon/text. |
36
+ | `max` | `Number` | `0` | Max number of tags (0 = unlimited). |
37
+ | `isLeftIconBorder` | `Boolean` | `false` | Border on prefix icon. |
38
+ | `isRightIconBorder` | `Boolean` | `false` | Border on postfix icon. |
39
+ | `isHideLabel` | `Boolean` | `false` | Hide the label visually. |
40
+ | `iconPosition` | `String` | `"right"` | Position of the custom `#icon` slot (`"left"`, `"right"`). |
41
+
42
+ ## Events
43
+
44
+ | Event | Payload | Description |
45
+ | --- | --- | --- |
46
+ | `update:modelValue` | `Array` | v-model sync. |
47
+
48
+ ## Slots
49
+
50
+ | Name | Description |
51
+ | --- | --- |
52
+ | `label` | Custom label. |
53
+ | `prefix` | Prefix icon/text. |
54
+ | `icon` | Custom icon inside the input. |
55
+ | `postfix` | Postfix icon/text. |
56
+ | `hints` | Custom hints. |
@@ -1,23 +1,23 @@
1
- # AbKbd — AI Reference
2
-
3
- Styled `<kbd>`-like keyboard key chip. Compose multiple into a chord using `AbKbdGroup`.
4
-
5
- ## Usage
6
-
7
- ```vue
8
- <template>
9
- Press <ab-kbd>Esc</ab-kbd> to close.
10
-
11
- <ab-kbd-group>
12
- <ab-kbd>⌘</ab-kbd>
13
- <ab-kbd>Shift</ab-kbd>
14
- <ab-kbd>P</ab-kbd>
15
- </ab-kbd-group>
16
- </template>
17
- ```
18
-
19
- ## Slots
20
-
21
- | Name | Description |
22
- | --- | --- |
23
- | `default` | Key label (typically a single character or short word). |
1
+ # AbKbd — AI Reference
2
+
3
+ Styled `<kbd>`-like keyboard key chip. Compose multiple into a chord using `AbKbdGroup`.
4
+
5
+ ## Usage
6
+
7
+ ```vue
8
+ <template>
9
+ Press <ab-kbd>Esc</ab-kbd> to close.
10
+
11
+ <ab-kbd-group>
12
+ <ab-kbd>⌘</ab-kbd>
13
+ <ab-kbd>Shift</ab-kbd>
14
+ <ab-kbd>P</ab-kbd>
15
+ </ab-kbd-group>
16
+ </template>
17
+ ```
18
+
19
+ ## Slots
20
+
21
+ | Name | Description |
22
+ | --- | --- |
23
+ | `default` | Key label (typically a single character or short word). |
@@ -1,21 +1,21 @@
1
- # AbKbdGroup — AI Reference
2
-
3
- Visual grouping container for multiple `AbKbd` chips — renders keyboard chords / shortcuts.
4
-
5
- ## Usage
6
-
7
- ```vue
8
- <template>
9
- <ab-kbd-group>
10
- <ab-kbd>Ctrl</ab-kbd>
11
- <ab-kbd>Alt</ab-kbd>
12
- <ab-kbd>Del</ab-kbd>
13
- </ab-kbd-group>
14
- </template>
15
- ```
16
-
17
- ## Slots
18
-
19
- | Name | Description |
20
- | --- | --- |
21
- | `default` | One or more `AbKbd` children. |
1
+ # AbKbdGroup — AI Reference
2
+
3
+ Visual grouping container for multiple `AbKbd` chips — renders keyboard chords / shortcuts.
4
+
5
+ ## Usage
6
+
7
+ ```vue
8
+ <template>
9
+ <ab-kbd-group>
10
+ <ab-kbd>Ctrl</ab-kbd>
11
+ <ab-kbd>Alt</ab-kbd>
12
+ <ab-kbd>Del</ab-kbd>
13
+ </ab-kbd-group>
14
+ </template>
15
+ ```
16
+
17
+ ## Slots
18
+
19
+ | Name | Description |
20
+ | --- | --- |
21
+ | `default` | One or more `AbKbd` children. |
@@ -0,0 +1,106 @@
1
+ # AbMainLayout — AI Reference
2
+
3
+ Full-page application shell with left sidebar, right sidebar, header, body, and footer slots. On desktop the left sidebar is always visible; on mobile (< 576px) it becomes an overlay drawer with a backdrop. Use this as the top-level layout wrapper when building admin dashboards or panel-style applications.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @vue3-appsbd-ui
9
+ ```
10
+
11
+ `AbMainLayout` is **not** globally registered. Import it explicitly:
12
+
13
+ ```js
14
+ import { AbMainLayout } from "vue3-appsbd-ui";
15
+ ```
16
+
17
+ ## Usage
18
+
19
+ ```vue
20
+ <template>
21
+ <ab-main-layout ref="layoutRef">
22
+ <template #leftSidebar>
23
+ <ab-sidebar app-unique-id="my-app">
24
+ <ab-side-menu-item :to="{ name: 'dashboard' }">Dashboard</ab-side-menu-item>
25
+ </ab-sidebar>
26
+ </template>
27
+
28
+ <template #pageHeader>
29
+ <div class="d-flex align-items-center justify-content-between">
30
+ <h1>My App</h1>
31
+ <ab-dark-mode-toggler size="xs" />
32
+ </div>
33
+ </template>
34
+
35
+ <template #body>
36
+ <router-view />
37
+ </template>
38
+
39
+ <template #pageFooter>
40
+ <span>&copy; 2026 My Company</span>
41
+ </template>
42
+ </ab-main-layout>
43
+ </template>
44
+
45
+ <script setup>
46
+ import { AbMainLayout } from "vue3-appsbd-ui";
47
+ import { ref } from "vue";
48
+
49
+ const layoutRef = ref(null);
50
+ </script>
51
+ ```
52
+
53
+ ### Mobile sidebar toggle
54
+
55
+ On mobile, call `toggleLeftSidebar()` via the template ref to open/close the drawer:
56
+
57
+ ```vue
58
+ <template>
59
+ <ab-main-layout ref="layoutRef">
60
+ <template #pageHeader>
61
+ <button @click="layoutRef?.toggleLeftSidebar()">☰</button>
62
+ <h1>My App</h1>
63
+ </template>
64
+ <!-- ... -->
65
+ </ab-main-layout>
66
+ </template>
67
+ ```
68
+
69
+ ## Props
70
+
71
+ | Name | Type | Default | Description |
72
+ | --- | --- | --- | --- |
73
+ | `headerClass` | `String` | `"apbd-bordered"` | CSS class applied to the page header wrapper. Use `"apbd-bordered"` for a bordered header or `""` for no border. |
74
+ | `footerClass` | `String` | `""` | CSS class applied to the page footer wrapper. |
75
+
76
+ ## Slots
77
+
78
+ | Name | Scoped Payload | Description |
79
+ | --- | --- | --- |
80
+ | `leftSidebar` | — | Left sidebar panel. On desktop it's always visible; on mobile it slides in as a drawer. Typically hosts `AbSidebar`. |
81
+ | `pageHeader` | `{ headerClass }` | Top header bar. Receives the resolved `headerClass` as a scoped slot prop. |
82
+ | `bodyHeader` | — | Content rendered above the scrollable body area. |
83
+ | `body` | — | Main scrollable content area. |
84
+ | `bodyFooter` | — | Content rendered below the scrollable body area. |
85
+ | `pageFooter` | — | Bottom footer bar. |
86
+ | `rightSidebar` | — | Right sidebar panel. Only rendered when `isRightSidebarOpen` is `true`. |
87
+
88
+ ## Exposed methods
89
+
90
+ | Name | Signature | Description |
91
+ | --- | --- | --- |
92
+ | `isLeftSidebarOpen` | `Ref<boolean>` | Reactive state of the left sidebar (read-only). |
93
+ | `isRightSidebarOpen` | `Ref<boolean>` | Reactive state of the right sidebar (read-only). |
94
+ | `toggleLeftSidebar` | `(state?: boolean) => void` | Toggle or explicitly set left sidebar visibility. |
95
+ | `toggleRightSidebar` | `(state?: boolean) => void` | Toggle or explicitly set right sidebar visibility. |
96
+
97
+ ## Provides
98
+
99
+ The component provides a `layoutState` injection key to all descendants:
100
+
101
+ ```js
102
+ inject: ['layoutState']
103
+ // layoutState = { isLeftSidebarOpen, isRightSidebarOpen, toggleLeftSidebar, toggleRightSidebar }
104
+ ```
105
+
106
+ Child components (like `AbSidebar`) can inject this to react to or control the sidebar state.
@@ -1,78 +1,78 @@
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
- ## Usage
6
-
7
- ```vue
8
- <template>
9
- <ab-multi-select v-model="country" name="country" label="Country" :options="countries" label-key="title" value-key="val" searchable />
10
-
11
- <ab-multi-select v-model="skills" name="skills" label="Skills" mode="multiple" :options="skillOptions" :max="5" />
12
-
13
- <ab-multi-select v-model="hashtags" name="hashtags" mode="tags" searchable />
14
-
15
- <ab-multi-select v-model="user" name="user" is-ajax-search searchable :on-search="searchUsers" :loading="isSearching" />
16
- </template>
17
- ```
18
-
19
- ## Props
20
-
21
- | Name | Type | Default | Description |
22
- | --- | --- | --- | --- |
23
- | `modelValue` | `any` | `null` | v-model value. |
24
- | `label` | `String` | `""` | Field label. |
25
- | `placeholder` | `String` | `""` | Placeholder text. |
26
- | `type` | `String` | `"text"` | Input type. |
27
- | `name` | `String` | **required** | VeeValidate field name. |
28
- | `rules` | `String \| Object` | `""` | VeeValidate rules. |
29
- | `containerClass` | `String` | `"mb-3"` | Wrapper class. |
30
- | `hints` | `String` | `""` | Helper text. |
31
- | `multiple` | `Boolean` | `false` | Deprecated — use `mode` instead. |
32
- | `searchable` | `Boolean` | `false` | Enable option search/filter. |
33
- | `mode` | `String` | `"single"` | `single`, `multiple`, or `tags`. |
34
- | `size` | `String` | `"md"` | Adjusts component size (`xs`, `sm`, `md`, `lg`, `xl`, `xxl`). |
35
- | `options` | `Array` | `[]` | Available options. |
36
- | `labelKey` | `String` | `"title"` | Property to use for label. |
37
- | `valueKey` | `String` | `"val"` | Property to use for value. |
38
- | `max` | `Number` | `-1` | Max selections; `-1` = unlimited. |
39
- | `object` | `Boolean` | `false` | Return full objects instead of values. |
40
- | `prefix` | `String` | `""` | Prefix text. |
41
- | `postfix` | `String` | `""` | Postfix text. |
42
- | `isAjaxSearch` | `Boolean` | `false` | Enable async search via `onSearch`. |
43
- | `onSearch` | `Function` | `null` | Async handler `(query) => Promise<options>`. |
44
- | `hideSelected` | `Boolean` | `true` | Hide already-selected items from dropdown. |
45
- | `loading` | `Boolean` | `false` | Show a loading spinner. |
46
- | `disabled` | `Boolean` | `false` | Disable the field. |
47
- | `appendToBody` | `Boolean` | `true` | Teleport the dropdown to `<body>`. |
48
- | `isLeftIconBorder` | `Boolean` | `false` | Border on prefix icon. |
49
- | `isRightIconBorder` | `Boolean` | `false` | Border on postfix icon. |
50
- | `isHideLabel` | `Boolean` | `false` | Hide the label visually. |
51
- | `iconPosition` | `String` | `"right"` | Position of the custom `#icon` slot (`"left"`, `"right"`). |
52
-
53
- ## Events
54
-
55
- | Event | Payload | Description |
56
- | --- | --- | --- |
57
- | `update:modelValue` | `value` | v-model sync. |
58
- | `clear` | — | Selection cleared. |
59
- | `change` | `value` | Value changed. |
60
- | `select` | `value` | An option was selected. |
61
- | `open` | — | Dropdown opened. |
62
- | `close` | — | Dropdown closed. |
63
- | `search-change` | `query` | Search input changed. |
64
-
65
- ## Slots
66
-
67
- | Name | Scope | Description |
68
- | --- | --- | --- |
69
- | `label` | — | Custom label. |
70
- | `prefix` | — | Prefix slot. |
71
- | `icon` | — | Custom icon slot. |
72
- | `postfix` | — | Postfix slot. |
73
- | `singlelabel` | `value` | Custom single-mode label rendering. |
74
- | `taglabel` | `value` | Custom tag-mode label rendering. |
75
- | `option` | `{ option, isSelected }` | Custom option rendering. |
76
- | `noresults` | — | Empty state content. |
77
- | `option-loading` | — | Loading message. |
78
- | `loader-icon` | — | Custom loader icon. |
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
+ ## Usage
6
+
7
+ ```vue
8
+ <template>
9
+ <ab-multi-select v-model="country" name="country" label="Country" :options="countries" label-key="title" value-key="val" searchable />
10
+
11
+ <ab-multi-select v-model="skills" name="skills" label="Skills" mode="multiple" :options="skillOptions" :max="5" />
12
+
13
+ <ab-multi-select v-model="hashtags" name="hashtags" mode="tags" searchable />
14
+
15
+ <ab-multi-select v-model="user" name="user" is-ajax-search searchable :on-search="searchUsers" :loading="isSearching" />
16
+ </template>
17
+ ```
18
+
19
+ ## Props
20
+
21
+ | Name | Type | Default | Description |
22
+ | --- | --- | --- | --- |
23
+ | `modelValue` | `any` | `null` | v-model value. |
24
+ | `label` | `String` | `""` | Field label. |
25
+ | `placeholder` | `String` | `""` | Placeholder text. |
26
+ | `type` | `String` | `"text"` | Input type. |
27
+ | `name` | `String` | **required** | VeeValidate field name. |
28
+ | `rules` | `String \| Object` | `""` | VeeValidate rules. |
29
+ | `containerClass` | `String` | `"mb-3"` | Wrapper class. |
30
+ | `hints` | `String` | `""` | Helper text. |
31
+ | `multiple` | `Boolean` | `false` | Deprecated — use `mode` instead. |
32
+ | `searchable` | `Boolean` | `false` | Enable option search/filter. |
33
+ | `mode` | `String` | `"single"` | `single`, `multiple`, or `tags`. |
34
+ | `size` | `String` | `"md"` | Adjusts component size (`xs`, `sm`, `md`, `lg`, `xl`, `xxl`). |
35
+ | `options` | `Array` | `[]` | Available options. |
36
+ | `labelKey` | `String` | `"title"` | Property to use for label. |
37
+ | `valueKey` | `String` | `"val"` | Property to use for value. |
38
+ | `max` | `Number` | `-1` | Max selections; `-1` = unlimited. |
39
+ | `object` | `Boolean` | `false` | Return full objects instead of values. |
40
+ | `prefix` | `String` | `""` | Prefix text. |
41
+ | `postfix` | `String` | `""` | Postfix text. |
42
+ | `isAjaxSearch` | `Boolean` | `false` | Enable async search via `onSearch`. |
43
+ | `onSearch` | `Function` | `null` | Async handler `(query) => Promise<options>`. |
44
+ | `hideSelected` | `Boolean` | `true` | Hide already-selected items from dropdown. |
45
+ | `loading` | `Boolean` | `false` | Show a loading spinner. |
46
+ | `disabled` | `Boolean` | `false` | Disable the field. |
47
+ | `appendToBody` | `Boolean` | `true` | Teleport the dropdown to `<body>`. |
48
+ | `isLeftIconBorder` | `Boolean` | `false` | Border on prefix icon. |
49
+ | `isRightIconBorder` | `Boolean` | `false` | Border on postfix icon. |
50
+ | `isHideLabel` | `Boolean` | `false` | Hide the label visually. |
51
+ | `iconPosition` | `String` | `"right"` | Position of the custom `#icon` slot (`"left"`, `"right"`). |
52
+
53
+ ## Events
54
+
55
+ | Event | Payload | Description |
56
+ | --- | --- | --- |
57
+ | `update:modelValue` | `value` | v-model sync. |
58
+ | `clear` | — | Selection cleared. |
59
+ | `change` | `value` | Value changed. |
60
+ | `select` | `value` | An option was selected. |
61
+ | `open` | — | Dropdown opened. |
62
+ | `close` | — | Dropdown closed. |
63
+ | `search-change` | `query` | Search input changed. |
64
+
65
+ ## Slots
66
+
67
+ | Name | Scope | Description |
68
+ | --- | --- | --- |
69
+ | `label` | — | Custom label. |
70
+ | `prefix` | — | Prefix slot. |
71
+ | `icon` | — | Custom icon slot. |
72
+ | `postfix` | — | Postfix slot. |
73
+ | `singlelabel` | `value` | Custom single-mode label rendering. |
74
+ | `taglabel` | `value` | Custom tag-mode label rendering. |
75
+ | `option` | `{ option, isSelected }` | Custom option rendering. |
76
+ | `noresults` | — | Empty state content. |
77
+ | `option-loading` | — | Loading message. |
78
+ | `loader-icon` | — | Custom loader icon. |