@vc-shell/vc-app-skill 2.1.0-pr255.87acc71 → 2.1.0-pr256.0fe3abb
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/package.json +1 -1
- package/runtime/knowledge/docs/core/api/platform.docs.md +20 -18
- package/runtime/knowledge/docs/core/blade-navigation/blade-nav-composables.docs.md +43 -34
- package/runtime/knowledge/docs/core/blade-navigation/table-query-state/useTableQueryState.docs.md +95 -0
- package/runtime/knowledge/docs/core/composables/useAppBarMobileButtons/useAppBarMobileButtons.docs.md +5 -3
- package/runtime/knowledge/docs/core/composables/useAppBarWidget/useAppBarWidget.docs.md +12 -10
- package/runtime/knowledge/docs/core/composables/useAppInsights/useAppInsights.docs.md +7 -5
- package/runtime/knowledge/docs/core/composables/useAssets/useAssets.docs.md +8 -6
- package/runtime/knowledge/docs/core/composables/useAssetsManager/useAssetsManager.docs.md +3 -1
- package/runtime/knowledge/docs/core/composables/useAsync/useAsync.docs.md +1 -1
- package/runtime/knowledge/docs/core/composables/useBladeRegistry/useBladeRegistry.docs.md +8 -5
- package/runtime/knowledge/docs/core/composables/useBladeWidgets/index.docs.md +12 -12
- package/runtime/knowledge/docs/core/composables/useBreadcrumbs/useBreadcrumbs.docs.md +3 -3
- package/runtime/knowledge/docs/core/composables/useConnectionStatus/useConnectionStatus.docs.md +4 -3
- package/runtime/knowledge/docs/core/composables/useDynamicProperties/useDynamicProperties.docs.md +1 -0
- package/runtime/knowledge/docs/core/composables/useFunctions/useFunctions.docs.md +3 -3
- package/runtime/knowledge/docs/core/composables/useKeyboardNavigation/useKeyboardNavigation.docs.md +5 -4
- package/runtime/knowledge/docs/core/composables/useLanguages/useLanguages.docs.md +3 -3
- package/runtime/knowledge/docs/core/composables/useLoading/useLoading.docs.md +2 -0
- package/runtime/knowledge/docs/core/composables/useModificationTracker/useModificationTracker.docs.md +1 -2
- package/runtime/knowledge/docs/core/composables/useNotifications/useNotifications.docs.md +1 -1
- package/runtime/knowledge/docs/core/composables/usePermissions/usePermissions.docs.md +3 -3
- package/runtime/knowledge/docs/core/composables/usePlatformLocaleSync/usePlatformLocaleSync.docs.md +35 -0
- package/runtime/knowledge/docs/core/composables/usePopup/usePopup.docs.md +1 -1
- package/runtime/knowledge/docs/core/composables/useResponsive/useResponsive.docs.md +2 -2
- package/runtime/knowledge/docs/core/composables/useSettings/useSettings.docs.md +2 -1
- package/runtime/knowledge/docs/core/composables/useSettingsMenu/useSettingsMenu.docs.md +18 -18
- package/runtime/knowledge/docs/core/composables/useSidebarState/useSidebarState.docs.md +3 -3
- package/runtime/knowledge/docs/core/composables/useSlowNetworkDetection/useSlowNetworkDetection.docs.md +10 -7
- package/runtime/knowledge/docs/core/composables/useTheme/useTheme.docs.md +7 -7
- package/runtime/knowledge/docs/core/composables/useToolbar/useToolbar.docs.md +18 -12
- package/runtime/knowledge/docs/core/composables/useUser/useUser.docs.md +2 -2
- package/runtime/knowledge/docs/core/composables/useUserManagement/useUserManagement.docs.md +20 -20
- package/runtime/knowledge/docs/core/composables/useWidgets/useWidgets.docs.md +15 -24
- package/runtime/knowledge/docs/core/directives/loading/loading.docs.md +2 -2
- package/runtime/knowledge/docs/core/notifications/composables/useBladeNotifications.docs.md +183 -0
- package/runtime/knowledge/docs/core/notifications/composables/useBroadcastFilter.docs.md +117 -0
- package/runtime/knowledge/docs/core/notifications/composables/useNotificationContext.docs.md +150 -0
- package/runtime/knowledge/docs/core/notifications/composables/useNotificationStore.docs.md +114 -0
- package/runtime/knowledge/docs/core/notifications/notifications.docs.md +50 -30
- package/runtime/knowledge/docs/core/plugins/ai-agent/ai-agent.docs.md +30 -11
- package/runtime/knowledge/docs/core/plugins/extension-points/extension-points.docs.md +1 -1
- package/runtime/knowledge/docs/core/plugins/global-error-handler/global-error-handler.docs.md +2 -3
- package/runtime/knowledge/docs/core/plugins/modularity/modularity.docs.md +26 -26
- package/runtime/knowledge/docs/core/plugins/permissions/permissions.docs.md +2 -3
- package/runtime/knowledge/docs/core/plugins/signalR/signalR.docs.md +11 -50
- package/runtime/knowledge/docs/core/plugins/validation/validation.docs.md +9 -6
- package/runtime/knowledge/docs/core/services/services.docs.md +15 -13
- package/runtime/knowledge/docs/core/types/types.docs.md +37 -40
- package/runtime/knowledge/docs/core/utilities/date/date-utilities.docs.md +1 -2
- package/runtime/knowledge/docs/core/utilities/shared-utilities.docs.md +21 -30
- package/runtime/knowledge/docs/core/utilities/thumbnail/thumbnail.docs.md +2 -2
- package/runtime/knowledge/docs/core/utilities/utilities.docs.md +9 -8
- package/runtime/knowledge/docs/injection-keys.docs.md +6 -11
- package/runtime/knowledge/docs/modules/assets/assets-details.docs.md +123 -0
- package/runtime/knowledge/docs/modules/assets-manager/assets-manager.docs.md +1 -1
- package/runtime/knowledge/docs/shell/_internal/popup/common/popup-common.docs.md +20 -12
- package/runtime/knowledge/docs/shell/auth/ChangePasswordPage/change-password-page.docs.md +10 -10
- package/runtime/knowledge/docs/shell/auth/ForgotPasswordPage/forgot-password-page.docs.md +6 -6
- package/runtime/knowledge/docs/shell/auth/InvitePage/invite-page.docs.md +4 -4
- package/runtime/knowledge/docs/shell/auth/LoginPage/login-page.docs.md +16 -14
- package/runtime/knowledge/docs/shell/auth/ResetPasswordPage/reset-password-page.docs.md +1 -1
- package/runtime/knowledge/docs/shell/auth/sign-in/sign-in.docs.md +12 -11
- package/runtime/knowledge/docs/shell/components/change-password/change-password.docs.md +10 -3
- package/runtime/knowledge/docs/shell/components/change-password-button/change-password-button.docs.md +3 -3
- package/runtime/knowledge/docs/shell/components/error-interceptor/error-interceptor.docs.md +9 -2
- package/runtime/knowledge/docs/shell/components/language-selector/language-selector.docs.md +4 -2
- package/runtime/knowledge/docs/shell/components/logout-button/logout-button.docs.md +1 -1
- package/runtime/knowledge/docs/shell/components/notification-dropdown/notification-dropdown.docs.md +35 -31
- package/runtime/knowledge/docs/shell/components/notification-template/notification-template.docs.md +17 -11
- package/runtime/knowledge/docs/shell/components/settings-menu/settings-menu.docs.md +8 -7
- package/runtime/knowledge/docs/shell/components/settings-menu-item/settings-menu-item.docs.md +23 -21
- package/runtime/knowledge/docs/shell/components/sidebar/sidebar.docs.md +5 -3
- package/runtime/knowledge/docs/shell/components/theme-selector/theme-selector.docs.md +7 -7
- package/runtime/knowledge/docs/shell/components/user-dropdown-button/user-dropdown-button.docs.md +11 -11
- package/runtime/knowledge/docs/shell/dashboard/dashboard-charts/dashboard-charts.docs.md +28 -16
- package/runtime/knowledge/docs/shell/dashboard/dashboard-widget-card/dashboard-widget-card.docs.md +17 -19
- package/runtime/knowledge/docs/shell/dashboard/draggable-dashboard/dashboard-widget-skeleton.docs.md +33 -0
- package/runtime/knowledge/docs/shell/dashboard/draggable-dashboard/draggable-dashboard.docs.md +21 -0
- package/runtime/knowledge/docs/ui/components/atoms/vc-badge/vc-badge.docs.md +2 -1
- package/runtime/knowledge/docs/ui/components/atoms/vc-banner/vc-banner.docs.md +2 -2
- package/runtime/knowledge/docs/ui/components/atoms/vc-button/vc-button.docs.md +15 -14
- package/runtime/knowledge/docs/ui/components/atoms/vc-container/vc-container.docs.md +9 -6
- package/runtime/knowledge/docs/ui/components/atoms/vc-environment-banner/vc-environment-banner.docs.md +42 -0
- package/runtime/knowledge/docs/ui/components/atoms/vc-hint/vc-hint.docs.md +1 -1
- package/runtime/knowledge/docs/ui/components/atoms/vc-icon/vc-icon.docs.md +10 -9
- package/runtime/knowledge/docs/ui/components/atoms/vc-image/vc-image.docs.md +19 -4
- package/runtime/knowledge/docs/ui/components/atoms/vc-label/vc-label.docs.md +2 -2
- package/runtime/knowledge/docs/ui/components/atoms/vc-link/vc-link.docs.md +5 -4
- package/runtime/knowledge/docs/ui/components/atoms/vc-loading/vc-loading.docs.md +5 -4
- package/runtime/knowledge/docs/ui/components/atoms/vc-progress/vc-progress.docs.md +9 -8
- package/runtime/knowledge/docs/ui/components/atoms/vc-scrollable-container/vc-scrollable-container.docs.md +7 -0
- package/runtime/knowledge/docs/ui/components/atoms/vc-skeleton/vc-skeleton.docs.md +1 -1
- package/runtime/knowledge/docs/ui/components/atoms/vc-status/vc-status.docs.md +2 -2
- package/runtime/knowledge/docs/ui/components/atoms/vc-status-icon/vc-status-icon.docs.md +1 -1
- package/runtime/knowledge/docs/ui/components/atoms/vc-tooltip/vc-tooltip.docs.md +11 -10
- package/runtime/knowledge/docs/ui/components/atoms/vc-video/vc-video.docs.md +28 -8
- package/runtime/knowledge/docs/ui/components/atoms/vc-widget/vc-widget.docs.md +22 -19
- package/runtime/knowledge/docs/ui/components/molecules/multilanguage-selector/multilanguage-selector.docs.md +8 -8
- package/runtime/knowledge/docs/ui/components/molecules/vc-accordion/vc-accordion.docs.md +16 -6
- package/runtime/knowledge/docs/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.docs.md +9 -8
- package/runtime/knowledge/docs/ui/components/molecules/vc-checkbox/vc-checkbox.docs.md +42 -34
- package/runtime/knowledge/docs/ui/components/molecules/vc-checkbox-group/vc-checkbox-group.docs.md +1 -1
- package/runtime/knowledge/docs/ui/components/molecules/vc-color-input/vc-color-input.docs.md +14 -1
- package/runtime/knowledge/docs/ui/components/molecules/vc-date-picker/vc-date-picker.docs.md +3 -1
- package/runtime/knowledge/docs/ui/components/molecules/vc-dropdown/vc-dropdown.docs.md +34 -33
- package/runtime/knowledge/docs/ui/components/molecules/vc-editor/vc-editor.docs.md +26 -24
- package/runtime/knowledge/docs/ui/components/molecules/vc-field/vc-field.docs.md +12 -14
- package/runtime/knowledge/docs/ui/components/molecules/vc-file-upload/vc-file-upload.docs.md +30 -30
- package/runtime/knowledge/docs/ui/components/molecules/vc-input/vc-input.docs.md +2 -2
- package/runtime/knowledge/docs/ui/components/molecules/vc-input-currency/vc-input-currency.docs.md +1 -1
- package/runtime/knowledge/docs/ui/components/molecules/vc-input-dropdown/vc-input-dropdown.docs.md +34 -31
- package/runtime/knowledge/docs/ui/components/molecules/vc-input-group/vc-input-group.docs.md +14 -12
- package/runtime/knowledge/docs/ui/components/molecules/vc-menu/vc-menu.docs.md +1 -1
- package/runtime/knowledge/docs/ui/components/molecules/vc-multivalue/vc-multivalue.docs.md +36 -27
- package/runtime/knowledge/docs/ui/components/molecules/vc-pagination/vc-pagination.docs.md +5 -1
- package/runtime/knowledge/docs/ui/components/molecules/{vc-dropdown-panel/vc-dropdown-panel.docs.md → vc-popover/vc-popover.docs.md} +26 -25
- package/runtime/knowledge/docs/ui/components/molecules/vc-radio-button/vc-radio-button.docs.md +10 -9
- package/runtime/knowledge/docs/ui/components/molecules/vc-select/vc-select.docs.md +44 -19
- package/runtime/knowledge/docs/ui/components/molecules/vc-slider/vc-slider.docs.md +11 -11
- package/runtime/knowledge/docs/ui/components/molecules/vc-switch/vc-switch.docs.md +15 -14
- package/runtime/knowledge/docs/ui/components/molecules/vc-textarea/vc-textarea.docs.md +15 -15
- package/runtime/knowledge/docs/ui/components/molecules/vc-toast/vc-toast.docs.md +15 -13
- package/runtime/knowledge/docs/ui/components/organisms/vc-app/vc-app.docs.md +5 -1
- package/runtime/knowledge/docs/ui/components/organisms/vc-auth-layout/vc-auth-layout.docs.md +18 -0
- package/runtime/knowledge/docs/ui/components/organisms/vc-blade/vc-blade.docs.md +48 -78
- package/runtime/knowledge/docs/ui/components/organisms/vc-data-table/composables/table-composables.docs.md +9 -11
- package/runtime/knowledge/docs/ui/components/organisms/vc-data-table/vc-data-table.docs.md +71 -43
- package/runtime/knowledge/docs/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.docs.md +27 -20
- package/runtime/knowledge/docs/ui/components/organisms/vc-gallery/vc-gallery.docs.md +2 -2
- package/runtime/knowledge/docs/ui/components/organisms/vc-image-upload/vc-image-upload.docs.md +12 -12
- package/runtime/knowledge/docs/ui/components/organisms/vc-popup/vc-popup.docs.md +33 -24
- package/runtime/knowledge/docs/ui/components/organisms/vc-scheduler/vc-scheduler.docs.md +412 -0
- package/runtime/knowledge/docs/ui/components/organisms/vc-sidebar/vc-sidebar.docs.md +43 -26
- package/runtime/knowledge/docs/ui/composables/ui-composables.docs.md +15 -9
- package/runtime/knowledge/docs/ui/composables/useDataTableSort.docs.md +8 -6
- package/runtime/knowledge/docs/ui/composables/useTableSearch.docs.md +130 -0
- package/runtime/knowledge/docs/ui/composables/useTableSelection.docs.md +4 -4
- package/runtime/knowledge/docs/ui/composables/useTableSort.docs.md +2 -3
|
@@ -98,12 +98,13 @@ export default {
|
|
|
98
98
|
|
|
99
99
|
### Registration options
|
|
100
100
|
|
|
101
|
-
| Option | Type
|
|
102
|
-
| ----------- |
|
|
103
|
-
| `id` | `string`
|
|
104
|
-
| `group` | `string`
|
|
105
|
-
| `order` | `number`
|
|
106
|
-
| `component` | `Component`
|
|
101
|
+
| Option | Type | Required | Description |
|
|
102
|
+
| ----------- | ------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
103
|
+
| `id` | `string` | No | Unique identifier for the entry. Auto-generated when omitted. |
|
|
104
|
+
| `group` | `string` | No | Group name (entries are grouped and separated by dividers). Defaults to `"general"`. |
|
|
105
|
+
| `order` | `number` | No | Sort order within the group (lower = higher position). Defaults to the current registry size at registration time, preserving insertion order. |
|
|
106
|
+
| `component` | `Component` | Yes | Vue component to render as the menu item. |
|
|
107
|
+
| `props` | `Record<string, unknown>` | No | Props bound to the rendered component via `v-bind`. |
|
|
107
108
|
|
|
108
109
|
### Group rendering
|
|
109
110
|
|
|
@@ -117,7 +118,7 @@ Groups are separated by a horizontal divider and items within each group are sor
|
|
|
117
118
|
## Details
|
|
118
119
|
|
|
119
120
|
- **Service-driven content**: The menu has no props and renders entirely from the `useSettingsMenu()` registry. This makes it fully extensible -- any module can add entries.
|
|
120
|
-
- **CloseSettingsMenuKey injection**:
|
|
121
|
+
- **CloseSettingsMenuKey injection**: `CloseSettingsMenuKey` is provided by the containing `UserDropdownButton`, not by `SettingsMenu`. `SettingsMenu` itself provides nothing; it only reads `useSettingsMenu().items` and renders them. Menu item children inject the key supplied by the parent dropdown to close it before performing their action (e.g., opening a popup or navigating). Rendering `SettingsMenu` standalone leaves `CloseSettingsMenuKey` undefined for its children.
|
|
121
122
|
- **Ordering**: Items are sorted by `order` within their group. Use consistent order ranges across modules to maintain a predictable menu layout.
|
|
122
123
|
- **Dynamic registration**: Items can be registered at any time, but registering during module `install()` ensures they are available when the menu first renders.
|
|
123
124
|
|
package/runtime/knowledge/docs/shell/components/settings-menu-item/settings-menu-item.docs.md
CHANGED
|
@@ -21,10 +21,10 @@ The component handles the visual representation of a single menu entry: an icon
|
|
|
21
21
|
|
|
22
22
|
The component includes a `submenu` slot that **automatically adapts to the viewport**:
|
|
23
23
|
|
|
24
|
-
- **Desktop**: renders a floating `
|
|
24
|
+
- **Desktop**: renders a floating `VcPopover` anchored to the menu item (`placement="right-start"`)
|
|
25
25
|
- **Mobile**: renders an inline accordion with animated expand/collapse (via `useCollapsible`)
|
|
26
26
|
|
|
27
|
-
This removes the need for consumers to manage `
|
|
27
|
+
This removes the need for consumers to manage `VcPopover`, `isMobile` checks, or z-index issues manually.
|
|
28
28
|
|
|
29
29
|
## When to Use
|
|
30
30
|
|
|
@@ -51,23 +51,25 @@ import { SettingsMenuItem } from "@vc-shell/framework";
|
|
|
51
51
|
|
|
52
52
|
## Key Props
|
|
53
53
|
|
|
54
|
-
| Prop | Type | Default | Description
|
|
55
|
-
| --------------- | ------------------------------ | ----------- |
|
|
56
|
-
| `title` | `string` | `undefined` | Menu item label
|
|
57
|
-
| `icon` | `string \| Component` | `undefined` | Icon name or component
|
|
58
|
-
| `image` | `string` | `undefined` | Image URL (alternative to icon)
|
|
59
|
-
| `
|
|
60
|
-
| `
|
|
61
|
-
| `
|
|
62
|
-
| `
|
|
63
|
-
| `
|
|
54
|
+
| Prop | Type | Default | Description |
|
|
55
|
+
| --------------- | ------------------------------ | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
|
|
56
|
+
| `title` | `string` | `undefined` | Menu item label |
|
|
57
|
+
| `icon` | `string \| Component` | `undefined` | Icon name or component |
|
|
58
|
+
| `image` | `string` | `undefined` | Image URL (alternative to icon) |
|
|
59
|
+
| `emptyIcon` | `string` | `undefined` | Fallback icon shown on the `VcImage` when `image` fails to load |
|
|
60
|
+
| `value` | `string` | `undefined` | Current value displayed on the right |
|
|
61
|
+
| `showChevron` | `boolean` | `false` | Shows right chevron for sub-menus (auto-enabled when `submenu` slot is provided) |
|
|
62
|
+
| `isActive` | `boolean` | `false` | Highlights the item (auto-managed when `submenu` slot is provided) |
|
|
63
|
+
| `disabled` | `boolean` | `false` | Disables click interaction |
|
|
64
|
+
| `isVisible` | `boolean` | `true` | Hides the item when `false` via the `--invisible` class |
|
|
65
|
+
| `triggerAction` | `"click" \| "hover" \| "none"` | `"click"` | What interaction opens the item. Note: `"hover"` is not implemented (no hover handler); only `"click"` and `"none"` have runtime behavior |
|
|
64
66
|
|
|
65
67
|
## Events
|
|
66
68
|
|
|
67
|
-
| Event | Payload | Description
|
|
68
|
-
| --------------- | ------- |
|
|
69
|
-
| `trigger:click` | -- | Emitted when the item is clicked (only when `triggerAction="click"`)
|
|
70
|
-
| `trigger:hover` | -- |
|
|
69
|
+
| Event | Payload | Description |
|
|
70
|
+
| --------------- | ------- | ------------------------------------------------------------------------------------------------------- |
|
|
71
|
+
| `trigger:click` | -- | Emitted when the item is clicked (only when `triggerAction="click"`) |
|
|
72
|
+
| `trigger:hover` | -- | Declared but not implemented: `triggerAction="hover"` has no runtime handler, so this event never fires |
|
|
71
73
|
|
|
72
74
|
## Slots
|
|
73
75
|
|
|
@@ -156,15 +158,15 @@ The `submenu` slot can contain any content, not just `VcDropdownItem`:
|
|
|
156
158
|
</SettingsMenuItem>
|
|
157
159
|
```
|
|
158
160
|
|
|
159
|
-
## Migration: Manual
|
|
161
|
+
## Migration: Manual VcPopover to Submenu Slot
|
|
160
162
|
|
|
161
163
|
Before (manual dropdown management):
|
|
162
164
|
|
|
163
165
|
```vue
|
|
164
166
|
<SettingsMenuItem ref="menuItemRef" icon="lucide-palette" title="Theme" :value="currentTheme" :show-chevron="true" :is-active="isOpen" @trigger:click="isOpen = !isOpen" />
|
|
165
|
-
<
|
|
167
|
+
<VcPopover v-model:show="isOpen" :anchor-ref="menuItemRef?.triggerRef ?? null" placement="right-start" width="180px">
|
|
166
168
|
<!-- options -->
|
|
167
|
-
</
|
|
169
|
+
</VcPopover>
|
|
168
170
|
```
|
|
169
171
|
|
|
170
172
|
After (submenu slot):
|
|
@@ -180,7 +182,7 @@ After (submenu slot):
|
|
|
180
182
|
**What changes:**
|
|
181
183
|
|
|
182
184
|
- Remove `ref`, `isOpen`, `:show-chevron`, `:is-active`, `@trigger:click` toggle -- all auto-managed
|
|
183
|
-
- Remove `
|
|
185
|
+
- Remove `VcPopover` wrapper entirely
|
|
184
186
|
- Move dropdown content into `#submenu` slot
|
|
185
187
|
- Mobile adaptation is automatic (no `isMobile` check needed)
|
|
186
188
|
|
|
@@ -201,5 +203,5 @@ Do not set `triggerAction="none"` and then rely on `@trigger:click` -- the event
|
|
|
201
203
|
- [SettingsMenu](../settings-menu/settings-menu.docs.md) -- parent container
|
|
202
204
|
- [ThemeSelector](../theme-selector/theme-selector.docs.md) -- uses SettingsMenuItem with submenu slot
|
|
203
205
|
- [LanguageSelector](../language-selector/language-selector.docs.md) -- uses SettingsMenuItem with submenu slot
|
|
204
|
-
- [
|
|
206
|
+
- [VcPopover](../../../ui/components/molecules/vc-popover/vc-popover.docs.md) -- used internally for desktop sub-menus
|
|
205
207
|
- [VcDropdown](../../../ui/components/molecules/vc-dropdown/vc-dropdown.docs.md) -- recommended for sub-menu option rows
|
|
@@ -7,6 +7,8 @@ internal: true
|
|
|
7
7
|
|
|
8
8
|
# Sidebar Component
|
|
9
9
|
|
|
10
|
+
> **Deprecated.** The `Sidebar` wrapper is deprecated in favor of `VcSidebar` (`framework/ui/components/organisms/vc-sidebar`) and may be removed in a future release. Use this page as legacy/migration guidance only; build new code on `VcSidebar` directly.
|
|
11
|
+
|
|
10
12
|
A responsive sidebar wrapper that conditionally renders content inside a `VcSidebar` panel or inline, based on viewport and expansion state.
|
|
11
13
|
|
|
12
14
|
## Overview
|
|
@@ -62,7 +64,7 @@ When `render="mobile"` and the viewport is desktop, the content slot renders inl
|
|
|
62
64
|
|
|
63
65
|
## Behavior
|
|
64
66
|
|
|
65
|
-
- **Visibility**: The sidebar is visible when `isExpanded === true` AND the `render` mode matches the current viewport (
|
|
67
|
+
- **Visibility**: The sidebar is visible when `isExpanded === true` AND the `render` mode matches the current viewport (resolved via `useResponsive()` -- `isMobile` / `isDesktop`).
|
|
66
68
|
- **Teleport**: On mobile, the inner `VcSidebar` teleports to the document body for proper overlay stacking.
|
|
67
69
|
- **Close**: Closing the sidebar emits `close` -- the parent must update `isExpanded`.
|
|
68
70
|
|
|
@@ -70,9 +72,9 @@ When `render="mobile"` and the viewport is desktop, the content slot renders inl
|
|
|
70
72
|
|
|
71
73
|
- Use `render="mobile"` for panels that should be drawers on phones but inline panels on desktop.
|
|
72
74
|
- The `header` slot receives a `close` function so custom headers can include their own close button.
|
|
73
|
-
- The component
|
|
75
|
+
- The component resolves the viewport via `useResponsive()` (`isMobile` / `isDesktop`).
|
|
74
76
|
|
|
75
77
|
## Related
|
|
76
78
|
|
|
77
79
|
- `framework/ui/components/organisms/vc-sidebar/` -- the underlying `VcSidebar` organism
|
|
78
|
-
- `framework/
|
|
80
|
+
- `framework/core/composables/useResponsive/` -- `isMobile` / `isDesktop` viewport helper
|
|
@@ -48,12 +48,12 @@ This component has no props. Themes are managed via the `useTheme()` composable.
|
|
|
48
48
|
|
|
49
49
|
## Recipe: Registering Custom Themes
|
|
50
50
|
|
|
51
|
-
Before the `ThemeSelector` can show themes, they must be registered with the theme service. Themes are defined as objects with a `key` that corresponds to a
|
|
51
|
+
Before the `ThemeSelector` can show themes, they must be registered with the theme service. Themes are defined as objects with a `key` that corresponds to a `data-theme` attribute value and its custom property set:
|
|
52
52
|
|
|
53
53
|
```ts
|
|
54
54
|
import { useTheme } from "@vc-shell/framework";
|
|
55
55
|
|
|
56
|
-
const { register, setTheme,
|
|
56
|
+
const { register, setTheme, currentThemeKey } = useTheme();
|
|
57
57
|
|
|
58
58
|
// Register available themes during app initialization
|
|
59
59
|
register([
|
|
@@ -66,16 +66,16 @@ register([
|
|
|
66
66
|
setTheme("light");
|
|
67
67
|
```
|
|
68
68
|
|
|
69
|
-
The theme `key` is
|
|
69
|
+
The theme `key` is written to the `data-theme` attribute on the root element (`<html data-theme="light">`, via `useColorMode({ attribute: "data-theme" })`), allowing CSS custom properties to cascade:
|
|
70
70
|
|
|
71
71
|
```scss
|
|
72
72
|
// In your theme CSS files
|
|
73
|
-
|
|
73
|
+
:root[data-theme="light"] {
|
|
74
74
|
--primary-500: #3b82f6;
|
|
75
75
|
--surface-bg: #ffffff;
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
:root[data-theme="dark"] {
|
|
79
79
|
--primary-500: #60a5fa;
|
|
80
80
|
--surface-bg: #1e1e2e;
|
|
81
81
|
}
|
|
@@ -103,14 +103,14 @@ window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (e)
|
|
|
103
103
|
## Details
|
|
104
104
|
|
|
105
105
|
- **Theme persistence**: The selected theme is persisted to localStorage, so the user's preference survives page reloads and browser restarts.
|
|
106
|
-
- **Toast notification**: When the user switches themes via the selector, a brief toast notification
|
|
106
|
+
- **Toast notification**: When the user switches themes via the selector, a brief toast notification shows the new theme's localized name (e.g., "Dark").
|
|
107
107
|
- **Cascading submenu**: On desktop, selecting the theme entry opens a submenu listing all registered themes. The current theme is highlighted.
|
|
108
108
|
- **CSS custom properties**: Themes work by switching CSS custom properties defined in `framework/assets/styles/theme/colors.scss`. Components reference these variables (e.g., `tw-bg-[var(--primary-500)]`), so theme changes are instant.
|
|
109
109
|
|
|
110
110
|
## Tips
|
|
111
111
|
|
|
112
112
|
- If only one theme is registered, the `ThemeSelector` still renders but the submenu will have only one option. Consider hiding it if theming is not a feature of your application.
|
|
113
|
-
- Theme keys should be short, lowercase identifiers. They are
|
|
113
|
+
- Theme keys should be short, lowercase identifiers. They are written to the `data-theme` attribute on the root element.
|
|
114
114
|
- Always pair theme registration with corresponding CSS custom property definitions. A registered theme without CSS variables will result in unstyled or broken visuals.
|
|
115
115
|
- The framework's built-in components use CSS custom properties from the theme system. Custom components should follow the same pattern for consistent theming.
|
|
116
116
|
|
package/runtime/knowledge/docs/shell/components/user-dropdown-button/user-dropdown-button.docs.md
CHANGED
|
@@ -33,12 +33,12 @@ import { UserDropdownButton } from "@vc-shell/framework";
|
|
|
33
33
|
|
|
34
34
|
## Key Props
|
|
35
35
|
|
|
36
|
-
| Prop | Type | Default | Description
|
|
37
|
-
| ----------- | --------- | ----------- |
|
|
38
|
-
| `name` | `string` | `undefined` | User display name
|
|
39
|
-
| `role` | `string` | `undefined` | User role label
|
|
40
|
-
| `avatarUrl` | `string` | `undefined` | URL for the user avatar image
|
|
41
|
-
| `disabled` | `boolean` | `false` |
|
|
36
|
+
| Prop | Type | Default | Description |
|
|
37
|
+
| ----------- | --------- | ----------- | --------------------------------------------------------------------------------------------------------------- |
|
|
38
|
+
| `name` | `string` | `undefined` | User display name |
|
|
39
|
+
| `role` | `string` | `undefined` | User role label |
|
|
40
|
+
| `avatarUrl` | `string` | `undefined` | URL for the user avatar image |
|
|
41
|
+
| `disabled` | `boolean` | `false` | Visual-only: applies the `--auto-width` layout class. Does not suppress clicks or prevent the menu from opening |
|
|
42
42
|
|
|
43
43
|
## Recipe: Wiring to User Management Composable
|
|
44
44
|
|
|
@@ -50,11 +50,11 @@ import { computed } from "vue";
|
|
|
50
50
|
import { UserDropdownButton } from "@vc-shell/framework";
|
|
51
51
|
import { useUserManagement } from "@vc-shell/framework";
|
|
52
52
|
|
|
53
|
-
const {
|
|
53
|
+
const { user } = useUserManagement();
|
|
54
54
|
|
|
55
|
-
const displayName = computed(() => (
|
|
56
|
-
const role = computed(() =>
|
|
57
|
-
const avatarUrl = computed(() =>
|
|
55
|
+
const displayName = computed(() => (user.value ? `${user.value.firstName} ${user.value.lastName}` : ""));
|
|
56
|
+
const role = computed(() => user.value?.roles?.[0]?.name ?? "");
|
|
57
|
+
const avatarUrl = computed(() => user.value?.photoUrl);
|
|
58
58
|
</script>
|
|
59
59
|
|
|
60
60
|
<template>
|
|
@@ -86,7 +86,7 @@ On mobile viewports (`$isMobile`), clicking the button opens a full-height slide
|
|
|
86
86
|
## Tips
|
|
87
87
|
|
|
88
88
|
- The component is typically placed in the sidebar footer slot of the app shell. You rarely need to instantiate it manually -- the framework shell handles its placement.
|
|
89
|
-
-
|
|
89
|
+
- The `disabled` prop is visual-only (it applies the `--auto-width` layout class). It does not block clicks or prevent the menu from opening; the handler always toggles the menu.
|
|
90
90
|
- All menu items are driven by `useSettingsMenu()` registrations. To add custom items to the user menu, register them via the service rather than modifying this component.
|
|
91
91
|
|
|
92
92
|
## Related Components
|
|
@@ -61,25 +61,36 @@ const config: ChartConfig = {
|
|
|
61
61
|
|
|
62
62
|
## Key Props (shared across chart types)
|
|
63
63
|
|
|
64
|
-
| Prop | Type
|
|
65
|
-
| ------------- |
|
|
66
|
-
| `data` | `T[]`
|
|
67
|
-
| `config` | `ChartConfig`
|
|
68
|
-
| `xKey` | `keyof T`
|
|
69
|
-
| `yKeys` | `(keyof T)[]`
|
|
70
|
-
| `showTooltip` | `boolean`
|
|
71
|
-
| `showLegend` | `boolean`
|
|
72
|
-
| `rangeStart` | `number`
|
|
73
|
-
| `rangeEnd` | `number`
|
|
64
|
+
| Prop | Type | Default | Description |
|
|
65
|
+
| ------------- | ---------------------------------------------- | ----------- | ------------------------------------ |
|
|
66
|
+
| `data` | `T[]` | -- | Array of data points |
|
|
67
|
+
| `config` | `ChartConfig` | -- | Series color and label configuration |
|
|
68
|
+
| `xKey` | `keyof T` | -- | Key for x-axis values (line/bar) |
|
|
69
|
+
| `yKeys` | `(keyof T)[]` | -- | Keys for y-axis series (line/bar) |
|
|
70
|
+
| `showTooltip` | `boolean` | `true` | Enable hover tooltips |
|
|
71
|
+
| `showLegend` | `boolean` | `true` | Show color legend below chart |
|
|
72
|
+
| `rangeStart` | `ChartRangeValue` (`number \| string \| Date`) | `undefined` | Filter data from this x value |
|
|
73
|
+
| `rangeEnd` | `ChartRangeValue` (`number \| string \| Date`) | `undefined` | Filter data up to this x value |
|
|
74
|
+
| `showXAxis` | `boolean` | `true` | Show the x-axis (line/bar) |
|
|
75
|
+
| `showYAxis` | `boolean` | `true` | Show the y-axis (line/bar) |
|
|
76
|
+
| `showGrid` | `boolean` | `true` | Show y-axis grid lines (line/bar) |
|
|
77
|
+
| `numXTicks` | `number` | `undefined` | Number of x-axis ticks (line/bar) |
|
|
78
|
+
| `numYTicks` | `number` | `5` | Number of y-axis ticks (line/bar) |
|
|
79
|
+
| `xTickFormat` | `(value: number \| Date) => string` | `undefined` | Format x-axis tick labels (line/bar) |
|
|
80
|
+
| `yTickFormat` | `(value: number) => string` | `undefined` | Format y-axis tick labels (line/bar) |
|
|
81
|
+
| `height` | `number` | `undefined` | Fixed chart height in px |
|
|
74
82
|
|
|
75
83
|
### Donut-specific props
|
|
76
84
|
|
|
77
|
-
| Prop | Type
|
|
78
|
-
| ----------------- |
|
|
79
|
-
| `valueKey` | `keyof T`
|
|
80
|
-
| `centralLabel` | `string`
|
|
81
|
-
| `centralSubLabel` | `string`
|
|
82
|
-
| `arcWidth` | `number`
|
|
85
|
+
| Prop | Type | Default | Description |
|
|
86
|
+
| ----------------- | --------------------------- | ----------- | --------------------------------------- |
|
|
87
|
+
| `valueKey` | `keyof T` | -- | Key for segment values |
|
|
88
|
+
| `centralLabel` | `string` | `undefined` | Large text in donut center |
|
|
89
|
+
| `centralSubLabel` | `string` | `undefined` | Small text below central label |
|
|
90
|
+
| `arcWidth` | `number` | `60` | Donut arc thickness |
|
|
91
|
+
| `valueFormat` | `(value: number) => string` | `undefined` | Formats segment values in tooltip/label |
|
|
92
|
+
| `colorKey` | `keyof T` | `undefined` | Data key holding a per-segment color |
|
|
93
|
+
| `cornerRadius` | `number` | `4` | Rounded corner radius of arcs |
|
|
83
94
|
|
|
84
95
|
## ChartConfig Type
|
|
85
96
|
|
|
@@ -91,6 +102,7 @@ type ChartConfig = Record<
|
|
|
91
102
|
{
|
|
92
103
|
label: string; // Display name in legend and tooltip
|
|
93
104
|
color: string; // CSS color value (hex, var(), rgb, etc.)
|
|
105
|
+
icon?: string; // Optional icon shown alongside the series label
|
|
94
106
|
}
|
|
95
107
|
>;
|
|
96
108
|
```
|
package/runtime/knowledge/docs/shell/dashboard/dashboard-widget-card/dashboard-widget-card.docs.md
CHANGED
|
@@ -67,20 +67,17 @@ import { DashboardWidgetCard } from "@vc-shell/framework";
|
|
|
67
67
|
```vue
|
|
68
68
|
<DashboardWidgetCard header="Orders" icon="lucide-shopping-cart">
|
|
69
69
|
<template #stats>
|
|
70
|
-
<DashboardStatItem :value="48" label="Total" />
|
|
71
|
-
<DashboardStatItem :value="12" label="Today"
|
|
70
|
+
<DashboardStatItem :value="48" label="Total" variant="success" />
|
|
71
|
+
<DashboardStatItem :value="12" label="Today" />
|
|
72
72
|
<DashboardStatItem :value="3" label="Pending" variant="warning" />
|
|
73
|
-
<DashboardStatItem :value="1" label="Failed" variant="
|
|
73
|
+
<DashboardStatItem :value="1" label="Failed" variant="danger" />
|
|
74
74
|
</template>
|
|
75
75
|
<template #content>
|
|
76
76
|
<DashboardFeedList>
|
|
77
|
-
<DashboardFeedRow v-for="order in recentOrders" :key="order.id">
|
|
78
|
-
<
|
|
79
|
-
|
|
80
|
-
</template>
|
|
81
|
-
<template #title>{{ order.number }}</template>
|
|
82
|
-
<template #subtitle>{{ order.customerName }}</template>
|
|
83
|
-
<template #meta>{{ formatDateRelative(order.createdDate) }}</template>
|
|
77
|
+
<DashboardFeedRow v-for="order in recentOrders" :key="order.id" @click="openOrder(order)">
|
|
78
|
+
<VcIcon :icon="getOrderIcon(order.status)" size="s" />
|
|
79
|
+
<span>{{ order.number }} — {{ order.customerName }}</span>
|
|
80
|
+
<template #trailing>{{ formatDateRelative(order.createdDate) }}</template>
|
|
84
81
|
</DashboardFeedRow>
|
|
85
82
|
</DashboardFeedList>
|
|
86
83
|
</template>
|
|
@@ -167,22 +164,23 @@ import OrdersWidget from "./OrdersWidget.vue";
|
|
|
167
164
|
|
|
168
165
|
const dashboard = useDashboard();
|
|
169
166
|
|
|
170
|
-
dashboard.
|
|
167
|
+
dashboard.registerWidget({
|
|
171
168
|
id: "orders-overview",
|
|
169
|
+
name: "Orders overview",
|
|
172
170
|
component: markRaw(OrdersWidget),
|
|
171
|
+
size: { width: 6, height: 4 },
|
|
172
|
+
position: { x: 0, y: 0 },
|
|
173
173
|
props: { limit: 10 },
|
|
174
|
-
order: 1,
|
|
175
|
-
layout: { w: 6, h: 4, x: 0, y: 0 },
|
|
176
174
|
});
|
|
177
175
|
```
|
|
178
176
|
|
|
179
177
|
## Companion Components
|
|
180
178
|
|
|
181
|
-
| Component | Description
|
|
182
|
-
| ------------------- |
|
|
183
|
-
| `DashboardStatItem` | Single KPI stat with value, label, and optional color variant
|
|
184
|
-
| `DashboardFeedList` | Scrollable list container for feed rows
|
|
185
|
-
| `DashboardFeedRow` | Individual feed item
|
|
179
|
+
| Component | Description |
|
|
180
|
+
| ------------------- | -------------------------------------------------------------------------------------------------------------- |
|
|
181
|
+
| `DashboardStatItem` | Single KPI stat with value, label, and optional color variant |
|
|
182
|
+
| `DashboardFeedList` | Scrollable list container for feed rows |
|
|
183
|
+
| `DashboardFeedRow` | Individual feed item: default slot for leading content, `#trailing` slot for right-side content, emits `click` |
|
|
186
184
|
|
|
187
185
|
## Tip: Set a Minimum Height
|
|
188
186
|
|
|
@@ -200,4 +198,4 @@ When the card content is loaded asynchronously, the card may collapse to zero he
|
|
|
200
198
|
|
|
201
199
|
- [DraggableDashboard](../draggable-dashboard/draggable-dashboard.docs.md) -- grid layout container
|
|
202
200
|
- [DashboardCharts](../dashboard-charts/dashboard-charts.docs.md) -- chart components for widget content
|
|
203
|
-
- [useDashboard](../../../core/composables/useDashboard/) -- dashboard widget registration service
|
|
201
|
+
- [useDashboard](../../../core/composables/useDashboard/useDashboard.docs.md) -- dashboard widget registration service
|
package/runtime/knowledge/docs/shell/dashboard/draggable-dashboard/dashboard-widget-skeleton.docs.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: DashboardWidgetSkeleton
|
|
3
|
+
category: composables
|
|
4
|
+
group: utilities
|
|
5
|
+
internal: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# DashboardWidgetSkeleton
|
|
9
|
+
|
|
10
|
+
Internal placeholder card used by `GridstackDashboard` while remote modules are still loading. Mimics the shape of `DashboardWidgetCard` (header with icon + title, stats row, content lines) with a shimmer animation. Not exported from `@vc-shell/framework` — consumed only inside the dashboard organism.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
|
|
14
|
+
- You won't use this directly. `GridstackDashboard` renders one per `SkeletonItem` while `ModulesReadyKey` resolves to `false`.
|
|
15
|
+
- If you build a custom dashboard layout and want the same loading aesthetic, copy this file rather than importing it — the component is intentionally internal so the dashboard team can change its markup at any time.
|
|
16
|
+
|
|
17
|
+
## Layout Contract
|
|
18
|
+
|
|
19
|
+
The skeleton has no props. Its parent positions it via inline `style` (`grid-column` / `grid-row`) inside a 12-column CSS grid. Card height/width is fully determined by the grid cell it occupies, so the skeleton stretches to fill its slot.
|
|
20
|
+
|
|
21
|
+
## Accessibility
|
|
22
|
+
|
|
23
|
+
- The wrapper has `aria-hidden="true"` so screen readers ignore the visual placeholders. The parent grid carries `role="status"` + `aria-busy="true"` to announce loading state once.
|
|
24
|
+
- Shimmer animation is disabled when the user prefers reduced motion.
|
|
25
|
+
|
|
26
|
+
## Design Tokens
|
|
27
|
+
|
|
28
|
+
Skeleton inherits dashboard card tokens where possible (`--dashboard-widget-card-background`, `--dashboard-widget-card-border-color`, `--dashboard-widget-card-border-radius`, `--dashboard-widget-card-shadow`) so its silhouette matches the real card. Shimmer colors are read from `--neutrals-100` / `--neutrals-200`.
|
|
29
|
+
|
|
30
|
+
## Related
|
|
31
|
+
|
|
32
|
+
- [DraggableDashboard](./draggable-dashboard.docs.md) — owns the skeleton grid and decides when to render placeholders.
|
|
33
|
+
- [DashboardWidgetCard](../dashboard-widget-card/dashboard-widget-card.docs.md) — the real card whose shape skeletons imitate.
|
package/runtime/knowledge/docs/shell/dashboard/draggable-dashboard/draggable-dashboard.docs.md
CHANGED
|
@@ -140,6 +140,27 @@ function resetLayout() {
|
|
|
140
140
|
- The 12-column grid means common widget widths are: 3 (quarter), 4 (third), 6 (half), and 12 (full width).
|
|
141
141
|
- Register widgets during module `install()` before the dashboard component mounts. Late registrations may not be picked up.
|
|
142
142
|
|
|
143
|
+
## Advanced / Exports
|
|
144
|
+
|
|
145
|
+
Besides the `DraggableDashboard` component, `draggable-dashboard/index.ts` re-exports these symbols through the framework root, for building a custom Gridstack dashboard:
|
|
146
|
+
|
|
147
|
+
| Export | Kind | Description |
|
|
148
|
+
| ------------------------- | ---------- | ----------------------------------------------------------- |
|
|
149
|
+
| `useGridstack` | composable | Low-level Gridstack integration for a custom dashboard |
|
|
150
|
+
| `UseGridstackOptions` | type | Options for `useGridstack` |
|
|
151
|
+
| `UseGridstackReturn` | type | Return shape of `useGridstack` |
|
|
152
|
+
| `DashboardWidgetSize` | type | Widget size shape: `{ width, height }` |
|
|
153
|
+
| `DashboardWidgetPosition` | type | Widget position shape: `{ x, y }` |
|
|
154
|
+
| `DashboardDragEvent` | type | Payload emitted on widget drag/reorder |
|
|
155
|
+
| `DashboardGridConfig` | type | Grid configuration options |
|
|
156
|
+
| `toGridstackWidget` | function | Maps an `IDashboardWidget` to a Gridstack widget descriptor |
|
|
157
|
+
| `fromGridstackNode` | function | Maps a Gridstack node back to layout data |
|
|
158
|
+
| `loadLayoutFromStorage` | function | Reads persisted layout from localStorage |
|
|
159
|
+
| `saveLayoutToStorage` | function | Writes layout to localStorage |
|
|
160
|
+
| `mergeLayoutWithWidgets` | function | Merges a persisted layout onto the registered widget set |
|
|
161
|
+
| `clearLayoutStorage` | function | Clears the persisted layout |
|
|
162
|
+
| `LAYOUT_STORAGE_KEY` | constant | localStorage key used for layout persistence |
|
|
163
|
+
|
|
143
164
|
## Related Components
|
|
144
165
|
|
|
145
166
|
- [DashboardWidgetCard](../dashboard-widget-card/dashboard-widget-card.docs.md) -- card container for widget content
|
|
@@ -39,6 +39,7 @@ A small indicator component for displaying counts, status dots, or short text la
|
|
|
39
39
|
| `inline` | `boolean` | `false` | Renders as an inline element without absolute positioning |
|
|
40
40
|
| `clickable` | `boolean` | `false` | Makes the badge respond to click events |
|
|
41
41
|
| `disabled` | `boolean` | `false` | Disables interaction on clickable badges |
|
|
42
|
+
| `active` | `boolean` | `false` | Applies the active-state color tokens to the badge |
|
|
42
43
|
| `customPosition` | `boolean` | `false` | Enables custom `top`/`right` positioning |
|
|
43
44
|
| `top` | `string` | -- | Custom top offset (requires `customPosition`) |
|
|
44
45
|
| `right` | `string` | -- | Custom right offset (requires `customPosition`) |
|
|
@@ -144,7 +145,7 @@ Fine-tune the badge position relative to its parent:
|
|
|
144
145
|
|
|
145
146
|
- VcBadge lives in `framework/ui/components/atoms/vc-badge/`.
|
|
146
147
|
- Overlay mode uses `position: absolute` on the badge element; the parent slot wrapper is set to `position: relative` via the `.vc-badge` CSS class.
|
|
147
|
-
- The `inline` prop switches the root element from `<
|
|
148
|
+
- The `inline` prop switches the root element from the `<div class="vc-badge">` wrapper (overlay) to a `<div class="vc-badge__badge vc-badge__badge--inline">` rendered directly with no position context.
|
|
148
149
|
- Color palette tokens: overlay uses `--{variant}-500` fills; inline uses `--{variant}-50` background + `--{variant}-700` text, defined in `framework/assets/styles/theme/colors.scss`.
|
|
149
150
|
- Clickable mode integrates `role="button"` and keyboard handlers directly in the component — no separate button wrapper — to preserve the overlay stacking context.
|
|
150
151
|
|
|
@@ -172,8 +172,8 @@ Override the default "Show more" button with a custom trigger:
|
|
|
172
172
|
|
|
173
173
|
## Architecture notes
|
|
174
174
|
|
|
175
|
-
- Legacy variants `"light-danger"`, `"info-dark"`, and `"primary"` are mapped in `vc-banner.vue` via a computed `
|
|
176
|
-
- The collapse
|
|
175
|
+
- Legacy variants `"light-danger"`, `"info-dark"`, and `"primary"` are mapped in `vc-banner.vue` via a computed `normalizedVariant` (backed by the `normalizeVariant` function). A `console.warn` is emitted in development mode only.
|
|
176
|
+
- The collapse is driven by an inline `max-height` style bound via `wrapperStyle` from `useCollapsible` (max-height set to the measured `collapsedHeight` in px when collapsed), transitioned in CSS. There is no `--vc-banner-collapsed-height` custom property.
|
|
177
177
|
- Source: `framework/ui/components/atoms/vc-banner/vc-banner.vue`
|
|
178
178
|
|
|
179
179
|
<!-- internal:end -->
|
|
@@ -265,19 +265,19 @@ Use the `loading` prop, not `disabled`. A disabled button gives no progress feed
|
|
|
265
265
|
|
|
266
266
|
## Props
|
|
267
267
|
|
|
268
|
-
| Prop | Type | Default | Description
|
|
269
|
-
| ----------- | ------------------------------------------------------------------------------------------------------------ | ----------- |
|
|
270
|
-
| `variant` | `"primary" \| "secondary" \| "danger" \| "warning" \| "success" \| "info" \| "outline" \| "ghost" \| "link"` | `"primary"` | Visual style variant
|
|
271
|
-
| `size` | `"sm" \| "default" \| "lg" \| "icon" \| "icon-sm"` | `"default"` | Button size
|
|
272
|
-
| `icon` | `string \| Component` | -- | Icon identifier or Vue component
|
|
273
|
-
| `iconClass` | `string` | -- | Additional CSS class for the icon element
|
|
274
|
-
| `iconSize` | `IconSize` | `"s"` | Size of the icon (`"xs"`, `"s"`, `"m"`, `"l"`, `"xl"`, `"xxl"`) |
|
|
275
|
-
| `loading` | `boolean` | `false` | Shows spinner, disables interaction, sets `aria-busy`
|
|
276
|
-
| `disabled` | `boolean` | `false` | Disables the button
|
|
277
|
-
| `selected` | `boolean` | `false` | Applies selected/active visual state, sets `aria-pressed`
|
|
278
|
-
| `text` | `boolean` | `false` | Renders as borderless text in the variant's color
|
|
279
|
-
| `type` | `"button" \| "submit" \| "reset"` | `"button"` | HTML button type
|
|
280
|
-
| `ariaLabel` | `string` | -- | Accessible label (required for icon-only buttons)
|
|
268
|
+
| Prop | Type | Default | Description |
|
|
269
|
+
| ----------- | ------------------------------------------------------------------------------------------------------------ | ----------- | ------------------------------------------------------------------------- |
|
|
270
|
+
| `variant` | `"primary" \| "secondary" \| "danger" \| "warning" \| "success" \| "info" \| "outline" \| "ghost" \| "link"` | `"primary"` | Visual style variant |
|
|
271
|
+
| `size` | `"sm" \| "default" \| "lg" \| "icon" \| "icon-sm"` | `"default"` | Button size |
|
|
272
|
+
| `icon` | `string \| Component` | -- | Icon identifier or Vue component |
|
|
273
|
+
| `iconClass` | `string` | -- | Additional CSS class for the icon element |
|
|
274
|
+
| `iconSize` | `IconSize` | `"s"` | Size of the icon (`"xs"`, `"s"`, `"m"`, `"l"`, `"xl"`, `"xxl"`, `"xxxl"`) |
|
|
275
|
+
| `loading` | `boolean` | `false` | Shows spinner, disables interaction, sets `aria-busy` |
|
|
276
|
+
| `disabled` | `boolean` | `false` | Disables the button |
|
|
277
|
+
| `selected` | `boolean` | `false` | Applies selected/active visual state, sets `aria-pressed` |
|
|
278
|
+
| `text` | `boolean` | `false` | Renders as borderless text in the variant's color |
|
|
279
|
+
| `type` | `"button" \| "submit" \| "reset"` | `"button"` | HTML button type |
|
|
280
|
+
| `ariaLabel` | `string` | -- | Accessible label (required for icon-only buttons) |
|
|
281
281
|
|
|
282
282
|
## Events
|
|
283
283
|
|
|
@@ -304,6 +304,7 @@ All visual properties are customizable through CSS custom properties. Each varia
|
|
|
304
304
|
| `--button-border-radius` | `6px` | Corner radius for all buttons |
|
|
305
305
|
| `--button-focus-ring-color` | `var(--primary-300)` | Focus ring color |
|
|
306
306
|
| `--button-focus-ring-width` | `2px` | Focus ring thickness |
|
|
307
|
+
| `--button-focus-ring-offset` | `2px` | Focus ring offset |
|
|
307
308
|
| `--button-{size}-height` | `--button-default-height: 36px` | Height per size |
|
|
308
309
|
|
|
309
310
|
## Accessibility
|
|
@@ -327,6 +328,6 @@ All visual properties are customizable through CSS custom properties. Each varia
|
|
|
327
328
|
## Architecture notes
|
|
328
329
|
|
|
329
330
|
- VcButton calls `e.preventDefault()` on click to support `link` variant pattern. Form submit buttons must use `type="submit"` to bypass this.
|
|
330
|
-
- `VcButtonGroup` integration is via provide/inject
|
|
331
|
+
- `VcButtonGroup` integration is via provide/inject using the `ButtonGroupKey` injection key defined in `framework/ui/components/atoms/vc-button/types.ts`.
|
|
331
332
|
- Size aliases `xs`/`base` are kept for backward compatibility — slated for removal in v3.
|
|
332
333
|
<!-- internal:end -->
|
|
@@ -57,12 +57,15 @@ The `shadow` prop adds an inset shadow as a scroll cue. Use it for content that
|
|
|
57
57
|
|
|
58
58
|
## CSS Variables
|
|
59
59
|
|
|
60
|
-
| Variable
|
|
61
|
-
|
|
|
62
|
-
| `--container-padding`
|
|
63
|
-
| `--container-bg`
|
|
64
|
-
| `--container-border-radius`
|
|
65
|
-
| `--container-gap`
|
|
60
|
+
| Variable | Default | Description |
|
|
61
|
+
| ---------------------------- | -------------------------------------------------------------------------------------- | --------------------------------------------------------------- |
|
|
62
|
+
| `--container-padding` | `16px` | Inner padding of the scrollable area |
|
|
63
|
+
| `--container-bg` | `transparent` | Background color |
|
|
64
|
+
| `--container-border-radius` | `0` | Border radius |
|
|
65
|
+
| `--container-gap` | `0` | Gap between child elements |
|
|
66
|
+
| `--container-shadow-color` | `var(--additional-950)` | Scroll-shadow color (RGB channels used by `--container-shadow`) |
|
|
67
|
+
| `--container-shadow-opacity` | `0.1` | Scroll-shadow opacity |
|
|
68
|
+
| `--container-shadow` | `0 3px 2px rgba(var(--container-shadow-color), var(--container-shadow-opacity)) inset` | Inset shadow applied when the `shadow` prop is set |
|
|
66
69
|
|
|
67
70
|
## Exposed Methods
|
|
68
71
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: VcEnvironmentBanner
|
|
3
|
+
category: components
|
|
4
|
+
group: feedback
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# VcEnvironmentBanner
|
|
8
|
+
|
|
9
|
+
Centered badge pinned to the top of the application that labels the current
|
|
10
|
+
environment (Development, QA, Demo, etc.). Mirrors the platform environment
|
|
11
|
+
banner (vc-env-badge). Purely presentational — it renders the colored badge and
|
|
12
|
+
its label, and does not know where the name comes from. Visibility and color are
|
|
13
|
+
decided by the caller (see `useEnvironmentName`).
|
|
14
|
+
|
|
15
|
+
## When to Use
|
|
16
|
+
|
|
17
|
+
- Inside the app shell to make non-production environments visually obvious
|
|
18
|
+
- When NOT to use: do not place it manually in blades — `VcApp` already mounts it
|
|
19
|
+
|
|
20
|
+
## Props
|
|
21
|
+
|
|
22
|
+
- `name: string` — environment label to render
|
|
23
|
+
- `color?: string` — badge color (vc-shell theme tokens); recognized values are `primary | secondary | info | success | warning | danger | neutral`, any other value falls back to neutral via CSS, default `neutral`
|
|
24
|
+
|
|
25
|
+
## Quick Start
|
|
26
|
+
|
|
27
|
+
```vue
|
|
28
|
+
<template>
|
|
29
|
+
<VcEnvironmentBanner
|
|
30
|
+
v-if="!isIgnored"
|
|
31
|
+
:name="environmentName"
|
|
32
|
+
:color="color"
|
|
33
|
+
/>
|
|
34
|
+
</template>
|
|
35
|
+
|
|
36
|
+
<script setup>
|
|
37
|
+
import { VcEnvironmentBanner } from "@vc-shell/framework";
|
|
38
|
+
import { useEnvironmentName } from "@vc-shell/framework";
|
|
39
|
+
|
|
40
|
+
const { environmentName, isIgnored, color } = useEnvironmentName();
|
|
41
|
+
</script>
|
|
42
|
+
```
|