@vc-shell/vc-app-skill 2.0.0-alpha.33 → 2.0.0-alpha.33-pr220.455e322

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 (192) hide show
  1. package/CHANGELOG.md +52 -55
  2. package/README.md +18 -12
  3. package/package.json +4 -4
  4. package/runtime/agents/api-analyzer.md +31 -16
  5. package/runtime/agents/blade-enhancer.md +15 -9
  6. package/runtime/agents/details-blade-generator.md +47 -31
  7. package/runtime/agents/list-blade-generator.md +21 -37
  8. package/runtime/agents/locales-generator.md +3 -0
  9. package/runtime/agents/migration-agent.md +18 -7
  10. package/runtime/agents/module-analyzer.md +2 -0
  11. package/runtime/agents/module-assembler.md +15 -0
  12. package/runtime/agents/promote-agent.md +15 -4
  13. package/runtime/agents/type-checker.md +11 -0
  14. package/runtime/knowledge/docs/core/api/platform.docs.md +30 -30
  15. package/runtime/knowledge/docs/core/blade-navigation/blade-nav-composables.docs.md +41 -41
  16. package/runtime/knowledge/docs/core/composables/bladeContext/index.docs.md +12 -10
  17. package/runtime/knowledge/docs/core/composables/useApiClient/useApiClient.docs.md +11 -14
  18. package/runtime/knowledge/docs/core/composables/useAppBarMobileButtons/useAppBarMobileButtons.docs.md +35 -35
  19. package/runtime/knowledge/docs/core/composables/useAppBarWidget/useAppBarWidget.docs.md +35 -35
  20. package/runtime/knowledge/docs/core/composables/useAppInsights/useAppInsights.docs.md +15 -15
  21. package/runtime/knowledge/docs/core/composables/useAssets/useAssets.docs.md +21 -18
  22. package/runtime/knowledge/docs/core/composables/useAssetsManager/useAssetsManager.docs.md +31 -27
  23. package/runtime/knowledge/docs/core/composables/useAsync/useAsync.docs.md +90 -61
  24. package/runtime/knowledge/docs/core/composables/useBeforeUnload/useBeforeUnload.docs.md +19 -18
  25. package/runtime/knowledge/docs/core/composables/useBlade/useBlade.docs.md +89 -68
  26. package/runtime/knowledge/docs/core/composables/useBladeForm/useBladeForm.docs.md +27 -25
  27. package/runtime/knowledge/docs/core/composables/useBladeRegistry/useBladeRegistry.docs.md +15 -15
  28. package/runtime/knowledge/docs/core/composables/useBladeWidgets/index.docs.md +74 -78
  29. package/runtime/knowledge/docs/core/composables/useBreadcrumbs/useBreadcrumbs.docs.md +11 -11
  30. package/runtime/knowledge/docs/core/composables/useConnectionStatus/useConnectionStatus.docs.md +27 -15
  31. package/runtime/knowledge/docs/core/composables/useDashboard/useDashboard.docs.md +30 -30
  32. package/runtime/knowledge/docs/core/composables/useDynamicProperties/useDynamicProperties.docs.md +34 -36
  33. package/runtime/knowledge/docs/core/composables/useErrorHandler/useErrorHandler.docs.md +44 -23
  34. package/runtime/knowledge/docs/core/composables/useFunctions/useFunctions.docs.md +14 -11
  35. package/runtime/knowledge/docs/core/composables/useKeyboardNavigation/useKeyboardNavigation.docs.md +47 -38
  36. package/runtime/knowledge/docs/core/composables/useLanguages/useLanguages.docs.md +37 -28
  37. package/runtime/knowledge/docs/core/composables/useLoading/useLoading.docs.md +23 -17
  38. package/runtime/knowledge/docs/core/composables/useMenuExpanded/index.docs.md +10 -10
  39. package/runtime/knowledge/docs/core/composables/useMenuService/useMenuService.docs.md +42 -42
  40. package/runtime/knowledge/docs/core/composables/useModificationTracker/useModificationTracker.docs.md +22 -12
  41. package/runtime/knowledge/docs/core/composables/useNotifications/useNotifications.docs.md +33 -41
  42. package/runtime/knowledge/docs/core/composables/usePermissions/usePermissions.docs.md +16 -16
  43. package/runtime/knowledge/docs/core/composables/usePopup/usePopup.docs.md +32 -24
  44. package/runtime/knowledge/docs/core/composables/useResponsive/useResponsive.docs.md +32 -11
  45. package/runtime/knowledge/docs/core/composables/useSettings/useSettings.docs.md +24 -15
  46. package/runtime/knowledge/docs/core/composables/useSettingsMenu/useSettingsMenu.docs.md +7 -7
  47. package/runtime/knowledge/docs/core/composables/useSidebarState/useSidebarState.docs.md +32 -24
  48. package/runtime/knowledge/docs/core/composables/useSlowNetworkDetection/useSlowNetworkDetection.docs.md +21 -17
  49. package/runtime/knowledge/docs/core/composables/useTheme/useTheme.docs.md +24 -24
  50. package/runtime/knowledge/docs/core/composables/useToolbar/useToolbar.docs.md +28 -31
  51. package/runtime/knowledge/docs/core/composables/useUser/useUser.docs.md +43 -24
  52. package/runtime/knowledge/docs/core/composables/useUserManagement/useUserManagement.docs.md +68 -48
  53. package/runtime/knowledge/docs/core/composables/useWebVitals/useWebVitals.docs.md +19 -19
  54. package/runtime/knowledge/docs/core/composables/useWidgets/useWidgets.docs.md +42 -47
  55. package/runtime/knowledge/docs/core/directives/autofocus/autofocus.docs.md +10 -4
  56. package/runtime/knowledge/docs/core/directives/loading/loading.docs.md +35 -20
  57. package/runtime/knowledge/docs/core/notifications/notifications.docs.md +36 -35
  58. package/runtime/knowledge/docs/core/plugins/ai-agent/ai-agent.docs.md +38 -38
  59. package/runtime/knowledge/docs/core/plugins/extension-points/extension-points.docs.md +107 -91
  60. package/runtime/knowledge/docs/core/plugins/global-error-handler/global-error-handler.docs.md +10 -10
  61. package/runtime/knowledge/docs/core/plugins/i18n/i18n.docs.md +21 -23
  62. package/runtime/knowledge/docs/core/plugins/modularity/modularity.docs.md +98 -90
  63. package/runtime/knowledge/docs/core/plugins/permissions/permissions.docs.md +10 -16
  64. package/runtime/knowledge/docs/core/plugins/signalR/signalR.docs.md +9 -9
  65. package/runtime/knowledge/docs/core/plugins/validation/validation.docs.md +65 -22
  66. package/runtime/knowledge/docs/core/services/services.docs.md +19 -22
  67. package/runtime/knowledge/docs/core/types/types.docs.md +40 -40
  68. package/runtime/knowledge/docs/core/utilities/date/date-utilities.docs.md +27 -27
  69. package/runtime/knowledge/docs/core/utilities/shared-utilities.docs.md +23 -23
  70. package/runtime/knowledge/docs/core/utilities/thumbnail/thumbnail.docs.md +22 -25
  71. package/runtime/knowledge/docs/core/utilities/utilities.docs.md +64 -64
  72. package/runtime/knowledge/docs/injection-keys.docs.md +52 -51
  73. package/runtime/knowledge/docs/modules/assets-manager/assets-manager.docs.md +9 -9
  74. package/runtime/knowledge/docs/shell/_internal/popup/common/popup-common.docs.md +23 -43
  75. package/runtime/knowledge/docs/shell/auth/ChangePasswordPage/change-password-page.docs.md +5 -5
  76. package/runtime/knowledge/docs/shell/auth/ForgotPasswordPage/forgot-password-page.docs.md +5 -5
  77. package/runtime/knowledge/docs/shell/auth/InvitePage/invite-page.docs.md +8 -7
  78. package/runtime/knowledge/docs/shell/auth/LoginPage/login-page.docs.md +7 -7
  79. package/runtime/knowledge/docs/shell/auth/ResetPasswordPage/reset-password-page.docs.md +8 -7
  80. package/runtime/knowledge/docs/shell/auth/sign-in/sign-in.docs.md +29 -13
  81. package/runtime/knowledge/docs/shell/components/change-password/change-password.docs.md +13 -16
  82. package/runtime/knowledge/docs/shell/components/change-password-button/change-password-button.docs.md +1 -7
  83. package/runtime/knowledge/docs/shell/components/error-interceptor/error-interceptor.docs.md +5 -5
  84. package/runtime/knowledge/docs/shell/components/language-selector/language-selector.docs.md +1 -1
  85. package/runtime/knowledge/docs/shell/components/logout-button/logout-button.docs.md +1 -1
  86. package/runtime/knowledge/docs/shell/components/notification-template/notification-template.docs.md +17 -9
  87. package/runtime/knowledge/docs/shell/components/settings-menu/settings-menu.docs.md +12 -18
  88. package/runtime/knowledge/docs/shell/components/settings-menu-item/settings-menu-item.docs.md +34 -65
  89. package/runtime/knowledge/docs/shell/components/sidebar/sidebar.docs.md +16 -26
  90. package/runtime/knowledge/docs/shell/components/theme-selector/theme-selector.docs.md +2 -2
  91. package/runtime/knowledge/docs/shell/components/user-dropdown-button/user-dropdown-button.docs.md +7 -9
  92. package/runtime/knowledge/docs/shell/dashboard/dashboard-charts/dashboard-charts.docs.md +30 -40
  93. package/runtime/knowledge/docs/shell/dashboard/dashboard-widget-card/dashboard-widget-card.docs.md +26 -19
  94. package/runtime/knowledge/docs/shell/dashboard/draggable-dashboard/draggable-dashboard.docs.md +15 -12
  95. package/runtime/knowledge/docs/ui/components/atoms/vc-badge/vc-badge.docs.md +15 -26
  96. package/runtime/knowledge/docs/ui/components/atoms/vc-banner/vc-banner.docs.md +21 -19
  97. package/runtime/knowledge/docs/ui/components/atoms/vc-button/vc-button.docs.md +83 -67
  98. package/runtime/knowledge/docs/ui/components/atoms/vc-card/vc-card.docs.md +100 -59
  99. package/runtime/knowledge/docs/ui/components/atoms/vc-col/vc-col.docs.md +28 -11
  100. package/runtime/knowledge/docs/ui/components/atoms/vc-container/vc-container.docs.md +20 -17
  101. package/runtime/knowledge/docs/ui/components/atoms/vc-hint/vc-hint.docs.md +26 -17
  102. package/runtime/knowledge/docs/ui/components/atoms/vc-icon/vc-icon.docs.md +30 -32
  103. package/runtime/knowledge/docs/ui/components/atoms/vc-image/vc-image.docs.md +25 -48
  104. package/runtime/knowledge/docs/ui/components/atoms/vc-label/vc-label.docs.md +29 -24
  105. package/runtime/knowledge/docs/ui/components/atoms/vc-link/vc-link.docs.md +23 -15
  106. package/runtime/knowledge/docs/ui/components/atoms/vc-loading/vc-loading.docs.md +22 -13
  107. package/runtime/knowledge/docs/ui/components/atoms/vc-progress/vc-progress.docs.md +33 -18
  108. package/runtime/knowledge/docs/ui/components/atoms/vc-row/vc-row.docs.md +56 -15
  109. package/runtime/knowledge/docs/ui/components/atoms/vc-scrollable-container/vc-scrollable-container.docs.md +28 -15
  110. package/runtime/knowledge/docs/ui/components/atoms/vc-skeleton/vc-skeleton.docs.md +40 -20
  111. package/runtime/knowledge/docs/ui/components/atoms/vc-status/vc-status.docs.md +25 -14
  112. package/runtime/knowledge/docs/ui/components/atoms/vc-status-icon/vc-status-icon.docs.md +40 -14
  113. package/runtime/knowledge/docs/ui/components/atoms/vc-tooltip/vc-tooltip.docs.md +54 -42
  114. package/runtime/knowledge/docs/ui/components/atoms/vc-video/vc-video.docs.md +17 -17
  115. package/runtime/knowledge/docs/ui/components/atoms/vc-widget/vc-widget.docs.md +21 -21
  116. package/runtime/knowledge/docs/ui/components/molecules/multilanguage-selector/multilanguage-selector.docs.md +23 -10
  117. package/runtime/knowledge/docs/ui/components/molecules/vc-accordion/vc-accordion.docs.md +55 -44
  118. package/runtime/knowledge/docs/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.docs.md +23 -20
  119. package/runtime/knowledge/docs/ui/components/molecules/vc-checkbox/vc-checkbox.docs.md +92 -65
  120. package/runtime/knowledge/docs/ui/components/molecules/vc-checkbox-group/vc-checkbox-group.docs.md +22 -36
  121. package/runtime/knowledge/docs/ui/components/molecules/vc-color-input/vc-color-input.docs.md +65 -23
  122. package/runtime/knowledge/docs/ui/components/molecules/vc-date-picker/vc-date-picker.docs.md +52 -73
  123. package/runtime/knowledge/docs/ui/components/molecules/vc-dropdown/vc-dropdown.docs.md +91 -85
  124. package/runtime/knowledge/docs/ui/components/molecules/vc-dropdown-panel/vc-dropdown-panel.docs.md +38 -42
  125. package/runtime/knowledge/docs/ui/components/molecules/vc-editor/vc-editor.docs.md +56 -73
  126. package/runtime/knowledge/docs/ui/components/molecules/vc-field/vc-field.docs.md +61 -27
  127. package/runtime/knowledge/docs/ui/components/molecules/vc-file-upload/vc-file-upload.docs.md +42 -50
  128. package/runtime/knowledge/docs/ui/components/molecules/vc-form/vc-form.docs.md +35 -64
  129. package/runtime/knowledge/docs/ui/components/molecules/vc-image-tile/vc-image-tile.docs.md +38 -41
  130. package/runtime/knowledge/docs/ui/components/molecules/vc-input/vc-input.docs.md +109 -131
  131. package/runtime/knowledge/docs/ui/components/molecules/vc-input-currency/vc-input-currency.docs.md +47 -88
  132. package/runtime/knowledge/docs/ui/components/molecules/vc-input-dropdown/vc-input-dropdown.docs.md +50 -64
  133. package/runtime/knowledge/docs/ui/components/molecules/vc-input-group/vc-input-group.docs.md +29 -24
  134. package/runtime/knowledge/docs/ui/components/molecules/vc-menu/vc-menu.docs.md +32 -28
  135. package/runtime/knowledge/docs/ui/components/molecules/vc-multivalue/vc-multivalue.docs.md +57 -65
  136. package/runtime/knowledge/docs/ui/components/molecules/vc-pagination/vc-pagination.docs.md +28 -26
  137. package/runtime/knowledge/docs/ui/components/molecules/vc-radio-button/vc-radio-button.docs.md +55 -20
  138. package/runtime/knowledge/docs/ui/components/molecules/vc-radio-group/vc-radio-group.docs.md +21 -35
  139. package/runtime/knowledge/docs/ui/components/molecules/vc-rating/vc-rating.docs.md +38 -33
  140. package/runtime/knowledge/docs/ui/components/molecules/vc-select/vc-select.docs.md +72 -83
  141. package/runtime/knowledge/docs/ui/components/molecules/vc-slider/vc-slider.docs.md +21 -16
  142. package/runtime/knowledge/docs/ui/components/molecules/vc-switch/vc-switch.docs.md +55 -64
  143. package/runtime/knowledge/docs/ui/components/molecules/vc-textarea/vc-textarea.docs.md +51 -70
  144. package/runtime/knowledge/docs/ui/components/molecules/vc-toast/vc-toast.docs.md +58 -57
  145. package/runtime/knowledge/docs/ui/components/organisms/vc-app/vc-app.docs.md +49 -26
  146. package/runtime/knowledge/docs/ui/components/organisms/vc-auth-layout/vc-auth-layout.docs.md +82 -28
  147. package/runtime/knowledge/docs/ui/components/organisms/vc-blade/vc-blade.docs.md +90 -75
  148. package/runtime/knowledge/docs/ui/components/organisms/vc-data-table/composables/table-composables.docs.md +30 -44
  149. package/runtime/knowledge/docs/ui/components/organisms/vc-data-table/vc-data-table.docs.md +512 -369
  150. package/runtime/knowledge/docs/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.docs.md +35 -52
  151. package/runtime/knowledge/docs/ui/components/organisms/vc-gallery/vc-gallery.docs.md +33 -62
  152. package/runtime/knowledge/docs/ui/components/organisms/vc-image-upload/vc-image-upload.docs.md +17 -23
  153. package/runtime/knowledge/docs/ui/components/organisms/vc-popup/vc-popup.docs.md +109 -68
  154. package/runtime/knowledge/docs/ui/components/organisms/vc-sidebar/vc-sidebar.docs.md +82 -44
  155. package/runtime/knowledge/docs/ui/composables/ui-composables.docs.md +8 -8
  156. package/runtime/knowledge/docs/ui/composables/useDataTablePagination.docs.md +164 -0
  157. package/runtime/knowledge/docs/ui/composables/useDataTableSort.docs.md +34 -26
  158. package/runtime/knowledge/docs/ui/composables/useTableSelection.docs.md +48 -40
  159. package/runtime/knowledge/docs/ui/composables/useTableSort.docs.md +30 -17
  160. package/runtime/knowledge/docs/ui/types/ui-types.docs.md +40 -29
  161. package/runtime/knowledge/examples/offers-module.md +15 -13
  162. package/runtime/knowledge/examples/team-module.md +82 -119
  163. package/runtime/knowledge/examples/videos-module.md +44 -17
  164. package/runtime/knowledge/index.md +22 -0
  165. package/runtime/knowledge/migration-prompts/blade-form-migration.md +17 -8
  166. package/runtime/knowledge/migration-prompts/blade-props-migration.md +1 -2
  167. package/runtime/knowledge/migration-prompts/datatable-migration.md +801 -0
  168. package/runtime/knowledge/migration-prompts/icon-migration.md +97 -0
  169. package/runtime/knowledge/migration-prompts/manual-migration-audit.md +117 -0
  170. package/runtime/knowledge/migration-prompts/notifications-migration.md +8 -3
  171. package/runtime/knowledge/migration-prompts/nswag-migration.md +25 -29
  172. package/runtime/knowledge/migration-prompts/use-assets-migration.md +164 -0
  173. package/runtime/knowledge/migration-prompts/use-data-table-pagination-migration.md +176 -0
  174. package/runtime/knowledge/migration-prompts/widgets-migration.md +48 -27
  175. package/runtime/knowledge/patterns/assets-management.md +20 -20
  176. package/runtime/knowledge/patterns/blade-navigation.md +7 -14
  177. package/runtime/knowledge/patterns/blade-widget.md +19 -17
  178. package/runtime/knowledge/patterns/child-blade-flow.md +19 -7
  179. package/runtime/knowledge/patterns/composable-details.md +20 -50
  180. package/runtime/knowledge/patterns/composable-list.md +43 -31
  181. package/runtime/knowledge/patterns/dashboard-widget.md +14 -16
  182. package/runtime/knowledge/patterns/datatable-pattern.md +521 -0
  183. package/runtime/knowledge/patterns/details-blade-pattern.md +78 -116
  184. package/runtime/knowledge/patterns/extension-points-usage.md +53 -44
  185. package/runtime/knowledge/patterns/form-validation.md +28 -64
  186. package/runtime/knowledge/patterns/list-blade-pattern.md +33 -21
  187. package/runtime/knowledge/patterns/module-structure.md +7 -1
  188. package/runtime/knowledge/patterns/multilanguage-fields.md +8 -14
  189. package/runtime/knowledge/patterns/notification-template.md +21 -14
  190. package/runtime/knowledge/patterns/signalr-notifications.md +30 -32
  191. package/runtime/knowledge/patterns/toolbar-pattern.md +18 -20
  192. package/runtime/vc-app.md +241 -62
