@vc-shell/vc-app-skill 2.1.0-pr255.4dc5c0d → 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.
Files changed (139) hide show
  1. package/package.json +1 -1
  2. package/runtime/knowledge/docs/core/api/platform.docs.md +20 -18
  3. package/runtime/knowledge/docs/core/blade-navigation/blade-nav-composables.docs.md +43 -34
  4. package/runtime/knowledge/docs/core/blade-navigation/table-query-state/useTableQueryState.docs.md +95 -0
  5. package/runtime/knowledge/docs/core/composables/useAppBarMobileButtons/useAppBarMobileButtons.docs.md +5 -3
  6. package/runtime/knowledge/docs/core/composables/useAppBarWidget/useAppBarWidget.docs.md +12 -10
  7. package/runtime/knowledge/docs/core/composables/useAppInsights/useAppInsights.docs.md +7 -5
  8. package/runtime/knowledge/docs/core/composables/useAssets/useAssets.docs.md +8 -6
  9. package/runtime/knowledge/docs/core/composables/useAssetsManager/useAssetsManager.docs.md +3 -1
  10. package/runtime/knowledge/docs/core/composables/useAsync/useAsync.docs.md +1 -1
  11. package/runtime/knowledge/docs/core/composables/useBladeRegistry/useBladeRegistry.docs.md +8 -5
  12. package/runtime/knowledge/docs/core/composables/useBladeWidgets/index.docs.md +12 -12
  13. package/runtime/knowledge/docs/core/composables/useBreadcrumbs/useBreadcrumbs.docs.md +3 -3
  14. package/runtime/knowledge/docs/core/composables/useConnectionStatus/useConnectionStatus.docs.md +4 -3
  15. package/runtime/knowledge/docs/core/composables/useDynamicProperties/useDynamicProperties.docs.md +1 -0
  16. package/runtime/knowledge/docs/core/composables/useFunctions/useFunctions.docs.md +3 -3
  17. package/runtime/knowledge/docs/core/composables/useKeyboardNavigation/useKeyboardNavigation.docs.md +5 -4
  18. package/runtime/knowledge/docs/core/composables/useLanguages/useLanguages.docs.md +3 -3
  19. package/runtime/knowledge/docs/core/composables/useLoading/useLoading.docs.md +2 -0
  20. package/runtime/knowledge/docs/core/composables/useModificationTracker/useModificationTracker.docs.md +1 -2
  21. package/runtime/knowledge/docs/core/composables/useNotifications/useNotifications.docs.md +1 -1
  22. package/runtime/knowledge/docs/core/composables/usePermissions/usePermissions.docs.md +3 -3
  23. package/runtime/knowledge/docs/core/composables/usePlatformLocaleSync/usePlatformLocaleSync.docs.md +35 -0
  24. package/runtime/knowledge/docs/core/composables/usePopup/usePopup.docs.md +1 -1
  25. package/runtime/knowledge/docs/core/composables/useResponsive/useResponsive.docs.md +2 -2
  26. package/runtime/knowledge/docs/core/composables/useSettings/useSettings.docs.md +2 -1
  27. package/runtime/knowledge/docs/core/composables/useSettingsMenu/useSettingsMenu.docs.md +18 -18
  28. package/runtime/knowledge/docs/core/composables/useSidebarState/useSidebarState.docs.md +3 -3
  29. package/runtime/knowledge/docs/core/composables/useSlowNetworkDetection/useSlowNetworkDetection.docs.md +10 -7
  30. package/runtime/knowledge/docs/core/composables/useTheme/useTheme.docs.md +7 -7
  31. package/runtime/knowledge/docs/core/composables/useToolbar/useToolbar.docs.md +18 -12
  32. package/runtime/knowledge/docs/core/composables/useUser/useUser.docs.md +2 -2
  33. package/runtime/knowledge/docs/core/composables/useUserManagement/useUserManagement.docs.md +20 -20
  34. package/runtime/knowledge/docs/core/composables/useWidgets/useWidgets.docs.md +15 -24
  35. package/runtime/knowledge/docs/core/directives/loading/loading.docs.md +2 -2
  36. package/runtime/knowledge/docs/core/notifications/composables/useBladeNotifications.docs.md +183 -0
  37. package/runtime/knowledge/docs/core/notifications/composables/useBroadcastFilter.docs.md +117 -0
  38. package/runtime/knowledge/docs/core/notifications/composables/useNotificationContext.docs.md +150 -0
  39. package/runtime/knowledge/docs/core/notifications/composables/useNotificationStore.docs.md +114 -0
  40. package/runtime/knowledge/docs/core/notifications/notifications.docs.md +50 -30
  41. package/runtime/knowledge/docs/core/plugins/ai-agent/ai-agent.docs.md +30 -11
  42. package/runtime/knowledge/docs/core/plugins/extension-points/extension-points.docs.md +1 -1
  43. package/runtime/knowledge/docs/core/plugins/global-error-handler/global-error-handler.docs.md +2 -3
  44. package/runtime/knowledge/docs/core/plugins/modularity/modularity.docs.md +26 -26
  45. package/runtime/knowledge/docs/core/plugins/permissions/permissions.docs.md +2 -3
  46. package/runtime/knowledge/docs/core/plugins/signalR/signalR.docs.md +11 -50
  47. package/runtime/knowledge/docs/core/plugins/validation/validation.docs.md +9 -6
  48. package/runtime/knowledge/docs/core/services/services.docs.md +15 -13
  49. package/runtime/knowledge/docs/core/types/types.docs.md +37 -40
  50. package/runtime/knowledge/docs/core/utilities/date/date-utilities.docs.md +1 -2
  51. package/runtime/knowledge/docs/core/utilities/shared-utilities.docs.md +21 -30
  52. package/runtime/knowledge/docs/core/utilities/thumbnail/thumbnail.docs.md +2 -2
  53. package/runtime/knowledge/docs/core/utilities/utilities.docs.md +9 -8
  54. package/runtime/knowledge/docs/injection-keys.docs.md +6 -11
  55. package/runtime/knowledge/docs/modules/assets/assets-details.docs.md +123 -0
  56. package/runtime/knowledge/docs/modules/assets-manager/assets-manager.docs.md +1 -1
  57. package/runtime/knowledge/docs/shell/_internal/popup/common/popup-common.docs.md +20 -12
  58. package/runtime/knowledge/docs/shell/auth/ChangePasswordPage/change-password-page.docs.md +10 -10
  59. package/runtime/knowledge/docs/shell/auth/ForgotPasswordPage/forgot-password-page.docs.md +6 -6
  60. package/runtime/knowledge/docs/shell/auth/InvitePage/invite-page.docs.md +4 -4
  61. package/runtime/knowledge/docs/shell/auth/LoginPage/login-page.docs.md +16 -14
  62. package/runtime/knowledge/docs/shell/auth/ResetPasswordPage/reset-password-page.docs.md +1 -1
  63. package/runtime/knowledge/docs/shell/auth/sign-in/sign-in.docs.md +12 -11
  64. package/runtime/knowledge/docs/shell/components/change-password/change-password.docs.md +10 -3
  65. package/runtime/knowledge/docs/shell/components/change-password-button/change-password-button.docs.md +3 -3
  66. package/runtime/knowledge/docs/shell/components/error-interceptor/error-interceptor.docs.md +9 -2
  67. package/runtime/knowledge/docs/shell/components/language-selector/language-selector.docs.md +4 -2
  68. package/runtime/knowledge/docs/shell/components/logout-button/logout-button.docs.md +1 -1
  69. package/runtime/knowledge/docs/shell/components/notification-dropdown/notification-dropdown.docs.md +35 -31
  70. package/runtime/knowledge/docs/shell/components/notification-template/notification-template.docs.md +17 -11
  71. package/runtime/knowledge/docs/shell/components/settings-menu/settings-menu.docs.md +8 -7
  72. package/runtime/knowledge/docs/shell/components/settings-menu-item/settings-menu-item.docs.md +23 -21
  73. package/runtime/knowledge/docs/shell/components/sidebar/sidebar.docs.md +5 -3
  74. package/runtime/knowledge/docs/shell/components/theme-selector/theme-selector.docs.md +7 -7
  75. package/runtime/knowledge/docs/shell/components/user-dropdown-button/user-dropdown-button.docs.md +11 -11
  76. package/runtime/knowledge/docs/shell/dashboard/dashboard-charts/dashboard-charts.docs.md +28 -16
  77. package/runtime/knowledge/docs/shell/dashboard/dashboard-widget-card/dashboard-widget-card.docs.md +17 -19
  78. package/runtime/knowledge/docs/shell/dashboard/draggable-dashboard/dashboard-widget-skeleton.docs.md +33 -0
  79. package/runtime/knowledge/docs/shell/dashboard/draggable-dashboard/draggable-dashboard.docs.md +21 -0
  80. package/runtime/knowledge/docs/ui/components/atoms/vc-badge/vc-badge.docs.md +2 -1
  81. package/runtime/knowledge/docs/ui/components/atoms/vc-banner/vc-banner.docs.md +2 -2
  82. package/runtime/knowledge/docs/ui/components/atoms/vc-button/vc-button.docs.md +15 -14
  83. package/runtime/knowledge/docs/ui/components/atoms/vc-container/vc-container.docs.md +9 -6
  84. package/runtime/knowledge/docs/ui/components/atoms/vc-environment-banner/vc-environment-banner.docs.md +42 -0
  85. package/runtime/knowledge/docs/ui/components/atoms/vc-hint/vc-hint.docs.md +1 -1
  86. package/runtime/knowledge/docs/ui/components/atoms/vc-icon/vc-icon.docs.md +10 -9
  87. package/runtime/knowledge/docs/ui/components/atoms/vc-image/vc-image.docs.md +19 -4
  88. package/runtime/knowledge/docs/ui/components/atoms/vc-label/vc-label.docs.md +2 -2
  89. package/runtime/knowledge/docs/ui/components/atoms/vc-link/vc-link.docs.md +5 -4
  90. package/runtime/knowledge/docs/ui/components/atoms/vc-loading/vc-loading.docs.md +5 -4
  91. package/runtime/knowledge/docs/ui/components/atoms/vc-progress/vc-progress.docs.md +9 -8
  92. package/runtime/knowledge/docs/ui/components/atoms/vc-scrollable-container/vc-scrollable-container.docs.md +7 -0
  93. package/runtime/knowledge/docs/ui/components/atoms/vc-skeleton/vc-skeleton.docs.md +1 -1
  94. package/runtime/knowledge/docs/ui/components/atoms/vc-status/vc-status.docs.md +2 -2
  95. package/runtime/knowledge/docs/ui/components/atoms/vc-status-icon/vc-status-icon.docs.md +1 -1
  96. package/runtime/knowledge/docs/ui/components/atoms/vc-tooltip/vc-tooltip.docs.md +11 -10
  97. package/runtime/knowledge/docs/ui/components/atoms/vc-video/vc-video.docs.md +28 -8
  98. package/runtime/knowledge/docs/ui/components/atoms/vc-widget/vc-widget.docs.md +22 -19
  99. package/runtime/knowledge/docs/ui/components/molecules/multilanguage-selector/multilanguage-selector.docs.md +8 -8
  100. package/runtime/knowledge/docs/ui/components/molecules/vc-accordion/vc-accordion.docs.md +16 -6
  101. package/runtime/knowledge/docs/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.docs.md +9 -8
  102. package/runtime/knowledge/docs/ui/components/molecules/vc-checkbox/vc-checkbox.docs.md +42 -34
  103. package/runtime/knowledge/docs/ui/components/molecules/vc-checkbox-group/vc-checkbox-group.docs.md +1 -1
  104. package/runtime/knowledge/docs/ui/components/molecules/vc-color-input/vc-color-input.docs.md +14 -1
  105. package/runtime/knowledge/docs/ui/components/molecules/vc-date-picker/vc-date-picker.docs.md +3 -1
  106. package/runtime/knowledge/docs/ui/components/molecules/vc-dropdown/vc-dropdown.docs.md +34 -33
  107. package/runtime/knowledge/docs/ui/components/molecules/vc-editor/vc-editor.docs.md +26 -24
  108. package/runtime/knowledge/docs/ui/components/molecules/vc-field/vc-field.docs.md +12 -14
  109. package/runtime/knowledge/docs/ui/components/molecules/vc-file-upload/vc-file-upload.docs.md +30 -30
  110. package/runtime/knowledge/docs/ui/components/molecules/vc-input/vc-input.docs.md +2 -2
  111. package/runtime/knowledge/docs/ui/components/molecules/vc-input-currency/vc-input-currency.docs.md +1 -1
  112. package/runtime/knowledge/docs/ui/components/molecules/vc-input-dropdown/vc-input-dropdown.docs.md +34 -31
  113. package/runtime/knowledge/docs/ui/components/molecules/vc-input-group/vc-input-group.docs.md +14 -12
  114. package/runtime/knowledge/docs/ui/components/molecules/vc-menu/vc-menu.docs.md +1 -1
  115. package/runtime/knowledge/docs/ui/components/molecules/vc-multivalue/vc-multivalue.docs.md +36 -27
  116. package/runtime/knowledge/docs/ui/components/molecules/vc-pagination/vc-pagination.docs.md +5 -1
  117. package/runtime/knowledge/docs/ui/components/molecules/{vc-dropdown-panel/vc-dropdown-panel.docs.md → vc-popover/vc-popover.docs.md} +26 -25
  118. package/runtime/knowledge/docs/ui/components/molecules/vc-radio-button/vc-radio-button.docs.md +10 -9
  119. package/runtime/knowledge/docs/ui/components/molecules/vc-select/vc-select.docs.md +44 -19
  120. package/runtime/knowledge/docs/ui/components/molecules/vc-slider/vc-slider.docs.md +11 -11
  121. package/runtime/knowledge/docs/ui/components/molecules/vc-switch/vc-switch.docs.md +15 -14
  122. package/runtime/knowledge/docs/ui/components/molecules/vc-textarea/vc-textarea.docs.md +15 -15
  123. package/runtime/knowledge/docs/ui/components/molecules/vc-toast/vc-toast.docs.md +15 -13
  124. package/runtime/knowledge/docs/ui/components/organisms/vc-app/vc-app.docs.md +5 -1
  125. package/runtime/knowledge/docs/ui/components/organisms/vc-auth-layout/vc-auth-layout.docs.md +18 -0
  126. package/runtime/knowledge/docs/ui/components/organisms/vc-blade/vc-blade.docs.md +48 -78
  127. package/runtime/knowledge/docs/ui/components/organisms/vc-data-table/composables/table-composables.docs.md +9 -11
  128. package/runtime/knowledge/docs/ui/components/organisms/vc-data-table/vc-data-table.docs.md +71 -43
  129. package/runtime/knowledge/docs/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.docs.md +27 -20
  130. package/runtime/knowledge/docs/ui/components/organisms/vc-gallery/vc-gallery.docs.md +2 -2
  131. package/runtime/knowledge/docs/ui/components/organisms/vc-image-upload/vc-image-upload.docs.md +12 -12
  132. package/runtime/knowledge/docs/ui/components/organisms/vc-popup/vc-popup.docs.md +33 -24
  133. package/runtime/knowledge/docs/ui/components/organisms/vc-scheduler/vc-scheduler.docs.md +412 -0
  134. package/runtime/knowledge/docs/ui/components/organisms/vc-sidebar/vc-sidebar.docs.md +43 -26
  135. package/runtime/knowledge/docs/ui/composables/ui-composables.docs.md +15 -9
  136. package/runtime/knowledge/docs/ui/composables/useDataTableSort.docs.md +8 -6
  137. package/runtime/knowledge/docs/ui/composables/useTableSearch.docs.md +130 -0
  138. package/runtime/knowledge/docs/ui/composables/useTableSelection.docs.md +4 -4
  139. package/runtime/knowledge/docs/ui/composables/useTableSort.docs.md +2 -3
