@getsoren/design-system 4.63.0 → 4.64.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 { AiAssistantFabProps } from '../types';
2
2
  /**
3
- * The assistant's floating action button — a liquid orb: iridescent gradient flow,
3
+ * The assistant's floating action button — a liquid orb: brand gradient flow (Soren orange
4
+ * dissolving into black),
4
5
  * blob morph, breath and pulsing aura while idle; calm circle with a close glyph when
5
6
  * the panel is open. The animations live on a ::before layer so the hit-box never
6
7
  * moves (reliable clicks, stable e2e).
@@ -1,9 +1,9 @@
1
1
  import { AiAssistantThinkingOrbProps } from '../types';
2
2
  /**
3
- * Living mini-orb shown while the assistant thinks — same visual language as the FAB
4
- * orb: iridescent flow, blob morph, breath and pulsing aura (aura spread scales with
5
- * size). Emotion emits @keyframes globally, hence the size-suffixed aura name (its
6
- * content differs per size — the same name would collide).
3
+ * Living mini-orb shown while the assistant thinks — same visual language as the FAB orb: the brand
4
+ * orange flowing into black, blob morph, breath and pulsing aura (aura spread scales with size).
5
+ * Emotion emits @keyframes globally, hence the size-suffixed aura name (its content differs per
6
+ * size — the same name would collide).
7
7
  */
8
8
  declare const AiAssistantThinkingOrb: ({ size }: AiAssistantThinkingOrbProps) => import("@emotion/react/jsx-runtime").JSX.Element;
9
9
  export default AiAssistantThinkingOrb;
@@ -0,0 +1,11 @@
1
+ import { PaletteMode } from '@mui/material';
2
+ /** Flowing gradient of the floating bubble and the thinking orb (animated background position). */
3
+ export declare const assistantOrbGradient: (mode: PaletteMode) => string;
4
+ /** Stops of the spark glyph, from the orange to the dark end. */
5
+ export declare const assistantSparkStops: (mode: PaletteMode) => ({
6
+ color: string;
7
+ offset: undefined;
8
+ } | {
9
+ color: string;
10
+ offset: string;
11
+ })[];
@@ -0,0 +1,3 @@
1
+ import { SvgIconProps } from '@mui/material/SvgIcon';
2
+ declare const ArrowUpwardRoundedIcon: (props: SvgIconProps) => import("@emotion/react/jsx-runtime").JSX.Element;
3
+ export default ArrowUpwardRoundedIcon;
@@ -1,3 +1,3 @@
1
1
  import { PlanningTimelineGroup, PlanningTimelineProps, PlanningTimelineResource, PlanningTimelineTask } from './types';
2
- declare const PlanningTimeline: <G extends PlanningTimelineGroup, R extends PlanningTimelineResource, T extends PlanningTimelineTask>({ groups, resources, tasks, isLoading, onTaskClick, onResourceClick, onGroupClick, onBarResize, renderGroup, renderResource, renderBar, renderTooltip, isTaskSelected, recenterKey, toolbarActions, sidebarTitle, locale, labels, localStorageKeys, defaultViewMode, sidebarWidth, rowHeight, }: PlanningTimelineProps<G, R, T>) => import("@emotion/react/jsx-runtime").JSX.Element;
2
+ declare const PlanningTimeline: <G extends PlanningTimelineGroup, R extends PlanningTimelineResource, T extends PlanningTimelineTask>({ groups, resources, tasks, isLoading, onTaskClick, onResourceClick, onGroupClick, onBarResize, renderGroup, renderResource, renderBar, renderTooltip, isTaskSelected, recenterKey, toolbarActions, toolbarLeadingActions, sidebarTitle, locale, labels, localStorageKeys, defaultViewMode, sidebarWidth, rowHeight, }: PlanningTimelineProps<G, R, T>) => import("@emotion/react/jsx-runtime").JSX.Element;
3
3
  export default PlanningTimeline;
