@vc-shell/vc-app-skill 2.0.3 → 2.0.4

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 (155) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/package.json +1 -1
  3. package/runtime/VERSION +1 -1
  4. package/runtime/knowledge/docs/_BUILD_HASH.md +1 -1
  5. package/runtime/knowledge/docs/core/api/platform.docs.md +7 -0
  6. package/runtime/knowledge/docs/core/blade-navigation/blade-nav-composables.docs.md +20 -4
  7. package/runtime/knowledge/docs/core/composables/bladeContext/index.docs.md +15 -3
  8. package/runtime/knowledge/docs/core/composables/useApiClient/useApiClient.docs.md +13 -4
  9. package/runtime/knowledge/docs/core/composables/useAppBarMobileButtons/useAppBarMobileButtons.docs.md +10 -0
  10. package/runtime/knowledge/docs/core/composables/useAppBarWidget/useAppBarWidget.docs.md +6 -0
  11. package/runtime/knowledge/docs/core/composables/useAppInsights/useAppInsights.docs.md +6 -0
  12. package/runtime/knowledge/docs/core/composables/useAssets/useAssets.docs.md +8 -1
  13. package/runtime/knowledge/docs/core/composables/useAssetsManager/useAssetsManager.docs.md +15 -4
  14. package/runtime/knowledge/docs/core/composables/useAsync/useAsync.docs.md +13 -0
  15. package/runtime/knowledge/docs/core/composables/useBeforeUnload/useBeforeUnload.docs.md +6 -0
  16. package/runtime/knowledge/docs/core/composables/useBlade/useBlade.docs.md +13 -0
  17. package/runtime/knowledge/docs/core/composables/useBladeForm/useBladeForm.docs.md +12 -2
  18. package/runtime/knowledge/docs/core/composables/useBladeRegistry/useBladeRegistry.docs.md +14 -4
  19. package/runtime/knowledge/docs/core/composables/useBladeWidgets/index.docs.md +23 -9
  20. package/runtime/knowledge/docs/core/composables/useBreadcrumbs/useBreadcrumbs.docs.md +6 -0
  21. package/runtime/knowledge/docs/core/composables/useConnectionStatus/useConnectionStatus.docs.md +10 -0
  22. package/runtime/knowledge/docs/core/composables/useDashboard/useDashboard.docs.md +9 -0
  23. package/runtime/knowledge/docs/core/composables/useDynamicProperties/useDynamicProperties.docs.md +6 -0
  24. package/runtime/knowledge/docs/core/composables/useErrorHandler/useErrorHandler.docs.md +6 -0
  25. package/runtime/knowledge/docs/core/composables/useFunctions/useFunctions.docs.md +6 -0
  26. package/runtime/knowledge/docs/core/composables/useKeyboardNavigation/useKeyboardNavigation.docs.md +10 -0
  27. package/runtime/knowledge/docs/core/composables/useLanguages/useLanguages.docs.md +6 -0
  28. package/runtime/knowledge/docs/core/composables/useLoading/useLoading.docs.md +10 -0
  29. package/runtime/knowledge/docs/core/composables/useMenuExpanded/index.docs.md +10 -0
  30. package/runtime/knowledge/docs/core/composables/useMenuService/useMenuService.docs.md +9 -0
  31. package/runtime/knowledge/docs/core/composables/useModificationTracker/useModificationTracker.docs.md +6 -0
  32. package/runtime/knowledge/docs/core/composables/useNotifications/useNotifications.docs.md +6 -0
  33. package/runtime/knowledge/docs/core/composables/usePermissions/usePermissions.docs.md +9 -0
  34. package/runtime/knowledge/docs/core/composables/usePlatformLocaleSync/usePlatformLocaleSync.docs.md +6 -0
  35. package/runtime/knowledge/docs/core/composables/usePopup/usePopup.docs.md +9 -0
  36. package/runtime/knowledge/docs/core/composables/useResponsive/useResponsive.docs.md +10 -0
  37. package/runtime/knowledge/docs/core/composables/useSettings/useSettings.docs.md +6 -0
  38. package/runtime/knowledge/docs/core/composables/useSettingsMenu/useSettingsMenu.docs.md +6 -0
  39. package/runtime/knowledge/docs/core/composables/useSidebarState/useSidebarState.docs.md +10 -0
  40. package/runtime/knowledge/docs/core/composables/useSlowNetworkDetection/useSlowNetworkDetection.docs.md +9 -0
  41. package/runtime/knowledge/docs/core/composables/useTheme/useTheme.docs.md +9 -0
  42. package/runtime/knowledge/docs/core/composables/useToolbar/useToolbar.docs.md +9 -0
  43. package/runtime/knowledge/docs/core/composables/useUser/useUser.docs.md +6 -0
  44. package/runtime/knowledge/docs/core/composables/useUserManagement/useUserManagement.docs.md +7 -0
  45. package/runtime/knowledge/docs/core/composables/useWebVitals/useWebVitals.docs.md +6 -0
  46. package/runtime/knowledge/docs/core/composables/useWidgets/useWidgets.docs.md +10 -0
  47. package/runtime/knowledge/docs/core/directives/autofocus/autofocus.docs.md +7 -0
  48. package/runtime/knowledge/docs/core/directives/loading/loading.docs.md +7 -0
  49. package/runtime/knowledge/docs/core/notifications/notifications.docs.md +21 -0
  50. package/runtime/knowledge/docs/core/plugins/ai-agent/ai-agent.docs.md +7 -0
  51. package/runtime/knowledge/docs/core/plugins/extension-points/extension-points.docs.md +10 -0
  52. package/runtime/knowledge/docs/core/plugins/global-error-handler/global-error-handler.docs.md +7 -0
  53. package/runtime/knowledge/docs/core/plugins/i18n/i18n.docs.md +10 -0
  54. package/runtime/knowledge/docs/core/plugins/modularity/modularity.docs.md +10 -0
  55. package/runtime/knowledge/docs/core/plugins/permissions/permissions.docs.md +8 -1
  56. package/runtime/knowledge/docs/core/plugins/signalR/signalR.docs.md +7 -0
  57. package/runtime/knowledge/docs/core/plugins/validation/validation.docs.md +10 -0
  58. package/runtime/knowledge/docs/core/services/services.docs.md +16 -1
  59. package/runtime/knowledge/docs/core/types/types.docs.md +7 -0
  60. package/runtime/knowledge/docs/core/utilities/date/date-utilities.docs.md +7 -0
  61. package/runtime/knowledge/docs/core/utilities/shared-utilities.docs.md +7 -0
  62. package/runtime/knowledge/docs/core/utilities/thumbnail/thumbnail.docs.md +7 -0
  63. package/runtime/knowledge/docs/core/utilities/utilities.docs.md +7 -0
  64. package/runtime/knowledge/docs/injection-keys.docs.md +11 -0
  65. package/runtime/knowledge/docs/modules/assets/assets-details.docs.md +123 -0
  66. package/runtime/knowledge/docs/modules/assets-manager/assets-manager.docs.md +89 -12
  67. package/runtime/knowledge/docs/shell/_internal/popup/common/popup-common.docs.md +7 -0
  68. package/runtime/knowledge/docs/shell/auth/ChangePasswordPage/change-password-page.docs.md +7 -0
  69. package/runtime/knowledge/docs/shell/auth/ForgotPasswordPage/forgot-password-page.docs.md +7 -0
  70. package/runtime/knowledge/docs/shell/auth/InvitePage/invite-page.docs.md +7 -0
  71. package/runtime/knowledge/docs/shell/auth/LoginPage/login-page.docs.md +7 -0
  72. package/runtime/knowledge/docs/shell/auth/ResetPasswordPage/reset-password-page.docs.md +7 -0
  73. package/runtime/knowledge/docs/shell/auth/sign-in/sign-in.docs.md +7 -0
  74. package/runtime/knowledge/docs/shell/components/change-password/change-password.docs.md +7 -0
  75. package/runtime/knowledge/docs/shell/components/change-password-button/change-password-button.docs.md +7 -0
  76. package/runtime/knowledge/docs/shell/components/error-interceptor/error-interceptor.docs.md +7 -0
  77. package/runtime/knowledge/docs/shell/components/language-selector/language-selector.docs.md +7 -0
  78. package/runtime/knowledge/docs/shell/components/logout-button/logout-button.docs.md +7 -0
  79. package/runtime/knowledge/docs/shell/components/notification-dropdown/notification-dropdown.docs.md +7 -0
  80. package/runtime/knowledge/docs/shell/components/notification-template/notification-template.docs.md +7 -0
  81. package/runtime/knowledge/docs/shell/components/settings-menu/settings-menu.docs.md +7 -0
  82. package/runtime/knowledge/docs/shell/components/settings-menu-item/settings-menu-item.docs.md +7 -0
  83. package/runtime/knowledge/docs/shell/components/sidebar/sidebar.docs.md +7 -0
  84. package/runtime/knowledge/docs/shell/components/theme-selector/theme-selector.docs.md +7 -0
  85. package/runtime/knowledge/docs/shell/components/user-dropdown-button/user-dropdown-button.docs.md +7 -0
  86. package/runtime/knowledge/docs/shell/dashboard/dashboard-charts/dashboard-charts.docs.md +7 -0
  87. package/runtime/knowledge/docs/shell/dashboard/dashboard-widget-card/dashboard-widget-card.docs.md +7 -0
  88. package/runtime/knowledge/docs/shell/dashboard/draggable-dashboard/dashboard-widget-skeleton.docs.md +7 -0
  89. package/runtime/knowledge/docs/shell/dashboard/draggable-dashboard/draggable-dashboard.docs.md +7 -0
  90. package/runtime/knowledge/docs/ui/components/atoms/vc-badge/vc-badge.docs.md +24 -0
  91. package/runtime/knowledge/docs/ui/components/atoms/vc-banner/vc-banner.docs.md +20 -0
  92. package/runtime/knowledge/docs/ui/components/atoms/vc-button/vc-button.docs.md +32 -5
  93. package/runtime/knowledge/docs/ui/components/atoms/vc-card/vc-card.docs.md +15 -2
  94. package/runtime/knowledge/docs/ui/components/atoms/vc-col/vc-col.docs.md +11 -1
  95. package/runtime/knowledge/docs/ui/components/atoms/vc-container/vc-container.docs.md +10 -0
  96. package/runtime/knowledge/docs/ui/components/atoms/vc-hint/vc-hint.docs.md +20 -0
  97. package/runtime/knowledge/docs/ui/components/atoms/vc-icon/vc-icon.docs.md +24 -0
  98. package/runtime/knowledge/docs/ui/components/atoms/vc-image/vc-image.docs.md +26 -0
  99. package/runtime/knowledge/docs/ui/components/atoms/vc-label/vc-label.docs.md +24 -0
  100. package/runtime/knowledge/docs/ui/components/atoms/vc-link/vc-link.docs.md +22 -0
  101. package/runtime/knowledge/docs/ui/components/atoms/vc-loading/vc-loading.docs.md +21 -0
  102. package/runtime/knowledge/docs/ui/components/atoms/vc-progress/vc-progress.docs.md +20 -0
  103. package/runtime/knowledge/docs/ui/components/atoms/vc-row/vc-row.docs.md +11 -1
  104. package/runtime/knowledge/docs/ui/components/atoms/vc-scrollable-container/vc-scrollable-container.docs.md +11 -1
  105. package/runtime/knowledge/docs/ui/components/atoms/vc-skeleton/vc-skeleton.docs.md +20 -0
  106. package/runtime/knowledge/docs/ui/components/atoms/vc-status/vc-status.docs.md +20 -0
  107. package/runtime/knowledge/docs/ui/components/atoms/vc-status-icon/vc-status-icon.docs.md +20 -0
  108. package/runtime/knowledge/docs/ui/components/atoms/vc-tooltip/vc-tooltip.docs.md +25 -1
  109. package/runtime/knowledge/docs/ui/components/atoms/vc-video/vc-video.docs.md +25 -0
  110. package/runtime/knowledge/docs/ui/components/atoms/vc-widget/vc-widget.docs.md +22 -0
  111. package/runtime/knowledge/docs/ui/components/molecules/multilanguage-selector/multilanguage-selector.docs.md +10 -0
  112. package/runtime/knowledge/docs/ui/components/molecules/vc-accordion/vc-accordion.docs.md +17 -0
  113. package/runtime/knowledge/docs/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.docs.md +27 -0
  114. package/runtime/knowledge/docs/ui/components/molecules/vc-checkbox/vc-checkbox.docs.md +27 -0
  115. package/runtime/knowledge/docs/ui/components/molecules/vc-checkbox-group/vc-checkbox-group.docs.md +23 -0
  116. package/runtime/knowledge/docs/ui/components/molecules/vc-color-input/vc-color-input.docs.md +24 -0
  117. package/runtime/knowledge/docs/ui/components/molecules/vc-date-picker/vc-date-picker.docs.md +27 -0
  118. package/runtime/knowledge/docs/ui/components/molecules/vc-dropdown/vc-dropdown.docs.md +27 -0
  119. package/runtime/knowledge/docs/ui/components/molecules/vc-dropdown-panel/vc-dropdown-panel.docs.md +22 -0
  120. package/runtime/knowledge/docs/ui/components/molecules/vc-editor/vc-editor.docs.md +17 -0
  121. package/runtime/knowledge/docs/ui/components/molecules/vc-field/vc-field.docs.md +17 -0
  122. package/runtime/knowledge/docs/ui/components/molecules/vc-file-upload/vc-file-upload.docs.md +17 -0
  123. package/runtime/knowledge/docs/ui/components/molecules/vc-form/vc-form.docs.md +15 -0
  124. package/runtime/knowledge/docs/ui/components/molecules/vc-image-tile/vc-image-tile.docs.md +12 -0
  125. package/runtime/knowledge/docs/ui/components/molecules/vc-input/vc-input.docs.md +30 -0
  126. package/runtime/knowledge/docs/ui/components/molecules/vc-input-currency/vc-input-currency.docs.md +27 -0
  127. package/runtime/knowledge/docs/ui/components/molecules/vc-input-dropdown/vc-input-dropdown.docs.md +26 -0
  128. package/runtime/knowledge/docs/ui/components/molecules/vc-input-group/vc-input-group.docs.md +21 -0
  129. package/runtime/knowledge/docs/ui/components/molecules/vc-menu/vc-menu.docs.md +24 -0
  130. package/runtime/knowledge/docs/ui/components/molecules/vc-multivalue/vc-multivalue.docs.md +28 -0
  131. package/runtime/knowledge/docs/ui/components/molecules/vc-pagination/vc-pagination.docs.md +25 -0
  132. package/runtime/knowledge/docs/ui/components/molecules/vc-radio-button/vc-radio-button.docs.md +25 -0
  133. package/runtime/knowledge/docs/ui/components/molecules/vc-radio-group/vc-radio-group.docs.md +22 -0
  134. package/runtime/knowledge/docs/ui/components/molecules/vc-rating/vc-rating.docs.md +17 -0
  135. package/runtime/knowledge/docs/ui/components/molecules/vc-select/vc-select.docs.md +32 -0
  136. package/runtime/knowledge/docs/ui/components/molecules/vc-slider/vc-slider.docs.md +22 -0
  137. package/runtime/knowledge/docs/ui/components/molecules/vc-switch/vc-switch.docs.md +25 -0
  138. package/runtime/knowledge/docs/ui/components/molecules/vc-textarea/vc-textarea.docs.md +27 -0
  139. package/runtime/knowledge/docs/ui/components/molecules/vc-toast/vc-toast.docs.md +28 -0
  140. package/runtime/knowledge/docs/ui/components/organisms/vc-app/vc-app.docs.md +19 -0
  141. package/runtime/knowledge/docs/ui/components/organisms/vc-auth-layout/vc-auth-layout.docs.md +13 -0
  142. package/runtime/knowledge/docs/ui/components/organisms/vc-blade/vc-blade.docs.md +22 -1
  143. package/runtime/knowledge/docs/ui/components/organisms/vc-data-table/composables/table-composables.docs.md +30 -5
  144. package/runtime/knowledge/docs/ui/components/organisms/vc-data-table/vc-data-table.docs.md +18 -0
  145. package/runtime/knowledge/docs/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.docs.md +12 -0
  146. package/runtime/knowledge/docs/ui/components/organisms/vc-gallery/vc-gallery.docs.md +14 -0
  147. package/runtime/knowledge/docs/ui/components/organisms/vc-image-upload/vc-image-upload.docs.md +12 -0
  148. package/runtime/knowledge/docs/ui/components/organisms/vc-popup/vc-popup.docs.md +14 -1
  149. package/runtime/knowledge/docs/ui/components/organisms/vc-sidebar/vc-sidebar.docs.md +13 -0
  150. package/runtime/knowledge/docs/ui/composables/ui-composables.docs.md +7 -0
  151. package/runtime/knowledge/docs/ui/composables/useDataTablePagination.docs.md +9 -3
  152. package/runtime/knowledge/docs/ui/composables/useDataTableSort.docs.md +6 -0
  153. package/runtime/knowledge/docs/ui/composables/useTableSelection.docs.md +6 -0
  154. package/runtime/knowledge/docs/ui/composables/useTableSort.docs.md +6 -0
  155. package/runtime/knowledge/docs/ui/types/ui-types.docs.md +7 -0