@@ -240,20 +240,21 @@ const isActive = ref(true);
240
240
 
241
241
  ## Props
242
242
 
243
- | Prop | Type | Default | Description |
244
- | -------------- | ---------------------- | ------- | ---------------------------------------------------- |
245
- | `modelValue` | `boolean \| undefined` | -- | Bound value via `v-model` |
246
- | `label` | `string` | -- | Label text above the switch |
247
- | `hint` | `string` | -- | Helper text displayed below the switch |
248
- | `labelTooltip` | `string` | -- | Tooltip shown on the label info icon |
249
- | `tooltip` | `string` | -- | **Deprecated.** Use `hint` or `labelTooltip` instead |
250
- | `trueValue` | `boolean` | `true` | Value that represents the checked state |
251
- | `falseValue` | `boolean` | `false` | Value that represents the unchecked state |
252
- | `disabled` | `boolean` | `false` | Disables the switch |
253
- | `required` | `boolean` | `false` | Shows a required indicator on the label |
254
- | `error` | `boolean` | `false` | Enables error styling |
255
- | `errorMessage` | `string` | -- | Error message displayed below the switch |
256
- | `name` | `string` | -- | HTML name attribute for the hidden input |
243
+ | Prop | Type | Default | Description |
244
+ | -------------- | ---------------------- | ------- | -------------------------------------------------------------------------------------------------- |
245
+ | `modelValue` | `boolean \| undefined` | -- | Bound value via `v-model` |
246
+ | `label` | `string` | -- | Label text above the switch |
247
+ | `hint` | `string` | -- | Helper text displayed below the switch |
248
+ | `labelTooltip` | `string` | -- | Tooltip shown on the label info icon |
249
+ | `tooltip` | `string` | -- | **Deprecated.** Use `hint` or `labelTooltip` instead |
250
+ | `trueValue` | `boolean` | `true` | Value that represents the checked state |
251
+ | `falseValue` | `boolean` | `false` | Value that represents the unchecked state |
252
+ | `disabled` | `boolean` | `false` | Disables the switch |
253
+ | `required` | `boolean` | `false` | Shows a required indicator on the label |
254
+ | `error` | `boolean` | `false` | Enables error styling |
255
+ | `errorMessage` | `string` | -- | Error message displayed below the switch |
256
+ | `ariaLabel` | `string` | -- | Accessible name for the switch when no visible `label` is set. Applied only when `label` is empty. |
257
+ | `name` | `string` | -- | Field name used for validation/id generation (not rendered as an HTML name attribute on the input) |
257
258
 
