@zvoove/unity-ui 2.23.1 → 2.25.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.
@@ -1,6 +1,7 @@
1
1
  import { ChangeEventHandler } from 'react';
2
2
  import { default as default_2 } from 'react';
3
3
  import { Dispatch } from 'react';
4
+ import { ElementType } from 'react';
4
5
  import { ForwardedRef } from 'react';
5
6
  import { ForwardRefExoticComponent } from 'react';
6
7
  import { Icon as Icon_2 } from '@phosphor-icons/react';
@@ -179,7 +180,7 @@ declare type AvatarSize = (typeof AVATAR_SIZES)[keyof typeof AVATAR_SIZES];
179
180
 
180
181
  declare type AxisVariant = 'X' | 'Y';
181
182
 
182
- export declare type BackgroundColors = 'background' | 'outline' | 'outline-variant' | 'outline-low' | 'primary' | 'primary-hover' | 'primary-active' | 'secondary' | 'tertiary' | 'primary-container' | 'secondary-container' | 'tertiary-container' | 'tertiary-container-hover' | 'tertiary-container-active' | 'primary-fixed' | 'primary-fixed-dim' | 'secondary-fixed' | 'secondary-fixed-dim' | 'tertiary-fixed' | 'tertiary-fixed-dim' | 'surface' | 'surface-bright' | 'surface-dim' | 'surface-variant' | 'surface-container-lowest' | 'surface-container-low' | 'surface-container' | 'surface-container-high' | 'surface-container-highest' | 'error' | 'error-container' | 'inverse-surface' | 'inverse-on-surface' | 'inverse-primary' | 'scrim' | 'yellow' | 'dark-yellow' | 'yellow-container' | 'green' | 'dark-green' | 'green-container' | 'pink' | 'dark-pink' | 'pink-container' | 'steel-blue' | 'dark-steel-blue' | 'steel-blue-container';
183
+ export declare type BackgroundColors = 'background' | 'outline' | 'outline-variant' | 'outline-low' | 'primary' | 'primary-hover' | 'primary-active' | 'secondary' | 'tertiary' | 'primary-container' | 'secondary-container' | 'tertiary-container' | 'tertiary-container-hover' | 'tertiary-container-active' | 'primary-fixed' | 'primary-fixed-dim' | 'secondary-fixed' | 'secondary-fixed-dim' | 'tertiary-fixed' | 'tertiary-fixed-dim' | 'surface' | 'surface-bright' | 'surface-dim' | 'surface-variant' | 'surface-container-lowest' | 'surface-container-low' | 'surface-container' | 'surface-container-high' | 'surface-container-highest' | 'error' | 'error-container' | 'inverse-surface' | 'inverse-on-surface' | 'inverse-primary' | 'scrim' | 'yellow' | 'dark-yellow' | 'yellow-container' | 'green' | 'dark-green' | 'green-container' | 'pink' | 'dark-pink' | 'pink-container' | 'steel-blue' | 'dark-steel-blue' | 'steel-blue-container' | 'container-neutral' | 'container-neutral-hover';
183
184
 
184
185
  export declare const Badge: ({ children, variant, content, dot, }: BadgeProps) => JSX.Element;
185
186
 
