@vc-shell/vc-app-skill 2.0.3-pr227.0c4f2c3 → 2.0.4-pr228.1e79eae

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 (152) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/package.json +1 -1
  3. package/runtime/VERSION +1 -1
  4. package/runtime/knowledge/docs/_BUILD_HASH.md +1 -1
  5. package/runtime/knowledge/docs/core/api/platform.docs.md +7 -0
  6. package/runtime/knowledge/docs/core/blade-navigation/blade-nav-composables.docs.md +20 -4
  7. package/runtime/knowledge/docs/core/composables/bladeContext/index.docs.md +15 -3
  8. package/runtime/knowledge/docs/core/composables/useApiClient/useApiClient.docs.md +13 -4
  9. package/runtime/knowledge/docs/core/composables/useAppBarMobileButtons/useAppBarMobileButtons.docs.md +10 -0
  10. package/runtime/knowledge/docs/core/composables/useAppBarWidget/useAppBarWidget.docs.md +6 -0
  11. package/runtime/knowledge/docs/core/composables/useAppInsights/useAppInsights.docs.md +6 -0
  12. package/runtime/knowledge/docs/core/composables/useAssets/useAssets.docs.md +8 -1
  13. package/runtime/knowledge/docs/core/composables/useAssetsManager/useAssetsManager.docs.md +15 -4
  14. package/runtime/knowledge/docs/core/composables/useAsync/useAsync.docs.md +13 -0
  15. package/runtime/knowledge/docs/core/composables/useBeforeUnload/useBeforeUnload.docs.md +6 -0
  16. package/runtime/knowledge/docs/core/composables/useBlade/useBlade.docs.md +13 -0
  17. package/runtime/knowledge/docs/core/composables/useBladeForm/useBladeForm.docs.md +12 -2
  18. package/runtime/knowledge/docs/core/composables/useBladeRegistry/useBladeRegistry.docs.md +14 -4
  19. package/runtime/knowledge/docs/core/composables/useBladeWidgets/index.docs.md +23 -9
  20. package/runtime/knowledge/docs/core/composables/useBreadcrumbs/useBreadcrumbs.docs.md +6 -0
  21. package/runtime/knowledge/docs/core/composables/useConnectionStatus/useConnectionStatus.docs.md +10 -0
  22. package/runtime/knowledge/docs/core/composables/useDashboard/useDashboard.docs.md +9 -0
  23. package/runtime/knowledge/docs/core/composables/useDynamicProperties/useDynamicProperties.docs.md +6 -0
  24. package/runtime/knowledge/docs/core/composables/useErrorHandler/useErrorHandler.docs.md +6 -0
  25. package/runtime/knowledge/docs/core/composables/useFunctions/useFunctions.docs.md +6 -0
  26. package/runtime/knowledge/docs/core/composables/useKeyboardNavigation/useKeyboardNavigation.docs.md +10 -0
  27. package/runtime/knowledge/docs/core/composables/useLanguages/useLanguages.docs.md +6 -0
  28. package/runtime/knowledge/docs/core/composables/useLoading/useLoading.docs.md +10 -0
  29. package/runtime/knowledge/docs/core/composables/useMenuExpanded/index.docs.md +10 -0
  30. package/runtime/knowledge/docs/core/composables/useMenuService/useMenuService.docs.md +9 -0
  31. package/runtime/knowledge/docs/core/composables/useModificationTracker/useModificationTracker.docs.md +6 -0
  32. package/runtime/knowledge/docs/core/composables/useNotifications/useNotifications.docs.md +6 -0
  33. package/runtime/knowledge/docs/core/composables/usePermissions/usePermissions.docs.md +9 -0
  34. package/runtime/knowledge/docs/core/composables/usePopup/usePopup.docs.md +9 -0
  35. package/runtime/knowledge/docs/core/composables/useResponsive/useResponsive.docs.md +10 -0
  36. package/runtime/knowledge/docs/core/composables/useSettings/useSettings.docs.md +6 -0
  37. package/runtime/knowledge/docs/core/composables/useSettingsMenu/useSettingsMenu.docs.md +6 -0
  38. package/runtime/knowledge/docs/core/composables/useSidebarState/useSidebarState.docs.md +10 -0
  39. package/runtime/knowledge/docs/core/composables/useSlowNetworkDetection/useSlowNetworkDetection.docs.md +9 -0
  40. package/runtime/knowledge/docs/core/composables/useTheme/useTheme.docs.md +9 -0
  41. package/runtime/knowledge/docs/core/composables/useToolbar/useToolbar.docs.md +9 -0
  42. package/runtime/knowledge/docs/core/composables/useUser/useUser.docs.md +6 -0
  43. package/runtime/knowledge/docs/core/composables/useUserManagement/useUserManagement.docs.md +7 -0
  44. package/runtime/knowledge/docs/core/composables/useWebVitals/useWebVitals.docs.md +6 -0
  45. package/runtime/knowledge/docs/core/composables/useWidgets/useWidgets.docs.md +10 -0
  46. package/runtime/knowledge/docs/core/directives/autofocus/autofocus.docs.md +7 -0
  47. package/runtime/knowledge/docs/core/directives/loading/loading.docs.md +7 -0
  48. package/runtime/knowledge/docs/core/notifications/notifications.docs.md +21 -0
  49. package/runtime/knowledge/docs/core/plugins/ai-agent/ai-agent.docs.md +7 -0
  50. package/runtime/knowledge/docs/core/plugins/extension-points/extension-points.docs.md +10 -0
  51. package/runtime/knowledge/docs/core/plugins/global-error-handler/global-error-handler.docs.md +7 -0
  52. package/runtime/knowledge/docs/core/plugins/i18n/i18n.docs.md +10 -0
  53. package/runtime/knowledge/docs/core/plugins/modularity/modularity.docs.md +10 -0
  54. package/runtime/knowledge/docs/core/plugins/permissions/permissions.docs.md +8 -1
  55. package/runtime/knowledge/docs/core/plugins/signalR/signalR.docs.md +7 -0
  56. package/runtime/knowledge/docs/core/plugins/validation/validation.docs.md +10 -0
  57. package/runtime/knowledge/docs/core/services/services.docs.md +16 -1
  58. package/runtime/knowledge/docs/core/types/types.docs.md +7 -0
  59. package/runtime/knowledge/docs/core/utilities/date/date-utilities.docs.md +7 -0
  60. package/runtime/knowledge/docs/core/utilities/shared-utilities.docs.md +7 -0
  61. package/runtime/knowledge/docs/core/utilities/thumbnail/thumbnail.docs.md +7 -0
  62. package/runtime/knowledge/docs/core/utilities/utilities.docs.md +7 -0
  63. package/runtime/knowledge/docs/injection-keys.docs.md +11 -0
  64. package/runtime/knowledge/docs/modules/assets-manager/assets-manager.docs.md +89 -12
  65. package/runtime/knowledge/docs/shell/_internal/popup/common/popup-common.docs.md +7 -0
  66. package/runtime/knowledge/docs/shell/auth/ChangePasswordPage/change-password-page.docs.md +7 -0
  67. package/runtime/knowledge/docs/shell/auth/ForgotPasswordPage/forgot-password-page.docs.md +7 -0
  68. package/runtime/knowledge/docs/shell/auth/InvitePage/invite-page.docs.md +7 -0
  69. package/runtime/knowledge/docs/shell/auth/LoginPage/login-page.docs.md +7 -0
  70. package/runtime/knowledge/docs/shell/auth/ResetPasswordPage/reset-password-page.docs.md +7 -0
  71. package/runtime/knowledge/docs/shell/auth/sign-in/sign-in.docs.md +7 -0
  72. package/runtime/knowledge/docs/shell/components/change-password/change-password.docs.md +7 -0
  73. package/runtime/knowledge/docs/shell/components/change-password-button/change-password-button.docs.md +7 -0
  74. package/runtime/knowledge/docs/shell/components/error-interceptor/error-interceptor.docs.md +7 -0
  75. package/runtime/knowledge/docs/shell/components/language-selector/language-selector.docs.md +7 -0
  76. package/runtime/knowledge/docs/shell/components/logout-button/logout-button.docs.md +7 -0
  77. package/runtime/knowledge/docs/shell/components/notification-dropdown/notification-dropdown.docs.md +7 -0
  78. package/runtime/knowledge/docs/shell/components/notification-template/notification-template.docs.md +7 -0
  79. package/runtime/knowledge/docs/shell/components/settings-menu/settings-menu.docs.md +7 -0
  80. package/runtime/knowledge/docs/shell/components/settings-menu-item/settings-menu-item.docs.md +7 -0
  81. package/runtime/knowledge/docs/shell/components/sidebar/sidebar.docs.md +7 -0
  82. package/runtime/knowledge/docs/shell/components/theme-selector/theme-selector.docs.md +7 -0
  83. package/runtime/knowledge/docs/shell/components/user-dropdown-button/user-dropdown-button.docs.md +7 -0
  84. package/runtime/knowledge/docs/shell/dashboard/dashboard-charts/dashboard-charts.docs.md +7 -0
  85. package/runtime/knowledge/docs/shell/dashboard/dashboard-widget-card/dashboard-widget-card.docs.md +7 -0
  86. package/runtime/knowledge/docs/shell/dashboard/draggable-dashboard/draggable-dashboard.docs.md +7 -0
  87. package/runtime/knowledge/docs/ui/components/atoms/vc-badge/vc-badge.docs.md +24 -0
  88. package/runtime/knowledge/docs/ui/components/atoms/vc-banner/vc-banner.docs.md +20 -0
  89. package/runtime/knowledge/docs/ui/components/atoms/vc-button/vc-button.docs.md +32 -5
  90. package/runtime/knowledge/docs/ui/components/atoms/vc-card/vc-card.docs.md +15 -2
  91. package/runtime/knowledge/docs/ui/components/atoms/vc-col/vc-col.docs.md +11 -1
  92. package/runtime/knowledge/docs/ui/components/atoms/vc-container/vc-container.docs.md +10 -0
  93. package/runtime/knowledge/docs/ui/components/atoms/vc-hint/vc-hint.docs.md +20 -0
  94. package/runtime/knowledge/docs/ui/components/atoms/vc-icon/vc-icon.docs.md +24 -0
  95. package/runtime/knowledge/docs/ui/components/atoms/vc-image/vc-image.docs.md +26 -0
  96. package/runtime/knowledge/docs/ui/components/atoms/vc-label/vc-label.docs.md +24 -0
  97. package/runtime/knowledge/docs/ui/components/atoms/vc-link/vc-link.docs.md +22 -0
  98. package/runtime/knowledge/docs/ui/components/atoms/vc-loading/vc-loading.docs.md +21 -0
  99. package/runtime/knowledge/docs/ui/components/atoms/vc-progress/vc-progress.docs.md +20 -0
  100. package/runtime/knowledge/docs/ui/components/atoms/vc-row/vc-row.docs.md +11 -1
  101. package/runtime/knowledge/docs/ui/components/atoms/vc-scrollable-container/vc-scrollable-container.docs.md +11 -1
  102. package/runtime/knowledge/docs/ui/components/atoms/vc-skeleton/vc-skeleton.docs.md +20 -0
  103. package/runtime/knowledge/docs/ui/components/atoms/vc-status/vc-status.docs.md +20 -0
  104. package/runtime/knowledge/docs/ui/components/atoms/vc-status-icon/vc-status-icon.docs.md +20 -0
  105. package/runtime/knowledge/docs/ui/components/atoms/vc-tooltip/vc-tooltip.docs.md +25 -1
  106. package/runtime/knowledge/docs/ui/components/atoms/vc-video/vc-video.docs.md +25 -0
  107. package/runtime/knowledge/docs/ui/components/atoms/vc-widget/vc-widget.docs.md +22 -0
  108. package/runtime/knowledge/docs/ui/components/molecules/multilanguage-selector/multilanguage-selector.docs.md +10 -0
  109. package/runtime/knowledge/docs/ui/components/molecules/vc-accordion/vc-accordion.docs.md +17 -0
  110. package/runtime/knowledge/docs/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.docs.md +27 -0
  111. package/runtime/knowledge/docs/ui/components/molecules/vc-checkbox/vc-checkbox.docs.md +27 -0
  112. package/runtime/knowledge/docs/ui/components/molecules/vc-checkbox-group/vc-checkbox-group.docs.md +23 -0
  113. package/runtime/knowledge/docs/ui/components/molecules/vc-color-input/vc-color-input.docs.md +24 -0
  114. package/runtime/knowledge/docs/ui/components/molecules/vc-date-picker/vc-date-picker.docs.md +27 -0
  115. package/runtime/knowledge/docs/ui/components/molecules/vc-dropdown/vc-dropdown.docs.md +27 -0
  116. package/runtime/knowledge/docs/ui/components/molecules/vc-dropdown-panel/vc-dropdown-panel.docs.md +22 -0
  117. package/runtime/knowledge/docs/ui/components/molecules/vc-editor/vc-editor.docs.md +17 -0
  118. package/runtime/knowledge/docs/ui/components/molecules/vc-field/vc-field.docs.md +17 -0
  119. package/runtime/knowledge/docs/ui/components/molecules/vc-file-upload/vc-file-upload.docs.md +17 -0
  120. package/runtime/knowledge/docs/ui/components/molecules/vc-form/vc-form.docs.md +15 -0
  121. package/runtime/knowledge/docs/ui/components/molecules/vc-image-tile/vc-image-tile.docs.md +12 -0
  122. package/runtime/knowledge/docs/ui/components/molecules/vc-input/vc-input.docs.md +30 -0
  123. package/runtime/knowledge/docs/ui/components/molecules/vc-input-currency/vc-input-currency.docs.md +27 -0
  124. package/runtime/knowledge/docs/ui/components/molecules/vc-input-dropdown/vc-input-dropdown.docs.md +26 -0
  125. package/runtime/knowledge/docs/ui/components/molecules/vc-input-group/vc-input-group.docs.md +21 -0
  126. package/runtime/knowledge/docs/ui/components/molecules/vc-menu/vc-menu.docs.md +24 -0
  127. package/runtime/knowledge/docs/ui/components/molecules/vc-multivalue/vc-multivalue.docs.md +28 -0
  128. package/runtime/knowledge/docs/ui/components/molecules/vc-pagination/vc-pagination.docs.md +25 -0
  129. package/runtime/knowledge/docs/ui/components/molecules/vc-radio-button/vc-radio-button.docs.md +25 -0
  130. package/runtime/knowledge/docs/ui/components/molecules/vc-radio-group/vc-radio-group.docs.md +22 -0
  131. package/runtime/knowledge/docs/ui/components/molecules/vc-rating/vc-rating.docs.md +17 -0
  132. package/runtime/knowledge/docs/ui/components/molecules/vc-select/vc-select.docs.md +32 -0
  133. package/runtime/knowledge/docs/ui/components/molecules/vc-slider/vc-slider.docs.md +22 -0
  134. package/runtime/knowledge/docs/ui/components/molecules/vc-switch/vc-switch.docs.md +25 -0
  135. package/runtime/knowledge/docs/ui/components/molecules/vc-textarea/vc-textarea.docs.md +27 -0
  136. package/runtime/knowledge/docs/ui/components/molecules/vc-toast/vc-toast.docs.md +28 -0
  137. package/runtime/knowledge/docs/ui/components/organisms/vc-app/vc-app.docs.md +19 -0
  138. package/runtime/knowledge/docs/ui/components/organisms/vc-auth-layout/vc-auth-layout.docs.md +13 -0
  139. package/runtime/knowledge/docs/ui/components/organisms/vc-blade/vc-blade.docs.md +22 -1
  140. package/runtime/knowledge/docs/ui/components/organisms/vc-data-table/composables/table-composables.docs.md +30 -5
  141. package/runtime/knowledge/docs/ui/components/organisms/vc-data-table/vc-data-table.docs.md +18 -0
  142. package/runtime/knowledge/docs/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.docs.md +12 -0
  143. package/runtime/knowledge/docs/ui/components/organisms/vc-gallery/vc-gallery.docs.md +14 -0
  144. package/runtime/knowledge/docs/ui/components/organisms/vc-image-upload/vc-image-upload.docs.md +12 -0
  145. package/runtime/knowledge/docs/ui/components/organisms/vc-popup/vc-popup.docs.md +14 -1
  146. package/runtime/knowledge/docs/ui/components/organisms/vc-sidebar/vc-sidebar.docs.md +13 -0
  147. package/runtime/knowledge/docs/ui/composables/ui-composables.docs.md +7 -0
  148. package/runtime/knowledge/docs/ui/composables/useDataTablePagination.docs.md +9 -3
  149. package/runtime/knowledge/docs/ui/composables/useDataTableSort.docs.md +6 -0
  150. package/runtime/knowledge/docs/ui/composables/useTableSelection.docs.md +6 -0
  151. package/runtime/knowledge/docs/ui/composables/useTableSort.docs.md +6 -0
  152. package/runtime/knowledge/docs/ui/types/ui-types.docs.md +7 -0