258
259
  ## Events
259
260
 
@@ -236,21 +236,21 @@ const description = ref<string>("");
236
236
 
237
237
  ## Props
238
238
 
239
- | Prop | Type | Default | Description |
240
- | ----------------- | --------- | ----------- | ----------------------------------------------- |
241
- | `modelValue` | `string` | `undefined` | Bound value via `v-model` |
242
- | `label` | `string` | -- | Label text displayed above the textarea |
243
- | `placeholder` | `string` | -- | Placeholder text inside the empty textarea |
244
- | `hint` | `string` | -- | Helper text displayed below the field |
245
- | `tooltip` | `string` | -- | Tooltip on the label info icon |
246
- | `maxlength` | `string` | `"1024"` | Maximum character count (native HTML attribute) |
247
- | `required` | `boolean` | `false` | Shows a required indicator on the label |
248
- | `error` | `boolean` | `false` | Enables error styling (red border + ring) |
249
- | `errorMessage` | `string` | -- | Error message text below the field |
250
- | `disabled` | `boolean` | `false` | Disables the textarea |
251
- | `name` | `string` | `"Field"` | HTML name attribute |
252
- | `multilanguage` | `boolean` | `false` | Shows language badge on the label |
253
- | `currentLanguage` | `string` | -- | Language code displayed in the badge |
239
+ | Prop | Type | Default | Description |
240
+ | ----------------- | --------- | ----------- | ---------------------------------------------------------------------------------------------------- |
241
+ | `modelValue` | `string` | `undefined` | Bound value via `v-model` |
242
+ | `label` | `string` | -- | Label text displayed above the textarea |
243
+ | `placeholder` | `string` | -- | Placeholder text inside the empty textarea |
244
+ | `hint` | `string` | -- | Helper text displayed below the field |
245
+ | `tooltip` | `string` | -- | Tooltip on the label info icon |
246
+ | `maxlength` | `string` | `"1024"` | Maximum character count (native HTML attribute) |
247
+ | `required` | `boolean` | `false` | Shows a required indicator on the label |
248
+ | `error` | `boolean` | `false` | Enables error styling (red border + ring) |
249
+ | `errorMessage` | `string` | -- | Error message text below the field |
250
+ | `disabled` | `boolean` | `false` | Disables the textarea |
251
+ | `name` | `string` | `"Field"` | Field name used for validation/id generation (not applied as an HTML name attribute on the textarea) |
252
+ | `multilanguage` | `boolean` | `false` | Shows language badge on the label |
253
+ | `currentLanguage` | `string` | -- | Language code displayed in the badge |
254
254
 