@@ -788,6 +789,7 @@ export declare const commonIconsMap: {
788
789
  readonly robot: Icon_2;
789
790
  readonly save: Icon_2;
790
791
  readonly search: Icon_2;
792
+ readonly 'search-plus': Icon_2;
791
793
  readonly 'send-message': Icon_2;
792
794
  readonly settings: Icon_2;
793
795
  readonly 'setup-time': Icon_2;
@@ -812,6 +814,7 @@ export declare const commonIconsMap: {
812
814
  readonly 'text-align-left': Icon_2;
813
815
  readonly 'text-align-right': Icon_2;
814
816
  readonly 'text-t': Icon_2;
817
+ readonly ticket: Icon_2;
815
818
  readonly notches: Icon_2;
816
819
  readonly time: Icon_2;
817
820
  readonly timer: Icon_2;
@@ -1393,7 +1396,7 @@ export declare interface FloatSearchTranslations {
1393
1396
  close?: string;
1394
1397
  }
1395
1398
 
1396
- export declare type ForegroundColors = 'primary' | 'secondary' | 'tertiary' | 'yellow' | 'green' | 'pink' | 'steel-blue' | 'dark-yellow' | 'dark-green' | 'dark-pink' | 'dark-steel-blue' | 'inverse-on-surface' | 'on-primary' | 'on-secondary' | 'on-tertiary' | 'on-primary-container' | 'on-secondary-container' | 'on-tertiary-container' | 'on-primary-fixed' | 'on-primary-fixed-variant' | 'on-secondary-fixed' | 'on-secondary-fixed-variant' | 'on-tertiary-fixed' | 'on-tertiary-fixed-variant' | 'on-surface' | 'on-surface-variant' | 'on-surface-variant-lowest' | 'on-error' | 'on-error-container' | 'on-yellow' | 'on-dark-yellow' | 'on-yellow-container' | 'on-green' | 'on-dark-green' | 'on-green-container' | 'on-pink' | 'on-dark-pink' | 'on-pink-container' | 'on-steel-blue' | 'on-dark-steel-blue' | 'on-steel-blue-container' | 'error' | 'on-scrim';
1399
+ export declare type ForegroundColors = 'primary' | 'secondary' | 'tertiary' | 'yellow' | 'green' | 'pink' | 'steel-blue' | 'dark-yellow' | 'dark-green' | 'dark-pink' | 'dark-steel-blue' | 'inverse-on-surface' | 'on-primary' | 'on-secondary' | 'on-tertiary' | 'on-primary-container' | 'on-secondary-container' | 'on-tertiary-container' | 'on-primary-fixed' | 'on-primary-fixed-variant' | 'on-secondary-fixed' | 'on-secondary-fixed-variant' | 'on-tertiary-fixed' | 'on-tertiary-fixed-variant' | 'on-surface' | 'on-surface-variant' | 'on-surface-variant-lowest' | 'on-error' | 'on-error-container' | 'on-yellow' | 'on-dark-yellow' | 'on-yellow-container' | 'on-green' | 'on-dark-green' | 'on-green-container' | 'on-pink' | 'on-dark-pink' | 'on-pink-container' | 'on-steel-blue' | 'on-dark-steel-blue' | 'on-steel-blue-container' | 'error' | 'on-scrim' | 'on-container-neutral';
1397
1400
 
1398
1401
  export declare const FormLabel: ({ value, required, htmlFor, ...props }: FormLabelProps) => JSX.Element;
1399
1402
 
@@ -1708,6 +1711,7 @@ declare const iconMap: {
1708
1711
  readonly robot: Icon_2;
1709
1712
  readonly save: Icon_2;
1710
1713
  readonly search: Icon_2;
1714
+ readonly 'search-plus': Icon_2;
1711
1715
  readonly 'send-message': Icon_2;
1712
1716
  readonly settings: Icon_2;
1713
1717
  readonly 'setup-time': Icon_2;
@@ -1732,6 +1736,7 @@ declare const iconMap: {
1732
1736
  readonly 'text-align-left': Icon_2;
1733
1737
  readonly 'text-align-right': Icon_2;
1734
1738
  readonly 'text-t': Icon_2;
1739
+ readonly ticket: Icon_2;
1735
1740
  readonly notches: Icon_2;
1736
1741
  readonly time: Icon_2;
1737
1742
  readonly timer: Icon_2;
@@ -1853,6 +1858,57 @@ declare const iconTypes: {
1853
1858
  readonly gray: "gray";
1854
1859
  };
1855
1860
 
1861
+ export declare const ImageVisualizer: {
1862
+ ({ src, alt, width, height, maxWidth, maxHeight, minWidth, minHeight, borderRadius, objectFit, }: ImageVisualizerProps): JSX.Element;
1863
+ displayName: string;
1864
+ };
1865
+
1866
+ export declare interface ImageVisualizerProps {
1867
+ /**
1868
+ * The source URL of the image.
1869
+ */
1870
+ src: string;
1871
+ /**
1872
+ * The alt text of the image.
1873
+ * @default ''
1874
+ */
1875
+ alt?: string;
1876
+ /**
1877
+ * The width of the image container.
1878
+ */
1879
+ width?: ResponsiveType<number | string>;
1880
+ /**
1881
+ * The height of the image container.
1882
+ */
1883
+ height?: ResponsiveType<number | string>;
1884
+ /**
1885
+ * The minimum width of the image container.
1886
+ */
1887
+ minWidth?: ResponsiveType<number | string>;
1888
+ /**
1889
+ * The minimum height of the image container.
1890
+ */
1891
+ minHeight?: ResponsiveType<number | string>;
1892
+ /**
1893
+ * The maximum width of the image container.
1894
+ */
1895
+ maxWidth?: ResponsiveType<number | string>;
1896
+ /**
1897
+ * The maximum height of the image container.
1898
+ */
1899
+ maxHeight?: ResponsiveType<number | string>;
1900
+ /**
1901
+ * The border radius of the image container.
1902
+ * @default 'sm'
1903
+ */
1904
+ borderRadius?: 'none' | 'sm' | 'md' | 'lg' | 'xl';
1905
+ /**
1906
+ * The CSS object-fit of the image inside the container.
1907
+ * @default 'cover'
1908
+ */
1909
+ objectFit?: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down';
1910
+ }
1911
+
1856
1912
  export declare const InfoBox: {
1857
1913
  ({ message, variant, icon, elevated, }: InfoBoxProps): JSX.Element;
1858
1914
  displayName: string;
@@ -1881,6 +1937,18 @@ export declare interface InfoBoxProps {
1881
1937
 
1882
1938
  export declare type InfoBoxVariant = 'default' | 'positive' | 'warning' | 'error' | 'subtle' | 'neutral' | 'outlined';
1883
1939
 
1940
+ /**
1941
+ * Detects **sectioned** `items` passed to `ListMenu`.
1942
+ *
1943
+ * **Sectioned** when the array is non-empty and the first entry looks like
1944
+ * `{ title?, items: ListMenuItem[] }`: it has an `items` array and does **not**
1945
+ * have a top-level `label` (every `ListMenuItem` has `label`). Any section may omit
1946
+ * `title` (e.g. the first group) — no header row is rendered.
1947
+ *
1948
+ * **Flat** when empty `[]` or when entries are normal rows. Do not mix shapes in one array.
1949
+ */
1950
+ export declare function isListMenuSections<T extends ElementType = 'a'>(items: ListMenuItem<T>[] | ListMenuSection<T>[]): items is ListMenuSection<T>[];
1951
+
1884
1952
  export declare type JustifyContent = 'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'space-evenly';
1885
1953
 
1886
1954
  declare type LabelStates = {
@@ -1924,9 +1992,10 @@ export declare type ListMenuItem<T extends React.ElementType = 'a'> = {
1924
1992
 
1925
1993
  export declare type ListMenuProps<T extends React.ElementType = 'a'> = {
1926
1994
  /**
1927
- * The list of menu items
1995
+ * Either a flat list of menu items (default) **or** an array of sections
1996
+ * `{ title?, items }[]`. The two shapes are mutually exclusive — use one or the other.
1928
1997
  */
1929
- items: ListMenuItem<T>[];
1998
+ items: ListMenuItem<T>[] | ListMenuSection<T>[];
1930
1999
  /**
1931
2000
  * The active item must match the id of the menu item
1932
2001
  */
@@ -1952,6 +2021,21 @@ export declare type ListMenuProps<T extends React.ElementType = 'a'> = {
1952
2021
  onItemClick?: (item: ListMenuItem<T>) => void;
1953
2022
  };
1954
2023
 
2024
+ /**
2025
+ * One titled group of rows inside a sectioned `ListMenu`. Do not mix with flat
2026
+ * `ListMenuItem[]` in the same `items` array.
2027
+ */
2028
+ export declare type ListMenuSection<T extends React.ElementType = 'a'> = {
2029
+ /**
2030
+ * Optional section header (uppercase label styling; omitted when missing, empty, or whitespace-only).
2031
+ */
2032
+ title?: string;
2033
+ /**
2034
+ * Rows in this section; same shape as flat `ListMenu` items.
2035
+ */
2036
+ items: ListMenuItem<T>[];
2037
+ };
2038
+
1955
2039
  export declare type ListMenuVariant = 'default' | 'compact';
1956
2040
 
1957
2041
  export declare type Margin = SpacingKeys | {
@@ -2034,7 +2118,11 @@ export declare interface MessageActionsProps {
2034
2118
 
2035
2119
  export declare type MessageActionsVariant = 'sender' | 'receiver';
2036
2120
 
2037
- export declare type MidSection<T extends React.ElementType = 'a'> = {
2121
+ /**
2122
+ * One titled block of mid-section rows. Items are always rendered with **compact** `ListMenu` density;
2123
+ * this type only describes the data shape (same as root `midSections` on `SideNavigation`).
2124
+ */
2125
+ export declare type MidSection<T extends ElementType = 'a'> = {
2038
2126
  /**
2039
2127
  * The title of the section
2040
2128
  */
@@ -2059,12 +2147,48 @@ export declare type MidSection<T extends React.ElementType = 'a'> = {
2059
2147
  */
2060
2148
  highlight?: boolean;
2061
2149
  /**
2062
- * When set, the section collapses into this icon when the menu is closed.
2150
+ * When set, the section collapses into this icon when the menu is closed (desktop only).
2063
2151
  * On hover, a PopUpMenu opens revealing the section items.
2064
2152
  */
2065
2153
  replaceWithIconOnClose?: CommonIconNames;
2066
2154
  };
2067
2155
 
2156
+ export declare const MidSectionMenus: {
2157
+ <T extends ElementType = "a">({ sections, open, variant, activeItem, linkComponent: LinkComponent, onItemClick, }: MidSectionMenusProps<T>): JSX.Element | null;
2158
+ displayName: string;
2159
+ };
2160
+
2161
+ export declare type MidSectionMenusProps<T extends ElementType = 'a'> = {
2162
+ /**
2163
+ * Section definitions (same shape as `SideNavigation` `midSections`).
2164
+ */
2165
+ sections: MidSection<T>[];
2166
+ /**
2167
+ * Whether the parent navigation is expanded (labels visible).
2168
+ * @default true
2169
+ */
2170
+ open?: boolean;
2171
+ /**
2172
+ * Sidebar shell width mode: must match the parent `SideNavigation` `variant` so open/closed width
2173
+ * transitions on the section wrappers stay aligned (`default` vs `compact` rail widths).
2174
+ * Does **not** change list row density — inner `ListMenu` instances are always `compact`.
2175
+ * @default 'default'
2176
+ */
2177
+ variant?: ListMenuVariant;
2178
+ /**
2179
+ * Active item id for `ListMenu` highlighting.
2180
+ */
2181
+ activeItem?: string;
2182
+ /**
2183
+ * Link element for menu rows.
2184
+ */
2185
+ linkComponent?: T | 'a';
2186
+ /**
2187
+ * Called when a row is activated (same contract as `ListMenu` / `SideNavigation` root lists).
2188
+ */
2189
+ onItemClick?: (item: ListMenuItem<T>) => void;
2190
+ };
2191
+
2068
2192
  declare type NonNullable_2<T> = Exclude<T, null | undefined>;
2069
2193
  export { NonNullable_2 as NonNullable }
2070
2194
 
@@ -2829,7 +2953,7 @@ export declare type SheetProps = UnionPlacement & {
2829
2953
  showBackArrow?: boolean;
2830
2954
  };
2831
2955
 
2832
- export declare const SideNavigation: <T extends React.ElementType = "a">({ menuItems, utilityItems, midSections, userArea, hideUserAreaInMobile, logo, open, variant, activeItem, onToggleOpen, onItemClick, linkComponent: LinkComponent, }: SideNavigationProps<T>) => JSX.Element;
2956
+ export declare const SideNavigation: <T extends ElementType = "a">({ menuItems, utilityItems, midSections, subMenus, userArea, hideUserAreaInMobile, hideToggleButton, addBorderToToggleButton, logo, open, variant, activeItem, onToggleOpen, onActiveItemChange, onItemClick, linkComponent: LinkComponent, }: SideNavigationProps<T>) => JSX.Element;
2833
2957
 
2834
2958
  export declare type SideNavigationProps<T extends React.ElementType = 'a'> = {
2835
2959
  /**
@@ -2865,9 +2989,15 @@ export declare type SideNavigationProps<T extends React.ElementType = 'a'> = {
2865
2989
  */
2866
2990
  utilityItems?: ListMenuItem<T>[];
2867
2991
  /**
2868
- * Additional sections rendered between menu items and utility items.
2992
+ * Sections between the root main list and utility items, with collapse/expand behavior when the sidebar
2993
+ * closes (see `replaceWithIconOnClose`). Only the **root** column uses this prop; any lists inside a
2994
+ * slide-in panel belong in that layer’s `content`.
2869
2995
  */
2870
2996
  midSections?: MidSection<T>[];
2997
+ /**
2998
+ * Slide-in panels: `parentId` matches a root `menuItems` id; `content` is the custom body (back row is built-in).
2999
+ */
3000
+ subMenus?: SubMenuLayer[];
2871
3001
  /**
2872
3002
  * User area rendered at the bottom of the navigation
2873
3003
  */
@@ -2878,7 +3008,21 @@ export declare type SideNavigationProps<T extends React.ElementType = 'a'> = {
2878
3008
  */
2879
3009
  hideUserAreaInMobile?: boolean;
2880
3010
  /**
2881
- * The active item must match the id of the menu item
3011
+ * When `true`, the built-in expand/collapse control in the header row is not rendered.
3012
+ * Use a `utilityItems` entry with `onClick` (and controlled `open` / `onToggleOpen`) instead.
3013
+ * @default false
3014
+ */
3015
+ hideToggleButton?: boolean;
3016
+ /**
3017
+ * When `true`, a border top, right and bottom are added to the toggle button. <br />
3018
+ * This is useful when the SideNavigation is used next to a Card with outlined variant as a content container.
3019
+ * @default false
3020
+ */
3021
+ addBorderToToggleButton?: boolean;
3022
+ /**
3023
+ * Active id for **root** `menuItems` / `utilityItems`. To open a sub panel from the shell, pass either the
3024
+ * layer’s `parentId` (e.g. `'zain'`) or an opaque dotted string `'<parentId>.<segment>'` where only the
3025
+ * part before the first `.` is read to choose the panel; the rest is for your app / `content` only.
2882
3026
  */
2883
3027
  activeItem?: string;
2884
3028
  /**
@@ -2889,6 +3033,12 @@ export declare type SideNavigationProps<T extends React.ElementType = 'a'> = {
2889
3033
  * The callback to handle the open/close state
2890
3034
  */
2891
3035
  onToggleOpen?: (open: boolean) => void;
3036
+ /**
3037
+ * Fired after a root `menuItems` / `utilityItems` click with the suggested `activeItem` id, or with the
3038
+ * sub-panel `parentId` when opening a layer. Not called for `__back__` or `target="_blank"`. Clicks inside
3039
+ * `subMenus[].content` are not observed here.
3040
+ */
3041
+ onActiveItemChange?: (activeItem: string) => void;
2892
3042
  /**
2893
3043
  * The callback to handle the item click
2894
3044
  */
@@ -3141,6 +3291,27 @@ export declare interface StackProps extends React.HTMLAttributes<HTMLDivElement>
3141
3291
  maxWidth?: ResponsiveType<number | string>;
3142
3292
  }
3143
3293
 
3294
+ /**
3295
+ * Slide-in panel for a root `menuItems` entry. The shell renders only the back row and spacer; pass any
3296
+ * content (e.g. one or more `ListMenu`s from a micro-frontend) as `content`. Selection and `activeItem`
3297
+ * for that UI live outside `SideNavigation`.
3298
+ */
3299
+ export declare type SubMenuLayer = {
3300
+ /**
3301
+ * Must match the `id` of the root `menuItems` entry that opens this panel.
3302
+ */
3303
+ parentId: string;
3304
+ /**
3305
+ * Custom body below the back row (often `ListMenu` or composed layout from a remote module).
3306
+ */
3307
+ content: ReactNode;
3308
+ /**
3309
+ * Label for the control that returns to the main menu.
3310
+ * @default 'Hauptmenü'
3311
+ */
3312
+ backLabel?: string;
3313
+ };
3314
+
3144
3315
  export declare const Switch: default_2.ForwardRefExoticComponent<SwitchProps & default_2.RefAttributes<HTMLInputElement>>;
3145
3316
 
3146
3317
  export declare interface SwitchProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> {