@@ -1,7 +1,15 @@
1
+ ---
2
+ title: VcContainer
3
+ category: components
4
+ group: layout
5
+ ---
6
+
1
7
  # VcContainer
2
8
 
3
9
  A scrollable content wrapper that fills its parent, provides configurable padding, and optionally shows an inset shadow to indicate overflow. The standard building block for blade body content.
4
10
 
11
+ ::storybook id="layout-vccontainer--default"
12
+
5
13
  ## When to Use
6
14
 
7
15
  - Wrap blade body content that may exceed the visible area
@@ -11,6 +19,8 @@ A scrollable content wrapper that fills its parent, provides configurable paddin
11
19
 
12
20
  ## Basic Usage
13
21
 
22
+ ::storybook id="layout-vccontainer--with-shadow" height="300"
23
+
14
24
  ```vue
15
25
  <VcContainer shadow>
16
26
  <p>Scrollable content goes here...</p>
@@ -1,7 +1,15 @@
1
+ ---
2
+ title: VcHint
3
+ category: components
4
+ group: feedback
5
+ ---
6
+
1
7
  # VcHint
2
8
 
3
9
  A small text component for displaying helper text, validation messages, or supplementary guidance below form fields. It renders as a lightweight `<div>` with muted styling in its default state and switches to a danger color with `role="alert"` when the `error` prop is set, ensuring screen readers announce validation problems immediately.
4
10
 
11
+ ::storybook id="data-display-vchint--default"
12
+
5
13
  ## When to Use
6
14
 
7
15
  - Show helper text beneath input fields explaining expected format or constraints
@@ -34,6 +42,8 @@ A small text component for displaying helper text, validation messages, or suppl
34
42
 
35
43
  ## Common Patterns
36
44
 
45
+ ::storybook id="data-display-vchint--form-field-hint"
46
+
37
47
  ### Helper Text Below an Input
38
48
 
39
49
  ```vue