255
255
  ## Events
256
256
 
@@ -148,7 +148,7 @@ Toasts use Sonner-style stacking: the newest toast is in front, older toasts sca
148
148
 
149
149
  On touch devices, horizontal swipe dismisses toasts (threshold: 45px or velocity > 0.11px/ms).
150
150
 
151
- The auto-dismiss timer (default 5000ms) pauses on hover. Set `timeout: false` for persistent toasts.
151
+ The auto-dismiss timer (default 3000ms) pauses on hover. Set `timeout: false` for persistent toasts.
152
152
 
153
153
  ```ts
154
154
  notification("Quick flash", { timeout: 1500 });
@@ -246,11 +246,11 @@ These props are used internally by the notification system. You rarely need to s
246
246
 
247
247
  | Prop | Type | Default | Description |
248
248
  | ---------------- | ------------------------------------------------ | -------------- | ------------------------------------------------------ |
249
- | `content` | `string \| Component` | -- | Notification message or custom component |
249
+ | `content` | `string \| VNode \| Component` | -- | Notification message or custom component |
250
250
  | `notificationId` | `number \| string` | -- | Unique identifier |
251
251
  | `updateId` | `number \| string` | -- | ID for update tracking |
252
252
  | `type` | `"default" \| "success" \| "error" \| "warning"` | `"default"` | Notification type (determines icon and accent color) |
253
- | `timeout` | `number \| boolean` | `5000` | Auto-dismiss delay in ms, or `false` to disable |
253
+ | `timeout` | `number \| boolean` | `3000` | Auto-dismiss delay in ms, or `false` to disable |
254
254
  | `pauseOnHover` | `boolean` | `true` | Pause timeout while mouse hovers over the toast |
255
255
  | `limit` | `number` | -- | Maximum number of visible notifications |
256
256
  | `position` | `NotificationPosition` | `"top-center"` | Screen position for the toast |
@@ -269,16 +269,18 @@ These props are used internally by the notification system. You rarely need to s
269
269
 
270
270
  ## Notification Service Methods
271
271
 
272
- | Method | Signature | Description |
273
- | ---------------------------- | ----------------------------------------------------------------------------------- | ------------------------------- |
274
- | `notification()` | `(message: string \| Component, options?: NotificationOptions) => string \| number` | Show a default notification |
275
- | `notification.success()` | `(message: string \| Component) => string \| number` | Show a success notification |
276
- | `notification.error()` | `(message: string \| Component) => string \| number` | Show an error notification |
277
- | `notification.warning()` | `(message: string \| Component) => string \| number` | Show a warning notification |
278
- | `notification.update()` | `(id, options: Partial<NotificationOptions>) => void` | Update an existing notification |
279
- | `notification.remove()` | `(id: string \| number) => void` | Remove a specific notification |
280
- | `notification.clearAll()` | `() => void` | Remove all notifications |
281
- | `notification.setPosition()` | `(position: NotificationPosition) => void` | Change the global position |
272
+ | Method | Signature | Description |
273
+ | ------------------------------ | -------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
274
+ | `notification()` | `(message: string \| VNode \| Component, options?: NotificationOptions) => string \| number` | Show a default notification |
275
+ | `notification.success()` | `(message: string \| VNode \| Component, options?: NotificationOptions) => string \| number` | Show a success notification |
276
+ | `notification.error()` | `(message: string \| VNode \| Component, options?: NotificationOptions) => string \| number` | Show an error notification |
277
+ | `notification.warning()` | `(message: string \| VNode \| Component, options?: NotificationOptions) => string \| number` | Show a warning notification |
278
+ | `notification.update()` | `(id: string \| number, options: NotificationOptions) => string \| number` | Update an existing notification; returns the id |
279
+ | `notification.remove()` | `(id?: string \| number) => void` | Remove a specific notification; omitting the id removes all (equivalent to `clearAll()`) |
280
+ | `notification.clearAll()` | `() => void` | Remove all notifications |
281
+ | `notification.clearPosition()` | `(position: NotificationPosition) => void` | Remove all notifications in one position |
282
+ | `notification.setPosition()` | `(position: NotificationPosition) => void` | Change the global position |
283
+ | `notification.debug()` | `() => { active; defaultOptions }` | Diagnostics helper: logs active toasts and default options, returns them |
282
284
 
283
285
  ## CSS Variables
284
286
 
@@ -89,6 +89,10 @@ VcApp orchestrates several internal systems:
89
89
 
90
90
  On desktop viewports, VcApp renders a collapsible sidebar on the left with navigation menu items, user info in the footer, and the blade workspace on the right. On mobile viewports, the sidebar is replaced by a top bar with a hamburger menu that opens a slide-over navigation panel.
91
91
 
92
+ ### Environment Indicator
93
+
94
+ VcApp renders a `VcEnvironmentBanner` when an environment name is detected via `useEnvironmentName()` (derived from the current hostname) and the environment is not ignored. The banner surfaces the environment name and color, making it obvious when you are working against a non-production instance.
95
+
92
96
  ### Sidebar Menu Search
93
97
 
94
98
  ::storybook id="layout-vcapp--with-sidebar-search" height="500"
@@ -140,7 +144,7 @@ If you use the `menu` slot to provide a custom menu, the `searchQuery` prop is p
140
144
 
141
145
  ### Dynamic Module Registration
142
146
 
143
- Modules registered via `useDynamicModules()` are loaded at runtime. Each module can contribute menu items, blades, toolbar actions, settings pages, and dashboard widgets. VcApp handles module loading errors gracefully by displaying notification toasts.
147
+ Modules are provided/consumed via the `DynamicModulesKey` injection (see `injection-keys.ts` and `useShellBootstrap`) and loaded at runtime. Each module can contribute menu items, blades, toolbar actions, settings pages, and dashboard widgets. VcApp handles module loading errors gracefully by displaying notification toasts.
144
148
 
145
149
  ### App Hub
146
150
 
@@ -77,6 +77,24 @@ The card is centered both vertically and horizontally. On narrow viewports, it s
77
77
 
78
78
  The layout uses a `<main>` element as the page landmark and an `<h2>` for the card title, providing a correct heading hierarchy for screen readers and SEO.
79
79
 
80
+ ### App Version Footer
81
+
82
+ When the active route sets `meta.appVersion`, VcAuthLayout renders that string below the card (in a `.vc-auth-layout__version` element). Set it via your Vue Router route meta; when absent, nothing is rendered.
83
+
84
+ ## CSS Custom Properties
85
+
86
+ | Variable | Default | Description |
87
+ | ------------------------------ | --------------------------------------------------------------- | ------------------------------ |
88
+ | `--auth-layout-bg` | `var(--neutrals-100)` | Page background |
89
+ | `--auth-layout-card-bg` | `var(--additional-50)` | Card background |
90
+ | `--auth-layout-card-border` | `var(--neutrals-200)` | Card border color |
91
+ | `--auth-layout-card-shadow` | `0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)` | Card shadow |
92
+ | `--auth-layout-card-radius` | `12px` | Card corner radius |
93
+ | `--auth-layout-card-max-width` | `420px` | Card / footer max width |
94
+ | `--auth-layout-title-color` | `var(--neutrals-900)` | Title text color |
95
+ | `--auth-layout-subtitle-color` | `var(--neutrals-400)` | Subtitle and footer text color |
96
+ | `--auth-layout-version-color` | `var(--neutrals-400)` | Version string text color |
97
+
80
98
  ## Recipe: Sign-In Page with SSO
81
99
 
82
100
  ```vue