@@ -9,6 +9,9 @@ export type PlanningTimelineStatusColor = "default" | "error" | "info" | "succes
9
9
  * An incident (e.g. a breakdown) rendered as a hatched day-wide segment on the bar.
10
10
  */
11
11
  export interface PlanningTimelineIncident {
12
+ /**
13
+ * Day the incident occurred — the whole day is hatched on the bar
14
+ */
12
15
  incidentDate: string | Date;
13
16
  }
14
17
  /**
@@ -16,7 +19,13 @@ export interface PlanningTimelineIncident {
16
19
  * to attach your own domain data and get it back, typed, in `renderGroup` and `onGroupClick`.
17
20
  */
18
21
  export interface PlanningTimelineGroup {
22
+ /**
23
+ * Unique id, referenced by resources via their `groupId`
24
+ */
19
25
  id: string;
26
+ /**
27
+ * Text displayed in the group header
28
+ */
20
29
  name: string;
21
30
  /**
22
31
  * Whether the group's resources are hidden. Toggle it from `onGroupClick` to make headers collapsible.
@@ -38,7 +47,13 @@ export interface PlanningTimelineGroup {
38
47
  * `renderResource` and `onResourceClick`.
39
48
  */
40
49
  export interface PlanningTimelineResource {
50
+ /**
51
+ * Unique id, referenced by tasks via their `resourceId`
52
+ */
41
53
  id: string;
54
+ /**
55
+ * Text displayed in the left-column cell
56
+ */
42
57
  name: string;
43
58
  /**
44
59
  * Id of the `groups` entry this resource belongs to; omit for an ungrouped top-level resource.
@@ -51,13 +66,25 @@ export interface PlanningTimelineResource {
51
66
  * back, typed, in every render prop and callback.
52
67
  */
53
68
  export interface PlanningTimelineTask {
69
+ /**
70
+ * Unique id of the task
71
+ */
54
72
  id: string;
55
73
  /**
56
74
  * Id of the `resources` entry this bar is drawn on.
57
75
  */
58
76
  resourceId: string;
77
+ /**
78
+ * Text displayed inside the bar (default `renderBar` content)
79
+ */
59
80
  name: string;
81
+ /**
82
+ * Start of the bar
83
+ */
60
84
  start: Date;
85
+ /**
86
+ * End of the bar
87
+ */
61
88
  end: Date;
62
89
  /**
63
90
  * Incidents rendered as red hatched day-wide segments on the bar.
@@ -84,6 +111,9 @@ export interface PlanningTimelineGroupContext<G extends PlanningTimelineGroup =
84
111
  * Forwarded `onGroupClick` — call it to make the whole header clickable (e.g. a collapse toggle).
85
112
  */
86
113
  onJump: (group: G) => void;
114
+ /**
115
+ * True when the left column is folded away
116
+ */
87
117
  sidebarCollapsed: boolean;
88
118
  /**
89
119
  * `group.childCount` when set, otherwise the number of resources in the group.
@@ -102,6 +132,9 @@ export interface PlanningTimelineResourceContext<R extends PlanningTimelineResou
102
132
  * True when one of the resource's tasks is selected (`isTaskSelected`).
103
133
  */
104
134
  selected: boolean;
135
+ /**
136
+ * True when the left column is folded away
137
+ */
105
138
  sidebarCollapsed: boolean;
106
139
  /**
107
140
  * The resource's tasks (its bars), e.g. to summarize them in the cell.
@@ -112,6 +145,9 @@ export interface PlanningTimelineResourceContext<R extends PlanningTimelineResou
112
145
  * Context given to `renderBar` for a bar's inner content.
113
146
  */
114
147
  export interface PlanningTimelineBarContext {
148
+ /**
149
+ * True when the left column is folded away
150
+ */
115
151
  sidebarCollapsed: boolean;
116
152
  }
117
153
  /**
@@ -127,12 +163,38 @@ export interface PlanningTimelineLocalStorageKeys {
127
163
  * Built-in UI strings; each falls back to the design-system locale (en/fr) when not overridden.
128
164
  */
129
165
  export interface PlanningTimelineLabels {
166
+ /**
167
+ * "Day" option of the view-mode toggle
168
+ */
130
169
  day: string;
170
+ /**
171
+ * "Week" option of the view-mode toggle
172
+ */
131
173
  week: string;
174
+ /**
175
+ * "Month" option of the view-mode toggle
176
+ */
132
177
  month: string;
178
+ /**
179
+ * "Year" option of the view-mode toggle
180
+ */
133
181
  year: string;
182
+ /**
183
+ * Toolbar button that re-centres the timeline on today
184
+ */
134
185
  today: string;
186
+ /**
187
+ * Message displayed when there is no resource to show
188
+ */
135
189
  noResult: string;
190
+ /**
191
+ * Accessible name of the button that folds the left column away
192
+ */
193
+ collapseSidebar: string;
194
+ /**
195
+ * Accessible name of the button that brings the left column back
196
+ */
197
+ expandSidebar: string;
136
198
  }
137
199
  export interface PlanningTimelineProps<G extends PlanningTimelineGroup = PlanningTimelineGroup, R extends PlanningTimelineResource = PlanningTimelineResource, T extends PlanningTimelineTask = PlanningTimelineTask> {
138
200
  /**
@@ -179,6 +241,9 @@ export interface PlanningTimelineProps<G extends PlanningTimelineGroup = Plannin
179
241
  * Inner content of a bar. Defaults to the task name.
180
242
  */
181
243
  renderBar?: (task: T, context: PlanningTimelineBarContext) => ReactNode;
244
+ /**
245
+ * Content of the tooltip shown while hovering a bar. Omit to disable the tooltip.
246
+ */
182
247
  renderTooltip?: (task: T) => ReactNode;
183
248
  /**
184
249
  * Whether a task is the currently selected one (e.g. its detail view is open).
@@ -193,7 +258,12 @@ export interface PlanningTimelineProps<G extends PlanningTimelineGroup = Plannin
193
258
  */
194
259
  toolbarActions?: ReactNode;
195
260
  /**
196
- * Title of the left (frozen) column, also used as the collapse button tooltip.
261
+ * Extra content rendered in the toolbar right after the "today" button (e.g. the view's filters),
262
+ * where it reads as part of the date controls instead of crowding the view-mode toggle.
263
+ */
264
+ toolbarLeadingActions?: ReactNode;
265
+ /**
266
+ * Title of the left (frozen) column.
197
267
  */
198
268
  sidebarTitle?: string;
199
269
  /**
@@ -1,5 +1,5 @@
1
1
  import { MouseEvent, ReactNode } from 'react';
2
- import { NavLinkProps, ObjectNavigationItem } from '..';
2
+ import { NavLinkProps, ObjectNavigationItem } from '../NavigationMenu';
3
3
  interface NavLinkItemProps extends Omit<ObjectNavigationItem, "label"> {
4
4
  children?: ReactNode;
5
5
  component?: (props: NavLinkProps) => ReactNode;
@@ -1,21 +1,65 @@
1
1
  import { ChipProps } from '@mui/material';
2
2
  import { MouseEvent, ReactElement, ReactNode } from 'react';
3
+ import { NavigationDensity } from './utils/navigationDensity';
4
+ export * from './utils/navigationDensity';
3
5
  export type ObjectNavigationItem = {
6
+ /**
7
+ * Destination URL of the link
8
+ */
4
9
  url?: string;
10
+ /**
11
+ * Text displayed for the link
12
+ */
5
13
  label?: string;
14
+ /**
15
+ * Number displayed in a chip next to the label
16
+ */
6
17
  count?: number;
18
+ /**
19
+ * Color of the `count` chip
20
+ */
7
21
  countColor?: ChipProps["color"];
8
- /** Small highlight chip rendered next to the label (e.g. "New"). Hidden when the sidebar is collapsed to the icon rail. */
22
+ /**
23
+ * Small highlight chip rendered next to the label (e.g. "New").
24
+ * Hidden when the sidebar is collapsed to the icon rail.
25
+ */
9
26
  tag?: string;
10
- /** Color of the `tag` chip. @default "info" */
27
+ /**
28
+ * Color of the `tag` chip
29
+ * @default "info"
30
+ */
11
31
  tagColor?: ChipProps["color"];
32
+ /**
33
+ * Icon displayed before the label
34
+ */
12
35
  icon?: ReactNode;
36
+ /**
37
+ * Force the active state of the link
38
+ */
13
39
  active?: boolean;
40
+ /**
41
+ * State passed to the router NavLink
42
+ */
14
43
  state?: any;
44
+ /**
45
+ * Only mark the link active on an exact URL match (react-router NavLink `end` prop)
46
+ */
15
47
  end?: boolean;
48
+ /**
49
+ * Disable the link
50
+ */
16
51
  disabled?: boolean;
52
+ /**
53
+ * Hide the link on mobile
54
+ */
17
55
  hideOnMobile?: boolean;
56
+ /**
57
+ * Hide the link when the user has no access to it
58
+ */
18
59
  hasAccess?: boolean;
60
+ /**
61
+ * Target attribute of the link (e.g. "_blank")
62
+ */
19
63
  target?: string;
20
64
  };
21
65
  export type NavigationGroupItem = {
@@ -48,29 +92,77 @@ export type NavigationGroupItem = {
48
92
  hasAccess?: boolean;
49
93
  };
50
94
  export interface BottomLinkProps {
95
+ /**
96
+ * Destination URL of the link
97
+ */
51
98
  url?: string;
99
+ /**
100
+ * State passed to the router NavLink
101
+ */
52
102
  state?: any;
103
+ /**
104
+ * Only mark the link active on an exact URL match (react-router NavLink `end` prop)
105
+ */
53
106
  end?: boolean;
107
+ /**
108
+ * Content displayed for the link
109
+ */
54
110
  label?: ReactNode;
111
+ /**
112
+ * Force the active state of the link
113
+ */
55
114
  active?: boolean;
115
+ /**
116
+ * Icon displayed before the label
117
+ */
56
118
  icon?: ReactNode;
119
+ /**
120
+ * Disable the link
121
+ */
57
122
  disabled?: boolean;
123
+ /**
124
+ * Callback fired when the link is clicked
125
+ */
58
126
  onClick?: (e?: MouseEvent) => void;
127
+ /**
128
+ * Target attribute of the link (e.g. "_blank")
129
+ */
59
130
  target?: string;
60
131
  }
61
132
  export interface NavLinkProps {
133
+ /**
134
+ * Class name applied to the link, or a function receiving the link state and returning it
135
+ */
62
136
  className?: string | ((props: {
63
137
  isActive: boolean;
64
138
  isPending: boolean;
65
139
  }) => string | undefined);
140
+ /**
141
+ * Callback fired when the link is clicked
142
+ */
66
143
  onClick?: () => void;
144
+ /**
145
+ * Destination URL of the link
146
+ */
67
147
  to: string;
148
+ /**
149
+ * Only mark the link active on an exact URL match (react-router NavLink `end` prop)
150
+ */
68
151
  end?: boolean;
152
+ /**
153
+ * Content of the link, or a function receiving the link state and returning it
154
+ */
69
155
  children?: ReactNode | ((props: {
70
156
  isActive: boolean;
71
157
  isPending: boolean;
72
158
  }) => ReactNode);
159
+ /**
160
+ * State passed to the router NavLink
161
+ */
73
162
  state?: any;
163
+ /**
164
+ * Target attribute of the link (e.g. "_blank")
165
+ */
74
166
  target?: string;
75
167
  }
76
168
  export type NavigationItem = ObjectNavigationItem | NavigationGroupItem | ReactNode;
@@ -80,10 +172,7 @@ export interface NavigationMenuProps {
80
172
  */
81
173
  items?: NavigationItem[];
82
174
  /**
83
- * Override the default translations
84
- */
85
- /**
86
- * Enabler search field focus shortcut when pressing "ctrl + f" or "cmd + f"
175
+ * Enable search field focus shortcut when pressing "ctrl + f" or "cmd + f"
87
176
  */
88
177
  enableSearchFocusShortcut?: boolean;
89
178
  /**
@@ -124,7 +213,7 @@ export interface NavigationMenuProps {
124
213
  */
125
214
  AppBar?: ReactElement;
126
215
  /**
127
- * Search component
216
+ * Footer component displayed at the bottom of the sidebar
128
217
  */
129
218
  Footer?: ReactNode;
130
219
  /**
@@ -132,9 +221,17 @@ export interface NavigationMenuProps {
132
221
  * @default "soren-navigation-menu-collapsed"
133
222
  */
134
223
  storageKey?: string;
224
+ /**
225
+ * Vertical density of the navigation. A closed set owned by the design system: "compact" only
226
+ * tightens the vertical rhythm (row height, paddings, gaps between blocks). Font size, horizontal
227
+ * gutters, icon gutter and collapsed rail are identical in both densities.
228
+ * @default "standard"
229
+ */
230
+ density?: NavigationDensity;
135
231
  }
136
232
  declare const DEFAULT_CONTEXT_VALUE: {
137
233
  closeDrawerMenu: () => void;
234
+ density: NavigationDensity;
138
235
  isCollapsed: boolean;
139
236
  isDrawerOpen: boolean;
140
237
  isMobile: boolean;
@@ -144,5 +241,5 @@ declare const DEFAULT_CONTEXT_VALUE: {
144
241
  };
145
242
  type NavigationMenuContextValue = NavigationMenuProps & typeof DEFAULT_CONTEXT_VALUE;
146
243
  export declare const NavigationMenuContext: import('react').Context<NavigationMenuContextValue>;
147
- declare const _default: import('react').MemoExoticComponent<({ AppBar, NavLink, Search, Logo, Footer, items, enableSearchFocusShortcut, disableResponsive, hideSearchDesktop, bottomLink, sideBarWidth, storageKey, }: NavigationMenuProps) => import("@emotion/react/jsx-runtime").JSX.Element>;
244
+ declare const _default: import('react').MemoExoticComponent<({ AppBar, NavLink, Search, Logo, Footer, items, enableSearchFocusShortcut, disableResponsive, hideSearchDesktop, bottomLink, sideBarWidth, storageKey, density, }: NavigationMenuProps) => import("@emotion/react/jsx-runtime").JSX.Element>;
148
245
  export default _default;
@@ -1,4 +1,4 @@
1
- import { NavigationItem } from '..';
1
+ import { NavigationItem } from '../NavigationMenu';
2
2
  export interface SideBarMenuProps {
3
3
  items?: NavigationItem[];
4
4
  }
@@ -0,0 +1,32 @@
1
+ export type NavigationDensity = "standard" | "compact";
2
+ export interface NavigationDensityTokens {
3
+ /** Vertical padding of a bottom link row */
4
+ bottomLinkPaddingY: number;
5
+ /** Vertical padding of the block wrapping the bottom links */
6
+ bottomLinkWrapperPaddingY: number;
7
+ /** Vertical padding of the collapse button (its horizontal padding never changes) */
8
+ collapseButtonPaddingY: number;
9
+ /** Minimum height of a group header */
10
+ groupHeaderMinHeight: number;
11
+ /** Space above a group of items */
12
+ groupItemMarginTop: number;
13
+ /** Minimum height of a menu row. Never below 36: our users are on site, with gloves. */
14
+ itemMinHeight: number;
15
+ /** Vertical padding of a menu row */
16
+ itemPaddingY: number;
17
+ /** Vertical padding of the list item wrapping each row */
18
+ listItemPaddingY: number;
19
+ /** Space above the menu list */
20
+ listMarginTop: number;
21
+ /** Vertical padding of the logo block */
22
+ logoPaddingY: number;
23
+ /** Vertical padding of the search block */
24
+ searchPaddingY: number;
25
+ }
26
+ /**
27
+ * Density only changes the vertical rhythm. Deliberately absent from this table, and therefore
28
+ * identical in every density: the font size, the horizontal gutters, the icon gutter, the
29
+ * icon-to-label spacing, the border radius, the colours and the width of the collapsed rail.
30
+ * Shrinking the text is not an option — density comes from the spacings.
31
+ */
32
+ export declare const NAVIGATION_DENSITY_TOKENS: Record<NavigationDensity, NavigationDensityTokens>;
@@ -1,7 +1,7 @@
1
1
  import { AvatarProps, ButtonProps, SxProps, TextFieldProps } from '@mui/material';
2
2
  import { MouseEventHandler, PropsWithChildren, ReactNode } from 'react';
3
3
  import { LogoProps } from '../../DataDisplay/Logo';
4
- import { NavigationItem, NavLinkProps } from '../../Navigation/NavigationMenu';
4
+ import { NavigationItem, NavLinkProps } from '../../Navigation/NavigationMenu/NavigationMenu';
5
5
  interface AppBarProps extends PropsWithChildren {
6
6
  NavLink?: (props: NavLinkProps) => ReactNode;
7
7
  Avatar?: ReactNode;
@@ -4,8 +4,10 @@ declare const _default: {
4
4
  clickToUpload: string;
5
5
  close: string;
6
6
  closed: string;
7
+ collapseSidebar: string;
7
8
  day: string;
8
9
  escape: string;
10
+ expandSidebar: string;
9
11
  files: string;
10
12
  month: string;
11
13
  noResult: string;
@@ -4,8 +4,10 @@ declare const _default: {
4
4
  clickToUpload: string;
5
5
  close: string;
6
6
  closed: string;
7
+ collapseSidebar: string;
7
8
  day: string;
8
9
  escape: string;
10
+ expandSidebar: string;
9
11
  files: string;
10
12
  month: string;
11
13
  noResult: string;
@@ -75,8 +75,8 @@ export * from './components/Layout/Backoffice';
75
75
  export { default as Backoffice } from './components/Layout/Backoffice';
76
76
  export { default as CollapsingHeader } from './components/Layout/CollapsingHeader/CollapsingHeader';
77
77
  export * from './components/Layout/CollapsingHeader/types';
78
- export * from './components/Navigation/NavigationMenu';
79
- export { default as NavigationMenu } from './components/Navigation/NavigationMenu';
78
+ export * from './components/Navigation/NavigationMenu/NavigationMenu';
79
+ export { default as NavigationMenu } from './components/Navigation/NavigationMenu/NavigationMenu';
80
80
  export * from './components/Navigation/TabPanel';
81
81
  export { default as TabPanel } from './components/Navigation/TabPanel';
82
82
  export * from './components/Navigation/Tabs/LinkTab';
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@getsoren/design-system",
3
3
  "description": "Design System React library",
4
4
  "sideEffects": false,
5
- "version": "4.63.0",
5
+ "version": "4.64.0",
6
6
  "license": "ISC",
7
7
  "type": "module",
8
8
  "types": "./dist/src/main.d.ts",
@@ -1,3 +0,0 @@
1
- import { default as NavigationMenu } from './NavigationMenu';
2
- export default NavigationMenu;
3
- export * from './NavigationMenu';