@@ -20,7 +20,10 @@ The component uses a vertical layout by default (label above value), but support
20
20
 
21
21
  ```vue
22
22
  <template>
23
- <VcField label="Customer Name" model-value="John Doe" />
23
+ <VcField
24
+ label="Customer Name"
25
+ model-value="John Doe"
26
+ />
24
27
  </template>
25
28
 
26
29
  <script setup lang="ts">
@@ -30,27 +33,27 @@ import { VcField } from "@vc-shell/framework";
30
33
 
31
34
  ## Key Props
32
35
 
33
- | Prop | Type | Default | Description |
34
- |------|------|---------|-------------|
35
- | `label` | `string` | -- | Field label text |
36
- | `modelValue` | `string \| number \| Date` | -- | Field content to display |
37
- | `type` | `"text" \| "date" \| "date-ago" \| "link" \| "email"` | `"text"` | Content type for formatting |
38
- | `copyable` | `boolean` | `false` | Show a copy-to-clipboard button |
39
- | `orientation` | `"vertical" \| "horizontal"` | `"vertical"` | Layout direction of label and value |
40
- | `aspectRatio` | `[number, number]` | `[1, 1]` | Column width ratio for label and value in horizontal mode |
41
- | `tooltip` | `string` | -- | Tooltip shown on the label |
36
+ | Prop | Type | Default | Description |
37
+ | ------------- | ----------------------------------------------------- | ------------ | --------------------------------------------------------- |
38
+ | `label` | `string` | -- | Field label text |
39
+ | `modelValue` | `string \| number \| Date` | -- | Field content to display |
40
+ | `type` | `"text" \| "date" \| "date-ago" \| "link" \| "email"` | `"text"` | Content type for formatting |
41
+ | `copyable` | `boolean` | `false` | Show a copy-to-clipboard button |
42
+ | `orientation` | `"vertical" \| "horizontal"` | `"vertical"` | Layout direction of label and value |
43
+ | `aspectRatio` | `[number, number]` | `[1, 1]` | Column width ratio for label and value in horizontal mode |
44
+ | `tooltip` | `string` | -- | Tooltip shown on the label |
42
45
 
43
46
  ## Type Formatting
44
47
 
45
48
  Each `type` value renders the content differently:
46
49
 
47
- | Type | Behavior |
48
- |------|----------|
49
- | `"text"` | Renders the value as plain text |
50
- | `"date"` | Formats the value as a localized date string |
50
+ | Type | Behavior |
51
+ | ------------ | -------------------------------------------------------- |
52
+ | `"text"` | Renders the value as plain text |
53
+ | `"date"` | Formats the value as a localized date string |
51
54
  | `"date-ago"` | Formats the value as relative time (e.g., "3 hours ago") |
52
- | `"link"` | Renders as a clickable `<a>` tag opening in a new tab |
53
- | `"email"` | Renders as a clickable `mailto:` link |
55
+ | `"link"` | Renders as a clickable `<a>` tag opening in a new tab |
56
+ | `"email"` | Renders as a clickable `mailto:` link |
54
57
 
55
58
  ## Common Patterns
56
59
 
@@ -59,11 +62,31 @@ Each `type` value renders the content differently:
59
62
  ```vue