@@ -129,3 +139,13 @@ Show helper text by default, but swap to an error message when validation fails:
129
139
  - [VcLabel](../vc-label/) -- field label component, typically placed above the input
130
140
  - [VcBanner](../vc-banner/) -- for longer or more prominent alert messages
131
141
  - [VcInput](../../molecules/vc-input/) -- form input component often paired with VcHint
142
+
143
+ <!-- internal:start -->
144
+
145
+ ## Architecture notes
146
+
147
+ - VcHint is a single `<div>` element — no wrapper. `role="alert"` is toggled reactively via `:role` binding when `error` prop changes.
148
+ - CSS variables are scoped with `.vc-hint` selector in `vc-hint.vue` `<style scoped>`.
149
+ - Source: `framework/ui/components/atoms/vc-hint/vc-hint.vue`
150
+
151
+ <!-- internal:end -->
@@ -1,7 +1,15 @@
1
+ ---
2
+ title: VcIcon
3
+ category: components
4
+ group: misc
5
+ ---
6
+
1
7
  # VcIcon
2
8
 
3
9
  A unified icon component that renders icons from multiple libraries. Lucide Icons (`lucide-` prefix) are the standard; legacy libraries (FontAwesome, Bootstrap, Material) are deprecated.
4
10
 
11
+ ::storybook id="layout-vcicon--basic"
12
+
5
13
  ## When to Use