@@ -53,7 +53,6 @@ Use VcBlade for every screen in a vc-shell application -- it is the standard con
53
53
  <VcBlade
54
54
  title="My First Blade"
55
55
  icon="lucide-box"
56
- @close="$emit('close:blade')"
57
56
  >
58
57
  <div class="tw-p-4">Hello from a blade!</div>
59
58
  </VcBlade>
@@ -64,6 +63,9 @@ defineBlade({ name: "MyFirstBlade", url: "/my-first-blade" });
64
63
  </script>
65
64
  ```
66
65
 
66
+ !!! tip "No close/expand wiring needed"
67
+ Inside the navigation stack VcBlade closes itself and reads its expanded/closable state from the stack automatically. You don't declare `expanded`/`closable` props or forward `@close`/`@expand`/`@collapse` events — that wiring is a legacy fallback kept only for standalone (Storybook) use.
68
+
67
69
  !!! tip "Every blade needs a name"
68
70
  Every blade must define a `name` in `defineBlade`. This is how other blades reference it: `openBlade({ name: "MyFirstBlade" })`. The `url` is optional and controls the URL segment.
69
71
 
@@ -101,14 +103,9 @@ A blade has four visual zones, rendered top-to-bottom:
101
103
  :title="title"
102
104
  icon="lucide-tag"
103
105
  width="50%"
104
- :expanded="expanded"
105
- :closable="closable"
106
106
  :toolbar-items="toolbar"
107
107
  :modified="hasChanges"
108
108
  :loading="isLoading"
109
- @close="$emit('close:blade')"
110
- @expand="$emit('expand:blade')"
111
- @collapse="$emit('collapse:blade')"
112
109
  >
113
110
  <!-- Your content here -->
114
111
  </VcBlade>
@@ -125,29 +122,13 @@ defineBlade({
125
122
  routable: false, // Optional: exclude from direct URL access
126
123
  });
127
124
 
128
- // Standard props injected by the navigation system
129
- export interface Props {
130
- expanded: boolean;
131
- closable: boolean;
132
- param?: string; // Entity ID
133
- options?: { sellerProduct?: object };
134
- }
135
-
136
- const props = withDefaults(defineProps<Props>(), {
137
- expanded: true,
138
- closable: true,
139
- });
140
-
141
- export interface Emits {
142
- (event: "close:blade"): void;
143
- (event: "expand:blade"): void;
144
- (event: "collapse:blade"): void;
145
- }
146
- const emit = defineEmits<Emits>();
147
-
148
- const { openBlade, closeSelf, callParent, onBeforeClose } = useBlade();
125
+ // Navigation state and data come from useBlade() — not props.
126
+ // `param` (entity id) and `options` (rich context) are reactive refs.
127
+ const { openBlade, closeSelf, callParent, onBeforeClose, param, options } = useBlade<{
128
+ sellerProduct?: object;
129
+ }>();
149
130
 
150
- const title = computed(() => (props.param ? "Edit Offer" : "New Offer"));
131
+ const title = computed(() => (param.value ? "Edit Offer" : "New Offer"));
151
132
  const isLoading = ref(false);
152
133
  const hasChanges = ref(false);
153
134
 
@@ -166,15 +147,18 @@ defineExpose({ title });
166
147
  </script>
167
148
  ```