@@ -1,3 +1,9 @@
1
+ ---
2
+ title: VcFileUpload
3
+ category: components
4
+ group: form
5
+ ---
6
+
1
7
  # VcFileUpload
2
8
 
3
9
  Drag-and-drop file upload zone with file type filtering, validation, loading state, and error display. Provides both drag-and-drop and click-to-browse interactions in a single drop zone.
@@ -15,6 +21,8 @@ Drag-and-drop file upload zone with file type filtering, validation, loading sta
15
21
 
16
22
  ## Quick Start
17
23
 
24
+ ::storybook id="form-vcfileupload--default"
25
+
18
26
  ```vue
19
27
  <template>
20
28
  <VcFileUpload
@@ -75,6 +83,9 @@ Integrate with vee-validate for file validation rules such as size limits:
75
83
 
76
84
  When validation fails, the error is displayed below the drop zone using the built-in `VcHint` component. The `upload` event is only emitted when validation passes.
77
85
 
86
+ !!! warning "FileList is not a plain Array"
87
+ The `upload` event emits a `FileList` object, not `File[]`. Always convert with `Array.from(files)` before calling array methods like `.map()` or `.filter()`.
88
+
78
89
  ## Loading State
79
90
 
80
91
  Show a loading overlay while files are being processed or uploaded:
@@ -102,6 +113,8 @@ Override the default drag-and-drop instructions and icon:
102
113
 
103
114
  The default icon is `"lucide-cloud-upload"`. The default text is pulled from the `COMPONENTS.MOLECULES.VC_FILE_UPLOAD.DRAG_HERE` and `COMPONENTS.MOLECULES.VC_FILE_UPLOAD.BROWSE` locale keys.
104
115
 
116
+ ::storybook id="form-vcfileupload--loading"
117
+
105
118
  ## Error Display
106
119
 
107
120
  Errors can come from three sources (by priority): the `errorMessage` prop, vee-validate `rules`, or the `error` slot for fully custom rendering.
@@ -120,6 +133,8 @@ Errors can come from three sources (by priority): the `errorMessage` prop, vee-v
120
133
 
121
134
  When any error is present, the drop zone border changes to the error color and a ring appears.
122
135
 
136
+ ::storybook id="form-vcfileupload--with-error-message"
137
+
123
138
  ## Disabled State
124
139
 
125
140
  Disable all interactions (drag, drop, click, keyboard):
@@ -316,6 +331,8 @@ async function onUpload(files: FileList) {
316
331
  - [VcImageTile](../vc-image-tile/) -- Image display tile used inside galleries
317
332
  - [VcHint](../../atoms/vc-hint/) -- Used internally for error message display
318
333
 
334
+ ::storybook id="form-vcfileupload--skeleton"
335
+
319
336
  ## Skeleton / Loading State
320
337
 
321
338
  When placed inside a `VcBlade` with `loading=true`, the component automatically renders a skeleton placeholder matching its visual footprint. No additional props or configuration needed.
@@ -1,3 +1,9 @@
1
+ ---
2
+ title: VcForm
3
+ category: components
4
+ group: form
5
+ ---
6
+
1
7
  # VcForm
2
8
 
3
9
  A lightweight `<form>` wrapper that provides consistent styling, prevents default browser submission, and serves as the standard container for validated form fields in blade detail views.
@@ -16,6 +22,8 @@ A lightweight `<form>` wrapper that provides consistent styling, prevents defaul
16
22
 
17
23
  ## Quick Start
18
24
 
25
+ ::storybook id="form-vcform--basic"
26
+
19
27
  ```vue
