@vc-shell/vc-app-skill 2.1.0 → 2.2.0-pr260.a8bd3a7

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 (141) hide show
  1. package/package.json +1 -1
  2. package/runtime/VERSION +1 -1
  3. package/runtime/agents/migration-agent.md +4 -2
  4. package/runtime/knowledge/docs/_BUILD_HASH.md +1 -1
  5. package/runtime/knowledge/docs/core/api/platform.docs.md +20 -18
  6. package/runtime/knowledge/docs/core/blade-navigation/blade-nav-composables.docs.md +43 -34
  7. package/runtime/knowledge/docs/core/composables/useAppBarMobileButtons/useAppBarMobileButtons.docs.md +5 -3
  8. package/runtime/knowledge/docs/core/composables/useAppBarWidget/useAppBarWidget.docs.md +12 -10
  9. package/runtime/knowledge/docs/core/composables/useAppInsights/useAppInsights.docs.md +7 -5
  10. package/runtime/knowledge/docs/core/composables/useAssets/useAssets.docs.md +8 -6
  11. package/runtime/knowledge/docs/core/composables/useAssetsManager/useAssetsManager.docs.md +3 -1
  12. package/runtime/knowledge/docs/core/composables/useAsync/useAsync.docs.md +1 -1
  13. package/runtime/knowledge/docs/core/composables/useBladeRegistry/useBladeRegistry.docs.md +8 -5
  14. package/runtime/knowledge/docs/core/composables/useBladeWidgets/index.docs.md +12 -12
  15. package/runtime/knowledge/docs/core/composables/useBreadcrumbs/useBreadcrumbs.docs.md +3 -3
  16. package/runtime/knowledge/docs/core/composables/useConnectionStatus/useConnectionStatus.docs.md +4 -3
  17. package/runtime/knowledge/docs/core/composables/useDynamicProperties/useDynamicProperties.docs.md +1 -0
  18. package/runtime/knowledge/docs/core/composables/useFunctions/useFunctions.docs.md +3 -3
  19. package/runtime/knowledge/docs/core/composables/useKeyboardNavigation/useKeyboardNavigation.docs.md +5 -4
  20. package/runtime/knowledge/docs/core/composables/useLanguages/useLanguages.docs.md +3 -3
  21. package/runtime/knowledge/docs/core/composables/useLoading/useLoading.docs.md +2 -0
  22. package/runtime/knowledge/docs/core/composables/useModificationTracker/useModificationTracker.docs.md +1 -2
  23. package/runtime/knowledge/docs/core/composables/useNotifications/useNotifications.docs.md +1 -1
  24. package/runtime/knowledge/docs/core/composables/usePermissions/usePermissions.docs.md +3 -3
  25. package/runtime/knowledge/docs/core/composables/usePlatformLocaleSync/usePlatformLocaleSync.docs.md +1 -0
  26. package/runtime/knowledge/docs/core/composables/usePopup/usePopup.docs.md +1 -1
  27. package/runtime/knowledge/docs/core/composables/useResponsive/useResponsive.docs.md +2 -2
  28. package/runtime/knowledge/docs/core/composables/useSettings/useSettings.docs.md +2 -1
  29. package/runtime/knowledge/docs/core/composables/useSettingsMenu/useSettingsMenu.docs.md +18 -18
  30. package/runtime/knowledge/docs/core/composables/useSidebarState/useSidebarState.docs.md +3 -3
  31. package/runtime/knowledge/docs/core/composables/useSlowNetworkDetection/useSlowNetworkDetection.docs.md +10 -7
  32. package/runtime/knowledge/docs/core/composables/useTheme/useTheme.docs.md +7 -7
  33. package/runtime/knowledge/docs/core/composables/useToolbar/useToolbar.docs.md +18 -12
  34. package/runtime/knowledge/docs/core/composables/useUser/useUser.docs.md +2 -2
  35. package/runtime/knowledge/docs/core/composables/useUserManagement/useUserManagement.docs.md +20 -20
  36. package/runtime/knowledge/docs/core/composables/useWidgets/useWidgets.docs.md +15 -24
  37. package/runtime/knowledge/docs/core/directives/loading/loading.docs.md +2 -2
  38. package/runtime/knowledge/docs/core/notifications/composables/useBladeNotifications.docs.md +1 -2
  39. package/runtime/knowledge/docs/core/notifications/composables/useBroadcastFilter.docs.md +3 -3
  40. package/runtime/knowledge/docs/core/notifications/composables/useNotificationStore.docs.md +19 -18
  41. package/runtime/knowledge/docs/core/notifications/notifications.docs.md +50 -30
  42. package/runtime/knowledge/docs/core/plugins/ai-agent/ai-agent.docs.md +30 -11
  43. package/runtime/knowledge/docs/core/plugins/extension-points/extension-points.docs.md +1 -1
  44. package/runtime/knowledge/docs/core/plugins/global-error-handler/global-error-handler.docs.md +2 -3
  45. package/runtime/knowledge/docs/core/plugins/modularity/modularity.docs.md +26 -26
  46. package/runtime/knowledge/docs/core/plugins/permissions/permissions.docs.md +2 -3
  47. package/runtime/knowledge/docs/core/plugins/signalR/signalR.docs.md +11 -50
  48. package/runtime/knowledge/docs/core/plugins/validation/validation.docs.md +9 -6
  49. package/runtime/knowledge/docs/core/services/services.docs.md +15 -13
  50. package/runtime/knowledge/docs/core/types/types.docs.md +37 -40
  51. package/runtime/knowledge/docs/core/utilities/date/date-utilities.docs.md +1 -2
  52. package/runtime/knowledge/docs/core/utilities/shared-utilities.docs.md +21 -30
  53. package/runtime/knowledge/docs/core/utilities/thumbnail/thumbnail.docs.md +2 -2
  54. package/runtime/knowledge/docs/core/utilities/utilities.docs.md +9 -8
  55. package/runtime/knowledge/docs/injection-keys.docs.md +6 -11
  56. package/runtime/knowledge/docs/modules/assets/assets-details.docs.md +7 -7
  57. package/runtime/knowledge/docs/modules/assets-manager/assets-manager.docs.md +1 -1
  58. package/runtime/knowledge/docs/shell/_internal/popup/common/popup-common.docs.md +20 -12
  59. package/runtime/knowledge/docs/shell/auth/ChangePasswordPage/change-password-page.docs.md +10 -10
  60. package/runtime/knowledge/docs/shell/auth/ForgotPasswordPage/forgot-password-page.docs.md +6 -6
  61. package/runtime/knowledge/docs/shell/auth/InvitePage/invite-page.docs.md +4 -4
  62. package/runtime/knowledge/docs/shell/auth/LoginPage/login-page.docs.md +16 -14
  63. package/runtime/knowledge/docs/shell/auth/ResetPasswordPage/reset-password-page.docs.md +1 -1
  64. package/runtime/knowledge/docs/shell/auth/sign-in/sign-in.docs.md +12 -11
  65. package/runtime/knowledge/docs/shell/components/change-password/change-password.docs.md +10 -3
  66. package/runtime/knowledge/docs/shell/components/change-password-button/change-password-button.docs.md +3 -3
  67. package/runtime/knowledge/docs/shell/components/error-interceptor/error-interceptor.docs.md +9 -2
  68. package/runtime/knowledge/docs/shell/components/language-selector/language-selector.docs.md +4 -2
  69. package/runtime/knowledge/docs/shell/components/logout-button/logout-button.docs.md +1 -1
  70. package/runtime/knowledge/docs/shell/components/notification-dropdown/notification-dropdown.docs.md +35 -31
  71. package/runtime/knowledge/docs/shell/components/notification-template/notification-template.docs.md +17 -11
  72. package/runtime/knowledge/docs/shell/components/settings-menu/settings-menu.docs.md +8 -7
  73. package/runtime/knowledge/docs/shell/components/settings-menu-item/settings-menu-item.docs.md +23 -21
  74. package/runtime/knowledge/docs/shell/components/sidebar/sidebar.docs.md +5 -3
  75. package/runtime/knowledge/docs/shell/components/theme-selector/theme-selector.docs.md +7 -7
  76. package/runtime/knowledge/docs/shell/components/user-dropdown-button/user-dropdown-button.docs.md +11 -11
  77. package/runtime/knowledge/docs/shell/dashboard/dashboard-charts/dashboard-charts.docs.md +28 -16
  78. package/runtime/knowledge/docs/shell/dashboard/dashboard-widget-card/dashboard-widget-card.docs.md +17 -19
  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} +24 -27
  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 +509 -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 +3 -3
  138. package/runtime/knowledge/docs/ui/composables/useTableSelection.docs.md +4 -4
  139. package/runtime/knowledge/docs/ui/composables/useTableSort.docs.md +2 -3
  140. package/runtime/knowledge/migration-prompts/table-url-state-migration.md +221 -0
  141. package/runtime/vc-app.md +1 -0
@@ -21,7 +21,7 @@ This plugin auto-registers every rule from `@vee-validate/rules` (required, emai
21
21
  ## When to Use
22
22
 
23
23
  - Validate form fields in blades using `<Field>` components or `useField()` with declarative rules (`required`, `email`, `min`, etc.)
24
- - Use custom vc-shell rules: image dimensions (`validateImageMinSize`), file weight, date comparisons, BigInt safety
24
+ - Use custom vc-shell rules: image dimensions (`mindimensions`), file weight, date comparisons, BigInt safety
25
25
  - When NOT to use: for API-level validation -- that belongs server-side; for simple presence checks on non-form data -- use plain conditionals
26
26
 
27
27
  The framework imports this module during setup. No manual installation is needed by module developers.
@@ -34,11 +34,11 @@ The framework imports this module during setup. No manual installation is needed
34
34
 
35
35
  // Under the hood, the plugin does:
36
36
  import { defineRule } from "vee-validate";
37
- import * as allRules from "@vee-validate/rules";
37
+ import { all } from "@vee-validate/rules";
38
38
 
39
39
  // Register all standard rules
40
- Object.entries(allRules).forEach(([name, rule]) => {
41
- defineRule(name, rule);
40
+ Object.keys(all).forEach((rule) => {
41
+ defineRule(rule, all[rule]);
42
42
  });
43
43
 
44
44
  // Then register custom vc-shell rules
@@ -187,7 +187,7 @@ const { handleSubmit, errors } = useForm({
187
187
  },
188
188
  });
189
189
 
190
- const onSubmit = handleSubmit((values) => {
190
+ const onSubmit = handleSubmit(async (values) => {
191
191
  // values is fully validated here
192
192
  await saveProduct(values);
193
193
  });
@@ -197,12 +197,15 @@ const onSubmit = handleSubmit((values) => {
197
197
 
198
198
  All custom rules use localized error messages via `i18n.global.t()`. To customize messages, add the corresponding keys to your module's locale file:
199
199
 
200
+ `mindimensions` only treats files with a `.jpg`, `.svg`, `.jpeg`, `.png`, `.bmp`, or `.gif` extension as images; any other file fails with `messages.min_dimensions.not_image_error`.
201
+
200
202
  ```typescript
201
203
  // locales/en.ts
202
204
  export default {
203
205
  messages: {
204
206
  min_dimensions: {
205
207
  error: "Image must be at least {width}x{height} pixels",
208
+ not_image_error: "File is not a supported image",
206
209
  },
207
210
  file_weight: "File must not exceed {size} KB",
208
211
  before: "Date must be before {target}",
@@ -241,5 +244,5 @@ Do not forget that `mindimensions` and `fileWeight` rules work with File objects
241
244
 
242
245
  - [vee-validate docs](https://vee-validate.logaretm.com/v4/) -- upstream validation library
243
246
  - `framework/core/plugins/i18n/` -- error messages use `i18n.global.t()` for localization
244
- - Locale keys: `messages.min_dimensions.error`, `messages.file_weight`, `messages.before`, `messages.after`, `messages.bigint`
247
+ - Locale keys: `messages.min_dimensions.error`, `messages.min_dimensions.not_image_error`, `messages.file_weight`, `messages.before`, `messages.after`, `messages.bigint`
245
248
  - `framework/ui/components/molecules/vc-field/` -- VcField wrapper component for validation display
@@ -32,17 +32,17 @@ Every service follows the same architecture:
32
32
 
33
33
  ## Services
34
34
 
35
- | Service | Factory | Module-level API | Key Type |
36
- | ------------------------------ | ------------------------------------ | --------------------------------------------------------------- | ---------------------- |
37
- | **MenuService** | `createMenuService()` | `addMenuItem()`, `removeRegisteredMenuItem()`, `setMenuBadge()` | `MenuItem` |
38
- | **WidgetService** | `createWidgetService()` | `registerWidget()`, `registerExternalWidget()` | `IWidget` |
39
- | **ToolbarService** | `createToolbarService()` | `registerToolbarItem()` | `IToolbarItem` |
40
- | **DashboardService** | `createDashboardService()` | `registerDashboardWidget()` | `DashboardWidget` |
41
- | **SettingsMenuService** | `createSettingsMenuService()` | `addSettingsMenuItem()` | `ISettingsMenuItem` |
42
- | **AppBarWidgetService** | `createAppBarWidgetService()` | `addAppBarWidget()` | `AppBarWidget` |
43
- | **AppBarMobileButtonsService** | `createAppBarMobileButtonsService()` | (direct API) | `AppBarButtonContent` |
44
- | **GlobalSearchService** | `createGlobalSearchService()` | (direct API) | per-blade search state |
45
- | **LanguageService** | `createLanguageService()` | (direct API) | locale strings |
35
+ | Service | Factory | Module-level API | Key Type |
36
+ | ------------------------------ | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- |
37
+ | **MenuService** | `createMenuService()` | `addMenuItem()`, `removeRegisteredMenuItem()`, `setMenuBadge()`, `removeMenuBadge()`, `getMenuBadge()`, `getMenuBadges()` | `MenuItem` |
38
+ | **WidgetService** | `createWidgetService()` | `registerWidget()`, `registerExternalWidget()` | `IWidget` / `IExternalWidgetRegistration` |
39
+ | **ToolbarService** | `createToolbarService()` | `registerToolbarItem()` | `IToolbarItem` |
40
+ | **DashboardService** | `createDashboardService({ hasAccess? })` | `registerDashboardWidget()` | `DashboardWidget` |
41
+ | **SettingsMenuService** | `createSettingsMenuService()` | `addSettingsMenuItem()` | `ISettingsMenuItem` |
42
+ | **AppBarWidgetService** | `createAppBarWidgetService()` | `addAppBarWidget()` | `AppBarWidget` |
43
+ | **AppBarMobileButtonsService** | `createAppBarMobileButtonsService()` | (direct API) | `AppBarButtonContent` |
44
+ | **GlobalSearchService** | `createGlobalSearchService()` | (direct API) | per-blade search state |
45
+ | **LanguageService** | `createLanguageService()` | (direct API) | locale strings |
46
46
 
47
47
  ## Usage
48
48
 
@@ -59,7 +59,9 @@ addMenuItem({
59
59
  priority: 10,
60
60
  });
61
61
 
62
- registerWidget({ id: "order-stats", component: OrderStatsWidget }, "OrderDetails");
62
+ // The `component` field on IWidget is deprecated; prefer headless widgets (via
63
+ // `useBladeWidgets()`) or `registerExternalWidget()`.
64
+ registerWidget({ id: "order-stats", headless: { icon: "lucide-chart-bar" } }, "OrderDetails");
63
65
  ```
64
66
 
65
67
  ### Using inside a component
@@ -76,7 +78,7 @@ const { toolbarItems } = useToolbar(); // toolbar items for current blade
76
78
  ```typescript
77
79
  import { setMenuBadge, removeMenuBadge } from "@vc-shell/framework";
78
80
 
79
- setMenuBadge("OrdersList", { value: computed(() => pendingCount.value) });
81
+ setMenuBadge("OrdersList", { content: computed(() => pendingCount.value) });
80
82
  removeMenuBadge("OrdersList");
81
83
  ```
82
84
 
@@ -27,60 +27,58 @@ All types are re-exported from `@vc-shell/framework`, so module developers impor
27
27
 
28
28
  ### Menu System (`menu-types.ts`)
29
29
 
30
- | Type | Description |
31
- | --------------------- | ---------------------------------------------------------------------------------------------------------------------- |
32
- | `MenuItemConfig` | Configuration for registering a menu item: `title`, `icon`, `priority`, `permissions`, `group`/`groupConfig`, `badge`. |
33
- | `MenuItemBadge` | Badge display config: `content` (static, ref, computed, or function), `variant`, `isDot`. |
34
- | `MenuItemBadgeConfig` | Union: full `MenuItemBadge` object or shorthand `number \| string \| Ref \| ComputedRef \| function`. |
35
- | `MenuItem` | Runtime menu item extending `MenuItemConfig` with `routeId`, `url`, `children[]`, `groupIcon`, `groupId`. |
30
+ | Type | Description |
31
+ | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
32
+ | `MenuItemConfig` | Configuration for registering a menu item: `title`, `icon`, `priority`, `permissions`, `groupConfig`, `badge`. (`group` and `inGroupPriority` are deprecated — use `groupConfig`.) |
33
+ | `MenuItemBadge` | Badge display config: `content` (static, ref, computed, or function), `variant`, `isDot`. |
34
+ | `MenuItemBadgeConfig` | Union: full `MenuItemBadge` object or shorthand `number \| string \| Ref \| ComputedRef \| function`. |
35
+ | `MenuItem` | Runtime menu item extending `MenuItemConfig` with `routeId`, `url`, `children[]`, `groupId`. (`groupIcon` is deprecated — use `groupConfig.icon`.) |
36
36
 
37
37
  ### Toolbar
38
38
 
39
- | Type | Description |
40
- | ---------------- | ------------------------------------------------------------------------------------------------------------------ |
41
- | `IBladeToolbar` | Toolbar button config: `id`, `icon`, `disabled`, `title`, `isVisible`, `clickHandler`, `separator`, `permissions`. |
42
- | `ToolbarMenu<T>` | Generic toolbar menu item that infers component props from the provided component type. |
39
+ | Type | Description |
40
+ | --------------- | ------------------------------------------------------------------------------------------------------------------ |
41
+ | `IBladeToolbar` | Toolbar button config: `id`, `icon`, `disabled`, `title`, `isVisible`, `clickHandler`, `separator`, `permissions`. |
43
42
 
44
43
  ### Table Columns
45
44
 
46
- | Type | Description |
47
- | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
48
- | `ITableColumnsBase` | Column definition: `id`, `title`, `width`, `field`, `type` (money, date, image, status, etc.), `sortable`, `editable`, `rules`, `filter`, `mobilePosition`, `mobileVisible`. |
49
- | `ITableColumns` | Union of `ITableColumnsBase` with specialized image and money column variants. |
50
- | `IColumnFilterConfig` | Column filter: `true` (text), `string` (custom field), `{ options }` (select), `{ range }` (date range). |
51
- | `IFilterOption` | Select filter option: `{ value, label }`. |
45
+ | Type | Description |
46
+ | --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
47
+ | `ITableColumnsBase` | Column definition: `id`, `title`, `width`, `field`, `type` (`money`, `date-ago`, `date`, `time`, `image`, `date-time`, `status`, `status-icon`, `number`, `link`, `html`), `sortable`, `editable`, `rules`, `filter`, `mobilePosition`, `mobileVisible`. |
48
+ | `ITableColumns` | Union of `ITableColumnsBase` with specialized image and money column variants. |
49
+ | `IColumnFilterConfig` | Column filter: `true` (text), `string` (custom field), `{ options }` (select), `{ range }` (date range). |
50
+ | `IFilterOption` | Select filter option: `{ value, label }`. |
52
51
 
53
52
  ### Assets
54
53
 
55
- | Type | Description |
56
- | ------------------ | ------------------------------------------------------------------------------------------ |
57
- | `ICommonAsset` | Asset record: `url`, `relativeUrl`, `title`, `name`, `size`, `sortOrder`, `typeId`, dates. |
58
- | `AssetsHandler<T>` | Asset operations: `upload()`, `edit()`, `remove()`, `loading` ref, `noRemoveConfirmation`. |
54
+ | Type | Description |
55
+ | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
56
+ | `ICommonAsset` | Alias of `AssetLike`: declares only `url`, `name`, `sortOrder` plus an open `[key: string]: any` index signature (other fields are untyped passthrough). **Deprecated** (removed in v3.0) — use `AssetLike`. |
57
+ | `AssetsHandler<T>` | Asset operations: `upload()`, `edit()`, `remove()`, `loading` ref, `noRemoveConfirmation`. **Deprecated** (removed in v3.0) — use `UseAssetsManagerReturn`. |
59
58
 
60
59
  ### Service Abstractions (`services.ts`)
61
60
 
62
- | Type | Description |
63
- | ------------------------------ | -------------------------------------------------------------------------------------------------- |
64
- | `ServiceLifecycle<T>` | Service create/provide/cleanup lifecycle. |
65
- | `PreregistrationQueue<T>` | Queue for items registered before a service initializes: `register()`, `flush()`, `clear()`. |
66
- | `RegistryService<TKey, TItem>` | Generic registry: `register()`, `unregister()`, `get()`, `has()`, `getAll()`, `clear()`. |
67
- | `ListService<T>` | Reactive list: `items` ref, `add()`, `remove()`, `find()`, `filter()`. |
68
- | `OrderedListService<T>` | Extends `ListService` with `reorder()` and `getSorted()`. |
69
- | `ObservableService<T>` | Subscribe/getValue pattern for change observation. |
70
- | `ServiceResult<T>` | Async operation result: `success`, `data?`, `error?` with code/message/details. |
71
- | `WidgetRegistration` | Widget entry: `id`, `component`, `props`, `order`, `isVisible`. |
72
- | `MenuItemRegistration` | Menu item entry: `id`, `title`, `icon`, `priority`, `permissions`, `routeId`, `group`, `children`. |
73
- | `ToolbarItemRegistration` | Toolbar item entry: `id`, `title`, `icon`, `order`, `disabled`, `clickHandler`, `permissions`. |
61
+ | Type | Description |
62
+ | ------------------------------ | --------------------------------------------------------------------------------------------------------- |
63
+ | `ServiceLifecycle<T>` | Service create/provide/cleanup lifecycle. |
64
+ | `PreregistrationQueue<T>` | Queue for items registered before a service initializes: `register()`, `flush()`, `clear()`. |
65
+ | `RegistryService<TKey, TItem>` | Generic registry: `register()`, `unregister()`, `get()`, `has()`, `getAll()`, `clear()`. |
66
+ | `ListService<T>` | Reactive list: `items` ref, `add()`, `remove()`, `find()`, `filter()`. |
67
+ | `OrderedListService<T>` | Extends `ListService` with `reorder()` and `getSorted()`. |
68
+ | `ObservableService<T>` | Subscribe/getValue pattern for change observation. |
69
+ | `ServiceResult<T>` | Async operation result: `success`, `data?`, `error?` with code/message/details. |
70
+ | `WidgetRegistration` | Widget entry: `id`, `component`, `props`, `order`, `isVisible`. |
71
+ | `MenuItemRegistration` | Menu item entry: `id`, `title`, `icon`, `priority`, `permissions`, `routeId`, `url`, `group`, `children`. |
72
+ | `ToolbarItemRegistration` | Toolbar item entry: `id`, `title`, `icon`, `order`, `disabled`, `clickHandler`, `permissions`. |
74
73
 
75
74
  ### Other
76
75
 
77
- | Type | Description |
78
- | --------------------------------- | --------------------------------------------------------------------------------------------- |
79
- | `IBladeDropdownItem` | Blade dropdown option: `id`, `title`, `icon`, `clickHandler`. |
80
- | `IMenuItem<T>` | Generic menu item with optional component slot. |
81
- | `NotificationTemplateConstructor` | Component constructor with a `notifyType` static field. |
82
- | `IActionBuilderResult<T>` | Row action definition: `icon`, `title`, `type` (danger/success/warning/info), `clickHandler`. |
83
- | `RequestPasswordResult` | Password reset result: `succeeded`, `error`, `errorCode`. |
76
+ | Type | Description |
77
+ | ------------------------- | --------------------------------------------------------------------------------------------- |
78
+ | `IBladeDropdownItem` | Blade dropdown option: `id`, `title`, `icon`, `clickHandler`. |
79
+ | `IMenuItem<T>` | Generic menu item with optional component slot. |
80
+ | `IActionBuilderResult<T>` | Row action definition: `icon`, `title`, `type` (danger/success/warning/info), `clickHandler`. |
81
+ | `RequestPasswordResult` | Password reset result: `succeeded`, `error`, `errorCode`. |
84
82
 
85
83
  ## Usage Examples
86
84
 
@@ -94,7 +92,6 @@ const columns: ITableColumns[] = [
94
92
  id: "name",
95
93
  title: "Product Name",
96
94
  sortable: true,
97
- type: "text",
98
95
  },
99
96
  {
100
97
  id: "price",
@@ -103,5 +103,4 @@ The locale resolver tries the full code first (e.g., `pt-BR`), then the base lan
103
103
 
104
104
  ## Related
105
105
 
106
- - `framework/ui/components/organisms/vc-table/components/cells/` -- cell renderers use these for date/datetime/date-ago columns
107
- - `framework/shared/modules/assets-manager/` -- uses `formatDateRelative` for asset timestamps
106
+ - `framework/ui/components/organisms/vc-data-table/components/cells/` -- cell renderers use these for date/datetime/date-ago columns
@@ -11,39 +11,39 @@ Helper functions and TypeScript type utilities used across the shared layer of t
11
11
 
12
12
  ## Overview
13
13
 
14
- This directory provides small, focused utility modules for asset handling, color manipulation, badge formatting, and Vue component type extraction.
14
+ This directory provides small, focused utility modules for asset handling, color manipulation, and badge formatting.
15
15
 
16
16
  ## Exports
17
17
 
18
- | Export | Module | Description |
19
- | ----------------------------- | --------------------- | --------------------------------------------------------------------------- |
20
- | `isImage(name)` | `assets.ts` | Returns `true` if the file extension is an image (png, jpg, jpeg, svg, gif) |
21
- | `getFileThumbnail(name)` | `assets.ts` | Returns a Bootstrap icon class for the file type (e.g., `bi-filetype-pdf`) |
22
- | `readableSize(bytes)` | `assets.ts` | Formats byte count as human-readable string (e.g., `"1.5 MB"`) |
23
- | `convertColorNameToHex(name)` | `colorUtils.ts` | Converts a CSS color name to hex using the Canvas API |
24
- | `isValidHexColor(value)` | `colorUtils.ts` | Validates a 6-digit hex color string |
25
- | `normalizeHexColor(hex)` | `colorUtils.ts` | Ensures hex string starts with `#` |
26
- | `formatBadgeCount(value)` | `formatBadgeCount.ts` | Truncates numbers > 99 to `"99+"` for badge display |
27
- | `ComponentProps<T>` | `vueUtils.ts` | Extracts props type from a Vue component |
28
- | `ComponentSlots<T>` | `vueUtils.ts` | Extracts slots type from a Vue component |
29
- | `ComponentEmit<T>` | `vueUtils.ts` | Extracts emit type from a Vue component |
18
+ | Export | Module | Description |
19
+ | ----------------------------- | --------------------- | ---------------------------------------------------------------------------- |
20
+ | `isImage(name)` | `assets.ts` | Returns `true` if the file extension is an image (png, jpg, jpeg, svg, gif) |
21
+ | `readableSize(bytes)` | `assets.ts` | Formats byte count as human-readable string (e.g., `"1.5 MB"`) |
22
+ | `getExtensionColor(name)` | `assets.ts` | Returns a CSS color for the file type, falling back to `var(--neutrals-400)` |
23
+ | `getExtensionLabel(name)` | `assets.ts` | Returns the uppercased file extension, or `"FILE"` when unknown |
24
+ | `convertColorNameToHex(name)` | `colorUtils.ts` | Converts a CSS color name to hex using the Canvas API |
25
+ | `isValidHexColor(value)` | `colorUtils.ts` | Validates a 6-digit hex color string |
26
+ | `normalizeHexColor(hex)` | `colorUtils.ts` | Ensures hex string starts with `#` |
27
+ | `formatBadgeCount(value)` | `formatBadgeCount.ts` | Truncates numbers > 99 to `"99+"` for badge display |
30
28
 
31
29
  ## Usage
32
30
 
33
31
  ### Asset helpers
34
32
 
35
33
  ```typescript
36
- import { isImage, getFileThumbnail, readableSize } from "@vc-shell/framework";
34
+ import { isImage, readableSize, getExtensionColor, getExtensionLabel } from "@vc-shell/framework";
37
35
 
38
36
  isImage("photo.jpg"); // true
39
37
  isImage("document.pdf"); // false
40
38
 
41
- getFileThumbnail("report.xlsx"); // "bi-filetype-xls"
42
- getFileThumbnail("archive.zip"); // "bi-file-zip"
43
- getFileThumbnail("unknown.abc"); // "bi-file-earmark"
44
-
45
39
  readableSize(1536); // "1.5 KB"
46
40
  readableSize(0); // "0 Bytes"
41
+
42
+ getExtensionColor("report.pdf"); // "#e74c3c"
43
+ getExtensionColor("unknown.abc"); // "var(--neutrals-400)"
44
+
45
+ getExtensionLabel("report.xlsx"); // "XLSX"
46
+ getExtensionLabel(undefined); // "FILE"
47
47
  ```
48
48
 
49
49
  ### Color utilities
@@ -71,23 +71,14 @@ formatBadgeCount(150); // "99+"
71
71
  formatBadgeCount(undefined); // undefined
72
72
  ```
73
73
 
74
- ### Vue type utilities
75
-
76
- ```typescript
77
- import type { ComponentProps, ComponentSlots } from "@vc-shell/framework";
78
-
79
- type MyProps = ComponentProps<typeof MyComponent>;
80
- type MySlots = ComponentSlots<typeof MyComponent>;
81
- ```
82
-
83
74
  ## Tips
84
75
 
85
76
  - `convertColorNameToHex` creates a temporary Canvas element -- only use in browser context, not SSR.
86
77
  - `readableSize` defaults to 2 decimal places; pass a second argument to change precision.
87
78
  - `formatBadgeCount` is used by `VcWidget` and `WidgetDropdownItem` for consistent badge truncation.
88
- - The `vueUtils.ts` types work with both `defineComponent` and `<script setup>` components.
79
+ - `getExtensionColor` / `getExtensionLabel` back the non-image file badges in assets-manager and assets-details.
89
80
 
90
81
  ## Related
91
82
 
92
- - `framework/shared/modules/assets-manager/` -- uses asset helpers for file display
93
- - `framework/ui/components/organisms/vc-table/components/` -- VcWidget uses `formatBadgeCount`
83
+ - `framework/modules/assets-manager/` -- uses asset helpers for file display
84
+ - `framework/ui/components/atoms/vc-widget/` -- VcWidget uses `formatBadgeCount`
@@ -42,7 +42,7 @@ Transforms full-size image URLs into thumbnail variants by appending size suffix
42
42
  Transforms an image URL by inserting a size suffix before the file extension.
43
43
 
44
44
  ```ts
45
- import { getThumbnailUrl } from "@core/utilities/thumbnail";
45
+ import { getThumbnailUrl } from "@vc-shell/framework";
46
46
 
47
47
  getThumbnailUrl("https://cdn.example.com/photo.jpg", "sm");
48
48
  // → "https://cdn.example.com/photo_sm.jpg"
@@ -69,7 +69,7 @@ getThumbnailUrl(undefined, "sm");
69
69
  Maps a CSS pixel display size to the best-fit thumbnail preset. Picks the smallest thumbnail that is >= the display size.
70
70
 
71
71
  ```ts
72
- import { getBestThumbnailSize } from "@core/utilities/thumbnail";
72
+ import { getBestThumbnailSize } from "@vc-shell/framework";
73
73
 
74
74
  getBestThumbnailSize(48); // → "64x64"
75
75
  getBestThumbnailSize(96); // → "128x128"
@@ -31,7 +31,8 @@ camelToSnake("myPropName"); // "my_prop_name"
31
31
  camelToSnake("backgroundColor"); // "background_color"
32
32
 
33
33
  camelize("some-prop-name"); // "somePropName"
34
- camelize("SOME_CONSTANT"); // "sOMECONSTANT" (splits on non-word chars)
34
+ camelize("some prop.name"); // "somePropName" (splits on non-word chars)
35
+ camelize("SOME_CONSTANT"); // "SOME_CONSTANT" (unchanged: underscore is a word char)
35
36
 
36
37
  kebabToCamel("vc-data-table"); // "vcDataTable"
37
38
  kebabToCamel("my-component-name"); // "myComponentName"
@@ -65,9 +66,9 @@ formatDateRelative(new Date(Date.now() - 3600000)); // "about 1 hour ago"
65
66
  formatDateRelative("2024-01-15", "de"); // "vor etwa 2 Jahren"
66
67
 
67
68
  // Formatted dates using Moment.js-style patterns (auto-converted to date-fns)
68
- formatDateWithPattern("2024-01-15", "LL"); // "January 15, 2024"
69
+ formatDateWithPattern("2024-01-15", "LL"); // "Jan 15, 2024"
69
70
  formatDateWithPattern("2024-06-01", "DD/MM/YYYY"); // "01/06/2024"
70
- formatDateWithPattern("2024-01-15", "LL", "de"); // "15. Januar 2024"
71
+ formatDateWithPattern("2024-01-15", "LL", "de"); // "15. Jan. 2024"
71
72
 
72
73
  // Format conversion
73
74
  convertMomentFormat("YYYY-MM-DD"); // "yyyy-MM-dd"
@@ -118,7 +119,7 @@ if (isFrameworkError(err)) {
118
119
  console.log(err.code); // e.g. "INJECTION_ERROR"
119
120
  }
120
121
 
121
- throw new InjectionError("WidgetService"); // "WidgetService is not provided. ..."
122
+ throw new InjectionError("WidgetService"); // "WidgetService not provided. Make sure to call the corresponding 'provide' function."
122
123
  ```
123
124
 
124
125
  ## ID Generation
@@ -151,11 +152,11 @@ Factory-based logger with level filtering. Default level: `debug` in dev, `warn`
151
152
  import { createLogger, loggers } from "@vc-shell/framework";
152
153
 
153
154
  const log = createLogger("OrdersModule");
154
- log.info("Module initialized"); // [OrdersModule] Module initialized
155
- log.error("Failed to load orders", error); // [OrdersModule] Failed to load orders Error: ...
155
+ log.info("Module initialized"); // [@vc-shell/framework#OrdersModule] Module initialized
156
+ log.error("Failed to load orders", error); // [@vc-shell/framework#OrdersModule] Failed to load orders Error: ...
156
157
 
157
158
  const subLog = log.child("DataSync");
158
- subLog.debug("Syncing 50 records"); // [OrdersModule:DataSync] Syncing 50 records
159
+ subLog.debug("Syncing 50 records"); // [@vc-shell/framework#OrdersModule:DataSync] Syncing 50 records
159
160
 
160
161
  log.setLevel("error"); // Only errors will be logged
161
162
  ```
@@ -186,4 +187,4 @@ convertMomentFormat("X"); // May not convert as expected
186
187
 
187
188
  - `framework/core/plugins/global-error-handler/` -- uses `parseError()` for global error catching
188
189
  - `framework/core/plugins/i18n/` -- date formatting respects the active locale
189
- - `framework/core/constants/` -- `UI_CONSTANTS.DEBOUNCE_DEFAULT_MS` for standard delays
190
+ - `framework/core/constants/` -- `COMPONENT_DEFAULTS` (from `@core/constants/defaults`) holds standard delays (e.g. `select.debounce` 500, `input.debounce` 0)
@@ -13,7 +13,7 @@ Centralized Vue `InjectionKey` symbols for the vc-shell framework's provide/inje
13
13
 
14
14
  The vc-shell framework uses Vue's provide/inject mechanism extensively to share services, navigation state, and configuration across the component tree. Instead of relying on global singletons or Pinia stores, the framework creates typed injection keys for each service, allowing components to declare their dependencies explicitly.
15
15
 
16
- All keys are defined in a single file (`framework/injection-keys.ts`) to avoid symbol duplication and ensure type safety. The app shell provides these values at the root during bootstrap; components and composables inject them using the corresponding key.
16
+ Most keys live in `framework/injection-keys.ts` to avoid symbol duplication and ensure type safety; a few blade-stack keys such as `BladeDescriptorKey` are declared in `core/blade-navigation/types` and re-exported from there. The app shell provides these values at the root during bootstrap; components and composables inject them using the corresponding key.
17
17
 
18
18
  This centralized approach has several advantages:
19
19
 
@@ -34,6 +34,8 @@ This centralized approach has several advantages:
34
34
  | `BladeContextKey` | `ComputedRef<Record<string, unknown>>` | Blade-exposed context for widgets/extensions |
35
35
  | `BladeRoutesKey` | `BladeRoutesRecord[]` | Registered blade routes |
36
36
  | `InternalRoutesKey` | `BladeRoutesRecord[]` | Internal framework routes |
37
+ | `BladeFormKey` | `BladeFormInjection` | Blade form context shared with child fields |
38
+ | `BladeLoadingKey` | `Ref<boolean>` | Blade loading (skeleton) state for children |
37
39
 
38
40
  ### Notifications
39
41
 
@@ -75,6 +77,8 @@ This centralized approach has several advantages:
75
77
 
76
78
  ### Breakpoints
77
79
 
80
+ > **Deprecated.** All five breakpoint keys below are deprecated in favor of the `useResponsive()` composable. Prefer `useResponsive()` over injecting these keys directly.
81
+
78
82
  | Key | Type | Description |
79
83
  | -------------- | -------------- | ---------------------- |
80
84
  | `IsMobileKey` | `Ref<boolean>` | Mobile breakpoint |
@@ -85,15 +89,6 @@ This centralized approach has several advantages:
85
89
 
86
90
  <!-- internal:start -->
87
91
 
88
- ### Legacy Aliases (Deprecated)
89
-
90
- | Deprecated | Use Instead |
91
- | ------------------- | -------------------- |
92
- | `BladeDescriptor` | `BladeDescriptorKey` |
93
- | `BLADE_BACK_BUTTON` | `BladeBackButtonKey` |
94
- | `TOOLBAR_SERVICE` | `ToolbarServiceKey` |
95
- | `EMBEDDED_MODE` | `EmbeddedModeKey` |
96
-
97
92
  ### Removed Keys (No Replacement)
98
93
 
99
94
  These keys existed in v1.2.3 but have been removed from the framework entirely. There is no drop-in symbol replacement.
@@ -194,5 +189,5 @@ const service = inject(MenuServiceKey); // MenuService instance
194
189
 
195
190
  - `framework/core/services/` -- Service implementations provided via these keys
196
191
  - `framework/core/notifications/store.ts` -- NotificationStore provided via `NotificationStoreKey`
197
- - `framework/shared/components/blade-navigation/types.ts` -- Blade types for navigation keys
192
+ - `framework/core/blade-navigation/types/` -- Blade types for navigation keys
198
193
  - `framework/core/composables/` -- Composable wrappers for most injection keys
@@ -28,13 +28,13 @@ import { AssetsDetailsModule } from "@vc-shell/framework";
28
28
 
29
29
  The blade reads its configuration from `options` via `useBlade<AssetsDetailsOptions>()` (not props):
30
30
 
31
- | Option | Type | Description |
32
- | -------------------- | --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
33
- | `asset` | `AssetLike` | The asset to edit. The blade clones it into local state — the source object is never mutated until `assetEditHandler` is called. |
34
- | `disabled` | `boolean?` | When true, every input is read-only and the toolbar Save/Delete buttons are disabled. |
35
- | `hiddenFields` | `string[]?` | Field names to hide. Supported values: `"name"`, `"altText"`, `"description"`. The header (preview, size, created date, URL) is always shown. |
36
- | `assetEditHandler` | `(asset: AssetLike) => void \| Promise<void>` | Called by the toolbar Save button with the edited copy. The blade closes itself after the handler resolves. |
37
- | `assetRemoveHandler` | `(asset: AssetLike) => Promise<void>` | Called by the toolbar Delete button. The blade closes itself after the handler resolves. |
31
+ | Option | Type | Description |
32
+ | -------------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
33
+ | `asset` | `AssetLike` | The asset to edit. The blade clones it into local state — the source object is never mutated until `assetEditHandler` is called. |
34
+ | `disabled` | `boolean?` | When true, every input is read-only and the toolbar Save/Delete buttons are disabled. |
35
+ | `hiddenFields` | `string[]?` | Field names to hide. Supported values: `"name"`, `"altText"`, `"description"`. The header (preview, size, created date, URL) is always shown. |
36
+ | `assetEditHandler` | `((asset: AssetLike) => void)?` | Called by the toolbar Save button with the edited copy. The blade closes itself after the handler resolves. If omitted, the Save button performs no action and the blade does not close. |
37
+ | `assetRemoveHandler` | `((asset: AssetLike) => Promise<void>)?` | Called by the toolbar Delete button. The blade closes itself after the handler resolves. If omitted, the Delete button performs no action and the blade does not close. |
38
38
 
39
39
  ## Usage
40
40
 
@@ -22,7 +22,7 @@ import { AssetsManagerModule } from "@vc-shell/framework";
22
22
  // Exposes: AssetsManager blade component
23
23
  ```
24
24
 
25
- The module exports `AssetsManagerModule` (a Vue plugin) and the `AssetsManager` component, which is declared as a global component.
25
+ The module exports `AssetsManagerModule` (a Vue plugin) which registers the `AssetsManager` blade in the blade registry. It is opened by name via `openBlade({ name: "AssetsManager" })`, not used as a global `<AssetsManager>` tag.
26
26
 
27
27
  ## Options (via `useBlade`)
28
28
 
@@ -19,18 +19,18 @@ These components provide ready-to-use modal dialogs for common scenarios. Each v
19
19
 
20
20
  The foundation component. Wraps `VcPopup` and adds footer action buttons based on the `mode`.
21
21
 
22
- | Prop | Type | Default | Description |
23
- | -------------------- | ---------------------------- | --------------- | -------------------------------------------------------------- |
24
- | `title` | `string` | -- | Dialog title |
25
- | `variant` | `PopupVariant` | `"default"` | Visual style: `"default"`, `"warning"`, `"error"`, `"info"` |
26
- | `mode` | `"acknowledge" \| "confirm"` | `"acknowledge"` | `acknowledge` = single OK button; `confirm` = Confirm + Cancel |
27
- | `actionLabel` | `string` | `""` | Label for the single button in acknowledge mode |
28
- | `confirmLabel` | `string` | `""` | Label for the confirm button |
29
- | `cancelLabel` | `string` | `""` | Label for the cancel button |
30
- | `confirmAsText` | `boolean` | `false` | Render confirm button as text-only style |
31
- | `closable` | `boolean` | `true` | Show close (X) button in the header |
32
- | `isMobileFullscreen` | `boolean` | `true` | Expand to fullscreen on mobile |
33
- | `closeOnConfirm` | `boolean` | `false` | Auto-close the popup after confirm is emitted |
22
+ | Prop | Type | Default | Description |
23
+ | -------------------- | ---------------------------- | --------------- | ------------------------------------------------------------------------ |
24
+ | `title` | `string` | -- | Dialog title |
25
+ | `variant` | `PopupVariant` | `"default"` | Visual style: `"default"`, `"warning"`, `"error"`, `"success"`, `"info"` |
26
+ | `mode` | `"acknowledge" \| "confirm"` | `"acknowledge"` | `acknowledge` = single OK button; `confirm` = Confirm + Cancel |
27
+ | `actionLabel` | `string` | `""` | Label for the single button in acknowledge mode |
28
+ | `confirmLabel` | `string` | `""` | Label for the confirm button |
29
+ | `cancelLabel` | `string` | `""` | Label for the cancel button |
30
+ | `confirmAsText` | `boolean` | `false` | Render confirm button as text-only style |
31
+ | `closable` | `boolean` | `true` | Show close (X) button in the header |
32
+ | `isMobileFullscreen` | `boolean` | `true` | Expand to fullscreen on mobile |
33
+ | `closeOnConfirm` | `boolean` | `false` | Auto-close the popup after confirm is emitted |
34
34
 
35
35
  Events: `close`, `confirm`
36
36
 
@@ -118,6 +118,14 @@ Slots: `header`, `default`
118
118
  - All popups are fullscreen on mobile by default. Set `isMobileFullscreen="false"` to keep the centered dialog style.
119
119
  - Button labels default to i18n keys: `COMPONENTS.ORGANISMS.VC_POPUP.CONFIRM`, `.CANCEL`, `.OK`.
120
120
 
121
+ ## CSS Variables
122
+
123
+ | Variable | Default | Description |
124
+ | ---------------------------- | ---------------------- | ------------------------- |
125
+ | `--popup-base-confirm-color` | `var(--secondary-700)` | Confirm-button text color |
126
+
127
+ The deprecated `--confirm-button-color` alias is still honored as a fallback: `--popup-base-confirm-color: var(--confirm-button-color, var(--secondary-700))`. Prefer `--popup-base-confirm-color`.
128
+
121
129
  ## Related
122
130
 
123
131
  - `framework/ui/components/organisms/vc-popup/` -- the underlying `VcPopup` organism
@@ -19,12 +19,12 @@ Change password page with current, new, and confirm password fields. Supports a
19
19
 
20
20
  ```vue
21
21
  <template>
22
- <ChangePassword />
22
+ <ChangePasswordPage />
23
23
  </template>
24
24
 
25
25
  <!-- Forced mode (expired password) -->
26
26
  <template>
27
- <ChangePassword forced />
27
+ <ChangePasswordPage forced />
28
28
  </template>
29
29
  ```
30
30
 
@@ -32,7 +32,7 @@ With custom branding:
32
32
 
33
33
  ```vue
34
34
  <template>
35
- <ChangePassword
35
+ <ChangePasswordPage
36
36
  forced
37
37
  logo="/assets/my-company-logo.svg"
38
38
  background="/assets/custom-background.jpg"
@@ -42,24 +42,24 @@ With custom branding:
42
42
 
43
43
  ## Key Props
44
44
 
45
- | Prop | Type | Default | Description |
46
- | ------------ | --------- | ------- | ---------------------------------------------------- |
47
- | `forced` | `boolean` | `false` | Show expired-password info banner and adjusted title |
48
- | `logo` | `string` | - | Override logo image URL |
49
- | `background` | `string` | - | Custom background image URL |
45
+ | Prop | Type | Default | Description |
46
+ | ------------ | --------- | ------- | ---------------------------------------------------------------------------- |
47
+ | `forced` | `boolean` | `false` | Show expired-password info banner and adjusted title |
48
+ | `logo` | `string` | - | Fallback logo image URL (used when the platform UI-settings logo is not set) |
49
+ | `background` | `string` | - | Custom background image URL |
50
50
 
51
51
  ## Recipe: Router Configuration with Forced Mode
52
52
 
53
53
  Set up the route so the login page can redirect here when the password is expired:
54
54
 
55
55
  ```ts
56
- import ChangePassword from "@vc-shell/framework/shared/pages/ChangePasswordPage";
56
+ import { ChangePasswordPage } from "@vc-shell/framework";
57
57
 
58
58
  const routes = [
59
59
  {
60
60
  path: "/change-password",
61
61
  name: "ChangePassword",
62
- component: ChangePassword,
62
+ component: ChangePasswordPage,
63
63
  props: (route) => ({
64
64
  forced: route.query.forced === "true",
65
65
  }),
@@ -38,11 +38,11 @@ With custom branding:
38
38
 
39
39
  ## Key Props
40
40
 
41
- | Prop | Type | Default | Description |
42
- | ------------ | -------------------------- | ------- | -------------------------------------------------- |
43
- | `logo` | `string` | - | Override logo image URL |
44
- | `background` | `string` | - | Custom background image URL |
45
- | `composable` | `() => { forgotPassword }` | - | Custom composable providing `forgotPassword(args)` |
41
+ | Prop | Type | Default | Description |
42
+ | ------------ | -------------------------- | ------- | ---------------------------------------------------------------------------- |
43
+ | `logo` | `string` | - | Fallback logo image URL (used when the platform UI-settings logo is not set) |
44
+ | `background` | `string` | - | Custom background image URL |
45
+ | `composable` | `() => { forgotPassword }` | - | Custom composable providing `forgotPassword(args)` |
46
46
 
47
47
  ## Recipe: Custom Reset Flow with a Different API
48
48
 
@@ -73,7 +73,7 @@ export function useCustomPasswordReset() {
73
73
  Register the page in your application router:
74
74
 
75
75
  ```ts
76
- import ForgotPassword from "@vc-shell/framework/shared/pages/ForgotPasswordPage";
76
+ import { ForgotPassword } from "@vc-shell/framework";
77
77
 
78
78
  const routes = [
79
79
  {