6
14
 
7
15
  - Display icons in buttons, menus, toolbars, and status indicators
@@ -26,6 +34,8 @@ A unified icon component that renders icons from multiple libraries. Lucide Icon
26
34
  | `ariaLabel` | `string` | — | Accessible label for meaningful icons |
27
35
  | `basePath` | `string` | `"/assets/icons"` | Base path for SVG sprite icons |
28
36
 
37
+ ::storybook id="layout-vcicon--all-sizes" height="300"
38
+
29
39
  ## Size Reference
30
40
 
31
41
  | Size | Pixels |
@@ -38,6 +48,8 @@ A unified icon component that renders icons from multiple libraries. Lucide Icon
38
48
  | `xxl` | 30px |
39
49
  | `xxxl` | 64px |
40
50
 
51
+ ::storybook id="layout-vcicon--all-variants" height="200"
52
+
41
53
  ## Icon Prefix Guide
42
54
 
43
55
  | Prefix | Library | Status |
@@ -106,3 +118,15 @@ import MyCustomIcon from "./MyCustomIcon.vue";
106
118
  - [VcButton](../vc-button/) — uses VcIcon internally for button icons
107
119
  - [VcImage](../vc-image/) — for photos and larger imagery
108
120
  - [VcBanner](../vc-banner/) — uses VcIcon for the leading alert icon
121
+
122
+ <!-- internal:start -->
123
+
124
+ ## Architecture notes
125
+
126
+ - VcIcon lives in `framework/ui/components/atoms/vc-icon/`.
127
+ - Icon resolution is handled by a switch on the string prefix: `lucide-` maps to the Lucide component registry; `fa-` / `fas fa-` / `bi-` / `material-` are legacy paths kept for backward compatibility and will be removed in v3.
128
+ - The `svg:` prefix loads from an SVG sprite at `basePath` (default `/assets/icons`) using a `<use>` element. Sprite must be included in the app's static assets.
129
+ - `customSize` takes a number and sets `width`/`height` inline; it overrides the `size` prop class entirely.
130
+ - Color variants (`warning`, `danger`, `success`) apply CSS custom property overrides (`--icon-color`) rather than inline style to allow theme-level customization.
131
+
132
+ <!-- internal:end -->
@@ -1,7 +1,15 @@
1
+ ---
2
+ title: VcImage
3
+ category: components
4
+ group: media
5
+ ---
6
+
1
7
  # VcImage
2
8
 
3
9
  An image display component with predefined sizes, aspect ratio control, and a placeholder for missing sources. Renders images as CSS backgrounds with automatic HTTPS enforcement.
4
10
 
11
+ ::storybook id="data-display-vcimage--default"
12
+
5
13
  ## When to Use
6
14
 
7
15
  - Display product thumbnails, profile avatars, or media previews
@@ -30,6 +38,8 @@ An image display component with predefined sizes, aspect ratio control, and a pl
30
38
  | `alt` | `string` | — | Accessible alt text |
31
39
  | `thumbnailSize` | `ThumbnailSize` | — | Load a thumbnail variant instead of full-size image. Values: `"sm"`, `"md"`, `"lg"`, `"64x64"`, `"128x128"`, `"168x168"`, `"216x216"`, `"348x348"` |
32
40
 
41
+ ::storybook id="data-display-vcimage--size-variants" height="300"
42
+
33
43
  ## Size Reference
34
44
 
35
45
  | Size | Width |
@@ -83,7 +93,23 @@ An image display component with predefined sizes, aspect ratio control, and a pl
83
93
  - Focus ring appears on `:focus-visible` for clickable images
84
94
  - HTTP URLs are automatically upgraded to HTTPS when the page is served over HTTPS
85
95
 
96
+ !!! tip "Use thumbnailSize for faster load times"
97
+ When displaying images in lists or grids, pass a `thumbnailSize` (e.g. `"128x128"`) to request a pre-scaled variant from the platform CDN instead of loading the full-resolution original. This significantly reduces bandwidth and speeds up initial render.
98
+
86
99
  ## Related Components
87
100
 
88
101
  - [VcIcon](../vc-icon/) — for symbolic icons rather than photographic content
89
102
  - [VcImageTile](../../molecules/vc-image-tile/) — combines VcImage with overlay actions for gallery use
103
+
104
+ <!-- internal:start -->
105
+
106
+ ## Architecture notes
107
+
108
+ - VcImage lives in `framework/ui/components/atoms/vc-image/`.
109
+ - Images are rendered as CSS `background-image` on a `<div>` rather than an `<img>` tag; this enables `background-size: cover/contain` and preserves aspect-ratio without JS.
110
+ - HTTPS enforcement: the `src` watcher rewrites `http://` to `https://` when `window.location.protocol === 'https:'`.
111
+ - `thumbnailSize` appends a query parameter to the URL compatible with Virto Commerce image proxy: `?size=128x128`. This is a platform-specific convention.
112
+ - Aspect ratios are implemented as Tailwind aspect-ratio utility classes (`tw-aspect-square`, `tw-aspect-video`, etc.).
113
+ - Clickable mode adds `role="button"` and forwards keyboard Enter/Space to the click handler, consistent with other atom-level interactive components.
114
+
115
+ <!-- internal:end -->
@@ -1,7 +1,15 @@
1
+ ---
2
+ title: VcLabel
3
+ category: components
4
+ group: misc
5
+ ---
6
+
1
7
  # VcLabel
2
8
 