60
63
  <template>
61
64
  <div class="tw-flex tw-flex-col tw-gap-4">
62
- <VcField label="Order Number" model-value="ORD-2024-1234" copyable />
63
- <VcField label="Created" :model-value="order.createdDate" type="date" />
64
- <VcField label="Last Modified" :model-value="order.modifiedDate" type="date-ago" />
65
- <VcField label="Store URL" :model-value="order.storeUrl" type="link" />
66
- <VcField label="Contact Email" :model-value="order.email" type="email" />
65
+ <VcField
66
+ label="Order Number"
67
+ model-value="ORD-2024-1234"
68
+ copyable
69
+ />
70
+ <VcField
71
+ label="Created"
72
+ :model-value="order.createdDate"
73
+ type="date"
74
+ />
75
+ <VcField
76
+ label="Last Modified"
77
+ :model-value="order.modifiedDate"
78
+ type="date-ago"
79
+ />
80
+ <VcField
81
+ label="Store URL"
82
+ :model-value="order.storeUrl"
83
+ type="link"
84
+ />
85
+ <VcField
86
+ label="Contact Email"
87
+ :model-value="order.email"
88
+ type="email"
89
+ />
67
90
  </div>
68
91
  </template>
69
92
  ```
@@ -104,9 +127,21 @@ The copy button provides visual feedback (checkmark icon for 1 second) after a s
104
127
 
105
128
  ```vue
