@pimcore/studio-ui-bundle 2026.1.7 → 2026.2.0

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 (24) hide show
  1. package/dist/build/types/src/core/components/avatar/avatar.d.ts +14 -0
  2. package/dist/build/types/src/core/components/avatar/avatar.stories.d.ts +28 -0
  3. package/dist/build/types/src/core/components/image-picker/image-picker.stories.d.ts +38 -0
  4. package/dist/build/types/src/core/components/pipeline/pipeline.d.ts +1 -0
  5. package/dist/build/types/src/core/modules/app/component-registry/component-config.d.ts +6 -0
  6. package/dist/build/types/src/core/modules/app/theme/constants/theme-algorithms.d.ts +17 -0
  7. package/dist/build/types/src/core/modules/app/theme/constants/theme-ids.d.ts +2 -1
  8. package/dist/build/types/src/core/modules/app/theme/dynamic-theme-provider.d.ts +12 -0
  9. package/dist/build/types/src/core/modules/app/theme/dynamic-types/registry/dynamic-type-theme-registry.d.ts +11 -1
  10. package/dist/build/types/src/core/modules/app/theme/dynamic-types/registry/dynamic-type-theme-registry.test.d.ts +10 -0
  11. package/dist/build/types/src/core/modules/app/theme/theme-provider.d.ts +12 -2
  12. package/dist/build/types/src/core/modules/app/theme/theme-slice.d.ts +15 -0
  13. package/dist/build/types/src/core/modules/app/theme/theme-slice.test.d.ts +10 -0
  14. package/dist/build/types/src/core/modules/auth/user/user-api-slice.gen.d.ts +8 -0
  15. package/dist/build/types/src/core/modules/data-object/listing/decorator/column-configuration/view-layer/components/grid/hooks/use-grid-options/tabs/grid-config/forms/advanced-column-form/preview/preview-loader.styles.d.ts +16 -0
  16. package/dist/build/types/src/core/modules/data-object/listing/decorator/column-configuration/view-layer/components/grid/hooks/use-grid-options/tabs/grid-config/forms/advanced-column-form/preview/preview.styles.d.ts +16 -0
  17. package/dist/build/types/src/core/modules/element/listing/decorators/utils/column-configuration/view-layer/components/fields-to-add-panel/fields-to-add-panel.styles.d.ts +1 -0
  18. package/dist/build/types/src/core/modules/user/management/detail/tabs/settings/components/form/appearance-branding-accordion.d.ts +30 -0
  19. package/dist/build/types/src/core/modules/user/user-management-slice.d.ts +9 -0
  20. package/dist/build/types/src/core/modules/widget-manager/services/widget-registry.d.ts +10 -0
  21. package/dist/build/types/src/core/modules/widget-manager/services/widget-registry.test.d.ts +10 -0
  22. package/dist/build/types/src/sdk/components/index.d.ts +1 -0
  23. package/dist/build/types/src/sdk/modules/app/index.d.ts +8 -0
  24. package/package.json +1 -1
@@ -0,0 +1,14 @@
1
+ /**
2
+ * This source file is available under the terms of the
3
+ * Pimcore Open Core License (POCL)
4
+ * Full copyright and license information is available in
5
+ * LICENSE.md which is distributed with this source code.
6
+ *
7
+ * @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
8
+ * @license Pimcore Open Core License (POCL)
9
+ */
10
+ import React from 'react';
11
+ import { type AvatarProps as AntAvatarProps } from 'antd';
12
+ export interface AvatarProps extends AntAvatarProps {
13
+ }
14
+ export declare const Avatar: ({ icon, size, ...props }: AvatarProps) => React.JSX.Element;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * This source file is available under the terms of the
3
+ * Pimcore Open Core License (POCL)
4
+ * Full copyright and license information is available in
5
+ * LICENSE.md which is distributed with this source code.
6
+ *
7
+ * @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
8
+ * @license Pimcore Open Core License (POCL)
9
+ */
10
+ import { type Meta } from '@storybook/react';
11
+ declare const config: Meta;
12
+ export default config;
13
+ export declare const _default: {};
14
+ export declare const Small: {
15
+ args: {
16
+ size: string;
17
+ };
18
+ };
19
+ export declare const Large: {
20
+ args: {
21
+ size: string;
22
+ };
23
+ };
24
+ export declare const Square: {
25
+ args: {
26
+ shape: string;
27
+ };
28
+ };
@@ -0,0 +1,38 @@
1
+ /**
2
+ * This source file is available under the terms of the
3
+ * Pimcore Open Core License (POCL)
4
+ * Full copyright and license information is available in
5
+ * LICENSE.md which is distributed with this source code.
6
+ *
7
+ * @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
8
+ * @license Pimcore Open Core License (POCL)
9
+ */
10
+ import { type Meta } from '@storybook/react';
11
+ declare const config: Meta;
12
+ export default config;
13
+ export declare const _default: {
14
+ args: {
15
+ type: string;
16
+ value: null;
17
+ onChange: (value: unknown) => void;
18
+ };
19
+ };
20
+ export declare const WithValue: {
21
+ args: {
22
+ value: {
23
+ type: string;
24
+ id: number;
25
+ fullPath: string;
26
+ };
27
+ type: string;
28
+ onChange: (value: unknown) => void;
29
+ };
30
+ };
31
+ export declare const Disabled: {
32
+ args: {
33
+ disabled: boolean;
34
+ type: string;
35
+ value: null;
36
+ onChange: (value: unknown) => void;
37
+ };
38
+ };
@@ -11,6 +11,7 @@ import React, { type ReactNode } from 'react';
11
11
  export interface PipelineItem {
12
12
  id: string;
13
13
  component: ReactNode;
14
+ noDivider?: boolean;
14
15
  }
15
16
  export interface PipelineProps {
16
17
  items: PipelineItem[];
@@ -332,6 +332,12 @@ declare const defaultComponentConfig: {
332
332
  name: string;
333
333
  };
334
334
  };
335
+ user: {
336
+ appearanceBranding: {
337
+ type: ComponentType;
338
+ name: string;
339
+ };
340
+ };
335
341
  wysiwyg: {
336
342
  editor: {
337
343
  type: ComponentType;
@@ -0,0 +1,17 @@
1
+ /**
2
+ * This source file is available under the terms of the
3
+ * Pimcore Open Core License (POCL)
4
+ * Full copyright and license information is available in
5
+ * LICENSE.md which is distributed with this source code.
6
+ *
7
+ * @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
8
+ * @license Pimcore Open Core License (POCL)
9
+ */
10
+ import { type MappingAlgorithm } from 'antd';
11
+ /**
12
+ * Ant Design's dark mapping algorithm, exposed through the SDK surface.
13
+ * Bundles must never import from antd directly — use this export when
14
+ * building a dark theme dynamic type (see `PimcoreThemeConfig.algorithm`).
15
+ */
16
+ export declare const darkThemeAlgorithm: MappingAlgorithm;
17
+ export type { MappingAlgorithm };
@@ -8,7 +8,8 @@
8
8
  * @license Pimcore Open Core License (POCL)
9
9
  */
10
10
  /**
11
- * Standard theme IDs for Pimcore Studio
11
+ * Standard theme IDs for Pimcore Studio.
12
+ * The dark theme ships with the Backend Power Tools bundle.
12
13
  */
13
14
  export declare const studioThemeIds: {
14
15
  readonly light: "studio-default-light";
@@ -12,4 +12,16 @@ export interface DynamicThemeProviderProps {
12
12
  children: React.ReactNode;
13
13
  id?: string;
14
14
  }
15
+ /**
16
+ * Resolves the theme chain for the given id from the theme registry, deep-merges
17
+ * it into a single config, and applies it via one antd-style theme provider. The
18
+ * deep merge lets a child theme override individual values inside a nested token
19
+ * group without dropping the group's other keys.
20
+ *
21
+ * Note: theme resolution is memoized on [themeRegistry, id] and is NOT
22
+ * reactive to later registry changes. Theme dynamic types must therefore be
23
+ * registered during the module init / app-loader phase, before first render —
24
+ * a theme registered after a failed resolution is only retried once the
25
+ * theme id changes.
26
+ */
15
27
  export declare const DynamicThemeProvider: ({ children, id }: DynamicThemeProviderProps) => React.JSX.Element;
@@ -18,7 +18,17 @@ export interface ThemeChain {
18
18
  }
19
19
  export declare class DynamicTypeThemeRegistry extends DynamicTypeRegistryAbstract<DynamicTypeThemeAbstract> {
20
20
  /**
21
- * Resolve a theme and its inheritance chain
21
+ * Resolve a theme and its inheritance chain into an ordered list of configs,
22
+ * from the root ancestor down to the requested leaf theme.
23
+ *
24
+ * A theme reached via more than one path (diamond inheritance) is emitted only
25
+ * once, at its first occurrence; a theme that (transitively) extends itself
26
+ * throws, since that chain can never be resolved.
22
27
  */
23
28
  resolveThemeChain(themeId: string): ThemeChain;
29
+ /**
30
+ * Resolve a theme's inheritance chain and deep-merge it into a single config,
31
+ * with the leaf theme's values taking precedence over its ancestors'.
32
+ */
33
+ resolveMergedTheme(themeId: string): PimcoreThemeConfig;
24
34
  }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * This source file is available under the terms of the
3
+ * Pimcore Open Core License (POCL)
4
+ * Full copyright and license information is available in
5
+ * LICENSE.md which is distributed with this source code.
6
+ *
7
+ * @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
8
+ * @license Pimcore Open Core License (POCL)
9
+ */
10
+ import 'reflect-metadata';
@@ -8,9 +8,19 @@
8
8
  * @license Pimcore Open Core License (POCL)
9
9
  */
10
10
  import React from 'react';
11
- interface ThemeProviderProps {
11
+ export interface ThemeProviderProps {
12
12
  children: React.ReactNode;
13
+ /**
14
+ * Explicit theme id override. When omitted, the theme id from the
15
+ * store applies (settable via setThemeId, defaults to the light theme).
16
+ */
13
17
  id?: string;
14
18
  }
19
+ /**
20
+ * Applies the currently active studio theme.
21
+ *
22
+ * Note: this component unconditionally reads the theme id from the redux
23
+ * store (useAppSelector) and therefore requires a react-redux Provider
24
+ * ancestor (e.g. the studio GlobalProvider) to be rendered.
25
+ */
15
26
  export declare const ThemeProvider: ({ children, id }: ThemeProviderProps) => React.JSX.Element;
16
- export {};
@@ -0,0 +1,15 @@
1
+ /**
2
+ * This source file is available under the terms of the
3
+ * Pimcore Open Core License (POCL)
4
+ * Full copyright and license information is available in
5
+ * LICENSE.md which is distributed with this source code.
6
+ *
7
+ * @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
8
+ * @license Pimcore Open Core License (POCL)
9
+ */
10
+ import { type RootState } from '../../../../sdk/app';
11
+ export interface ThemeState {
12
+ themeId: string;
13
+ }
14
+ export declare const setThemeId: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "theme/setThemeId">;
15
+ export declare const selectThemeId: (state: RootState) => string;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * This source file is available under the terms of the
3
+ * Pimcore Open Core License (POCL)
4
+ * Full copyright and license information is available in
5
+ * LICENSE.md which is distributed with this source code.
6
+ *
7
+ * @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
8
+ * @license Pimcore Open Core License (POCL)
9
+ */
10
+ export {};
@@ -282,6 +282,8 @@ export type UserInformation = {
282
282
  activePerspective: string | null;
283
283
  /** Allowed studio perspectives */
284
284
  perspectives: PerspectiveConfig[];
285
+ /** Theme of the User */
286
+ theme: string;
285
287
  };
286
288
  export type UserWorkspace = {
287
289
  /** ID of the element */
@@ -404,6 +406,8 @@ export type User = {
404
406
  objectDependencies: UserObjectDependencies;
405
407
  /** Allowed studio perspectives */
406
408
  perspectives: PerspectiveConfig[];
409
+ /** Theme of the User */
410
+ theme: string;
407
411
  };
408
412
  export type User2 = {
409
413
  /** Email of the User */
@@ -456,6 +460,8 @@ export type User2 = {
456
460
  documentWorkspaces: UserWorkspace[];
457
461
  /** Allowed studio perspectives */
458
462
  perspectives: string[];
463
+ /** Theme of the User */
464
+ theme?: string;
459
465
  };
460
466
  export type UserPermission = {
461
467
  /** AdditionalAttributes */
@@ -506,6 +512,8 @@ export type UserProfile = {
506
512
  contentLanguages: object;
507
513
  /** Key Bindings */
508
514
  keyBindings: KeyBindingForAUser[];
515
+ /** Theme of the User */
516
+ theme?: string;
509
517
  };
510
518
  export declare const useUserCloneByIdMutation: <R extends Record<string, any> = ({
511
519
  requestId?: undefined;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * This source file is available under the terms of the
3
+ * Pimcore Open Core License (POCL)
4
+ * Full copyright and license information is available in
5
+ * LICENSE.md which is distributed with this source code.
6
+ *
7
+ * @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
8
+ * @license Pimcore Open Core License (POCL)
9
+ */
10
+ export declare const useStyles: (props?: unknown) => {
11
+ styles: {
12
+ descriptionText: string;
13
+ };
14
+ cx: import("antd-style/es/types").ClassNamesUtil;
15
+ theme: import("antd-style/lib/types/theme").FullToken;
16
+ };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * This source file is available under the terms of the
3
+ * Pimcore Open Core License (POCL)
4
+ * Full copyright and license information is available in
5
+ * LICENSE.md which is distributed with this source code.
6
+ *
7
+ * @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
8
+ * @license Pimcore Open Core License (POCL)
9
+ */
10
+ export declare const useStyles: (props?: unknown) => {
11
+ styles: {
12
+ noPreviewText: string;
13
+ };
14
+ cx: import("antd-style/es/types").ClassNamesUtil;
15
+ theme: import("antd-style/lib/types/theme").FullToken;
16
+ };
@@ -10,6 +10,7 @@
10
10
  export declare const useStyles: (props?: unknown) => {
11
11
  styles: {
12
12
  panel: string;
13
+ panelHeader: string;
13
14
  panelFill: string;
14
15
  };
15
16
  cx: import("antd-style/es/types").ClassNamesUtil;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * This source file is available under the terms of the
3
+ * Pimcore Open Core License (POCL)
4
+ * Full copyright and license information is available in
5
+ * LICENSE.md which is distributed with this source code.
6
+ *
7
+ * @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
8
+ * @license Pimcore Open Core License (POCL)
9
+ */
10
+ import React from 'react';
11
+ export interface AppearanceBrandingUser {
12
+ id?: number;
13
+ theme?: string;
14
+ }
15
+ interface AppearanceBrandingAccordionProps {
16
+ /** The user the appearance fields edit — the current user on the profile
17
+ * form, the opened user in admin user management. Forwarded to the slot. */
18
+ user?: AppearanceBrandingUser | null;
19
+ }
20
+ /**
21
+ * "Appearance & Branding" area shown after the user avatar in both the
22
+ * self-service profile and the admin user-management settings forms. Renders
23
+ * the `user.appearanceBranding` extension slot; bundles such as the theme
24
+ * manager contribute per-user appearance fields here.
25
+ *
26
+ * Renders nothing when no bundle has contributed to the slot, so a core-only
27
+ * installation does not show an empty panel.
28
+ */
29
+ export declare const AppearanceBrandingAccordion: ({ user }: AppearanceBrandingAccordionProps) => React.JSX.Element | null;
30
+ export {};
@@ -137,6 +137,7 @@ export declare const slice: import("@reduxjs/toolkit").Slice<import("@reduxjs/to
137
137
  };
138
138
  isWriteable: boolean;
139
139
  }[];
140
+ theme: string;
140
141
  changes: {
141
142
  [x: string]: boolean;
142
143
  };
@@ -271,6 +272,7 @@ export declare const slice: import("@reduxjs/toolkit").Slice<import("@reduxjs/to
271
272
  };
272
273
  isWriteable: boolean;
273
274
  }[];
275
+ theme: string;
274
276
  changes: {
275
277
  [x: string]: boolean;
276
278
  };
@@ -408,6 +410,7 @@ export declare const slice: import("@reduxjs/toolkit").Slice<import("@reduxjs/to
408
410
  };
409
411
  isWriteable: boolean;
410
412
  }[];
413
+ theme: string;
411
414
  changes: {
412
415
  [x: string]: boolean;
413
416
  };
@@ -542,6 +545,7 @@ export declare const slice: import("@reduxjs/toolkit").Slice<import("@reduxjs/to
542
545
  };
543
546
  isWriteable: boolean;
544
547
  }[];
548
+ theme: string;
545
549
  changes: {
546
550
  [x: string]: boolean;
547
551
  };
@@ -676,6 +680,7 @@ export declare const slice: import("@reduxjs/toolkit").Slice<import("@reduxjs/to
676
680
  };
677
681
  isWriteable: boolean;
678
682
  }[];
683
+ theme: string;
679
684
  changes: {
680
685
  [x: string]: boolean;
681
686
  };
@@ -813,6 +818,7 @@ export declare const slice: import("@reduxjs/toolkit").Slice<import("@reduxjs/to
813
818
  };
814
819
  isWriteable: boolean;
815
820
  }[];
821
+ theme: string;
816
822
  changes: {
817
823
  [x: string]: boolean;
818
824
  };
@@ -950,6 +956,7 @@ export declare const slice: import("@reduxjs/toolkit").Slice<import("@reduxjs/to
950
956
  };
951
957
  isWriteable: boolean;
952
958
  }[];
959
+ theme: string;
953
960
  changes: {
954
961
  [x: string]: boolean;
955
962
  };
@@ -1084,6 +1091,7 @@ export declare const slice: import("@reduxjs/toolkit").Slice<import("@reduxjs/to
1084
1091
  };
1085
1092
  isWriteable: boolean;
1086
1093
  }[];
1094
+ theme: string;
1087
1095
  changes: {
1088
1096
  [x: string]: boolean;
1089
1097
  };
@@ -1159,6 +1167,7 @@ export declare const selectUserById: (state: Record<string, any>, id: number) =>
1159
1167
  documentWorkspaces: import("../../modules/auth/user/user-api-slice.gen").UserDocumentWorkspace2[];
1160
1168
  objectDependencies: import("../../modules/auth/user/user-api-slice.gen").UserObjectDependencies;
1161
1169
  perspectives: import("../../modules/auth/user/user-api-slice.gen").PerspectiveConfig[];
1170
+ theme: string;
1162
1171
  changes: Record<string, boolean>;
1163
1172
  modifiedCells: Record<string, import("../../modules/user/hooks/use-user-management-trackable-changes").ModifiedCell[]>;
1164
1173
  };
@@ -29,5 +29,15 @@ export interface Widget {
29
29
  export declare class WidgetRegistry {
30
30
  private readonly widgets;
31
31
  registerWidget(widget: Widget): void;
32
+ /**
33
+ * Replaces an already registered widget, e.g. to let a bundle take over
34
+ * a core view. When no widget with the given name is registered, the
35
+ * registry stays untouched (the core widget keeps working), the problem
36
+ * is reported via the central error handler and `false` is returned —
37
+ * a stale override must never break the app boot.
38
+ *
39
+ * @returns whether the widget was overridden
40
+ */
41
+ overrideWidget(widget: Widget): boolean;
32
42
  getWidget(name: string): Widget | undefined;
33
43
  }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * This source file is available under the terms of the
3
+ * Pimcore Open Core License (POCL)
4
+ * Full copyright and license information is available in
5
+ * LICENSE.md which is distributed with this source code.
6
+ *
7
+ * @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
8
+ * @license Pimcore Open Core License (POCL)
9
+ */
10
+ export {};
@@ -106,6 +106,7 @@ export * from '../../core/components/icon-selector/icon-selector';
106
106
  export * from '../../core/components/iframe/iframe';
107
107
  export * from '../../core/components/iframe-content/iframe-content';
108
108
  export * from '../../core/components/image/image';
109
+ export * from '../../core/components/image-picker/image-picker';
109
110
  export * from '../../core/components/image-preview/image-preview';
110
111
  export * from '../../core/components/image-zoom/image-zoom';
111
112
  export * from '../../core/components/import-modal/import-modal';
@@ -8,6 +8,8 @@
8
8
  * @license Pimcore Open Core License (POCL)
9
9
  */
10
10
  export * from '../../../core/modules/app/component-registry/component-registry';
11
+ export { componentConfig } from '../../../core/modules/app/component-registry/component-config';
12
+ export { SlotRenderer } from '../../../core/modules/app/component-registry/slot-renderer';
11
13
  export * from '../../../core/modules/app/context-menu-registry';
12
14
  export * from '../../../core/modules/app/context-menu-registry/context-types';
13
15
  export * from '../../../core/modules/app/error-boundary/error-boundary';
@@ -15,10 +17,16 @@ export { default as trackError, ApiError, GeneralError, isApiErrorData } from '.
15
17
  export * from '../../../core/modules/app/error-handler/types';
16
18
  export * from '../../../core/modules/app/theme/theme-provider';
17
19
  export * from '../../../core/modules/app/theme/utils/themes/theme-tokens';
20
+ export * from '../../../core/modules/app/theme/dynamic-types/definitions/dynamic-type-theme-abstract';
21
+ export * from '../../../core/modules/app/theme/dynamic-types/registry/dynamic-type-theme-registry';
22
+ export * from '../../../core/modules/app/theme/constants/theme-ids';
23
+ export * from '../../../core/modules/app/theme/constants/theme-algorithms';
24
+ export * from '../../../core/modules/app/theme/theme-slice';
18
25
  export * from '../../../core/modules/app/hook/use-handle-keybindings';
19
26
  export * from '../../../core/modules/app/hook/use-date-converter';
20
27
  export * from '../../../core/modules/app/modal-holder/use-modal-holder';
21
28
  export * from '../../../core/modules/app/settings/hooks/use-settings';
29
+ export { getAdminSettings } from '../../../core/modules/app/settings/settings-slice';
22
30
  export * from '../../../core/modules/app/base-layout/main-nav/services/main-nav-registry';
23
31
  export * from '../../../core/modules/app/base-layout/main-nav/hooks/use-main-nav';
24
32
  export * from '../../../core/modules/app/base-layout/right-sidebar/logo/subscription-details';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pimcore/studio-ui-bundle",
3
- "version": "2026.1.7",
3
+ "version": "2026.2.0",
4
4
  "keywords": [
5
5
  "pimcore",
6
6
  "pimcore-studio-ui"