3
9
  A form field label component with support for required indicators, info tooltips, multilanguage badges, and error states. Renders as a `<label>` when linked to an input via `htmlFor`, or a `<div>` otherwise. VcLabel is the standard way to label any form control in the framework and is used internally by most input molecules (VcInput, VcSelect, VcTextarea, etc.).
4
10
 
11
+ ::storybook id="data-display-vclabel--default"
12
+
5
13
  ## When to Use
6
14
 
7
15
  - Label form inputs, selects, and textareas
@@ -48,6 +56,8 @@ A form field label component with support for required indicators, info tooltips
48
56
  | `--label-lang-color` | `var(--neutrals-500)` | Language badge text color |
49
57
  | `--label-error-color` | `var(--danger-500)` | Text color in error state |
50
58
 
59
+ ::storybook id="data-display-vclabel--required" height="200"
60
+
51
61
  ## Common Patterns
52
62
 
53
63
  ### Required Field with Tooltip
@@ -144,8 +154,22 @@ Use a different icon for the tooltip trigger:
144
154
  - Tooltip icon is focusable and keyboard-accessible via the underlying VcTooltip component
145
155
  - Error state changes the visual color but does not add ARIA attributes to the label; pair with `aria-invalid` and `aria-describedby` on the input
146
156
 
157
+ ::storybook id="data-display-vclabel--with-form-field" height="300"
158
+
147
159
  ## Related Components
148
160
 
149
161
  - [VcHint](../vc-hint/) -- helper/error text placed below the input
150
162
  - [VcTooltip](../vc-tooltip/) -- used internally for the info tooltip
151
163
  - [VcInput](../../molecules/vc-input/) -- form input component commonly paired with VcLabel
164
+
165
+ <!-- internal:start -->
166
+
167
+ ## Architecture notes
168
+
169
+ - VcLabel lives in `framework/ui/components/atoms/vc-label/`.
170
+ - The element type (`<label>` vs `<div>`) is determined by a computed `tag` that checks whether `htmlFor` is a non-empty string.
171
+ - The tooltip trigger is rendered by `VcTooltip` (internal molecule); the `tooltipIcon` prop simply passes through to an inner `VcIcon` instance.
172
+ - `multilanguage` + `currentLanguage` render a small pill via an inline `<span>` with `.vc-label__lang` class — not a separate component.
173
+ - VcLabel is the canonical label primitive consumed by `VcInput`, `VcSelect`, `VcTextarea`, `VcCheckbox`, and `VcRadioButton` in `framework/ui/components/molecules/`.
174
+
175
+ <!-- internal:end -->
@@ -1,7 +1,15 @@
1
+ ---
2
+ title: VcLink
3
+ category: components
4
+ group: navigation
5
+ ---
6
+
1
7
  # VcLink
2
8
 
3
9
  A clickable inline link element styled as a button, used for navigation or triggering actions within text or toolbars. Despite its link-like appearance, VcLink renders as a native `<button>` element, which provides correct keyboard behavior and avoids the need for an `href` attribute when the action is handled in JavaScript.
4
10
 
11
+ ::storybook id="action-vclink--default"
12
+
5
13
  ## When to Use
6
14
 
7
15
  - Trigger navigation or actions inline with other content