20
28
  <template>
21
29
  <VcForm @submit="handleSubmit">
@@ -50,6 +58,9 @@ function handleSubmit() {
50
58
 
51
59
  ---
52
60
 
61
+ !!! note "Form validation is handled by vee-validate"
62
+ VcForm itself does not validate fields — it only provides the `<form>` wrapper. Use vee-validate's `Field` component around each input that needs validation rules.
63
+
53
64
  ## Features
54
65
 
55
66
  ### Basic Form Layout (VcForm + VcRow + VcCol)
@@ -174,6 +185,8 @@ const bladeToolbar = ref<IBladeToolbar[]>([
174
185
 
175
186
  ---
176
187
 
188
+ ::storybook id="form-vcform--with-fieldsets" height="500"
189
+
177
190
  ## Recipes
178
191
 
179
192
  ### Complete CRUD Blade Form
@@ -303,6 +316,8 @@ onBeforeClose(async () => {
303
316
  </script>
304
317
  ```
305
318
 
319
+ ::storybook id="form-vcform--horizontal-layout" height="400"
320
+
306
321
  ### Form with Mixed Field Types
307
322
 
308
323
  Demonstrates inputs, selects, checkboxes, and switches together in a single form.
@@ -1,3 +1,9 @@
1
+ ---
2
+ title: VcImageTile
3
+ category: components
4
+ group: data-display
5
+ ---
6
+
1
7
  # VcImageTile
2
8
 
3
9
  Square image tile with skeleton loading, fade-in transition, and a slide-up action tray on hover (desktop) or tap (touch devices).
@@ -10,6 +16,8 @@ Square image tile with skeleton loading, fade-in transition, and a slide-up acti
10
16
 
11
17
  ## Basic Usage
12
18
 
19
+ ::storybook id="action-vcimagetile--default"
20
+
13
21
  ```vue
14
22
  <template>
15
23
  <div style="width: 160px;">
@@ -73,6 +81,8 @@ interface VcImageTileActions {
73
81
 
74
82
  ## Common Patterns
75
83
 
84
+ ::storybook id="action-vcimagetile--all-actions"
85
+
76
86
  ### Image Grid
77
87
 
78
88
  ```vue
@@ -114,6 +124,8 @@ interface VcImageTileActions {
114
124
  </VcImageTile>
115
125
  ```
116
126
 
127
+ ::storybook id="action-vcimagetile--skeleton"
128
+
117
129
  ### Skeleton State
118
130
 
119
131
  When `src` is not provided or the image is still loading, a shimmer animation skeleton is displayed automatically. No additional configuration is needed.
@@ -1,7 +1,18 @@
1
+ ---
2
+ title: VcInput
3
+ category: components
4
+ group: form
5
+ ---
6
+
7
+ !!! note "Large reference page"
8
+ This page is long. Use the section links in the sidebar or your browser's in-page search (Ctrl/Cmd+F) to jump to the section you need.
9
+
1
10
  # VcInput
2
11
 
3
12
  A single-line text input component for forms in vc-shell applications. Supports multiple input types (text, number, password, email, and more), prefix/suffix decorations, inner/outer slot content, built-in clearable state, password visibility toggle, loading indicator, debounced model updates, and integration with vee-validate for validation.
4
13
 
14
+ ::storybook id="form-vcinput--default"
15
+
5
16
  ## When to Use
6
17
 
7
18
  | Scenario | Component |
@@ -44,10 +55,14 @@ const productName = ref("");
44
55
 
45
56
  This renders a labeled text input with placeholder text. The value is two-way bound via `v-model`.
46
57
 
58
+ ::storybook id="form-vcinput--all-states" height="450"
59
+
47
60
  ---
48
61
 
49
62
  ## Input Types
50
63
 
64
+ ::storybook id="form-vcinput--input-types" height="500"
65
+
51
66
  VcInput supports the following `type` values. Each type adjusts the native `<input>` behavior and, in some cases, adds extra UI or filtering logic.
52
67
 
53
68
  | Type | Behavior |
@@ -298,6 +313,8 @@ Override the default error message or hint text rendering.
298
313
 
299
314
  ## Sizes
300
315
 
316
+ ::storybook id="form-vcinput--all-sizes"
317
+
301
318
  Two size variants are available:
302
319
 
303
320
  | Size | Height | Use case |
@@ -771,3 +788,16 @@ VcInput follows WAI-ARIA best practices for form fields:
771
788
  When placed inside a `VcBlade` with `loading=true`, the component automatically renders a skeleton placeholder matching its visual footprint — a label block (when the `label` prop is set) and an input-shaped block. No additional props or configuration needed.
772
789
 
773
790
  This behavior is powered by `BladeLoadingKey` via Vue's provide/inject. The component injects the loading state from the nearest `VcBlade` ancestor.
791
+
792
+ <!-- internal:start -->
793
+
794
+ ## Architecture Notes
795
+
796
+ - The `type="date"`, `type="datetime-local"`, and `type="color"` values trigger internal delegation — the component renders `VcDatePicker` or `VcColorInput` instead of a native `<input>`. All forwarded props are passed via `v-bind="$attrs"`.
797
+ - Debounce is implemented via a `useDebounceFn` wrapper from VueUse. The internal `temp` ref holds the raw typing value; the `modelValue` update is deferred.
798
+ - `number` / `integer` type filtering uses `keydown` event guards — not `input` event filtering — to block `-`, `+`, `e`, and (for `integer`) `.` keys before they reach the input.
799
+ - `type="password"` show/hide toggle is controlled by `showPassword` ref; the native `input` type toggles between `"password"` and `"text"`.
800
+ - The `control` slot replaces the native `<input>` with an arbitrary element. The `emitValue` scope function wraps the debounce logic, so custom controls respect the `debounce` prop automatically.
801
+ - Source file: `framework/ui/components/molecules/vc-input/vc-input.vue`
802
+
803
+ <!-- internal:end -->
@@ -1,7 +1,18 @@
1
+ ---
2
+ title: VcInputCurrency
3
+ category: components
4
+ group: form
5
+ ---
6
+
7
+ !!! note "Large reference page"
8
+ This page is long. Use the section links in the sidebar or your browser's in-page search (Ctrl/Cmd+F) to jump to the section you need.
9
+
1
10
  # VcInputCurrency
2
11
 
3
12
  A specialized currency input that combines locale-aware number formatting (grouping separators, decimal precision) with a dropdown for selecting the currency. Built on top of [vue-currency-input](https://dm4t2.github.io/vue-currency-input/) and [VcInputDropdown](../vc-input-dropdown/).
4
13
 
14
+ ::storybook id="form-vcinputcurrency--default"
15
+
5
16
  ## When to Use
6
17
 
7
18
  - Entering monetary values with currency selection (e.g., product prices, order totals, shipping costs)
@@ -60,6 +71,8 @@ The dropdown portion renders the available currencies. Use `optionLabel` and `op
60
71
 
61
72
  ### Precision Control
62
73
 
74
+ ::storybook id="form-vcinputcurrency--precision-options"
75
+
63
76
  The `precision` prop controls the number of decimal places (0--15). The formatting engine rounds and pads the value accordingly.
64
77
 
65
78
  ```vue
@@ -146,6 +159,8 @@ const form = reactive({
146
159
 
147
160
  ### States
148
161
 
162
+ ::storybook id="form-vcinputcurrency--with-error"
163
+
149
164
  ```vue
150
165
  <!-- Required -->
151
166
  <VcInputCurrency v-model="price" v-model:option="currency" :options="currencies" label="Price" required />
@@ -334,3 +349,15 @@ Additionally inherits all `--input-*` CSS variables from VcInput/VcInputDropdown
334
349
  When placed inside a `VcBlade` with `loading=true`, the component automatically renders a skeleton placeholder matching its visual footprint — a label block (when the `label` prop is set) and an input-shaped block. No additional props or configuration needed.
335
350
 
336
351
  This behavior is powered by `BladeLoadingKey` via Vue's provide/inject. The component injects the loading state from the nearest `VcBlade` ancestor.
352
+
353
+ <!-- internal:start -->
354
+
355
+ ## Architecture Notes
356
+
357
+ - Built as a wrapper around `VcInputDropdown`. The numeric input side uses `vue-currency-input` for locale-aware formatting; the right side is `VcInputDropdown`'s built-in dropdown.
358
+ - The minus key (`-`) and exponential notation key (`e`) are blocked at the `keydown` level, not via `input` validation.
359
+ - `precision` is forwarded directly to `vue-currency-input`'s `CurrencyInputOptions`.
360
+ - `currencyDisplay` maps to the `vue-currency-input` option of the same name.
361
+ - Source file: `framework/ui/components/molecules/vc-input-currency/vc-input-currency.vue`
362
+
363
+ <!-- internal:end -->
@@ -1,7 +1,18 @@
1
+ ---
2
+ title: VcInputDropdown
3
+ category: components
4
+ group: form
5
+ ---
6
+
7
+ !!! note "Large reference page"
8
+ This page is long. Use the section links in the sidebar or your browser's in-page search (Ctrl/Cmd+F) to jump to the section you need.
9
+
1
10
  # VcInputDropdown
2
11
 
3
12
  A composite component that combines a text input field with a dropdown option selector in a single control. The user types a value in the input while also selecting a category, unit, or format from the attached dropdown.
4
13
 
14
+ ::storybook id="form-vcinputdropdown--default"
15
+
5
16
  ## When to Use
6
17
 
7
18
  - Input value paired with a unit selector (e.g., "100 cm", "50 kg")
@@ -42,6 +53,8 @@ The component uses a dual `v-model` pattern: `v-model` controls the input value,
42
53
 
43
54
  ## Object Options
44
55
 
56
+ ::storybook id="form-vcinputdropdown--with-object-options"
57
+
45
58
  When options are objects instead of primitives, use `optionValue` and `optionLabel` to tell the component which properties to use:
46
59
 
47
60
  ```vue
@@ -106,6 +119,8 @@ Supported types: `"text"`, `"password"`, `"email"`, `"tel"`, `"number"`, `"integ
106
119
 
107
120
  ## Component States
108
121
 
122
+ ::storybook id="form-vcinputdropdown--states"
123
+
109
124
  VcInputDropdown inherits all standard form field states:
110
125
 
111
126
  ```vue
@@ -298,3 +313,14 @@ Replace the default dropdown toggle with a custom element using the `button` slo
298
313
  When placed inside a `VcBlade` with `loading=true`, the component automatically renders a skeleton placeholder matching its visual footprint — a label block (when the `label` prop is set) and an input-shaped block. No additional props or configuration needed.
299
314
 
300
315
  This behavior is powered by `BladeLoadingKey` via Vue's provide/inject. The component injects the loading state from the nearest `VcBlade` ancestor.
316
+
317
+ <!-- internal:start -->
318
+
319
+ ## Architecture Notes
320
+
321
+ - Internally composed of two elements side-by-side: a `VcInput` for the text portion and a `VcSelect`-like dropdown panel for the option portion.
322
+ - The `button` slot replaces only the dropdown toggle button element, not the entire dropdown panel.
323
+ - The `option` slot receives `{ index, opt, selected, toggleOption }` — `toggleOption` must be called to actually select the item.
324
+ - Source file: `framework/ui/components/molecules/vc-input-dropdown/vc-input-dropdown.vue`
325
+
326
+ <!-- internal:end -->
@@ -1,7 +1,15 @@
1
+ ---
2
+ title: VcInputGroup
3
+ category: components
4
+ group: form
5
+ ---
6
+
1
7
  # VcInputGroup
2
8
 
3
9
  A semantic `<fieldset>` wrapper that groups related form controls under a shared label, error state, and ARIA context. Propagates `disabled` and `name` to child controls via provide/inject.
4
10
 
11
+ ::storybook id="form-vcinputgroup--form-fields"
12
+
5
13
  ## When to Use
6
14
 
7
15
  - Grouping related form fields with a shared section label (e.g., "Billing details", "Shipping address")
@@ -56,6 +64,8 @@ const lastName = ref("");
56
64
 
57
65
  ### Radio Group
58
66
 
67
+ ::storybook id="form-vcinputgroup--radios-horizontal"
68
+
59
69
  ```vue
60
70
  <VcInputGroup label="Payment method" role="radiogroup" orientation="horizontal" name="payment">
61
71
  <VcRadioButton v-model="payment" value="card" label="Card" />
@@ -111,3 +121,14 @@ const lastName = ref("");
111
121
  - [VcRadioButton](../vc-radio-button/) -- radio buttons to group
112
122
  - [VcInput](../vc-input/) -- text inputs to group
113
123
  - [VcSelect](../vc-select/) -- selects to group
124
+
125
+ <!-- internal:start -->
126
+
127
+ ## Architecture Notes
128
+
129
+ - `disabled` and `name` are provided via Vue's provide/inject mechanism using injection keys from `framework/injection-keys.ts`. Child form controls (`VcInput`, `VcRadioButton`, etc.) inject these to inherit group-level state automatically.
130
+ - The `orientation` prop controls flex direction (`column` vs `row`) on the fieldset's content area.
131
+ - Source file: `framework/ui/components/molecules/vc-input-group/vc-input-group.vue`
132
+ - Context file: `framework/ui/components/molecules/vc-input-group/context.ts`
133
+
134
+ <!-- internal:end -->
@@ -1,7 +1,15 @@
1
+ ---
2
+ title: VcMenu
3
+ category: components
4
+ group: navigation
5
+ ---
6
+
1
7
  # VcMenu
2
8
 
3
9
  Compositional navigation menu component for building sidebar navigation with sections, groups, nested items, badges, and loading skeletons.
4
10
 
11
+ ::storybook id="navigation-vcmenu--default"
12
+
5
13
  ## When to Use
6
14
 
7
15
  - Building the main navigation sidebar in admin applications
@@ -64,6 +72,8 @@ import { VcMenu, VcMenuItem, VcMenuGroup } from "@vc-shell/framework";
64
72
 
65
73
  ## Common Patterns
66
74
 
75
+ ::storybook id="navigation-vcmenu--sections"
76
+
67
77
  ### Section Groups with Nested Items
68
78
 
69
79
  ```vue
@@ -93,6 +103,8 @@ import { VcMenu, VcMenuItem, VcMenuGroup } from "@vc-shell/framework";
93
103
 
94
104
  ### Collapsed State
95
105
 
106
+ ::storybook id="navigation-vcmenu--collapsed"
107
+
96
108
  When `expanded` is `false`, the menu shows only icons and letter abbreviations. Groups show tooltips on hover. The container width should be reduced (e.g., 64px).
97
109
 
98
110
  ## CSS Variables
@@ -113,3 +125,15 @@ When `expanded` is `false`, the menu shows only icons and letter abbreviations.
113
125
  - [VcMenuItem](../vc-menu/) — individual menu item with icon, title, badge
114
126
  - [VcMenuGroup](../vc-menu/) — collapsible group container (supports `variant="section"` for top-level sections)
115
127
  - [VcDropdown](../vc-dropdown/) — contextual dropdown menus
128
+
129
+ <!-- internal:start -->
130
+
131
+ ## Architecture Notes
132
+
133
+ - `VcMenuExpandedKey` is the provide/inject key (`framework/ui/components/molecules/vc-menu/constants.ts`) used by `VcMenu` to broadcast the `expanded` state down to all `VcMenuItem` and `VcMenuGroup` descendants. Components can also override it locally via their own `expanded` prop.
134
+ - `VcMenuGroup` persists its open/closed state in `localStorage` with a key scoped to `vc_menu_<appName>_<groupId>_open`, where `appName` is derived from the first URL path segment.
135
+ - The loading skeleton in `VcMenu` is hardcoded to mimic a realistic 2-section structure. It does not reflect actual slot content.
136
+ - `VcMenuItem` uses a `VcTooltip` that activates only when the menu is collapsed (`!menuExpanded`), showing the item title on hover.
137
+ - `VcMenuGroup` children animate via CSS `grid-template-rows: 0fr → 1fr` transition — no JS required.
138
+
139
+ <!-- internal:end -->
@@ -1,7 +1,18 @@
1
+ ---
2
+ title: VcMultivalue
3
+ category: components
4
+ group: form
5
+ ---
6
+
7
+ !!! note "Large reference page"
8
+ This page is long. Use the section links in the sidebar or your browser's in-page search (Ctrl/Cmd+F) to jump to the section you need.
9
+
1
10
  # VcMultivalue
2
11
 
3
12
  A multi-value input component for collecting multiple entries as chips/tags. Supports two distinct modes: **free-form entry** (text, number, date, color) where users type values and press Enter, and **dictionary mode** with a searchable dropdown of predefined options.
4
13
 
14
+ ::storybook id="form-vcmultivalue--default"
15
+
5
16
  ## When to Use
6
17
 
7
18
  - Collecting multiple tags, keywords, or labels (e.g., product tags, email recipients)
@@ -46,6 +57,8 @@ In the default mode (`multivalue` is `false`), users type a value into the input
46
57
 
47
58
  ### Dictionary Mode (Dropdown Selection)
48
59
 
60
+ ::storybook id="form-vcmultivalue--single-value-mode"
61
+
49
62
  When the `multivalue` prop is `true` and `options` are provided, the component displays a searchable dropdown. Users click the field to open the dropdown, search within options, and select items. Already-selected items are automatically excluded from the dropdown.
50
63
 
51
64
  ```vue
@@ -139,6 +152,8 @@ const form = reactive({
139
152
 
140
153
  ### Custom Rendering with Slots
141
154
 
155
+ ::storybook id="form-vcmultivalue--custom-option-display"
156
+
142
157
  Use `#option` for dropdown items and `#selected-item` for chips:
143
158
 
144
159
  ```vue
@@ -344,3 +359,16 @@ The component uses `--multivalue-*` variables that fall back to `--select-*` tok
344
359
  When placed inside a `VcBlade` with `loading=true`, the component automatically renders a skeleton placeholder matching its visual footprint — a label block (when the `label` prop is set) and an input-shaped block. No additional props or configuration needed.
345
360
 
346
361
  This behavior is powered by `BladeLoadingKey` via Vue's provide/inject. The component injects the loading state from the nearest `VcBlade` ancestor.
362
+
363
+ <!-- internal:start -->
364
+
365
+ ## Architecture Notes
366
+
367
+ - Composed of internal sub-components in `vc-multivalue/_internal/`: the chip list renderer, the dropdown panel, and the trigger input.
368
+ - Composables are in `vc-multivalue/composables/` — chip management and dropdown open/close state are separated into composables.
369
+ - Free-form mode: each `keydown` for Enter or comma (`','`) triggers a chip add; Backspace on empty input removes the last chip.
370
+ - Dictionary mode: already-selected items are filtered out of the dropdown list reactively.
371
+ - Source file: `framework/ui/components/molecules/vc-multivalue/vc-multivalue.vue`
372
+ - Internal components: `framework/ui/components/molecules/vc-multivalue/_internal/`
373
+
374
+ <!-- internal:end -->
@@ -1,7 +1,18 @@
1
+ ---
2
+ title: VcPagination
3
+ category: components
4
+ group: navigation
5
+ ---
6
+
7
+ !!! tip "Quick reference"
8
+ Jump to [Props](#props) · [Events](#events) · [CSS Variables](#css-variables) · [Accessibility](#accessibility)
9
+
1
10
  # VcPagination
2
11
 
3
12
  Page navigation control with first/previous/next/last buttons and a sliding window of page numbers. Automatically adapts the number of visible page buttons for mobile viewports.
4
13
 
14
+ ::storybook id="navigation-vcpagination--default"
15
+
5
16
  ## When to Use
6
17
 
7
18
  - Navigating paginated data sets in tables, lists, or grids
@@ -39,6 +50,8 @@ function onPageChange(page: number) {
39
50
 
40
51
  ## Sliding Page Window
41
52
 
53
+ ::storybook id="navigation-vcpagination--many-pages"
54
+
42
55
  VcPagination displays a sliding window of page number buttons centered on the current page. The window size adapts automatically:
43
56
 
44
57
  - **Desktop:** 5 visible page buttons (default)
@@ -290,3 +303,15 @@ currentPage.value = Math.min(currentPage.value, totalPages.value);
290
303
 
291
304
  - [VcDataTable](../../organisms/vc-table) -- Data table that commonly pairs with pagination for large datasets
292
305
  - [VcSelect](../vc-select/) -- Can be used alongside pagination for a "rows per page" selector
306
+
307
+ <!-- internal:start -->
308
+
309
+ ## Architecture Notes
310
+
311
+ - `localCurrentPage` is an internal ref synced from `props.currentPage` via a watcher. This prevents the UI from jumping when the parent has not yet updated the prop after an `itemClick` event.
312
+ - Responsive defaults: `MAX_PAGES_MOBILE = 3`, `MAX_PAGES_DESKTOP = 5`. Both are overridden by `maxPages` prop.
313
+ - `effectiveShowFirstLast` defaults to `true` when `showFirstLast` prop is `undefined`.
314
+ - The `setPage` function clamps clicks to valid range `[1, props.pages]` and handles both `number` and `string` inputs (supports programmatic usage).
315
+ - The `variant` prop is defined but currently unused in the template — reserved for a future "minimal" style.
316
+
317
+ <!-- internal:end -->
@@ -1,7 +1,18 @@
1
+ ---
2
+ title: VcRadioButton
3
+ category: components
4
+ group: form
5
+ ---
6
+
1
7
  # VcRadioButton
2
8
 
3
9
  A radio button component for selecting a single option from a group. Supports string, number, and boolean value types.
4
10
 
11
+ !!! note "Large reference"
12
+ This page is over 200 lines. Use the section headings to jump directly to what you need: [Basic Usage](#basic-usage), [Common Patterns](#common-patterns), [Props](#key-props), [Accessibility](#accessibility).
13
+
14
+ ::storybook id="form-vcradiobutton--default"
15
+
5
16
  ## Overview
6
17
 
7
18
  Radio buttons are the standard UI pattern for selecting exactly one option from a small, visible set. Unlike dropdowns (VcSelect), radio buttons show all options simultaneously, making them ideal when there are 2-6 choices and the user benefits from seeing everything at once.
@@ -115,6 +126,8 @@ const priority = ref(2);
115
126
 
116
127
  ### Binary Mode
117
128
 
129
+ ::storybook id="form-vcradiobutton--binary"
130
+
118
131
  In binary mode, clicking toggles between `true` and `false` rather than comparing to a `value`. This is useful for standalone boolean options:
119
132
 
120
133
  ```vue
@@ -201,3 +214,15 @@ Do not mix `binary` mode with regular `value` comparison in the same group. Bina
201
214
  ## Skeleton / Loading State
202
215
 
203
216
  When placed inside a `VcBlade` with `loading=true`, the component renders a skeleton placeholder matching its shape — a control indicator and label block. No configuration needed.
217
+
218
+ <!-- internal:start -->
219
+
220
+ ## Architecture Notes
221
+
222
+ - VcRadioButton wraps a native `<input type="radio">` with custom CSS appearance. `checked` state is computed via `isEqual` (lodash) to support object-typed values.
223
+ - `binary` mode: `onChange` emits `!checked.value` (a boolean toggle) instead of `props.value`. Do not mix binary and value modes within the same group.
224
+ - The `name` attribute is critical for native keyboard group navigation — always set the same `name` across a group.
225
+ - `useFormField` injects validation context (error, disabled, name) from a parent form provider.
226
+ - Source file: `framework/ui/components/molecules/vc-radio-button/vc-radio-button.vue`
227
+
228
+ <!-- internal:end -->
@@ -1,7 +1,15 @@
1
+ ---
2
+ title: VcRadioGroup
3
+ category: components
4
+ group: form
5
+ ---
6
+
1
7
  # VcRadioGroup
2
8
 
3
9
  Accessible radio button group that wraps radio controls in a semantic fieldset with shared label, hint, error state, and layout control.
4
10
 
11
+ ::storybook id="form-vcradiogroup--default"
12
+
5
13
  ## When to Use
6
14
 
7
15
  - Selecting exactly one option from a set (e.g., payment method, shipping speed)
@@ -74,6 +82,8 @@ interface RadioGroupOption<V = string | number | boolean> {
74
82
 
75
83
  ### Horizontal Layout
76
84
 
85
+ ::storybook id="form-vcradiogroup--horizontal"
86
+
77
87
  ```vue
78
88
  <VcRadioGroup
79
89
  v-model="priority"
@@ -89,6 +99,8 @@ interface RadioGroupOption<V = string | number | boolean> {
89
99
 
90
100
  ### With Disabled Option
91
101
 
102
+ ::storybook id="form-vcradiogroup--with-disabled-option"
103
+
92
104
  ```vue
93
105
  <VcRadioGroup
94
106
  v-model="plan"
@@ -135,3 +147,13 @@ interface RadioGroupOption<V = string | number | boolean> {
135
147
  ## Skeleton / Loading State
136
148
 
137
149
  When placed inside a `VcBlade` with `loading=true`, the component renders a skeleton placeholder matching its shape — a control indicator and label block. No configuration needed.
150
+
151
+ <!-- internal:start -->
152
+
153
+ ## Architecture Notes
154
+
155
+ - VcRadioGroup delegates rendering to `VcInputGroup` (semantic fieldset wrapper) and renders `VcRadioButton` items from the `options` array, or passes through the default slot for custom layouts.
156
+ - The group generates a unique `name` attribute via `useId()` when none is provided, ensuring native radio group behavior.
157
+ - Source file: `framework/ui/components/molecules/vc-radio-group/vc-radio-group.vue`
158
+
159
+ <!-- internal:end -->
@@ -1,3 +1,9 @@
1
+ ---
2
+ title: VcRating
3
+ category: components
4
+ group: form
5
+ ---
6
+
1
7
  # VcRating
2
8
 
3
9
  Read-only rating display component that visualizes a numeric value as stars, a star-and-text combination, or plain text. Designed for displaying aggregate ratings in detail views, list columns, and dashboards.
@@ -15,6 +21,8 @@ Read-only rating display component that visualizes a numeric value as stars, a s
15
21
 
16
22
  ## Quick Start
17
23
 
24
+ ::storybook id="form-vcrating--stars"
25
+
18
26
  ```vue
19
27
  <template>
20
28
  <VcRating
@@ -29,6 +37,9 @@ import { VcRating } from "@vc-shell/framework";
29
37
  </script>
30
38
  ```
31
39
 
40
+ !!! tip "Display-only component"
41
+ VcRating is a read-only display component. It does not support user interaction for selecting a rating. For interactive rating input, build a custom component.
42
+
32
43
  ## Display Variants
33
44
 
34
45
  VcRating offers three visual modes controlled by the `variant` prop:
@@ -55,6 +66,8 @@ Shows a single filled star icon alongside a numeric fraction. Compact and precis
55
66
 
56
67
  Displays just the numeric fraction. Minimal footprint for dense layouts like table cells.
57
68
 
69
+ ::storybook id="form-vcrating--text-only"
70
+
58
71
  ```vue
59
72
  <VcRating :model-value="8" :max="10" variant="text" />
60
73
  <!-- Renders: 8/10 -->
@@ -74,6 +87,8 @@ The default scale is 1-5 stars. Override with the `max` prop for different scale
74
87
 
75
88
  > **Tip:** For scales larger than 5, prefer the `"star-and-text"` or `"text"` variant. Rendering 10 individual star icons can be visually crowded.
76
89
 
90
+ ::storybook id="form-vcrating--star-and-text"
91
+
77
92
  ## Placeholder for No Rating
78
93
 
79
94
  When `modelValue` is `0`, `null`, or `undefined`, display a placeholder message:
@@ -258,6 +273,8 @@ Use the `"star-and-text"` or `"text"` variant in table cell slots for a compact
258
273
  - [VcLabel](../../atoms/vc-label/) -- Label atom used internally for the label and tooltip
259
274
  - [VcIcon](../../atoms/vc-icon/) -- Renders the star icons internally
260
275
 
276
+ ::storybook id="form-vcrating--skeleton"
277
+
261
278
  ## Skeleton / Loading State
262
279
 
263
280
  When placed inside a `VcBlade` with `loading=true`, the component automatically renders a skeleton placeholder matching its visual footprint. No additional props or configuration needed.