168
149
 
150
+ !!! warning "Legacy pattern: `expanded` / `closable` props and `close:blade` emits"
151
+ Older blades declared `defineProps<{ expanded; closable; param }>()`, wired `withDefaults`, and re-emitted `close:blade` / `expand:blade` / `collapse:blade`. This is no longer needed. The navigation stack owns expanded/closable state (a workspace root is not closable, the rightmost blade is expanded), and VcBlade closes itself. Read `param`, `options`, `query`, `expanded`, and `closable` from `useBlade()` instead — see [useBlade docs](../../../../core/composables/useBlade/useBlade.docs.md).
152
+
169
153
  ### defineOptions Reference
170
154
 
171
- | Property | Type | Description |
172
- | ------------- | --------- | ----------------------------------------------------------------------- |
173
- | `name` | `string` | **Required.** Unique blade identifier for `openBlade({ name: "..." })`. |
174
- | `url` | `string` | URL path segment (e.g., `"/offers"` produces `/#/.../offers`). |
175
- | `isWorkspace` | `boolean` | Marks blade as a workspace (root-level, not closable). |
176
- | `routable` | `boolean` | When `false`, blade cannot be opened via direct URL navigation. |
177
- | `menuItem` | `object` | Registers a sidebar menu entry: `{ id, title, icon, priority }`. |
155
+ | Property | Type | Description |
156
+ | ------------- | --------- | ------------------------------------------------------------------------------------------------------------------ |
157
+ | `name` | `string` | **Required.** Unique blade identifier for `openBlade({ name: "..." })`. |
158
+ | `url` | `string` | URL path segment (e.g., `"/offers"` produces `/#/.../offers`). |
159
+ | `isWorkspace` | `boolean` | Marks blade as a workspace (root-level, not closable). |
160
+ | `routable` | `boolean` | When `false`, blade cannot be opened via direct URL navigation. |
161
+ | `menuItem` | `object` | Registers a sidebar menu entry: `{ title, icon, priority }` (plus optional `groupConfig`, `permissions`, `badge`). |
178
162
 
179
163
  ### defineExpose
180
164
 
@@ -310,10 +294,13 @@ const entityId = computed(() => ctx.value.item?.id);
310
294
 
311
295
  ### Expanded / Collapsed
312
296
 
313
- `expanded` indicates whether this blade is the active (rightmost) one. The navigation system manages it -- just pass through:
297
+ `expanded` indicates whether this blade is the active (rightmost) one. The navigation system manages it entirely -- **don't** declare an `expanded` prop or forward `@expand`/`@collapse`. If you need the current value, read it reactively from `useBlade()`:
314
298
 
315
- ```vue
316
- <VcBlade :expanded="expanded" @expand="$emit('expand:blade')" @collapse="$emit('collapse:blade')">
299
+ ```ts
300
+ const { expanded } = useBlade();
301
+
302
+ // e.g. show a compact layout when this blade is collapsed behind others
303
+ const layout = computed(() => (expanded.value ? "full" : "compact"));
317
304
  ```
318
305
 
319
306
  ### Closing
@@ -372,10 +359,11 @@ interface IBladeToolbar {
372
359
  id?: string;
373
360
  title?: string | Ref<string> | ComputedRef<string>;
374
361
  icon?: string | (() => string);
375
- clickHandler?(): void;
376
- disabled?: boolean | ComputedRef<boolean>;
377
- isVisible?: boolean | Ref<boolean> | ComputedRef<boolean> | ((blade?: BladeDescriptor) => boolean);
362
+ clickHandler?(app?: Record<string, any> | null): void;
363
+ disabled?: boolean | ComputedRef<boolean | undefined>;
364
+ isVisible?: boolean | Ref<boolean | undefined> | ComputedRef<boolean | undefined> | ((blade?: BladeDescriptor) => boolean | undefined);
378
365
  separator?: "left" | "right" | "both";
366
+ permissions?: string | string[];
379
367
  }
380
368
  ```
381
369
 
@@ -555,7 +543,7 @@ const toolbar = ref([
555
543
  ### Blade with Data Table
556
544
 
557
545
  ```vue
558
- <VcBlade :title="$t('ORDERS.LIST.TITLE')" icon="lucide-file-text" width="50%" :expanded="expanded" :closable="closable" :toolbar-items="toolbar">
546
+ <VcBlade :title="$t('ORDERS.LIST.TITLE')" icon="lucide-file-text" width="50%" :toolbar-items="toolbar">
559
547
  <VcDataTable
560
548
  v-model:sort-field="sortField" v-model:sort-order="sortOrder"
561
549
  v-model:search-value="searchValue" v-model:active-item-id="selectedItemId"
@@ -582,16 +570,6 @@ defineOptions({});
582
570
  defineBlade({ name: "ProductDetails", url: "/product" });
583
571
  ```
584
572
 
585
- ### Forgetting to expose the title
586
-
587
- ```ts
588
- // WRONG -- Breadcrumbs show nothing
589
- const title = computed(() => product.value?.name);
590
-
591
- // CORRECT
592
- defineExpose({ title });
593
- ```
594
-
595
573
  ### Wrong onBeforeClose return value
596
574
 
597
575
  ```ts
@@ -614,37 +592,29 @@ const { openBlade } = useBlade();
614
592
  openBlade({ name: "ProductsList" });
615
593
  ```
616
594
 
617
- ### Not passing expanded/closable through
618
-
619
- ```vue
620
- <!-- WRONG -- hardcoded, ignores navigation system -->
621
- <VcBlade :expanded="true" :closable="true">
622
-
623
- <!-- CORRECT -- pass props from navigation -->
624
- <VcBlade :expanded="expanded" :closable="closable">
625
- ```
626
-
627
595
  ## Props
628
596
 
629
- | Prop | Type | Default | Description |
630
- | -------------- | ------------------ | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
631
- | `title` | `string` | `undefined` | Title text in the blade header. |
632
- | `subtitle` | `string` | `undefined` | Secondary text below the title. |
633
- | `icon` | `string` | `undefined` | Icon name (e.g., `"lucide-box"`) displayed before the title. |
634
- | `width` | `number \| string` | `"30%"` | Blade width. Numbers are pixels; strings are CSS values. |
635
- | `expanded` | `boolean` | `undefined` | Whether the blade fills all available width. Inside a blade-navigation context this prop is overridden by the active blade's expanded state; in standalone use the prop is read directly. |
636
- | `closable` | `boolean` | `true` | Whether the close button is shown. |
637
- | `toolbarItems` | `IBladeToolbar[]` | `[]` | Action buttons in the toolbar zone. |
638
- | `modified` | `boolean` | `undefined` | Shows unsaved changes indicator and banner. |
639
- | `loading` | `boolean` | `undefined` | Shows skeleton placeholders for all blade zones. |
597
+ | Prop | Type | Default | Description |
598
+ | -------------- | ------------------ | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
599
+ | `title` | `string` | `undefined` | Title text in the blade header. |
600
+ | `subtitle` | `string` | `undefined` | Secondary text below the title. |
601
+ | `icon` | `string` | `undefined` | Icon name (e.g., `"lucide-box"`) displayed before the title. |
602
+ | `width` | `number \| string` | `"30%"` | Blade width. Numbers are pixels; strings are CSS values. |
603
+ | ~~`expanded`~~ | `boolean` | `undefined` | **Deprecated.** Managed by the navigation stack ignored inside blade navigation, where the active (rightmost) blade is expanded automatically. Read the live value from `useBlade().expanded`. Retained only as a standalone/Storybook fallback. |
604
+ | ~~`closable`~~ | `boolean` | `true` | **Deprecated.** Managed by the navigation stack — ignored inside blade navigation, where closability is derived from stack position (a workspace root is not closable). Read the live value from `useBlade().closable`. Retained only as a standalone/Storybook fallback. |
605
+ | `toolbarItems` | `IBladeToolbar[]` | `[]` | Action buttons in the toolbar zone. |
606
+ | `modified` | `boolean` | `undefined` | Shows unsaved changes indicator and banner. |
607
+ | `loading` | `boolean` | `undefined` | Shows skeleton placeholders for all blade zones. |
640
608
 
641
609
  ## Events
642
610
 
643
- | Event | Payload | Description |
644
- | ---------- | ------- | ----------------------------------------------- |
645
- | `close` | -- | Close button clicked. Re-emit as `close:blade`. |
646
- | `expand` | -- | Blade expanded. Re-emit as `expand:blade`. |
647
- | `collapse` | -- | Blade collapsed. Re-emit as `collapse:blade`. |
611
+ > **Note:** These events fire **only in standalone/Storybook use**. Inside the navigation stack VcBlade closes itself (via `closeSelf()`) and handles expand/collapse internally, so there is nothing to forward. Use `onBeforeClose()` from `useBlade()` to run logic (like an unsaved-changes guard) before the blade closes. A leftover `@close` listener inside blade navigation triggers a dev-mode deprecation warning.
612
+
613
+ | Event | Payload | Description |
614
+ | ---------- | ------- | ------------------------------------------------------------------ |
615
+ | `close` | -- | Standalone only. Close button clicked. |
616
+ | `expand` | -- | Standalone only. Blade expanded (no `maximized` context present). |
617
+ | `collapse` | -- | Standalone only. Blade collapsed (no `maximized` context present). |
648
618
 
649
619
  ## Slots
650
620
 
@@ -73,20 +73,18 @@ The central engine. Distributes `availableWidth` among visible columns according
73
73
 
74
74
  ```ts
75
75
  interface EngineInput {
76
- visibleIds: string[]; // Ordered list of visible column IDs
77
- specs: Record<string, ColumnSpec>; // Per-column: weight, minWidth, maxWidth
78
76
  availableWidth: number; // Container width in px
79
- fitMode: "gap" | "fit"; // "gap" leaves filler space, "fit" fills width
77
+ columns: { id: string; spec: ColumnSpec }[]; // Ordered visible columns with per-column weight, minPx, maxPx
78
+ mode: "fit" | "gap"; // "gap" leaves filler space, "fit" fills width
80
79
  }
81
80
 
82
81
  interface EngineOutput {
83
82
  widths: Record<string, number>; // Computed px width per column ID
84
- totalWidth: number; // Sum of all computed widths
85
- overflow: boolean; // true when sum(minWidth) > availableWidth
83
+ fillerWidth: number; // Leftover space returned to the filler pseudo-element
86
84
  }
87
85
  ```
88
86
 
89
- In crisis (`overflow: true`), each column receives its `minWidth` regardless of weight, and a console warning is emitted.
87
+ In crisis (when `sum(minPx) > availableWidth`), the engine squeezes columns proportionally below their minimums (`crisisSqueeze`) and emits a `console.warn`.
90
88
 
91
89
  #### `parseColumnWidth(value: string | number | undefined, availableWidth: number): ParsedWidth`
92
90
 
@@ -94,14 +92,14 @@ Parses a `VcColumn` `width` prop into a concrete pixel value.
94
92
 
95
93
  ```ts
96
94
  type ParsedWidth =
97
- | { type: "px"; value: number } // "200", 200, "200px"
98
- | { type: "pct"; value: number } // "20%" → 0.2 * availableWidth
99
- | { type: "auto"; value: undefined }; // undefined, "auto"
95
+ | { type: "px"; desiredPx: number } // "200", 200, "200px"
96
+ | { type: "percent"; desiredPx: number } // "20%" → 0.2 * availableWidth
97
+ | { type: "auto"; desiredPx: null }; // undefined, "auto"
100
98
  ```
101
99
 
102
- #### `buildInitialWeights(parsed: ParsedWidth[], availableWidth: number): Record<string, number>`
100
+ #### `buildInitialWeights(parsed: { id: string; parsed: ParsedWidth }[], availableWidth: number): Record<string, number>`
103
101
 
104
- Converts an array of `ParsedWidth` values (one per column) into initial weights. Auto columns receive an equal share of the space not claimed by px/% columns.
102
+ Converts an array of `{ id, parsed }` entries (one per column) into initial weights. Auto columns receive an equal share of the space not claimed by px/% columns.
105
103
 
106
104
  ```ts
107
105
  // Example: three columns — 200px, 20%, auto — with 800px available