@@ -38,6 +46,8 @@ function openDetails() {
38
46
  | ------- | ------- | ----------------------------------------------------------- |
39
47
  | `click` | none | Fired when the link is clicked (suppressed when `disabled`) |
40
48
 
49
+ ::storybook id="action-vclink--navigation-example" height="250"
50
+
41
51
  ## Common Patterns
42
52
 
43
53
  ### Navigation Bar
@@ -138,3 +148,15 @@ const activeTab = ref("Overview");
138
148
  ## Related Components
139
149
 
140
150
  - [VcButton](../vc-button/) -- for primary actions and form submissions
151
+
152
+ <!-- internal:start -->
153
+
154
+ ## Architecture notes
155
+
156
+ - VcLink lives in `framework/ui/components/atoms/vc-link/`.
157
+ - Renders as a native `<button type="button">` with all default button styles reset via CSS (no background, no border, no padding). The link appearance is achieved purely through color and text-decoration.
158
+ - The `active` prop adds `.vc-link--active` modifier which applies `--link-text-color-active` and removes the hover underline to signal current selection.
159
+ - The `disabled` prop sets both the native `disabled` attribute (removes from tab order) and `aria-disabled="true"` (for assistive technologies that still read disabled buttons).
160
+ - No `href` prop is intentional — VcLink is for JS-driven navigation (e.g., `openBlade`, `router.push`). For real anchor links, use `<a>` or `<router-link>` directly.
161
+
162
+ <!-- internal:end -->
@@ -1,7 +1,15 @@
1
+ ---
2
+ title: VcLoading
3
+ category: components
4
+ group: feedback
5
+ ---
6
+
1
7
  # VcLoading
2
8
 
3
9
  A lightweight animated loading overlay that displays a sweeping progress bar over its parent container. The overlay uses a translucent backdrop with a subtle blur effect, drawing user attention to the animated bar while keeping the underlying content partially visible so users retain context about what is loading.
4
10
 
11
+ ::storybook id="layout-vcloading--default"
12
+
5
13
  ## When to Use
6
14
 
7
15
  - Show loading state while fetching data for a blade, card, or section
@@ -46,6 +54,8 @@ const isLoading = ref(true);
46
54
  | `--loading-bar-height` | `4px` | Height of the progress bar |
47
55
  | `--loading-z-index` | `9998` | Z-index of the overlay layer |
48
56
 
57
+ ::storybook id="layout-vcloading--interactive"
58
+
49
59
  ## Recipe: Loading State in a Blade
50
60
 
51
61
  Blades have a built-in loading mechanism, but you can use VcLoading to cover a specific section within a blade body — for example, loading a chart or a related-items panel independently.
@@ -123,3 +133,14 @@ Override the bar color to match a specific status or brand theme:
123
133
 
124
134
  - **VcBlade** -- blades use VcLoading internally for their loading state
125
135
  - [VcProgress](../vc-progress/) -- determinate progress bar when percentage is known
136
+
137
+ <!-- internal:start -->
138
+
139
+ ## Architecture notes
140
+
141
+ - The overlay is a single `<div>` with `v-show` (not `v-if`) so it remains in the DOM and retains animation state. `display: none` from `v-show` removes it from the paint tree when inactive.
142
+ - The sweeping bar is a child `<div>` animated via `@keyframes vc-loading-sweep` (translateX from `-100%` to `100%`).
143
+ - `backdrop-filter: blur(3px)` is applied to the overlay div directly; older Safari requires `-webkit-backdrop-filter` as a fallback.
144
+ - Source: `framework/ui/components/atoms/vc-loading/vc-loading.vue`
145
+
146
+ <!-- internal:end -->
@@ -1,7 +1,15 @@
1
+ ---
2
+ title: VcProgress
3
+ category: components
4
+ group: feedback
5
+ ---
6
+
1
7
  # VcProgress
2
8
 
3
9
  A horizontal progress bar that visualizes the completion percentage of a task or process. The bar fills smoothly from left to right using a CSS `transform` transition, and an optional striped variant adds an animated diagonal pattern to indicate active processing.
4
10
 
11
+ ::storybook id="layout-vcprogress--default"
12
+
5
13
  ## When to Use
6
14
 
7
15
  - Display upload, import, or export progress
@@ -51,6 +59,8 @@ const uploadPercent = ref(45);
51
59
  </template>
52
60
  ```
53
61
 
62
+ ::storybook id="layout-vcprogress--striped"
63
+
54
64
  ### Multiple Progress Stages
55
65
 
56
66
  ```vue
@@ -164,3 +174,13 @@ async function handleUpload(files: FileList) {
164
174
 
165
175
  - [VcLoading](../vc-loading/) -- indeterminate loading overlay when percentage is unknown
166
176
  - [VcHint](../vc-hint/) -- helper text to display percentage or status message below the bar
177
+
178
+ <!-- internal:start -->
179
+
180
+ ## Architecture notes
181
+
182
+ - The fill width is driven by `transform: scaleX(value / 100)` with `transform-origin: left`, not `width`, for smoother GPU-accelerated animation.
183
+ - The `value` prop is clamped via `Math.min(100, Math.max(0, props.value))` in a computed.
184
+ - Source: `framework/ui/components/atoms/vc-progress/vc-progress.vue`
185
+
186
+ <!-- internal:end -->
@@ -1,6 +1,14 @@
1
+ ---
2
+ title: VcRow
3
+ category: components
4
+ group: layout
5
+ ---
6
+
1
7
  # VcRow
2
8
 
3
- A simple layout primitive that arranges child elements in a horizontal flexbox row, automatically switching to a CSS grid on mobile viewports. VcRow has no props of its own — it is a purely presentational wrapper that applies consistent flex behavior and responsive breakpoints so you do not have to repeat the same Tailwind utilities across every horizontal layout.
9
+ A simple layout primitive that arranges child elements in a horizontal flexbox row
10
+
11
+ ::storybook id="layout-vcrow--default", automatically switching to a CSS grid on mobile viewports. VcRow has no props of its own — it is a purely presentational wrapper that applies consistent flex behavior and responsive breakpoints so you do not have to repeat the same Tailwind utilities across every horizontal layout.
4
12
 
5
13
  ## When to Use
6
14
 
@@ -100,6 +108,8 @@ The `--row-gap` CSS variable (default `0`) controls spacing. You can also overri
100
108
  </template>
101
109
  ```
102
110
 
111
+ ::storybook id="layout-vcrow--with-cards" height="300"
112
+
103
113
  ## Recipe: Form Section with Label and Fields
104
114
 
105
115
  Use VcRow to place a section label next to a group of fields in a blade detail view:
@@ -1,6 +1,14 @@
1
+ ---
2
+ title: VcScrollableContainer
3
+ category: components
4
+ group: layout
5
+ ---
6
+
1
7
  # VcScrollableContainer
2
8
 
3
- A container component that wraps overflowing content with auto-hiding scroll arrows at the top and bottom edges. The native scrollbar is hidden via CSS, replaced by subtle chevron indicators that appear only when scrolling in that direction is possible. Users can hover over an arrow to scroll continuously or use keyboard arrow keys when the viewport is focused.
9
+ A container component that wraps overflowing content with auto-hiding scroll arrows at the top and bottom edges.
10
+
11
+ ::storybook id="layout-vcscrollablecontainer--default" The native scrollbar is hidden via CSS, replaced by subtle chevron indicators that appear only when scrolling in that direction is possible. Users can hover over an arrow to scroll continuously or use keyboard arrow keys when the viewport is focused.
4
12
 
5
13
  ## When to Use
6
14
 
@@ -50,6 +58,8 @@ import { VcScrollableContainer } from "@vc-shell/framework";
50
58
  | `viewportRef` | `Ref<HTMLElement \| null>` | Direct reference to the viewport DOM element |
51
59
  | `updateScrollState` | `() => void` | Manually recalculate arrow visibility |
52
60
 
61
+ ::storybook id="layout-vcscrollablecontainer--custom-speed" height="350"
62
+
53
63
  ## Recipe: Sidebar Filter List in a Blade
54
64
 
55
65
  ```vue
@@ -1,7 +1,15 @@
1
+ ---
2
+ title: VcSkeleton
3
+ category: components
4
+ group: feedback
5
+ ---
6
+
1
7
  # VcSkeleton
2
8
 
3
9
  A loading placeholder component that renders animated shimmer shapes (text lines, circles, or rectangular blocks) to indicate content is being fetched.
4
10
 
11
+ ::storybook id="layout-vcskeleton--default"
12
+
5
13
  ## When to Use
6
14
 
7
15
  - Show placeholder UI while async data loads for blades, lists, or cards
@@ -47,6 +55,8 @@ The last row automatically renders at 60% width for a natural paragraph feel.
47
55
  <VcSkeleton variant="circle" :width="48" :height="48" />
48
56
  ```
49
57
 
58
+ ::storybook id="layout-vcskeleton--card-skeleton" height="450"
59
+
50
60
  ### Card Skeleton
51
61
 
52
62
  ```vue
@@ -121,3 +131,13 @@ The last row automatically renders at 60% width for a natural paragraph feel.
121
131
 
122
132
  - [VcLoading](../vc-loading/) -- animated overlay for sections already rendered
123
133
  - [VcProgress](../vc-progress/) -- determinate progress bar
134
+
135
+ <!-- internal:start -->
136
+
137
+ ## Architecture notes
138
+
139
+ - The `text` variant uses an `Array(rows).fill(0)` to render `<span>` elements via `v-for`. The last row gets a `width: 60%` inline style for a natural paragraph taper.
140
+ - Animation uses a CSS `@keyframes` pulse (opacity oscillation), not a moving shimmer, for simplicity and performance.
141
+ - Source: `framework/ui/components/atoms/vc-skeleton/vc-skeleton.vue`
142
+
143
+ <!-- internal:end -->
@@ -1,7 +1,15 @@
1
+ ---
2
+ title: VcStatus
3
+ category: components
4
+ group: feedback
5
+ ---
6
+
1
7
  # VcStatus
2
8
 
3
9
  A colored badge that communicates the state of an entity -- such as an order, product, or workflow step -- using semantic color variants.
4
10
 
11
+ ::storybook id="data-display-vcstatus--default"
12
+
5
13
  ## When to Use
6
14
 
7
15
  - Display order or fulfillment status (e.g., "Paid", "Pending", "Cancelled")
@@ -31,6 +39,8 @@ import { VcStatus } from "@vc-shell/framework";
31
39
 
32
40
  ## Common Patterns
33
41
 
42
+ ::storybook id="data-display-vcstatus--all-variants" height="450"
43
+
34
44
  ### Status in a Table Cell
35
45
 
36
46
  ```vue
@@ -116,3 +126,13 @@ Each variant has its own set of CSS variables following the pattern `--status-{v
116
126
 
117
127
  - [VcStatusIcon](../vc-status-icon/) -- boolean check/cross icon for active/inactive states
118
128
  - [VcBadge](../vc-badge/) -- numeric count badge overlay
129
+
130
+ <!-- internal:start -->
131
+
132
+ ## Architecture notes
133
+
134
+ - The `extend` prop switches a CSS class; all color theming is done via `--status-{variant}-*` CSS variables scoped under `.vc-status`.
135
+ - Special variants `"light-danger"`, `"info-dark"`, and `"primary"` are kept for backward compatibility and mapped via a `variantClassMap` in `vc-status.vue`.
136
+ - Source: `framework/ui/components/atoms/vc-status/vc-status.vue`
137
+
138
+ <!-- internal:end -->
@@ -1,7 +1,15 @@
1
+ ---
2
+ title: VcStatusIcon
3
+ category: components
4
+ group: feedback
5
+ ---
6
+
1
7
  # VcStatusIcon
2
8
 
3
9
  A simple boolean status indicator that displays a green check icon for active/success or a muted cross icon for inactive/failure. It is designed for compact spaces like table cells and lists where a full text label would be too verbose.
4
10
 
11
+ ::storybook id="data-display-vcstatusicon--both-statuses"
12
+
5
13
  ## When to Use
6
14
 
7
15
  - Show on/off or pass/fail state in tables and lists (e.g., "Is Active", "Email Verified")
@@ -104,6 +112,8 @@ import { VcStatusIcon } from "@vc-shell/framework";
104
112
  </template>
105
113
  ```
106
114
 
115
+ ::storybook id="data-display-vcstatusicon--in-context"
116
+
107
117
  ## Recipe: Status Icon with Custom Label
108
118
 
109
119
  VcStatusIcon is intentionally minimal. If you need a text label next to the icon, compose it yourself:
@@ -146,3 +156,13 @@ VcStatusIcon is intentionally minimal. If you need a text label next to the icon
146
156
  - [VcStatus](../vc-status/) -- labeled multi-variant status badge for richer state display
147
157
  - [VcIcon](../vc-icon/) -- standalone icon component used internally
148
158
  - [VcBadge](../vc-badge/) -- inline pill badges for multi-state indicators
159
+
160
+ <!-- internal:start -->
161
+
162
+ ## Architecture notes
163
+
164
+ - VcStatusIcon wraps two `VcIcon` instances in a single `<span>` with `v-if`/`v-else` switching on the `status` prop.
165
+ - Icon size inherits from parent font-size; no dedicated size prop is exposed.
166
+ - Source: `framework/ui/components/atoms/vc-status-icon/vc-status-icon.vue`
167
+
168
+ <!-- internal:end -->
@@ -1,9 +1,17 @@
1
+ ---
2
+ title: VcTooltip
3
+ category: components
4
+ group: feedback
5
+ ---
6
+
1
7
  # VcTooltip
2
8
 
3
9
  A floating tooltip that appears on hover or focus to provide contextual information about a trigger element. Powered by Floating UI for automatic positioning, collision detection, and arrow alignment. The tooltip is teleported to the document body for proper stacking above all content.
4
10
 
5
11
  ## Quick Start
6
12
 
13
+ ::storybook id="overlay-vctooltip--default"
14
+
7
15
  ```vue
8
16
  <template>
9
17
  <VcTooltip>
@@ -55,6 +63,8 @@ The `start` and `end` variants align the tooltip to the beginning or end of the
55
63
 
56
64
  ## Variants
57
65
 
66
+ ::storybook id="overlay-vctooltip--variants"
67
+
58
68
  Three visual themes control the tooltip's appearance.
59
69
 
60
70
  ```vue
@@ -172,7 +182,8 @@ The `#tooltip` slot accepts any HTML or Vue components, not just text:
172
182
  </VcTooltip>
173
183
  ```
174
184
 
175
- > **Caution:** Tooltips should not contain interactive content (buttons, links, inputs). If you need interactive content in a floating panel, use a popover or dropdown component instead.
185
+ !!! warning "No interactive content inside tooltips"
186
+ Tooltips should not contain interactive content (buttons, links, inputs). The tooltip panel has `pointer-events: none` — clicks and keyboard focus inside it are blocked. If you need interactive content in a floating panel, use a popover or dropdown component instead.
176
187
 
177
188
  ## Recipes
178
189
 
@@ -330,3 +341,16 @@ const actions = [
330
341
  - [VcHint](../vc-hint/) -- inline hint text below form fields (always visible)
331
342
  - [VcLabel](../vc-label/) -- label component with built-in tooltip support via its own `#tooltip` slot
332
343
  - [VcIcon](../vc-icon/) -- commonly used as a tooltip trigger for info indicators
344
+
345
+ <!-- internal:start -->
346
+
347
+ ## Architecture notes
348
+
349
+ - VcTooltip uses `@floating-ui/vue` (`useFloating`, `autoUpdate`, `flip`, `shift`, `arrow`, `offset` middleware).
350
+ - The tooltip content is teleported to `<body>` via Vue's `<Teleport>` to escape stacking contexts.
351
+ - Show/hide state is managed with a single `isVisible` ref toggled by `mouseenter`/`mouseleave` and `focusin`/`focusout` on the trigger slot wrapper.
352
+ - The delay timer is stored in a `timeoutId` ref and cleared on `mouseleave` to cancel pending show.
353
+ - Arrow positioning is handled by the `arrowEl` template ref passed to the `arrow` middleware; position is applied via `:style` on the arrow element.
354
+ - Source: `framework/ui/components/atoms/vc-tooltip/vc-tooltip.vue`
355
+
356
+ <!-- internal:end -->
@@ -1,7 +1,15 @@
1
+ ---
2
+ title: VcVideo
3
+ category: components
4
+ group: media
5
+ ---
6
+
1
7
  # VcVideo
2
8
 
3
9
  An embedded video player that renders an iframe for external video sources (YouTube, Vimeo, etc.) with an optional label and tooltip. When no source URL is provided, the component displays a centered film icon placeholder instead of a blank space, giving users a clear visual cue that a video can be attached.
4
10
 
11
+ ::storybook id="data-display-vcvideo--default"
12
+
5
13
  ## When to Use
6
14
 
7
15
  - Embed product or tutorial videos in blade detail views
@@ -32,6 +40,8 @@ import { VcVideo } from "@vc-shell/framework";
32
40
  | `label` | `string` | -- | Label text displayed above the video |
33
41
  | `tooltip` | `string` | -- | Tooltip text shown on the label's info icon |
34
42
 
43
+ ::storybook id="data-display-vcvideo--with-tooltip" height="400"
44
+
35
45
  ## Common Patterns
36
46
 
37
47
  ### Video with Label and Tooltip
@@ -111,8 +121,23 @@ When `source` is not provided, VcVideo renders a centered film icon placeholder
111
121
  - `loading="lazy"` defers iframe load until visible
112
122
  - Placeholder state uses `role="img"` with `aria-label="No video source"`
113
123
 
124
+ !!! warning "Always use embed URLs, not watch URLs"
125
+ YouTube watch URLs (`youtube.com/watch?v=...`) will be blocked by the browser's frame policy. Always convert to the embed format (`youtube.com/embed/VIDEO_ID`). Vimeo similarly requires `player.vimeo.com/video/VIDEO_ID`.
126
+
114
127
  ## Related Components
115
128
 
116
129
  - [VcLabel](../vc-label/) -- used internally for the label with tooltip
117
130
  - [VcIcon](../vc-icon/) -- renders the placeholder film icon
118
131
  - [VcRow](../vc-row/) / [VcCol](../vc-col/) -- layout primitives for placing video alongside other content
132
+
133
+ <!-- internal:start -->
134
+
135
+ ## Architecture notes
136
+
137
+ - VcVideo lives in `framework/ui/components/atoms/vc-video/`.
138
+ - The component is a thin wrapper around a native `<iframe>` — no custom video controls are implemented.
139
+ - The `sandbox` attribute is hardcoded to `allow-scripts allow-same-origin allow-presentation allow-popups`. Apps that need additional iframe permissions must wrap the component or use a plain `<iframe>`.
140
+ - The label is rendered via `VcLabel` (internal atom) with the `tooltip` prop forwarded as the VcLabel tooltip slot content.
141
+ - Placeholder state (`source` is falsy) swaps the iframe for a `<div>` with `role="img"` containing a `VcIcon` with `lucide-film`.
142
+
143
+ <!-- internal:end -->
@@ -1,7 +1,15 @@
1
+ ---
2
+ title: VcWidget
3
+ category: components
4
+ group: misc
5
+ ---
6
+
1
7
  # VcWidget
2
8
 
3
9
  A clickable widget tile with an icon, title, and optional badge counter. Used in blade toolbars and sidebars to trigger blade-level actions or navigation.
4
10
 
11
+ ::storybook id="data-display-vcwidget--default"
12
+
5
13
  ## When to Use
6
14
 
7
15
  - Build widget panels in blade sidebars (e.g., "Orders", "Reviews", "Notifications")
@@ -49,6 +57,8 @@ function openNotifications() {
49
57
  | ------- | ------- | ------------------------------------------------------------- |
50
58
  | `click` | none | Fired when the widget is clicked (suppressed when `disabled`) |
51
59
 
60
+ ::storybook id="data-display-vcwidget--sidebar-layout" height="350"
61
+
52
62
  ## Common Patterns
53
63
 
54
64
  ### Sidebar Widget Panel
@@ -112,3 +122,15 @@ Badge values above 99 are automatically displayed as "99+".
112
122
  - [VcBadge](../vc-badge/) -- used internally for the count badge overlay
113
123
  - [VcIcon](../vc-icon/) -- used internally for the widget icon
114
124
  - [VcButton](../vc-button/) -- for standard action buttons
125
+
126
+ <!-- internal:start -->
127
+
128
+ ## Architecture notes
129
+
130
+ - VcWidget lives in `framework/ui/components/atoms/vc-widget/`.
131
+ - The badge overlay is rendered by embedding `VcBadge` with `isDot`/`content` derived from the `value` prop; values above 99 are truncated to `"99+"` in the component template.
132
+ - `isExpanded` applies `.vc-widget--expanded` modifier; used by the shell sidebar to visually distinguish active navigation state.
133
+ - `horizontal` applies `.vc-widget--horizontal` modifier which switches the internal flex direction from `column` to `row`.
134
+ - The widget registers as a keyboard-interactive element (`role="button"`, Enter/Space handlers) rather than using a `<button>` to allow embedding arbitrary icon components without nesting interactive elements.
135
+
136
+ <!-- internal:end -->
@@ -1,3 +1,9 @@
1
+ ---
2
+ title: MultilanguageSelector
3
+ category: components
4
+ group: form
5
+ ---
6
+
1
7
  # MultilanguageSelector
2
8
 
3
9
  Compact circular flag button that opens a dropdown for selecting a content language. Designed for use in detail blades where entities have multilingual fields (e.g., product name, offer description, category title). This is distinct from the `LanguageSelector` settings entry, which changes the application UI locale -- `MultilanguageSelector` controls which language version of the content the user is editing.
@@ -10,6 +16,8 @@ Compact circular flag button that opens a dropdown for selecting a content langu
10
16
 
11
17
  ## Basic Usage
12
18
 
19
+ ::storybook id="shared-multilanguageselector--interactive"
20
+
13
21
  ```vue
14
22
  <script setup lang="ts">
15
23
  import { ref } from "vue";
@@ -41,6 +49,8 @@ const languages = [
41
49
 
42
50
  Each `LanguageOption` has: `{ value: string; label: string; flag?: string }`.
43
51
 
52
+ ::storybook id="shared-multilanguageselector--disabled"
53
+
44
54
  ## Recipe: Multilingual Product Editing Blade
45
55
 
46
56
  A typical use case is a product detail blade where the user can edit the name and description in multiple languages: