@vc-shell/vc-app-skill 2.0.3 → 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.
- package/CHANGELOG.md +4 -0
- package/package.json +1 -1
- package/runtime/VERSION +1 -1
- package/runtime/knowledge/docs/_BUILD_HASH.md +1 -1
- package/runtime/knowledge/docs/core/api/platform.docs.md +7 -0
- package/runtime/knowledge/docs/core/blade-navigation/blade-nav-composables.docs.md +20 -4
- package/runtime/knowledge/docs/core/composables/bladeContext/index.docs.md +15 -3
- package/runtime/knowledge/docs/core/composables/useApiClient/useApiClient.docs.md +13 -4
- package/runtime/knowledge/docs/core/composables/useAppBarMobileButtons/useAppBarMobileButtons.docs.md +10 -0
- package/runtime/knowledge/docs/core/composables/useAppBarWidget/useAppBarWidget.docs.md +6 -0
- package/runtime/knowledge/docs/core/composables/useAppInsights/useAppInsights.docs.md +6 -0
- package/runtime/knowledge/docs/core/composables/useAssets/useAssets.docs.md +8 -1
- package/runtime/knowledge/docs/core/composables/useAssetsManager/useAssetsManager.docs.md +15 -4
- package/runtime/knowledge/docs/core/composables/useAsync/useAsync.docs.md +13 -0
- package/runtime/knowledge/docs/core/composables/useBeforeUnload/useBeforeUnload.docs.md +6 -0
- package/runtime/knowledge/docs/core/composables/useBlade/useBlade.docs.md +13 -0
- package/runtime/knowledge/docs/core/composables/useBladeForm/useBladeForm.docs.md +12 -2
- package/runtime/knowledge/docs/core/composables/useBladeRegistry/useBladeRegistry.docs.md +14 -4
- package/runtime/knowledge/docs/core/composables/useBladeWidgets/index.docs.md +23 -9
- package/runtime/knowledge/docs/core/composables/useBreadcrumbs/useBreadcrumbs.docs.md +6 -0
- package/runtime/knowledge/docs/core/composables/useConnectionStatus/useConnectionStatus.docs.md +10 -0
- package/runtime/knowledge/docs/core/composables/useDashboard/useDashboard.docs.md +9 -0
- package/runtime/knowledge/docs/core/composables/useDynamicProperties/useDynamicProperties.docs.md +6 -0
- package/runtime/knowledge/docs/core/composables/useErrorHandler/useErrorHandler.docs.md +6 -0
- package/runtime/knowledge/docs/core/composables/useFunctions/useFunctions.docs.md +6 -0
- package/runtime/knowledge/docs/core/composables/useKeyboardNavigation/useKeyboardNavigation.docs.md +10 -0
- package/runtime/knowledge/docs/core/composables/useLanguages/useLanguages.docs.md +6 -0
- package/runtime/knowledge/docs/core/composables/useLoading/useLoading.docs.md +10 -0
- package/runtime/knowledge/docs/core/composables/useMenuExpanded/index.docs.md +10 -0
- package/runtime/knowledge/docs/core/composables/useMenuService/useMenuService.docs.md +9 -0
- package/runtime/knowledge/docs/core/composables/useModificationTracker/useModificationTracker.docs.md +6 -0
- package/runtime/knowledge/docs/core/composables/useNotifications/useNotifications.docs.md +6 -0
- package/runtime/knowledge/docs/core/composables/usePermissions/usePermissions.docs.md +9 -0
- package/runtime/knowledge/docs/core/composables/usePopup/usePopup.docs.md +9 -0
- package/runtime/knowledge/docs/core/composables/useResponsive/useResponsive.docs.md +10 -0
- package/runtime/knowledge/docs/core/composables/useSettings/useSettings.docs.md +6 -0
- package/runtime/knowledge/docs/core/composables/useSettingsMenu/useSettingsMenu.docs.md +6 -0
- package/runtime/knowledge/docs/core/composables/useSidebarState/useSidebarState.docs.md +10 -0
- package/runtime/knowledge/docs/core/composables/useSlowNetworkDetection/useSlowNetworkDetection.docs.md +9 -0
- package/runtime/knowledge/docs/core/composables/useTheme/useTheme.docs.md +9 -0
- package/runtime/knowledge/docs/core/composables/useToolbar/useToolbar.docs.md +9 -0
- package/runtime/knowledge/docs/core/composables/useUser/useUser.docs.md +6 -0
- package/runtime/knowledge/docs/core/composables/useUserManagement/useUserManagement.docs.md +7 -0
- package/runtime/knowledge/docs/core/composables/useWebVitals/useWebVitals.docs.md +6 -0
- package/runtime/knowledge/docs/core/composables/useWidgets/useWidgets.docs.md +10 -0
- package/runtime/knowledge/docs/core/directives/autofocus/autofocus.docs.md +7 -0
- package/runtime/knowledge/docs/core/directives/loading/loading.docs.md +7 -0
- package/runtime/knowledge/docs/core/notifications/notifications.docs.md +21 -0
- package/runtime/knowledge/docs/core/plugins/ai-agent/ai-agent.docs.md +7 -0
- package/runtime/knowledge/docs/core/plugins/extension-points/extension-points.docs.md +10 -0
- package/runtime/knowledge/docs/core/plugins/global-error-handler/global-error-handler.docs.md +7 -0
- package/runtime/knowledge/docs/core/plugins/i18n/i18n.docs.md +10 -0
- package/runtime/knowledge/docs/core/plugins/modularity/modularity.docs.md +10 -0
- package/runtime/knowledge/docs/core/plugins/permissions/permissions.docs.md +8 -1
- package/runtime/knowledge/docs/core/plugins/signalR/signalR.docs.md +7 -0
- package/runtime/knowledge/docs/core/plugins/validation/validation.docs.md +10 -0
- package/runtime/knowledge/docs/core/services/services.docs.md +16 -1
- package/runtime/knowledge/docs/core/types/types.docs.md +7 -0
- package/runtime/knowledge/docs/core/utilities/date/date-utilities.docs.md +7 -0
- package/runtime/knowledge/docs/core/utilities/shared-utilities.docs.md +7 -0
- package/runtime/knowledge/docs/core/utilities/thumbnail/thumbnail.docs.md +7 -0
- package/runtime/knowledge/docs/core/utilities/utilities.docs.md +7 -0
- package/runtime/knowledge/docs/injection-keys.docs.md +11 -0
- package/runtime/knowledge/docs/modules/assets-manager/assets-manager.docs.md +89 -12
- package/runtime/knowledge/docs/shell/_internal/popup/common/popup-common.docs.md +7 -0
- package/runtime/knowledge/docs/shell/auth/ChangePasswordPage/change-password-page.docs.md +7 -0
- package/runtime/knowledge/docs/shell/auth/ForgotPasswordPage/forgot-password-page.docs.md +7 -0
- package/runtime/knowledge/docs/shell/auth/InvitePage/invite-page.docs.md +7 -0
- package/runtime/knowledge/docs/shell/auth/LoginPage/login-page.docs.md +7 -0
- package/runtime/knowledge/docs/shell/auth/ResetPasswordPage/reset-password-page.docs.md +7 -0
- package/runtime/knowledge/docs/shell/auth/sign-in/sign-in.docs.md +7 -0
- package/runtime/knowledge/docs/shell/components/change-password/change-password.docs.md +7 -0
- package/runtime/knowledge/docs/shell/components/change-password-button/change-password-button.docs.md +7 -0
- package/runtime/knowledge/docs/shell/components/error-interceptor/error-interceptor.docs.md +7 -0
- package/runtime/knowledge/docs/shell/components/language-selector/language-selector.docs.md +7 -0
- package/runtime/knowledge/docs/shell/components/logout-button/logout-button.docs.md +7 -0
- package/runtime/knowledge/docs/shell/components/notification-dropdown/notification-dropdown.docs.md +7 -0
- package/runtime/knowledge/docs/shell/components/notification-template/notification-template.docs.md +7 -0
- package/runtime/knowledge/docs/shell/components/settings-menu/settings-menu.docs.md +7 -0
- package/runtime/knowledge/docs/shell/components/settings-menu-item/settings-menu-item.docs.md +7 -0
- package/runtime/knowledge/docs/shell/components/sidebar/sidebar.docs.md +7 -0
- package/runtime/knowledge/docs/shell/components/theme-selector/theme-selector.docs.md +7 -0
- package/runtime/knowledge/docs/shell/components/user-dropdown-button/user-dropdown-button.docs.md +7 -0
- package/runtime/knowledge/docs/shell/dashboard/dashboard-charts/dashboard-charts.docs.md +7 -0
- package/runtime/knowledge/docs/shell/dashboard/dashboard-widget-card/dashboard-widget-card.docs.md +7 -0
- package/runtime/knowledge/docs/shell/dashboard/draggable-dashboard/draggable-dashboard.docs.md +7 -0
- package/runtime/knowledge/docs/ui/components/atoms/vc-badge/vc-badge.docs.md +24 -0
- package/runtime/knowledge/docs/ui/components/atoms/vc-banner/vc-banner.docs.md +20 -0
- package/runtime/knowledge/docs/ui/components/atoms/vc-button/vc-button.docs.md +32 -5
- package/runtime/knowledge/docs/ui/components/atoms/vc-card/vc-card.docs.md +15 -2
- package/runtime/knowledge/docs/ui/components/atoms/vc-col/vc-col.docs.md +11 -1
- package/runtime/knowledge/docs/ui/components/atoms/vc-container/vc-container.docs.md +10 -0
- package/runtime/knowledge/docs/ui/components/atoms/vc-hint/vc-hint.docs.md +20 -0
- package/runtime/knowledge/docs/ui/components/atoms/vc-icon/vc-icon.docs.md +24 -0
- package/runtime/knowledge/docs/ui/components/atoms/vc-image/vc-image.docs.md +26 -0
- package/runtime/knowledge/docs/ui/components/atoms/vc-label/vc-label.docs.md +24 -0
- package/runtime/knowledge/docs/ui/components/atoms/vc-link/vc-link.docs.md +22 -0
- package/runtime/knowledge/docs/ui/components/atoms/vc-loading/vc-loading.docs.md +21 -0
- package/runtime/knowledge/docs/ui/components/atoms/vc-progress/vc-progress.docs.md +20 -0
- package/runtime/knowledge/docs/ui/components/atoms/vc-row/vc-row.docs.md +11 -1
- package/runtime/knowledge/docs/ui/components/atoms/vc-scrollable-container/vc-scrollable-container.docs.md +11 -1
- package/runtime/knowledge/docs/ui/components/atoms/vc-skeleton/vc-skeleton.docs.md +20 -0
- package/runtime/knowledge/docs/ui/components/atoms/vc-status/vc-status.docs.md +20 -0
- package/runtime/knowledge/docs/ui/components/atoms/vc-status-icon/vc-status-icon.docs.md +20 -0
- package/runtime/knowledge/docs/ui/components/atoms/vc-tooltip/vc-tooltip.docs.md +25 -1
- package/runtime/knowledge/docs/ui/components/atoms/vc-video/vc-video.docs.md +25 -0
- package/runtime/knowledge/docs/ui/components/atoms/vc-widget/vc-widget.docs.md +22 -0
- package/runtime/knowledge/docs/ui/components/molecules/multilanguage-selector/multilanguage-selector.docs.md +10 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-accordion/vc-accordion.docs.md +17 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.docs.md +27 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-checkbox/vc-checkbox.docs.md +27 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-checkbox-group/vc-checkbox-group.docs.md +23 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-color-input/vc-color-input.docs.md +24 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-date-picker/vc-date-picker.docs.md +27 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-dropdown/vc-dropdown.docs.md +27 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-dropdown-panel/vc-dropdown-panel.docs.md +22 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-editor/vc-editor.docs.md +17 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-field/vc-field.docs.md +17 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-file-upload/vc-file-upload.docs.md +17 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-form/vc-form.docs.md +15 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-image-tile/vc-image-tile.docs.md +12 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-input/vc-input.docs.md +30 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-input-currency/vc-input-currency.docs.md +27 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-input-dropdown/vc-input-dropdown.docs.md +26 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-input-group/vc-input-group.docs.md +21 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-menu/vc-menu.docs.md +24 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-multivalue/vc-multivalue.docs.md +28 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-pagination/vc-pagination.docs.md +25 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-radio-button/vc-radio-button.docs.md +25 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-radio-group/vc-radio-group.docs.md +22 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-rating/vc-rating.docs.md +17 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-select/vc-select.docs.md +32 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-slider/vc-slider.docs.md +22 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-switch/vc-switch.docs.md +25 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-textarea/vc-textarea.docs.md +27 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-toast/vc-toast.docs.md +28 -0
- package/runtime/knowledge/docs/ui/components/organisms/vc-app/vc-app.docs.md +19 -0
- package/runtime/knowledge/docs/ui/components/organisms/vc-auth-layout/vc-auth-layout.docs.md +13 -0
- package/runtime/knowledge/docs/ui/components/organisms/vc-blade/vc-blade.docs.md +22 -1
- package/runtime/knowledge/docs/ui/components/organisms/vc-data-table/composables/table-composables.docs.md +30 -5
- package/runtime/knowledge/docs/ui/components/organisms/vc-data-table/vc-data-table.docs.md +18 -0
- package/runtime/knowledge/docs/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.docs.md +12 -0
- package/runtime/knowledge/docs/ui/components/organisms/vc-gallery/vc-gallery.docs.md +14 -0
- package/runtime/knowledge/docs/ui/components/organisms/vc-image-upload/vc-image-upload.docs.md +12 -0
- package/runtime/knowledge/docs/ui/components/organisms/vc-popup/vc-popup.docs.md +14 -1
- package/runtime/knowledge/docs/ui/components/organisms/vc-sidebar/vc-sidebar.docs.md +13 -0
- package/runtime/knowledge/docs/ui/composables/ui-composables.docs.md +7 -0
- package/runtime/knowledge/docs/ui/composables/useDataTablePagination.docs.md +9 -3
- package/runtime/knowledge/docs/ui/composables/useDataTableSort.docs.md +6 -0
- package/runtime/knowledge/docs/ui/composables/useTableSelection.docs.md +6 -0
- package/runtime/knowledge/docs/ui/composables/useTableSort.docs.md +6 -0
- package/runtime/knowledge/docs/ui/types/ui-types.docs.md +7 -0
- package/runtime/knowledge/docs/core/composables/usePlatformLocaleSync/usePlatformLocaleSync.docs.md +0 -28
- package/runtime/knowledge/docs/shell/dashboard/draggable-dashboard/dashboard-widget-skeleton.docs.md +0 -26
|
@@ -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
|
|
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.
|
|
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
|
-
|
|
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:
|