@linagora/twake-mui 9.17.0 → 10.0.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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,32 @@
1
+ # @linagora/twake-mui [10.0.0](https://github.com/linagora/twake-ui/compare/@linagora/twake-mui@9.17.0...@linagora/twake-mui@10.0.0) (2026-10-05)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **twake-mui:** Infer the SearchBar submit event type ([542f632](https://github.com/linagora/twake-ui/commit/542f63255dd143d85be5f96678f6ccc66538918b))
7
+ * **twake-mui:** Pass an initial value to useRef in SearchBar ([f32e365](https://github.com/linagora/twake-ui/commit/f32e36514e56373b6525b38b1c56c022b40b2797))
8
+ * **twake-mui:** Stop using the global JSX namespace in ContactPopover ([102d577](https://github.com/linagora/twake-ui/commit/102d577a050c59724f18f535bf8e3227cafb7b74))
9
+
10
+
11
+ ### chore
12
+
13
+ * **twake-mui:** Drop the twake-i18n React override by requiring twake-i18n 0.6.0 ([64c678e](https://github.com/linagora/twake-ui/commit/64c678e8e76015b919b6df9965ac512c142eed6f))
14
+
15
+
16
+ ### Features
17
+
18
+ * **twake-mui:** Support React 19 ([bdc7265](https://github.com/linagora/twake-ui/commit/bdc7265565d7d4991d2c335d4c58a258f56946ed))
19
+
20
+
21
+ ### BREAKING CHANGES
22
+
23
+ * **twake-mui:** twake-mui now requires twake-i18n >=0.6.0 as a peer
24
+ dependency, up from >=0.5.0. twake-mui only supports React 19 when
25
+ twake-i18n accepts it too, and consumers pinned on twake-i18n 0.5.0 will
26
+ get an ERESOLVE error until they upgrade.
27
+
28
+ Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
29
+
1
30
  # @linagora/twake-mui [9.17.0](https://github.com/linagora/twake-ui/compare/@linagora/twake-mui@9.16.0...@linagora/twake-mui@9.17.0) (2026-10-05)
2
31
 
3
32
 
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  export interface AttendeeInfoProps {
2
3
  /** Attendee display name */
3
4
  name: string;
@@ -6,4 +7,4 @@ export interface AttendeeInfoProps {
6
7
  /** Callback when email is copied to clipboard */
7
8
  onEmailCopy?: (email: string) => void;
8
9
  }
9
- export declare const AttendeeInfo: ({ name, email, onEmailCopy }: AttendeeInfoProps) => JSX.Element;
10
+ export declare const AttendeeInfo: ({ name, email, onEmailCopy }: AttendeeInfoProps) => React.ReactElement;
@@ -3,4 +3,4 @@ export interface ContactPopoverActionsProps {
3
3
  /** Action items rendered inside the actions bar */
4
4
  children: React.ReactNode;
5
5
  }
6
- export declare const ContactPopoverActions: ({ children }: ContactPopoverActionsProps) => JSX.Element;
6
+ export declare const ContactPopoverActions: ({ children }: ContactPopoverActionsProps) => React.ReactElement;
@@ -1,7 +1,8 @@
1
+ import React from 'react';
1
2
  export interface ContactPopoverCalendarActionProps {
2
3
  /** URL for calendar action (e.g., view attendee's calendar) */
3
4
  url: string;
4
5
  /** Disable the action button */
5
6
  disabled?: boolean;
6
7
  }
7
- export declare const ContactPopoverCalendarAction: ({ url, disabled }: ContactPopoverCalendarActionProps) => JSX.Element;
8
+ export declare const ContactPopoverCalendarAction: ({ url, disabled }: ContactPopoverCalendarActionProps) => React.ReactElement;
@@ -1,7 +1,8 @@
1
+ import React from 'react';
1
2
  export interface ContactPopoverChatActionProps {
2
3
  /** URL for chat action (e.g., Twake Chat link) */
3
4
  url: string;
4
5
  /** Disable the action button */
5
6
  disabled?: boolean;
6
7
  }
7
- export declare const ContactPopoverChatAction: ({ url, disabled }: ContactPopoverChatActionProps) => JSX.Element;
8
+ export declare const ContactPopoverChatAction: ({ url, disabled }: ContactPopoverChatActionProps) => React.ReactElement;
@@ -1,7 +1,8 @@
1
+ import React from 'react';
1
2
  export interface ContactPopoverEmailActionProps {
2
3
  /** URL for email action */
3
4
  url: string;
4
5
  /** Disable the action button */
5
6
  disabled?: boolean;
6
7
  }
7
- export declare const ContactPopoverEmailAction: ({ url, disabled }: ContactPopoverEmailActionProps) => JSX.Element;
8
+ export declare const ContactPopoverEmailAction: ({ url, disabled }: ContactPopoverEmailActionProps) => React.ReactElement;
@@ -1,7 +1,8 @@
1
+ import React from 'react';
1
2
  export interface ContactPopoverVideoActionProps {
2
3
  /** URL for video call action (e.g., Twake Meet link) */
3
4
  url: string;
4
5
  /** Disable the action button */
5
6
  disabled?: boolean;
6
7
  }
7
- export declare const ContactPopoverVideoAction: ({ url, disabled }: ContactPopoverVideoActionProps) => JSX.Element;
8
+ export declare const ContactPopoverVideoAction: ({ url, disabled }: ContactPopoverVideoActionProps) => React.ReactElement;
@@ -1,8 +1,6 @@
1
1
  import { Theme } from '@mui/material/styles';
2
2
  import React from 'react';
3
- declare const NavRoot: import("@emotion/styled").StyledComponent<import("@mui/material").ListOwnProps & Omit<import("@mui/material").ListOwnProps, keyof import("@mui/material").ListOwnProps> & import("@mui/material/OverridableComponent").CommonProps & Omit<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLUListElement>, HTMLUListElement>, "ref"> & {
4
- ref?: ((instance: HTMLUListElement | null) => void) | React.RefObject<HTMLUListElement> | null | undefined;
5
- }, "style" | "className" | "children" | "dense" | "disablePadding" | "classes" | "sx" | "subheader"> & import("@mui/system").MUIStyledCommonProps<Theme>, {}, {}>;
3
+ declare const NavRoot: import("@emotion/styled").StyledComponent<import("@mui/material").ListOwnProps & Omit<import("@mui/material").ListOwnProps, keyof import("@mui/material").ListOwnProps> & import("@mui/material/OverridableComponent").CommonProps & Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLUListElement>, HTMLUListElement>, "style" | "className" | "children" | "dense" | "disablePadding" | "classes" | "sx" | "subheader"> & import("@mui/system").MUIStyledCommonProps<Theme>, {}, {}>;
6
4
  export type NavProps = React.ComponentProps<typeof NavRoot>;
7
5
  export declare const Nav: (props: NavProps) => React.ReactElement;
8
6
  export {};
@@ -1,8 +1,6 @@
1
1
  import { Theme } from '@mui/material/styles';
2
2
  import React from 'react';
3
- export declare const NavItem: import("@emotion/styled").StyledComponent<import("@mui/material").ListItemOwnProps & import("@mui/material/OverridableComponent").CommonProps & Omit<Omit<React.DetailedHTMLProps<React.LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>, "ref"> & {
4
- ref?: ((instance: HTMLLIElement | null) => void) | React.RefObject<HTMLLIElement> | null | undefined;
5
- }, "style" | "className" | "children" | "alignItems" | "dense" | "disablePadding" | "disableGutters" | "classes" | "sx" | "divider" | "slotProps" | "slots" | "secondaryAction"> & import("@mui/system").MUIStyledCommonProps<Theme> & {
3
+ export declare const NavItem: import("@emotion/styled").StyledComponent<import("@mui/material").ListItemOwnProps & import("@mui/material/OverridableComponent").CommonProps & Omit<React.DetailedHTMLProps<React.LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>, "style" | "className" | "children" | "alignItems" | "dense" | "disablePadding" | "disableGutters" | "classes" | "sx" | "divider" | "slotProps" | "slots" | "secondaryAction"> & import("@mui/system").MUIStyledCommonProps<Theme> & {
6
4
  secondary?: boolean;
7
5
  }, {}, {}>;
8
6
  export type NavItemProps = React.ComponentProps<typeof NavItem>;
@@ -1 +1,2 @@
1
- export declare const DisableHighlight: import("@emotion/styled").StyledComponent<any, {}, {}>;
1
+ import { Theme } from '@mui/material/styles';
2
+ export declare const DisableHighlight: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<Theme> & import("react").ClassAttributes<HTMLSpanElement> & import("react").HTMLAttributes<HTMLSpanElement>, {}, {}>;
@@ -1 +1,2 @@
1
- export declare const FocusHighlight: import("@emotion/styled").StyledComponent<any, {}, {}>;
1
+ import { Theme } from '@mui/material/styles';
2
+ export declare const FocusHighlight: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<Theme> & import("react").ClassAttributes<HTMLSpanElement> & import("react").HTMLAttributes<HTMLSpanElement>, {}, {}>;
@@ -1,2 +1,2 @@
1
1
  import { Theme } from '@mui/material/styles';
2
- export declare const Highlight: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<Theme>, React.JSX.IntrinsicElements, {}>;
2
+ export declare const Highlight: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<Theme>, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {}>;
@@ -1,3 +1 @@
1
- export declare const SearchBarButtonBase: import("@emotion/styled").StyledComponent<import("@mui/material").ButtonBaseOwnProps & Omit<import("@mui/material").ButtonBaseOwnProps, keyof import("@mui/material").ButtonBaseOwnProps> & import("@mui/material/OverridableComponent").CommonProps & Omit<Omit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & {
2
- ref?: ((instance: HTMLButtonElement | null) => void) | import("react").RefObject<HTMLButtonElement> | null | undefined;
3
- }, "disabled" | "style" | "className" | "type" | "tabIndex" | "children" | "classes" | "action" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "nativeButton" | "onFocusVisible" | "sx" | "TouchRippleProps" | "touchRippleRef"> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
1
+ export declare const SearchBarButtonBase: import("@emotion/styled").StyledComponent<import("@mui/material").ButtonBaseOwnProps & Omit<import("@mui/material").ButtonBaseOwnProps, keyof import("@mui/material").ButtonBaseOwnProps> & import("@mui/material/OverridableComponent").CommonProps & Omit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "disabled" | "style" | "className" | "type" | "tabIndex" | "children" | "classes" | "action" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "nativeButton" | "onFocusVisible" | "sx" | "TouchRippleProps" | "touchRippleRef"> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
@@ -1,2 +1,2 @@
1
1
  import { Theme } from '@mui/material/styles';
2
- export declare const SearchBarIconWrapper: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<Theme>, React.JSX.IntrinsicElements, {}>;
2
+ export declare const SearchBarIconWrapper: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<Theme>, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
@@ -1,7 +1,5 @@
1
1
  import { SearchBarProps } from './types';
2
- export declare const SearchBarRoot: import("@emotion/styled").StyledComponent<import("@mui/material").PaperOwnProps & import("@mui/material/OverridableComponent").CommonProps & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
3
- ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
4
- }, "style" | "square" | "className" | "elevation" | "children" | "classes" | "sx" | "variant"> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme> & {
2
+ export declare const SearchBarRoot: import("@emotion/styled").StyledComponent<import("@mui/material").PaperOwnProps & import("@mui/material/OverridableComponent").CommonProps & Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style" | "square" | "className" | "elevation" | "children" | "classes" | "sx" | "variant"> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme> & {
5
3
  searchSize: NonNullable<SearchBarProps["size"]>;
6
4
  isFocused: boolean;
7
5
  }, {}, {}>;
@@ -1,5 +1,3 @@
1
- export declare const SearchBarTypography: import("@emotion/styled").StyledComponent<import("@mui/material").TypographyOwnProps & import("@mui/material/OverridableComponent").CommonProps & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & {
2
- ref?: ((instance: HTMLSpanElement | null) => void) | import("react").RefObject<HTMLSpanElement> | null | undefined;
3
- }, "style" | "color" | "className" | "children" | "classes" | "sx" | "variant" | "align" | "noWrap" | "gutterBottom" | "variantMapping"> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme> & {
1
+ export declare const SearchBarTypography: import("@emotion/styled").StyledComponent<import("@mui/material").TypographyOwnProps & import("@mui/material/OverridableComponent").CommonProps & Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "style" | "color" | "className" | "children" | "classes" | "sx" | "variant" | "align" | "noWrap" | "gutterBottom" | "variantMapping"> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme> & {
4
2
  hasIcon: boolean;
5
3
  }, {}, {}>;
@@ -27,7 +27,7 @@ export const SearchBar = forwardRef(({ placeholder, icon = Magnifier, size = 'sm
27
27
  useEffect(() => {
28
28
  onChangeRef.current = onChange;
29
29
  }, [onChange]);
30
- const delayedOnChangeRef = useRef();
30
+ const delayedOnChangeRef = useRef(undefined);
31
31
  useEffect(() => {
32
32
  delayedOnChangeRef.current = debounce((ev) => {
33
33
  onChangeRef.current(ev);
@@ -75,7 +75,7 @@ export const SearchBar = forwardRef(({ placeholder, icon = Magnifier, size = 'sm
75
75
  return (React.createElement(SearchBarRoot, { component: "form", elevation: elevation, searchSize: size, isFocused: effectivelyFocused, className: cx(className, {
76
76
  'SearchBar-focused': effectivelyFocused,
77
77
  'Mui-disabled': disabled
78
- }), ref: ref, onSubmit: (ev) => {
78
+ }), ref: ref, onSubmit: ev => {
79
79
  ev.preventDefault();
80
80
  props.onSubmit?.(ev);
81
81
  }, ...props },
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@linagora/twake-mui",
3
3
  "type": "module",
4
- "version": "9.17.0",
4
+ "version": "10.0.0",
5
5
  "description": "MUI v9 theme system for Twake applications",
6
6
  "author": "Twake",
7
7
  "license": "MIT",
@@ -53,16 +53,16 @@
53
53
  "@linagora/twake-icons": ">=2.10.0",
54
54
  "@mui/lab": "^9.0.0-beta.6",
55
55
  "@mui/material": "^9.2.0",
56
- "react": "^18",
57
- "react-dom": "^18",
58
- "twake-i18n": ">=0.5.0"
56
+ "react": "^18 || ^19",
57
+ "react-dom": "^18 || ^19",
58
+ "twake-i18n": ">=0.6.0"
59
59
  },
60
60
  "dependencies": {
61
61
  "@linagora/twake-css": "^1.0.0",
62
62
  "@mui/utils": "^9.2.0",
63
63
  "classnames": "^2.5.1",
64
64
  "react-virtuoso": "4.13.0",
65
- "rooks": "7.14.1"
65
+ "rooks": "8.4.0"
66
66
  },
67
67
  "devDependencies": {
68
68
  "@argos-ci/cli": "6.9.5",
@@ -80,8 +80,8 @@
80
80
  "@storybook/react-vite": "10.3.5",
81
81
  "@types/classnames": "^2.3.1",
82
82
  "@types/lodash": "4.17.24",
83
- "@types/react": "18.2.0",
84
- "@types/react-dom": "^18.2.0",
83
+ "@types/react": "19.3.0",
84
+ "@types/react-dom": "^19.3.0",
85
85
  "@vitest/browser-playwright": "4.1.11",
86
86
  "cozy-tsconfig": "^2.0.0",
87
87
  "eslint": "10.2.1",
@@ -89,10 +89,10 @@
89
89
  "eslint-plugin-storybook": "10.3.5",
90
90
  "lodash": "4.18.1",
91
91
  "playwright": "1.60.0",
92
- "react": "^18.2.0",
93
- "react-dom": "^18.2.0",
92
+ "react": "^19.3.0",
93
+ "react-dom": "^19.3.0",
94
94
  "storybook": "10.3.5",
95
- "twake-i18n": "^0.5.0",
95
+ "twake-i18n": "^0.6.0",
96
96
  "vite": "8.3.1",
97
97
  "vitest": "4.1.11"
98
98
  }