@vc-shell/vc-app-skill 2.0.1 → 2.0.3
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 +8 -0
- package/package.json +1 -1
- package/runtime/VERSION +1 -1
- package/runtime/knowledge/docs/_BUILD_HASH.md +1 -1
- package/runtime/knowledge/docs/injection-keys.docs.md +28 -22
- package/runtime/knowledge/docs/shell/dashboard/draggable-dashboard/dashboard-widget-skeleton.docs.md +26 -0
- package/runtime/knowledge/docs/shell/dashboard/draggable-dashboard/draggable-dashboard.docs.md +2 -0
- package/runtime/knowledge/docs/ui/components/molecules/vc-field/vc-field.docs.md +9 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.0.3](https://github.com/VirtoCommerce/vc-shell/compare/v2.0.2...v2.0.3) (2026-04-30)
|
|
4
|
+
|
|
5
|
+
**Note:** Version bump only for package @vc-shell/vc-app-skill
|
|
6
|
+
|
|
7
|
+
## [2.0.2](https://github.com/VirtoCommerce/vc-shell/compare/v2.0.1...v2.0.2) (2026-04-27)
|
|
8
|
+
|
|
9
|
+
**Note:** Version bump only for package @vc-shell/vc-app-skill
|
|
10
|
+
|
|
3
11
|
## [2.0.1](https://github.com/VirtoCommerce/vc-shell/compare/v2.0.0...v2.0.1) (2026-04-24)
|
|
4
12
|
|
|
5
13
|
### Features
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vc-shell/vc-app-skill",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.3",
|
|
4
4
|
"description": "AI coding skill for scaffolding and generating VirtoCommerce Shell applications. Works with Claude Code, OpenCode, Gemini, Codex, Cursor.",
|
|
5
5
|
"bin": "./bin/install.cjs",
|
|
6
6
|
"files": [
|
package/runtime/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.0.
|
|
1
|
+
2.0.3
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Synced from framework at commit
|
|
1
|
+
Synced from framework at commit d658f5b4c on 2026-04-30T07:59:28.391Z
|
|
@@ -19,22 +19,20 @@ This centralized approach has several advantages:
|
|
|
19
19
|
|
|
20
20
|
### Blade Navigation
|
|
21
21
|
|
|
22
|
-
| Key
|
|
23
|
-
|
|
|
24
|
-
| `
|
|
25
|
-
| `
|
|
26
|
-
| `
|
|
27
|
-
| `
|
|
28
|
-
| `
|
|
29
|
-
| `
|
|
30
|
-
| `InternalRoutesKey` | `BladeRoutesRecord[]` | Internal framework routes |
|
|
22
|
+
| Key | Type | Description |
|
|
23
|
+
| -------------------- | -------------------------------------- | -------------------------------------------- |
|
|
24
|
+
| `BladeDescriptorKey` | `ComputedRef<BladeDescriptor>` | Current blade descriptor metadata |
|
|
25
|
+
| `BladeBackButtonKey` | `Component \| undefined` | Custom back button component for a blade |
|
|
26
|
+
| `BladeDataKey` | _(from blade-navigation types)_ | Data passed between parent/child blades |
|
|
27
|
+
| `BladeContextKey` | `ComputedRef<Record<string, unknown>>` | Blade-exposed context for widgets/extensions |
|
|
28
|
+
| `BladeRoutesKey` | `BladeRoutesRecord[]` | Registered blade routes |
|
|
29
|
+
| `InternalRoutesKey` | `BladeRoutesRecord[]` | Internal framework routes |
|
|
31
30
|
|
|
32
31
|
### Notifications
|
|
33
32
|
|
|
34
|
-
| Key
|
|
35
|
-
|
|
|
36
|
-
| `
|
|
37
|
-
| `NotificationStoreKey` | `NotificationStore` | Shared notification store singleton |
|
|
33
|
+
| Key | Type | Description |
|
|
34
|
+
| ---------------------- | ------------------- | ----------------------------------- |
|
|
35
|
+
| `NotificationStoreKey` | `NotificationStore` | Shared notification store singleton |
|
|
38
36
|
|
|
39
37
|
### Services
|
|
40
38
|
|
|
@@ -42,7 +40,6 @@ This centralized approach has several advantages:
|
|
|
42
40
|
| ------------------------------- | ----------------------------- | ------------------------------ |
|
|
43
41
|
| `WidgetServiceKey` | `IWidgetService` | Widget registration and lookup |
|
|
44
42
|
| `DashboardServiceKey` | `IDashboardService` | Dashboard widget management |
|
|
45
|
-
| `GlobalSearchKey` | `GlobalSearchState` | Global search state |
|
|
46
43
|
| `MenuServiceKey` | `MenuService` | Main navigation menu |
|
|
47
44
|
| `SettingsMenuServiceKey` | `ISettingsMenuService` | Settings sidebar menu |
|
|
48
45
|
| `AppBarWidgetServiceKey` | `IAppBarWidgetService` | App bar widget slots |
|
|
@@ -81,14 +78,23 @@ This centralized approach has several advantages:
|
|
|
81
78
|
|
|
82
79
|
### Legacy Aliases (Deprecated)
|
|
83
80
|
|
|
84
|
-
| Deprecated
|
|
85
|
-
|
|
|
86
|
-
| `
|
|
87
|
-
| `
|
|
88
|
-
| `
|
|
89
|
-
| `
|
|
90
|
-
|
|
91
|
-
|
|
81
|
+
| Deprecated | Use Instead |
|
|
82
|
+
| ------------------- | -------------------- |
|
|
83
|
+
| `BladeDescriptor` | `BladeDescriptorKey` |
|
|
84
|
+
| `BLADE_BACK_BUTTON` | `BladeBackButtonKey` |
|
|
85
|
+
| `TOOLBAR_SERVICE` | `ToolbarServiceKey` |
|
|
86
|
+
| `EMBEDDED_MODE` | `EmbeddedModeKey` |
|
|
87
|
+
|
|
88
|
+
### Removed Keys (No Replacement)
|
|
89
|
+
|
|
90
|
+
These keys existed in v1.2.3 but have been removed from the framework entirely. There is no drop-in symbol replacement.
|
|
91
|
+
|
|
92
|
+
| Removed | Notes |
|
|
93
|
+
| ----------------------------- | ------------------------------------------------------------------------------ |
|
|
94
|
+
| `navigationViewLocation` | Internal framework concern — no public replacement |
|
|
95
|
+
| `BladeInstance` | Use `useBlade()` composable, or `inject(BladeDescriptorKey)` |
|
|
96
|
+
| `NotificationTemplatesSymbol` | Template system replaced by `NotificationStoreKey` + `useBladeNotifications()` |
|
|
97
|
+
| `GlobalSearchKey` | Internal concern now — no public replacement |
|
|
92
98
|
|
|
93
99
|
## Usage Examples
|
|
94
100
|
|
package/runtime/knowledge/docs/shell/dashboard/draggable-dashboard/dashboard-widget-skeleton.docs.md
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# DashboardWidgetSkeleton
|
|
2
|
+
|
|
3
|
+
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.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- You won't use this directly. `GridstackDashboard` renders one per `SkeletonItem` while `ModulesReadyKey` resolves to `false`.
|
|
8
|
+
- 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.
|
|
9
|
+
|
|
10
|
+
## Layout Contract
|
|
11
|
+
|
|
12
|
+
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.
|
|
13
|
+
|
|
14
|
+
## Accessibility
|
|
15
|
+
|
|
16
|
+
- 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.
|
|
17
|
+
- Shimmer animation is disabled when the user prefers reduced motion.
|
|
18
|
+
|
|
19
|
+
## Design Tokens
|
|
20
|
+
|
|
21
|
+
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`.
|
|
22
|
+
|
|
23
|
+
## Related
|
|
24
|
+
|
|
25
|
+
- [DraggableDashboard](./draggable-dashboard.docs.md) — owns the skeleton grid and decides when to render placeholders.
|
|
26
|
+
- [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
|
@@ -122,6 +122,8 @@ function resetLayout() {
|
|
|
122
122
|
- **Widget registration**: Widgets must be registered via `useDashboard().registerWidget()` before the dashboard mounts. The component reads the widget registry and creates grid items for each.
|
|
123
123
|
- **markRaw requirement**: Widget components must be wrapped in `markRaw()` when registering to prevent Vue from making them reactive (which would cause performance issues with the grid system).
|
|
124
124
|
- **Responsive behavior**: On mobile viewports, widgets stack vertically in a single column. Drag-and-drop is disabled on touch devices for better usability.
|
|
125
|
+
- **Module-ready gate**: When the host injects `ModulesReadyKey` (provided by `@vc-shell/mf-host`'s `registerRemoteModules`), the grid is held back until remote modules finish installing. This prevents widgets from mounting before their owning module's `defineAppModule.install` has merged its locales into vue-i18n — which would render translation keys instead of translated strings. Hosts without Module Federation (or tests/Storybook) inject nothing, and a fallback `ref(true)` keeps behavior unchanged.
|
|
126
|
+
- **Loading skeletons**: While `ModulesReadyKey` is `false`, the dashboard renders a CSS-grid of pulsing placeholder cards instead of an empty container. Card sizes are restored from the last persisted layout in `localStorage` (so returning users see placeholders matching their real widgets); first-time visitors get a default layout of four 6×6 placeholders. Animations respect `prefers-reduced-motion`.
|
|
125
127
|
|
|
126
128
|
## Tips
|
|
127
129
|
|
|
@@ -196,6 +196,15 @@ For read-only display, `VcField` is lighter and cleaner than a disabled `VcInput
|
|
|
196
196
|
|
|
197
197
|
The `type` prop affects rendering, not validation. Setting `type="email"` does not validate the email format -- it only renders the value as a `mailto:` link. For input validation, use VcInput with validation rules.
|
|
198
198
|
|
|
199
|
+
## Horizontal Layout Without Label
|
|
200
|
+
|
|
201
|
+
In `orientation="horizontal"` the component reserves the `aspectRatio[0]` track even when `label` is omitted. This keeps a column of `VcField`s aligned with their labeled siblings in a form grid. Use vertical orientation if you do not want this reservation.
|
|
202
|
+
|
|
203
|
+
```vue
|
|
204
|
+
<!-- Reserves the label column to align with sibling fields -->
|
|
205
|
+
<VcField orientation="horizontal" :aspect-ratio="[1, 2]" model-value="No label" />
|
|
206
|
+
```
|
|
207
|
+
|
|
199
208
|
## Related Components
|
|
200
209
|
|
|
201
210
|
- [VcInput](../vc-input/) -- editable text field (use instead when user input is needed)
|