@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
@@ -10,6 +10,7 @@ A headless, accessible dropdown primitive for building menus and listboxes. Prov
10
10
  - Notification panels or custom popovers with item lists
11
11
 
12
12
  When NOT to use:
13
+
13
14
  - For form field selection -- use [VcSelect](../vc-select/)
14
15
  - For rich panel content with header/footer/scrollable body -- use [VcDropdownPanel](../vc-dropdown-panel/)
15
16
  - For navigation menus -- use [VcMenu](../vc-menu/)
@@ -29,7 +30,10 @@ When NOT to use:
29
30
  <VcButton @click="toggle">Actions</VcButton>
30
31
  </template>
31
32
  <template #item="{ item, click }">
32
- <button class="tw-w-full tw-text-left tw-px-3 tw-py-2" @click="click">
33
+ <button
34
+ class="tw-w-full tw-text-left tw-px-3 tw-py-2"
35
+ @click="click"
36
+ >
33
37
  {{ item.title }}
34
38
  </button>
35
39
  </template>
@@ -60,14 +64,7 @@ function onAction(item: { id: string; title: string }) {
60
64
  When `floating` is `true`, the dropdown panel is positioned using `@floating-ui` with automatic flip and shift middleware. The panel is teleported to the body to avoid z-index stacking context issues.
61
65
 
62
66
  ```vue
63
- <VcDropdown
64
- v-model="open"
65
- :items="items"
66
- floating
67
- placement="bottom-start"
68
- :offset="{ mainAxis: 4 }"
69
- :z-index="10000"
70
- >
67
+ <VcDropdown v-model="open" :items="items" floating placement="bottom-start" :offset="{ mainAxis: 4 }" :z-index="10000">
71
68
  <template #trigger="{ toggle }">
72
69
  <VcButton @click="toggle">Open</VcButton>
73
70
  </template>
@@ -84,14 +81,7 @@ Available `placement` values follow Floating UI conventions: `"top"`, `"top-star
84
81
  Build rich action menus by customizing the `#item` slot with icons, labels, and keyboard shortcut hints.
85
82
 
86
83
  ```vue
87
- <VcDropdown
88
- v-model="open"
89
- :items="actions"
90
- floating
91
- placement="bottom-start"
92
- close-on-select
93
- @item-click="handleAction"
94
- >
84
+ <VcDropdown v-model="open" :items="actions" floating placement="bottom-start" close-on-select @item-click="handleAction">
95
85
  <template #trigger="{ toggle }">
96
86
  <VcButton icon="lucide-ellipsis" @click="toggle" />
97
87
  </template>
@@ -110,15 +100,7 @@ Build rich action menus by customizing the `#item` slot with icons, labels, and
110
100
  Use `role="listbox"` for option-selection patterns. Combine with `isItemActive` to highlight the current selection and `aria-selected` is set automatically.
111
101
 
112
102
  ```vue
113
- <VcDropdown
114
- v-model="open"
115
- :items="workspaces"
116
- role="listbox"
117
- :is-item-active="(item) => item.id === activeId"
118
- close-on-select
119
- floating
120
- @item-click="(item) => (activeId = item.id)"
121
- >
103
+ <VcDropdown v-model="open" :items="workspaces" role="listbox" :is-item-active="(item) => item.id === activeId" close-on-select floating @item-click="(item) => (activeId = item.id)">
122
104
  <template #trigger="{ toggle }">
123
105
  <VcButton variant="outline" @click="toggle">{{ currentWorkspace }}</VcButton>
124
106
  </template>
@@ -136,14 +118,7 @@ Use `role="listbox"` for option-selection patterns. Combine with `isItemActive`
136
118
  Fine-tune when the dropdown closes:
137
119
 
138
120
  ```vue
139
- <VcDropdown
140
- v-model="open"
141
- :items="items"
142
- floating
143
- :close-on-click-outside="true"
144
- :close-on-escape="true"
145
- :close-on-select="false"
146
- >
121
+ <VcDropdown v-model="open" :items="items" floating :close-on-click-outside="true" :close-on-escape="true" :close-on-select="false">
147
122
  <!-- Multi-select pattern: dropdown stays open after each selection -->
148
123
  </VcDropdown>
149
124
  ```
@@ -206,16 +181,40 @@ By default, `padded` is `true`, which adds compact padding and rounded item back
206
181
 
207
182
  ```vue
208
183
  <template>
209
- <VcDropdown v-model="confirmOpen" floating placement="bottom-end" :close-on-select="false">
184
+ <VcDropdown
185
+ v-model="confirmOpen"
186
+ floating
187
+ placement="bottom-end"
188
+ :close-on-select="false"
189
+ >
210
190
  <template #trigger="{ toggle }">
211
- <VcButton variant="danger" @click="toggle">Delete</VcButton>
191
+ <VcButton
192
+ variant="danger"
193
+ @click="toggle"
194
+ >Delete</VcButton
195
+ >
212
196
  </template>
213
197
  <template #items-container="{ close }">
214
198
  <div class="tw-p-4 tw-w-64">
215
199
  <p class="tw-text-sm tw-mb-3">Are you sure you want to delete this item?</p>
216
200
  <div class="tw-flex tw-gap-2 tw-justify-end">
217
- <VcButton size="s" variant="outline" @click="close">Cancel</VcButton>
218
- <VcButton size="s" variant="danger" @click="() => { confirmDelete(); close(); }">Delete</VcButton>
201
+ <VcButton
202
+ size="s"
203
+ variant="outline"
204
+ @click="close"
205
+ >Cancel</VcButton
206
+ >
207
+ <VcButton
208
+ size="s"
209
+ variant="danger"
210
+ @click="
211
+ () => {
212
+ confirmDelete();
213
+ close();
214
+ }
215
+ "
216
+ >Delete</VcButton
217
+ >
219
218
  </div>
220
219
  </div>
221
220
  </template>
@@ -227,9 +226,16 @@ By default, `padded` is `true`, which adds compact padding and rounded item back
227
226
 
228
227
  ```vue
229
228
  <template>
230
- <VcDropdown v-model="isOpen" :items="items" floating>
229
+ <VcDropdown
230
+ v-model="isOpen"
231
+ :items="items"
232
+ floating
233
+ >
231
234
  <template #trigger="{ open, close, isActive }">
232
- <VcButton @mouseenter="open" @mouseleave="close">
235
+ <VcButton
236
+ @mouseenter="open"
237
+ @mouseleave="close"
238
+ >
233
239
  {{ isActive ? "Hover to close" : "Hover to open" }}
234
240
  </VcButton>
235
241
  </template>
@@ -288,60 +294,60 @@ By default, `padded` is `true`, which adds compact padding and rounded item back
288
294
 
289
295
  ## Props
290
296
 
291
- | Prop | Type | Default | Description |
292
- |------|------|---------|-------------|
293
- | `modelValue` | `boolean` | `false` | Controls open/closed state via `v-model` |
294
- | `items` | `T[]` | `[]` | Items to render in the dropdown |
295
- | `emptyText` | `string` | `""` | Text shown when items array is empty |
296
- | `itemText` | `(item: T) => string` | -- | Maps an item to display text (default renderer only) |
297
- | `isItemActive` | `(item: T) => boolean` | -- | Marks the currently active item (highlighted state) |
298
- | `itemKey` | `(item: T, index: number) => string \| number` | index | Unique key function for items |
299
- | `floating` | `boolean` | `false` | Enable floating positioning via `@floating-ui` |
300
- | `teleport` | `boolean` | -- | Force teleport to body (defaults to match `floating`) |
301
- | `teleportTo` | `string \| HTMLElement` | -- | Custom teleport target |
302
- | `placement` | `Placement` | `"bottom"` | Floating UI placement |
303
- | `offset` | `{ mainAxis?: number; crossAxis?: number }` | `{ mainAxis: 0, crossAxis: 0 }` | Offset from the trigger element |
304
- | `variant` | `"default" \| "secondary"` | `"default"` | Visual style variant |
305
- | `maxHeight` | `number \| string` | `300` | Maximum panel height (number = px, string = CSS value) |
306
- | `role` | `"menu" \| "listbox"` | `"menu"` | ARIA role for the dropdown panel |
307
- | `closeOnClickOutside` | `boolean` | `true` | Close when clicking outside the dropdown |
308
- | `closeOnEscape` | `boolean` | `true` | Close on Escape key press |
309
- | `closeOnSelect` | `boolean` | `false` | Close after selecting an item |
310
- | `autoFocusPanel` | `boolean` | `true` | Focus the panel element when opened |
311
- | `padded` | `boolean` | `true` | Apply compact padding and rounded item backgrounds |
312
- | `zIndex` | `number` | `10000` | Z-index for the floating panel |
297
+ | Prop | Type | Default | Description |
298
+ | --------------------- | ---------------------------------------------- | ------------------------------- | ------------------------------------------------------ |
299
+ | `modelValue` | `boolean` | `false` | Controls open/closed state via `v-model` |
300
+ | `items` | `T[]` | `[]` | Items to render in the dropdown |
301
+ | `emptyText` | `string` | `""` | Text shown when items array is empty |
302
+ | `itemText` | `(item: T) => string` | -- | Maps an item to display text (default renderer only) |
303
+ | `isItemActive` | `(item: T) => boolean` | -- | Marks the currently active item (highlighted state) |
304
+ | `itemKey` | `(item: T, index: number) => string \| number` | index | Unique key function for items |
305
+ | `floating` | `boolean` | `false` | Enable floating positioning via `@floating-ui` |
306
+ | `teleport` | `boolean` | -- | Force teleport to body (defaults to match `floating`) |
307
+ | `teleportTo` | `string \| HTMLElement` | -- | Custom teleport target |
308
+ | `placement` | `Placement` | `"bottom"` | Floating UI placement |
309
+ | `offset` | `{ mainAxis?: number; crossAxis?: number }` | `{ mainAxis: 0, crossAxis: 0 }` | Offset from the trigger element |
310
+ | `variant` | `"default" \| "secondary"` | `"default"` | Visual style variant |
311
+ | `maxHeight` | `number \| string` | `300` | Maximum panel height (number = px, string = CSS value) |
312
+ | `role` | `"menu" \| "listbox"` | `"menu"` | ARIA role for the dropdown panel |
313
+ | `closeOnClickOutside` | `boolean` | `true` | Close when clicking outside the dropdown |
314
+ | `closeOnEscape` | `boolean` | `true` | Close on Escape key press |
315
+ | `closeOnSelect` | `boolean` | `false` | Close after selecting an item |
316
+ | `autoFocusPanel` | `boolean` | `true` | Focus the panel element when opened |
317
+ | `padded` | `boolean` | `true` | Apply compact padding and rounded item backgrounds |
318
+ | `zIndex` | `number` | `10000` | Z-index for the floating panel |
313
319
 
314
320
  ## Events
315
321
 
316
- | Event | Payload | Description |
317
- |-------|---------|-------------|
318
- | `update:modelValue` | `boolean` | Open/close state changed |
319
- | `item-click` | `T` | An item was selected |
320
- | `open` | -- | Dropdown opened |
321
- | `close` | `"outside" \| "escape" \| "action"` | Dropdown closed with reason |
322
+ | Event | Payload | Description |
323
+ | ------------------- | ----------------------------------- | --------------------------- |
324
+ | `update:modelValue` | `boolean` | Open/close state changed |
325
+ | `item-click` | `T` | An item was selected |
326
+ | `open` | -- | Dropdown opened |
327
+ | `close` | `"outside" \| "escape" \| "action"` | Dropdown closed with reason |
322
328
 
323
329
  ## Slots
324
330
 
325
- | Slot | Props | Description |
326
- |------|-------|-------------|
327
- | `trigger` | `{ isActive: boolean, toggle: () => void, open: () => void, close: () => void }` | Custom trigger element |
328
- | `item` | `{ item: T, click: () => void }` | Custom item rendering |
329
- | `empty` | -- | Content when items array is empty |
330
- | `items-container` | `{ items: T[], close: () => void }` | Full control over the items list |
331
+ | Slot | Props | Description |
332
+ | ----------------- | -------------------------------------------------------------------------------- | --------------------------------- |
333
+ | `trigger` | `{ isActive: boolean, toggle: () => void, open: () => void, close: () => void }` | Custom trigger element |
334
+ | `item` | `{ item: T, click: () => void }` | Custom item rendering |
335
+ | `empty` | -- | Content when items array is empty |
336
+ | `items-container` | `{ items: T[], close: () => void }` | Full control over the items list |
331
337
 
332
338
  ## CSS Variables
333
339
 
334
- | Variable | Default | Description |
335
- |----------|---------|-------------|
336
- | `--vc-dropdown-bg` | `var(--additional-50)` | Panel background color |
337
- | `--vc-dropdown-text` | `var(--neutrals-950)` | Default text color |
338
- | `--vc-dropdown-border` | `var(--neutrals-200)` | Floating panel border color |
339
- | `--vc-dropdown-accent` | `var(--neutrals-100)` | Hover/focus background color |
340
- | `--vc-dropdown-accent-foreground` | `var(--neutrals-900)` | Hover/focus text color |
341
- | `--vc-dropdown-divider` | `var(--neutrals-200)` | Mobile item divider color |
342
- | `--vc-dropdown-trigger-focus-ring-width` | `2px` | Trigger focus ring width |
343
- | `--vc-dropdown-trigger-focus-ring-offset` | `1px` | Trigger focus ring offset |
344
- | `--vc-dropdown-trigger-focus-ring-color` | `var(--primary-300)` | Trigger focus ring color |
340
+ | Variable | Default | Description |
341
+ | ----------------------------------------- | ---------------------- | ---------------------------- |
342
+ | `--vc-dropdown-bg` | `var(--additional-50)` | Panel background color |
343
+ | `--vc-dropdown-text` | `var(--neutrals-950)` | Default text color |
344
+ | `--vc-dropdown-border` | `var(--neutrals-200)` | Floating panel border color |
345
+ | `--vc-dropdown-accent` | `var(--neutrals-100)` | Hover/focus background color |
346
+ | `--vc-dropdown-accent-foreground` | `var(--neutrals-900)` | Hover/focus text color |
347
+ | `--vc-dropdown-divider` | `var(--neutrals-200)` | Mobile item divider color |
348
+ | `--vc-dropdown-trigger-focus-ring-width` | `2px` | Trigger focus ring width |
349
+ | `--vc-dropdown-trigger-focus-ring-offset` | `1px` | Trigger focus ring offset |
350
+ | `--vc-dropdown-trigger-focus-ring-color` | `var(--primary-300)` | Trigger focus ring color |
345
351
 
346
352
  ## Accessibility
347
353
 
@@ -13,7 +13,12 @@ Floating dropdown panel positioned relative to an anchor element, with header, s
13
13
 
14
14
  ```vue
15
15
  <template>
16
- <button ref="anchorEl" @click="open = !open">Toggle Panel</button>
16
+ <button
17
+ ref="anchorEl"
18
+ @click="open = !open"
19
+ >
20
+ Toggle Panel
21
+ </button>
17
22
  <VcDropdownPanel
18
23
  v-model:show="open"
19
24
  :anchor-ref="anchorEl"
@@ -36,43 +41,39 @@ const open = ref(false);
36
41
 
37
42
  ## Key Props
38
43
 
39
- | Prop | Type | Default | Description |
40
- |------|------|---------|-------------|
41
- | `show` | `boolean` | — | Panel visibility (v-model:show) |
42
- | `anchorRef` | `HTMLElement \| null` | `null` | Anchor element for floating positioning |
43
- | `title` | `string` | `""` | Header title text (header hidden when empty and no `#header` slot) |
44
- | `placement` | `Placement` | `"bottom-start"` | Floating UI placement relative to anchor |
45
- | `width` | `string` | `"280px"` | Panel min-width |
46
- | `maxWidth` | `string` | `"400px"` | Panel max-width |
47
- | `maxHeight` | `number` | `350` | Max height in pixels (clamped by viewport) |
48
- | `contentScrollable` | `boolean` | `true` | Enable scrolling in the content area |
49
- | `closeOnClickOutside` | `boolean` | `true` | Close when clicking outside |
50
- | `closeOnEscape` | `boolean` | `true` | Close on Escape key |
44
+ | Prop | Type | Default | Description |
45
+ | --------------------- | --------------------- | ---------------- | ------------------------------------------------------------------ |
46
+ | `show` | `boolean` | — | Panel visibility (v-model:show) |
47
+ | `anchorRef` | `HTMLElement \| null` | `null` | Anchor element for floating positioning |
48
+ | `title` | `string` | `""` | Header title text (header hidden when empty and no `#header` slot) |
49
+ | `placement` | `Placement` | `"bottom-start"` | Floating UI placement relative to anchor |
50
+ | `width` | `string` | `"280px"` | Panel min-width |
51
+ | `maxWidth` | `string` | `"400px"` | Panel max-width |
52
+ | `maxHeight` | `number` | `350` | Max height in pixels (clamped by viewport) |
53
+ | `contentScrollable` | `boolean` | `true` | Enable scrolling in the content area |
54
+ | `closeOnClickOutside` | `boolean` | `true` | Close when clicking outside |
55
+ | `closeOnEscape` | `boolean` | `true` | Close on Escape key |
51
56
 
52
57
  ## Events
53
58
 
54
- | Event | Payload | Description |
55
- |-------|---------|-------------|
59
+ | Event | Payload | Description |
60
+ | ------------- | --------- | ------------------------ |
56
61
  | `update:show` | `boolean` | Panel visibility changed |
57
62
 
58
63
  ## Slots
59
64
 
60
- | Slot | Props | Description |
61
- |------|-------|-------------|
62
- | `default` | — | Scrollable content area |
63
- | `header` | `{ close }` | Custom header (replaces default title + close button) |
64
- | `footer` | — | Footer area, typically for action buttons |
65
+ | Slot | Props | Description |
66
+ | --------- | ----------- | ----------------------------------------------------- |
67
+ | `default` | — | Scrollable content area |
68
+ | `header` | `{ close }` | Custom header (replaces default title + close button) |
69
+ | `footer` | — | Footer area, typically for action buttons |
65
70
 
66
71
  ## Common Patterns
67
72
 
68
73
  ### Filter Panel with Footer Actions
69
74
 
70
75
  ```vue
71
- <VcDropdownPanel
72
- v-model:show="showFilters"
73
- :anchor-ref="filterButton"
74
- title="Filters"
75
- >
76
+ <VcDropdownPanel v-model:show="showFilters" :anchor-ref="filterButton" title="Filters">
76
77
  <div class="tw-p-4 tw-flex tw-flex-col tw-gap-2">
77
78
  <VcCheckbox v-model="filters.active">Active only</VcCheckbox>
78
79
  <VcCheckbox v-model="filters.inStock">In stock</VcCheckbox>
@@ -102,12 +103,7 @@ const open = ref(false);
102
103
  ### Scrollable List
103
104
 
104
105
  ```vue
105
- <VcDropdownPanel
106
- v-model:show="open"
107
- :anchor-ref="anchor"
108
- title="Long Content"
109
- :max-height="250"
110
- >
106
+ <VcDropdownPanel v-model:show="open" :anchor-ref="anchor" title="Long Content" :max-height="250">
111
107
  <div class="tw-py-1">
112
108
  <div
113
109
  v-for="item in items"
@@ -122,17 +118,17 @@ const open = ref(false);
122
118
 
123
119
  ## CSS Variables
124
120
 
125
- | Variable | Default | Description |
126
- |----------|---------|-------------|
127
- | `--dropdown-panel-bg` | `var(--additional-50)` | Panel background |
128
- | `--dropdown-panel-border-color` | `var(--neutrals-200)` | Border color |
129
- | `--dropdown-panel-border-radius` | `6px` | Corner radius |
130
- | `--dropdown-panel-shadow` | `0 4px 16px rgba(0,0,0,0.08)` | Box shadow |
131
- | `--dropdown-panel-z-index` | `10001` | Z-index |
132
- | `--dropdown-panel-title-color` | `var(--neutrals-900)` | Title text color |
133
- | `--dropdown-panel-close-color` | `var(--neutrals-400)` | Close button color |
134
- | `--dropdown-panel-close-hover-color` | `var(--neutrals-600)` | Close button hover color |
135
- | `--dropdown-panel-footer-bg` | `var(--neutrals-50)` | Footer background |
121
+ | Variable | Default | Description |
122
+ | ------------------------------------ | ----------------------------- | ------------------------ |
123
+ | `--dropdown-panel-bg` | `var(--additional-50)` | Panel background |
124
+ | `--dropdown-panel-border-color` | `var(--neutrals-200)` | Border color |
125
+ | `--dropdown-panel-border-radius` | `6px` | Corner radius |
126
+ | `--dropdown-panel-shadow` | `0 4px 16px rgba(0,0,0,0.08)` | Box shadow |
127
+ | `--dropdown-panel-z-index` | `10001` | Z-index |
128
+ | `--dropdown-panel-title-color` | `var(--neutrals-900)` | Title text color |
129
+ | `--dropdown-panel-close-color` | `var(--neutrals-400)` | Close button color |
130
+ | `--dropdown-panel-close-hover-color` | `var(--neutrals-600)` | Close button hover color |
131
+ | `--dropdown-panel-footer-bg` | `var(--neutrals-50)` | Footer background |
136
132
 
137
133
  ## Accessibility
138
134
 
@@ -10,6 +10,7 @@ A rich text editor built on TipTap that supports both Markdown and HTML content.
10
10
  - Situations where authors need source-level control over markup
11
11
 
12
12
  When NOT to use:
13
+
13
14
  - Plain text input -- use [VcTextarea](../vc-textarea/)
14
15
  - Short single-line values -- use [VcInput](../vc-input/)
15
16
  - Code editing with syntax highlighting -- use a dedicated code editor
@@ -18,7 +19,11 @@ When NOT to use:
18
19
 
19
20
  ```vue
20
21
  <template>
21
- <VcEditor v-model="content" label="Description" placeholder="Start typing..." />
22
+ <VcEditor
23
+ v-model="content"
24
+ label="Description"
25
+ placeholder="Start typing..."
26
+ />
22
27
  </template>
23
28
 
24
29
  <script setup lang="ts">
@@ -35,13 +40,13 @@ const content = ref("");
35
40
 
36
41
  The editor header provides four view modes plus a fullscreen toggle:
37
42
 
38
- | Mode | Description |
39
- |------|-------------|
40
- | **Editor** (default) | WYSIWYG rich text editing with toolbar |
41
- | **Preview** | Read-only rendered HTML preview (sanitized via DOMPurify) |
42
- | **Source** | Raw Markdown/HTML textarea for direct markup editing |
43
- | **Split** | Side-by-side editor + source view for simultaneous editing |
44
- | **Fullscreen** | Any mode expanded to fill the entire viewport |
43
+ | Mode | Description |
44
+ | -------------------- | ---------------------------------------------------------- |
45
+ | **Editor** (default) | WYSIWYG rich text editing with toolbar |
46
+ | **Preview** | Read-only rendered HTML preview (sanitized via DOMPurify) |
47
+ | **Source** | Raw Markdown/HTML textarea for direct markup editing |
48
+ | **Split** | Side-by-side editor + source view for simultaneous editing |
49
+ | **Fullscreen** | Any mode expanded to fill the entire viewport |
45
50
 
46
51
  The editor automatically detects whether content is Markdown or HTML based on pattern analysis and outputs in the same format. HTML content is auto-formatted with Prettier in source/split views.
47
52
 
@@ -52,11 +57,7 @@ Limit which toolbar buttons appear by passing a `toolbar` array. Only the specif
52
57
  `"bold"`, `"italic"`, `"underline"`, `"strikethrough"`, `"heading1"`, `"heading2"`, `"heading3"`, `"bulletList"`, `"orderedList"`, `"blockquote"`, `"link"`, `"image"`, `"table"`, `"fontSize"`, `"separator"`
53
58
 
54
59
  ```vue
55
- <VcEditor
56
- v-model="content"
57
- label="Simple editor"
58
- :toolbar="['bold', 'italic', 'separator', 'heading1', 'heading2', 'link']"
59
- />
60
+ <VcEditor v-model="content" label="Simple editor" :toolbar="['bold', 'italic', 'separator', 'heading1', 'heading2', 'link']" />
60
61
  ```
61
62
 
62
63
  When no `toolbar` prop is provided, all buttons are shown by default.
@@ -66,12 +67,7 @@ When no `toolbar` prop is provided, all buttons are shown by default.
66
67
  The `maxlength` prop enforces a character limit. A counter is displayed in source and split modes, and the counter turns to a warning style when 90% of the limit is reached. Input beyond the limit is blocked.
67
68
 
68
69
  ```vue
69
- <VcEditor
70
- v-model="content"
71
- label="Short description"
72
- :maxlength="500"
73
- placeholder="Maximum 500 characters..."
74
- />
70
+ <VcEditor v-model="content" label="Short description" :maxlength="500" placeholder="Maximum 500 characters..." />
75
71
  ```
76
72
 
77
73
  ### Image Upload
@@ -79,11 +75,7 @@ The `maxlength` prop enforces a character limit. A counter is displayed in sourc
79
75
  When `assetsFolder` is provided, the image toolbar button becomes functional. Clicking it opens a file picker for images. Selected files are uploaded via `POST /api/assets?folderUrl=/<assetsFolder>` and inserted at the cursor position.
80
76
 
81
77
  ```vue
82
- <VcEditor
83
- v-model="content"
84
- label="Article body"
85
- assets-folder="articles/images"
86
- />
78
+ <VcEditor v-model="content" label="Article body" assets-folder="articles/images" />
87
79
  ```
88
80
 
89
81
  Multiple images can be selected at once. The upload accepts any image file type (`image/*`).
@@ -179,15 +171,7 @@ const form = reactive({ description: "" });
179
171
  ### Multilanguage Product Description
180
172
 
181
173
  ```vue
182
- <VcEditor
183
- v-model="descriptions[currentLang]"
184
- label="Product description"
185
- multilanguage
186
- :current-language="currentLang"
187
- assets-folder="products/images"
188
- :maxlength="5000"
189
- required
190
- />
174
+ <VcEditor v-model="descriptions[currentLang]" label="Product description" multilanguage :current-language="currentLang" assets-folder="products/images" :maxlength="5000" required />
191
175
  ```
192
176
 
193
177
  ### Minimal Comment Editor
@@ -234,56 +218,56 @@ const content = ref("<h1>Title</h1>");
234
218
 
235
219
  ## Props
236
220
 
237
- | Prop | Type | Default | Description |
238
- |------|------|---------|-------------|
239
- | `modelValue` | `string` | `""` | Content string via `v-model` (Markdown or HTML) |
240
- | `label` | `string` | -- | Label text above the editor |
241
- | `placeholder` | `string` | -- | Placeholder when editor is empty |
242
- | `disabled` | `boolean` | `false` | Disables all editing |
243
- | `required` | `boolean` | `false` | Shows a required asterisk on the label |
244
- | `tooltip` | `string` | -- | Tooltip text shown on label hover |
245
- | `errorMessage` | `string` | -- | Error message below the editor (also activates error styling) |
246
- | `name` | `string` | -- | Form field name attribute |
247
- | `toolbar` | `ToolbarNames[]` | all buttons | Array of toolbar button names to show |
248
- | `maxlength` | `number` | -- | Character limit (counter shown in source/split mode) |
249
- | `assetsFolder` | `string` | -- | API folder path for image uploads |
250
- | `extensions` | `Extension[]` | -- | Additional TipTap extensions |
251
- | `customButtons` | `CustomToolbarItem[]` | -- | Plugin toolbar buttons or dropdowns |
252
- | `multilanguage` | `boolean` | `false` | Enables multilanguage indicator on the label |
253
- | `currentLanguage` | `string` | -- | Current language code for multilanguage mode |
221
+ | Prop | Type | Default | Description |
222
+ | ----------------- | --------------------- | ----------- | ------------------------------------------------------------- |
223
+ | `modelValue` | `string` | `""` | Content string via `v-model` (Markdown or HTML) |
224
+ | `label` | `string` | -- | Label text above the editor |
225
+ | `placeholder` | `string` | -- | Placeholder when editor is empty |
226
+ | `disabled` | `boolean` | `false` | Disables all editing |
227
+ | `required` | `boolean` | `false` | Shows a required asterisk on the label |
228
+ | `tooltip` | `string` | -- | Tooltip text shown on label hover |
229
+ | `errorMessage` | `string` | -- | Error message below the editor (also activates error styling) |
230
+ | `name` | `string` | -- | Form field name attribute |
231
+ | `toolbar` | `ToolbarNames[]` | all buttons | Array of toolbar button names to show |
232
+ | `maxlength` | `number` | -- | Character limit (counter shown in source/split mode) |
233
+ | `assetsFolder` | `string` | -- | API folder path for image uploads |
234
+ | `extensions` | `Extension[]` | -- | Additional TipTap extensions |
235
+ | `customButtons` | `CustomToolbarItem[]` | -- | Plugin toolbar buttons or dropdowns |
236
+ | `multilanguage` | `boolean` | `false` | Enables multilanguage indicator on the label |
237
+ | `currentLanguage` | `string` | -- | Current language code for multilanguage mode |
254
238
 
255
239
  ## Events
256
240
 
257
- | Event | Payload | Description |
258
- |-------|---------|-------------|
241
+ | Event | Payload | Description |
242
+ | ------------------- | --------------------- | ------------------------------------------------------------- |
259
243
  | `update:modelValue` | `string \| undefined` | Emitted when content changes (from WYSIWYG or source editing) |
260
- | `upload-image` | -- | Emitted when image upload is triggered |
244
+ | `upload-image` | -- | Emitted when image upload is triggered |
261
245
 
262
246
  ## Slots
263
247
 
264
- | Slot | Description |
265
- |------|-------------|
248
+ | Slot | Description |
249
+ | ------- | ----------------------------------------------------- |
266
250
  | `error` | Custom error message markup (replaces default VcHint) |
267
251
 
268
252
  ## CSS Variables
269
253
 
270
- | Variable | Default | Description |
271
- |----------|---------|-------------|
272
- | `--vc-editor-border` | `var(--neutrals-300)` | Default border color |
273
- | `--vc-editor-background` | `transparent` | Editor background |
274
- | `--vc-editor-surface` | `var(--additional-50)` | Content area surface color |
275
- | `--vc-editor-text-primary` | `var(--neutrals-900)` | Primary text color |
276
- | `--vc-editor-text-secondary` | `var(--neutrals-500)` | Secondary text color (char counter) |
277
- | `--vc-editor-text-muted` | `var(--neutrals-400)` | Muted text color (placeholder) |
278
- | `--vc-editor-text-disabled` | `var(--neutrals-500)` | Text color when disabled |
279
- | `--vc-editor-background-disabled` | `var(--neutrals-200)` | Background when disabled |
280
- | `--vc-editor-focus-border` | `var(--primary-500)` | Border color on focus |
281
- | `--vc-editor-focus-ring-color` | `color-mix(in srgb, var(--primary-500) 30%, transparent)` | Focus ring color |
282
- | `--vc-editor-error-border` | `var(--danger-500)` | Border color on error |
283
- | `--vc-editor-error-ring-color` | `rgba(239, 68, 68, 0.2)` | Error ring color |
284
- | `--vc-editor-error-text` | `var(--danger-500)` | Error message text color |
285
- | `--vc-editor-separator` | `var(--neutrals-200)` | Divider lines (blockquote border, table borders, hr) |
286
- | `--vc-editor-table-header` | `var(--neutrals-100)` | Table header cell background |
254
+ | Variable | Default | Description |
255
+ | --------------------------------- | --------------------------------------------------------- | ---------------------------------------------------- |
256
+ | `--vc-editor-border` | `var(--neutrals-300)` | Default border color |
257
+ | `--vc-editor-background` | `transparent` | Editor background |
258
+ | `--vc-editor-surface` | `var(--additional-50)` | Content area surface color |
259
+ | `--vc-editor-text-primary` | `var(--neutrals-900)` | Primary text color |
260
+ | `--vc-editor-text-secondary` | `var(--neutrals-500)` | Secondary text color (char counter) |
261
+ | `--vc-editor-text-muted` | `var(--neutrals-400)` | Muted text color (placeholder) |
262
+ | `--vc-editor-text-disabled` | `var(--neutrals-500)` | Text color when disabled |
263
+ | `--vc-editor-background-disabled` | `var(--neutrals-200)` | Background when disabled |
264
+ | `--vc-editor-focus-border` | `var(--primary-500)` | Border color on focus |
265
+ | `--vc-editor-focus-ring-color` | `color-mix(in srgb, var(--primary-500) 30%, transparent)` | Focus ring color |
266
+ | `--vc-editor-error-border` | `var(--danger-500)` | Border color on error |
267
+ | `--vc-editor-error-ring-color` | `rgba(239, 68, 68, 0.2)` | Error ring color |
268
+ | `--vc-editor-error-text` | `var(--danger-500)` | Error message text color |
269
+ | `--vc-editor-separator` | `var(--neutrals-200)` | Divider lines (blockquote border, table borders, hr) |
270
+ | `--vc-editor-table-header` | `var(--neutrals-100)` | Table header cell background |
287
271
 
288
272
  ## Accessibility
289
273
 
@@ -302,4 +286,3 @@ const content = ref("<h1>Title</h1>");
302
286
  ## Skeleton / Loading State
303
287
 
304
288
  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.
305
-