106
129
  <template>
107
- <VcField label="Order ID" :model-value="order.id" copyable />
108
- <VcField label="Tracking Number" :model-value="shipment.trackingNumber" copyable />
109
- <VcField label="API Key" :model-value="apiKey" copyable />
130
+ <VcField
131
+ label="Order ID"
132
+ :model-value="order.id"
133
+ copyable
134
+ />
135
+ <VcField
136
+ label="Tracking Number"
137
+ :model-value="shipment.trackingNumber"
138
+ copyable
139
+ />
140
+ <VcField
141
+ label="API Key"
142
+ :model-value="apiKey"
143
+ copyable
144
+ />
110
145
  </template>
111
146
  ```
112
147
 
@@ -135,8 +170,8 @@ const displayFields = computed(() => [
135
170
 
136
171
  ## CSS Variables
137
172
 
138
- | Variable | Default | Description |
139
- |----------|---------|-------------|
173
+ | Variable | Default | Description |
174
+ | ------------- | -------- | -------------------------------------------- |
140
175
  | `--field-gap` | `0.5rem` | Gap between label and value in vertical mode |
141
176
 
142
177
  ## Accessibility
@@ -170,4 +205,3 @@ The `type` prop affects rendering, not validation. Setting `type="email"` does n
170
205
  ## Skeleton / Loading State
171
206
 
172
207
  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.
173
-
@@ -70,12 +70,7 @@ When `multiple` is `false` (default), only one file can be selected per interact
70
70
  Integrate with vee-validate for file validation rules such as size limits:
71
71
 
72
72
  ```vue
73
- <VcFileUpload
74
- accept=".pdf, .doc, .docx"
75
- name="documents"
76
- :rules="{ size: 5 }"
77
- @upload="uploadDocuments"
78
- />
73
+ <VcFileUpload accept=".pdf, .doc, .docx" name="documents" :rules="{ size: 5 }" @upload="uploadDocuments" />
79
74
  ```
80
75
 
81
76
  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.
@@ -140,7 +135,11 @@ The disabled state reduces opacity and applies `pointer-events: none`.
140
135
  ```vue
141
136
  <template>
142
137
  <VcForm @submit="saveProduct">
143
- <VcInput v-model="product.name" label="Product Name" required />
138
+ <VcInput
139
+ v-model="product.name"
140
+ label="Product Name"
141
+ required
142
+ />
144
143
  <VcFileUpload
145
144
  accept=".jpg, .png, .webp"
146
145
  :multiple="true"
@@ -177,14 +176,7 @@ async function onImagesSelected(files: FileList) {
177
176
  ## Recipe: CSV Data Import
178
177
 
179
178
  ```vue
180
- <VcFileUpload
181
- accept=".csv"
182
- icon="lucide-file-spreadsheet"
183
- :custom-text="{ dragHere: 'Drop CSV file here', browse: 'Browse files' }"
184
- :error-message="importError"
185
- :loading="isImporting"
186
- @upload="importCsv"
187
- />
179
+ <VcFileUpload accept=".csv" icon="lucide-file-spreadsheet" :custom-text="{ dragHere: 'Drop CSV file here', browse: 'Browse files' }" :error-message="importError" :loading="isImporting" @upload="importCsv" />
188
180
  ```
189
181
 
190
182
  ```ts
@@ -263,50 +255,50 @@ async function onUpload(files: FileList) {
263
255
 
264
256
  ## Props
265
257
 
266
- | Prop | Type | Default | Description |
267
- |------|------|---------|-------------|
268
- | `accept` | `string` | `".jpg, .png, .jpeg, .webp, .heic, .svg"` | Accepted file types (HTML accept attribute format) |
269
- | `multiple` | `boolean` | `false` | Allow selecting multiple files |
270
- | `loading` | `boolean` | `false` | Show loading spinner overlay |
271
- | `icon` | `string` | `"lucide-cloud-upload"` | Icon displayed in the upload zone |
272
- | `customText` | `{ dragHere: string; browse: string }` | -- | Override default drag/browse instruction text |
273
- | `rules` | `IValidationRules` | -- | Vee-validate validation rules (e.g., `{ size: 5 }`) |
274
- | `name` | `string` | `"Gallery"` | Form field name attribute |
275
- | `label` | `string` | -- | Field label text |
276
- | `tooltip` | `string` | -- | Tooltip on the label |
277
- | `disabled` | `boolean` | `false` | Disable all interactions |
278
- | `required` | `boolean` | `false` | Mark field as required |
279
- | `error` | `boolean` | `false` | External error flag |
280
- | `errorMessage` | `string` | -- | Error message text (sets error state when truthy) |
258
+ | Prop | Type | Default | Description |
259
+ | -------------- | -------------------------------------- | ----------------------------------------- | --------------------------------------------------- |
260
+ | `accept` | `string` | `".jpg, .png, .jpeg, .webp, .heic, .svg"` | Accepted file types (HTML accept attribute format) |
261
+ | `multiple` | `boolean` | `false` | Allow selecting multiple files |
262
+ | `loading` | `boolean` | `false` | Show loading spinner overlay |
263
+ | `icon` | `string` | `"lucide-cloud-upload"` | Icon displayed in the upload zone |
264
+ | `customText` | `{ dragHere: string; browse: string }` | -- | Override default drag/browse instruction text |
265
+ | `rules` | `IValidationRules` | -- | Vee-validate validation rules (e.g., `{ size: 5 }`) |
266
+ | `name` | `string` | `"Gallery"` | Form field name attribute |
267
+ | `label` | `string` | -- | Field label text |
268
+ | `tooltip` | `string` | -- | Tooltip on the label |
269
+ | `disabled` | `boolean` | `false` | Disable all interactions |
270
+ | `required` | `boolean` | `false` | Mark field as required |
271
+ | `error` | `boolean` | `false` | External error flag |
272
+ | `errorMessage` | `string` | -- | Error message text (sets error state when truthy) |
281
273
 
282
274
  ## Events
283
275
 
284
- | Event | Payload | Description |
285
- |-------|---------|-------------|
276
+ | Event | Payload | Description |
277
+ | -------- | ---------- | ------------------------------------------------------------------------------------ |
286
278
  | `upload` | `FileList` | Emitted when valid files are selected or dropped. Only fires after validation passes |
287
279
 
288
280
  ## Slots
289
281
 
290
- | Slot | Scope | Description |
291
- |------|-------|-------------|
292
- | `error` | -- | Custom error content. Replaces the default `VcHint` error display |
282
+ | Slot | Scope | Description |
283
+ | ------- | ----- | ----------------------------------------------------------------- |
284
+ | `error` | -- | Custom error content. Replaces the default `VcHint` error display |
293
285
 
294
286
  ## CSS Variables
295
287
 
296
- | Variable | Default | Description |
297
- |----------|---------|-------------|
298
- | `--file-upload-border-color` | `var(--neutrals-200)` | Default border color |
299
- | `--file-upload-border-color-hover` | `var(--neutrals-400)` | Hover border color |
300
- | `--file-upload-border-color-dragover` | `var(--primary-500)` | Border color while dragging over |
301
- | `--file-upload-border-color-error` | `var(--danger-500)` | Error state border color |
302
- | `--file-upload-border-radius` | `6px` | Corner radius |
303
- | `--file-upload-drag-bg` | `var(--neutrals-100)` | Background color during drag-over |
304
- | `--file-upload-background-color` | `transparent` | Default background color |
305
- | `--file-upload-icon-color` | `var(--neutrals-400)` | Upload icon color |
306
- | `--file-upload-text-color` | `var(--neutrals-400)` | Instruction text color |
307
- | `--file-upload-error-color` | `var(--danger-500)` | Error text color |
308
- | `--file-upload-focus-ring-color` | `var(--primary-100)` | Focus ring color |
309
- | `--file-upload-error-ring-color` | `var(--danger-100)` | Error state ring color |
288
+ | Variable | Default | Description |
289
+ | ------------------------------------- | --------------------- | --------------------------------- |
290
+ | `--file-upload-border-color` | `var(--neutrals-200)` | Default border color |
291
+ | `--file-upload-border-color-hover` | `var(--neutrals-400)` | Hover border color |
292
+ | `--file-upload-border-color-dragover` | `var(--primary-500)` | Border color while dragging over |
293
+ | `--file-upload-border-color-error` | `var(--danger-500)` | Error state border color |
294
+ | `--file-upload-border-radius` | `6px` | Corner radius |
295
+ | `--file-upload-drag-bg` | `var(--neutrals-100)` | Background color during drag-over |
296
+ | `--file-upload-background-color` | `transparent` | Default background color |
297
+ | `--file-upload-icon-color` | `var(--neutrals-400)` | Upload icon color |
298
+ | `--file-upload-text-color` | `var(--neutrals-400)` | Instruction text color |
299
+ | `--file-upload-error-color` | `var(--danger-500)` | Error text color |
300
+ | `--file-upload-focus-ring-color` | `var(--primary-100)` | Focus ring color |
301
+ | `--file-upload-error-ring-color` | `var(--danger-100)` | Error state ring color |
310
302
 
311
303
  ## Accessibility
312
304
 
@@ -317,6 +309,7 @@ async function onUpload(files: FileList) {
317
309
  - `aria-required` is set when the field is required.
318
310
  - Enter and Space keys trigger the file browser dialog.
319
311
  - The disabled state applies `pointer-events: none` and reduced opacity.
312
+
320
313
  ## Related Components
321
314
 
322
315
  - [VcGallery](../../organisms/vc-gallery/) -- Full image gallery with preview, reorder, drag-and-drop sorting, and upload
@@ -326,4 +319,3 @@ async function onUpload(files: FileList) {
326
319
  ## Skeleton / Loading State
327
320
 
328
321
  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.
329
-
@@ -4,11 +4,11 @@ A lightweight `<form>` wrapper that provides consistent styling, prevents defaul
4
4
 
5
5
  ## When to Use
6
6
 
7
- | Scenario | Component |
8
- |----------|-----------|
9
- | Blade detail view with editable fields | **VcForm** |
10
- | Popup with a short input form | **VcForm** |
11
- | Read-only display of data | Plain `<div>` or `VcField` |
7
+ | Scenario | Component |
8
+ | -------------------------------------- | -------------------------- |
9
+ | Blade detail view with editable fields | **VcForm** |
10
+ | Popup with a short input form | **VcForm** |
11
+ | Read-only display of data | Plain `<div>` or `VcField` |
12
12
 
13
13
  > **Important:** VcForm renders a native `<form>` element with `novalidate`. All validation is handled by **vee-validate** `Field` components, not by the browser.
14
14
 
@@ -20,8 +20,16 @@ A lightweight `<form>` wrapper that provides consistent styling, prevents defaul
20
20
  <template>
21
21
  <VcForm @submit="handleSubmit">
22
22
  <div class="tw-space-y-4">
23
- <VcInput v-model="name" label="Name" required />
24
- <VcInput v-model="email" label="Email" required />
23
+ <VcInput
24
+ v-model="name"
25
+ label="Name"
26
+ required
27
+ />
28
+ <VcInput
29
+ v-model="email"
30
+ label="Email"
31
+ required
32
+ />
25
33
  <VcButton type="submit">Save</VcButton>
26
34
  </div>
27
35
  </VcForm>
@@ -73,12 +81,7 @@ Use `VcRow` and `VcCol` inside VcForm to create multi-column layouts that match
73
81
  VcForm itself does **not** manage validation. Validation is provided by wrapping each input with the `Field` component from `vee-validate`. This is the standard pattern used across the entire codebase:
74
82
 
75
83
  ```vue
76
- <Field
77
- v-slot="{ errorMessage, handleChange, errors }"
78
- :model-value="form.fieldName"
79
- name="fieldName"
80
- rules="required"
81
- >
84
+ <Field v-slot="{ errorMessage, handleChange, errors }" :model-value="form.fieldName" name="fieldName" rules="required">
82
85
  <VcInput
83
86
  v-model="form.fieldName"
84
87
  label="Field Label"
@@ -105,12 +108,7 @@ This same pattern works with all VcShell inputs:
105
108
 
106
109
  ```vue
107
110
  <!-- VcSelect -->
108
- <Field
109
- v-slot="{ errorMessage, handleChange, errors }"
110
- :model-value="form.category"
111
- name="category"
112
- rules="required"
113
- >
111
+ <Field v-slot="{ errorMessage, handleChange, errors }" :model-value="form.category" name="category" rules="required">
114
112
  <VcSelect
115
113
  v-model="form.category"
116
114
  label="Category"
@@ -125,12 +123,7 @@ This same pattern works with all VcShell inputs:
125
123
  </Field>
126
124
 
127
125
  <!-- VcTextarea -->
128
- <Field
129
- v-slot="{ errorMessage, handleChange, errors }"
130
- :model-value="form.description"
131
- name="description"
132
- rules="required|min:10"
133
- >
126
+ <Field v-slot="{ errorMessage, handleChange, errors }" :model-value="form.description" name="description" rules="required|min:10">
134
127
  <VcTextarea
135
128
  v-model="form.description"
136
129
  label="Description"
@@ -411,10 +404,7 @@ const validateSku = (value: string) => {
411
404
  const debouncedValidation = useDebounceFn(async () => {
412
405
  const errors = await validateOffer({ ...offer.value, sku: value });
413
406
  const skuErrors = errors?.filter((e) => e.propertyName?.toLowerCase() === "sku");
414
- setFieldError(
415
- "sku",
416
- skuErrors.map((e) => t(`ERRORS.${e.errorCode}`, { value: e.attemptedValue })).join("\n"),
417
- );
407
+ setFieldError("sku", skuErrors.map((e) => t(`ERRORS.${e.errorCode}`, { value: e.attemptedValue })).join("\n"));
418
408
  }, 1000);
419
409
 
420
410
  debouncedValidation();
@@ -429,12 +419,7 @@ const validateSku = (value: string) => {
429
419
 
430
420
  ```vue
431
421
  <!-- BAD: vee-validate never learns about value changes -->
432
- <Field
433
- v-slot="{ errorMessage, errors }"
434
- :model-value="form.name"
435
- name="name"
436
- rules="required"
437
- >
422
+ <Field v-slot="{ errorMessage, errors }" :model-value="form.name" name="name" rules="required">
438
423
  <VcInput
439
424
  v-model="form.name"
440
425
  label="Name"
@@ -444,12 +429,7 @@ const validateSku = (value: string) => {
444
429
  </Field>
445
430
 
446
431
  <!-- GOOD: handleChange keeps vee-validate in sync -->
447
- <Field
448
- v-slot="{ errorMessage, handleChange, errors }"
449
- :model-value="form.name"
450
- name="name"
451
- rules="required"
452
- >
432
+ <Field v-slot="{ errorMessage, handleChange, errors }" :model-value="form.name" name="name" rules="required">
453
433
  <VcInput
454
434
  v-model="form.name"
455
435
  label="Name"
@@ -464,21 +444,12 @@ const validateSku = (value: string) => {
464
444
 
465
445
  ```vue
466
446
  <!-- BAD: Field does not track the current value -->
467
- <Field
468
- v-slot="{ errorMessage, handleChange, errors }"
469
- name="name"
470
- rules="required"
471
- >
447
+ <Field v-slot="{ errorMessage, handleChange, errors }" name="name" rules="required">
472
448
  <VcInput v-model="form.name" label="Name" />
473
449
  </Field>
474
450
 
475
451
  <!-- GOOD: Field receives the value and can validate it -->
476
- <Field
477
- v-slot="{ errorMessage, handleChange, errors }"
478
- :model-value="form.name"
479
- name="name"
480
- rules="required"
481
- >
452
+ <Field v-slot="{ errorMessage, handleChange, errors }" :model-value="form.name" name="name" rules="required">
482
453
  <VcInput
483
454
  v-model="form.name"
484
455
  label="Name"
@@ -514,28 +485,28 @@ disabled: computed(() => !modified.value),
514
485
 
515
486
  ## Props
516
487
 
517
- | Prop | Type | Default | Description |
518
- |------|------|---------|-------------|
519
- | `ariaLabel` | `string` | `undefined` | Accessible label for the `<form>` element |
520
- | `ariaLabelledby` | `string` | `undefined` | ID of an element that labels the form |
488
+ | Prop | Type | Default | Description |
489
+ | ---------------- | -------- | ----------- | ----------------------------------------- |
490
+ | `ariaLabel` | `string` | `undefined` | Accessible label for the `<form>` element |
491
+ | `ariaLabelledby` | `string` | `undefined` | ID of an element that labels the form |
521
492
 
522
493
  ## Events
523
494
 
524
- | Event | Payload | Description |
525
- |-------|---------|-------------|
526
- | `submit` | -- | Emitted on form submission. Native `submit` is already `preventDefault`-ed. |
495
+ | Event | Payload | Description |
496
+ | -------- | ------- | --------------------------------------------------------------------------- |
497
+ | `submit` | -- | Emitted on form submission. Native `submit` is already `preventDefault`-ed. |
527
498
 
528
499
  ## Slots
529
500
 
530
- | Slot | Description |
531
- |------|-------------|
501
+ | Slot | Description |
502
+ | --------- | --------------------------------------------------------------- |
532
503
  | `default` | Form content -- inputs, buttons, fieldsets, VcRow/VcCol layouts |
533
504
 
534
505
  ## CSS Custom Properties
535
506
 
536
- | Variable | Default | Description |
537
- |----------|---------|-------------|
538
- | `--form-gap` | `1rem` | Default gap between form children (when using flex gap) |
507
+ | Variable | Default | Description |
508
+ | ------------ | ------- | ------------------------------------------------------- |
509
+ | `--form-gap` | `1rem` | Default gap between form children (when using flex gap) |
539
510
 
540
511
  ## Accessibility
541
512
 
@@ -26,46 +26,50 @@ Square image tile with skeleton loading, fade-in transition, and a slide-up acti
26
26
  <script setup lang="ts">
27
27
  import { VcImageTile } from "@vc-shell/framework";
28
28
 
29
- function openPreview() { /* open lightbox */ }
30
- function deleteImage() { /* remove from list */ }
29
+ function openPreview() {
30
+ /* open lightbox */
31
+ }
32
+ function deleteImage() {
33
+ /* remove from list */
34
+ }
31
35
  </script>
32
36
  ```
33
37
 
34
38
  ## Key Props
35
39
 
36
- | Prop | Type | Default | Description |
37
- |------|------|---------|-------------|
38
- | `src` | `string` | — | Image source URL |
39
- | `alt` | `string` | — | Image alt text |
40
- | `name` | `string` | — | File name displayed in the tray |
41
- | `imageFit` | `"contain" \| "cover"` | `"contain"` | How the image fits within the tile |
42
- | `actions` | `VcImageTileActions` | — | Which built-in action buttons to show |
43
- | `thumbnailSize` | `ThumbnailSize` | — | Load a thumbnail variant instead of full-size image |
40
+ | Prop | Type | Default | Description |
41
+ | --------------- | ---------------------- | ----------- | --------------------------------------------------- |
42
+ | `src` | `string` | — | Image source URL |
43
+ | `alt` | `string` | — | Image alt text |
44
+ | `name` | `string` | — | File name displayed in the tray |
45
+ | `imageFit` | `"contain" \| "cover"` | `"contain"` | How the image fits within the tile |
46
+ | `actions` | `VcImageTileActions` | — | Which built-in action buttons to show |
47
+ | `thumbnailSize` | `ThumbnailSize` | — | Load a thumbnail variant instead of full-size image |
44
48
 
45
49
  ## VcImageTileActions Interface
46
50
 
47
51
  ```ts
48
52
  interface VcImageTileActions {
49
- preview?: boolean; // Fullscreen/maximize button (default visible)
50
- edit?: boolean; // Pencil edit button
51
- remove?: boolean; // Trash delete button
53
+ preview?: boolean; // Fullscreen/maximize button (default visible)
54
+ edit?: boolean; // Pencil edit button
55
+ remove?: boolean; // Trash delete button
52
56
  }
53
57
  ```
54
58
 
55
59
  ## Events
56
60
 
57
- | Event | Description |
58
- |-------|-------------|
61
+ | Event | Description |
62
+ | --------- | ---------------------- |
59
63
  | `preview` | Preview button clicked |
60
- | `edit` | Edit button clicked |
61
- | `remove` | Remove button clicked |
64
+ | `edit` | Edit button clicked |
65
+ | `remove` | Remove button clicked |
62
66
 
63
67
  ## Slots
64
68
 
65
- | Slot | Description |
66
- |------|-------------|
69
+ | Slot | Description |
70
+ | --------- | ------------------------------------------------------- |
67
71
  | `overlay` | Overlay content on top of the image (e.g., drag handle) |
68
- | `actions` | Additional action buttons in the tray |
72
+ | `actions` | Additional action buttons in the tray |
69
73
 
70
74
  ## Common Patterns
71
75
 
@@ -88,14 +92,7 @@ interface VcImageTileActions {
88
92
  ### All Actions Enabled
89
93
 
90
94
  ```vue
91
- <VcImageTile
92
- src="/img/photo.jpg"
93
- name="photo.jpg"
94
- :actions="{ preview: true, edit: true, remove: true }"
95
- @preview="onPreview"
96
- @edit="onEdit"
97
- @remove="onRemove"
98
- />
95
+ <VcImageTile src="/img/photo.jpg" name="photo.jpg" :actions="{ preview: true, edit: true, remove: true }" @preview="onPreview" @edit="onEdit" @remove="onRemove" />
99
96
  ```
100
97
 
101
98
  ### Cover Fit for Photos
@@ -123,19 +120,19 @@ When `src` is not provided or the image is still loading, a shimmer animation sk
123
120
 
124
121
  ## CSS Variables
125
122
 
126
- | Variable | Default | Description |
127
- |----------|---------|-------------|
128
- | `--image-tile-radius` | `8px` | Corner radius |
129
- | `--image-tile-border` | `var(--secondary-200)` | Border color |
130
- | `--image-tile-shadow` | `0 1px 2px rgb(0 0 0 / 0.05)` | Default shadow |
131
- | `--image-tile-shadow-hover` | `0 4px 12px rgb(0 0 0 / 0.1)` | Hover shadow |
132
- | `--image-tile-tray-bg` | `rgba(255, 255, 255, 0.85)` | Tray background |
133
- | `--image-tile-tray-blur` | `12px` | Tray backdrop blur |
134
- | `--image-tile-skeleton-from` | `var(--secondary-100)` | Skeleton gradient start |
135
- | `--image-tile-skeleton-to` | `var(--secondary-200)` | Skeleton gradient end |
136
- | `--image-tile-action-color` | `var(--secondary-600)` | Action button color |
137
- | `--image-tile-action-hover` | `var(--primary-500)` | Action button hover color |
138
- | `--image-tile-action-danger` | `var(--danger-500)` | Danger action hover color |
123
+ | Variable | Default | Description |
124
+ | ---------------------------- | ----------------------------- | ------------------------- |
125
+ | `--image-tile-radius` | `8px` | Corner radius |
126
+ | `--image-tile-border` | `var(--secondary-200)` | Border color |
127
+ | `--image-tile-shadow` | `0 1px 2px rgb(0 0 0 / 0.05)` | Default shadow |
128
+ | `--image-tile-shadow-hover` | `0 4px 12px rgb(0 0 0 / 0.1)` | Hover shadow |
129
+ | `--image-tile-tray-bg` | `rgba(255, 255, 255, 0.85)` | Tray background |
130
+ | `--image-tile-tray-blur` | `12px` | Tray backdrop blur |
131
+ | `--image-tile-skeleton-from` | `var(--secondary-100)` | Skeleton gradient start |
132
+ | `--image-tile-skeleton-to` | `var(--secondary-200)` | Skeleton gradient end |
133
+ | `--image-tile-action-color` | `var(--secondary-600)` | Action button color |
134
+ | `--image-tile-action-hover` | `var(--primary-500)` | Action button hover color |
135
+ | `--image-tile-action-danger` | `var(--danger-500)` | Danger action hover color |
139
136
 
140
137
  ## Accessibility
141
138