@linagora/twake-mui 9.11.0 → 9.11.2
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 +16 -0
- package/dist/components/ContactPopover/AttendeeInfo.js +2 -2
- package/dist/components/ContactPopover/ContactPopoverCalendarAction.d.ts +3 -1
- package/dist/components/ContactPopover/ContactPopoverCalendarAction.js +2 -2
- package/dist/components/ContactPopover/ContactPopoverChatAction.d.ts +3 -1
- package/dist/components/ContactPopover/ContactPopoverChatAction.js +2 -2
- package/dist/components/ContactPopover/ContactPopoverEmailAction.d.ts +3 -1
- package/dist/components/ContactPopover/ContactPopoverEmailAction.js +2 -2
- package/dist/components/ContactPopover/ContactPopoverVideoAction.d.ts +3 -1
- package/dist/components/ContactPopover/ContactPopoverVideoAction.js +2 -2
- package/dist/components/ContactPopover/index.js +2 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.js +0 -1
- package/package.json +1 -1
- package/dist/components/ExtendableFab/ExtendableFab.stories.d.ts +0 -7
- package/dist/components/ExtendableFab/ExtendableFab.stories.js +0 -43
- package/dist/components/ExtendableFab/index.d.ts +0 -16
- package/dist/components/ExtendableFab/index.js +0 -17
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
## @linagora/twake-mui [9.11.2](https://github.com/linagora/twake-ui/compare/@linagora/twake-mui@9.11.1...@linagora/twake-mui@9.11.2) (2026-09-29)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* Added break-word to long name and email ([fdfcd16](https://github.com/linagora/twake-ui/commit/fdfcd16b7a381eb9272e1e405f60fc65c85fbbdd))
|
|
7
|
+
* Added disable param for contact popover actions ([fe4af23](https://github.com/linagora/twake-ui/commit/fe4af23240350aa9df0b2a9a58a2bb255340efce))
|
|
8
|
+
* Removed fullwidth from email action button ([e7eb7da](https://github.com/linagora/twake-ui/commit/e7eb7dae06b5afc4421b5f77c512e765ee7b7dfb))
|
|
9
|
+
|
|
10
|
+
## @linagora/twake-mui [9.11.1](https://github.com/linagora/twake-ui/compare/@linagora/twake-mui@9.11.0...@linagora/twake-mui@9.11.1) (2026-09-29)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Reverts
|
|
14
|
+
|
|
15
|
+
* Revert "feat(twake-mui): Migrate ExtendableFab from cozy-ui" ([671a8f7](https://github.com/linagora/twake-ui/commit/671a8f7621b383aeec7071bda645d07560d6f470))
|
|
16
|
+
|
|
1
17
|
# @linagora/twake-mui [9.11.0](https://github.com/linagora/twake-ui/compare/@linagora/twake-mui@9.10.0...@linagora/twake-mui@9.11.0) (2026-09-29)
|
|
2
18
|
|
|
3
19
|
|
|
@@ -25,9 +25,9 @@ export const AttendeeInfo = ({ name, email, onEmailCopy }) => {
|
|
|
25
25
|
return (React.createElement(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2 } },
|
|
26
26
|
React.createElement(Avatar, { color: avatarColor, size: 48, sx: { width: 48, height: 48, fontSize: '1.25rem' } }, initials),
|
|
27
27
|
React.createElement(Box, { sx: { minWidth: 0 } },
|
|
28
|
-
name && name !== email ? (React.createElement(Typography, { variant: "body1", sx: { fontWeight: 500
|
|
28
|
+
name && name !== email ? (React.createElement(Typography, { variant: "body1", sx: { fontWeight: 500, wordBreak: 'break-word' } }, name)) : null,
|
|
29
29
|
React.createElement(Box, { sx: { display: 'flex', alignItems: 'center', gap: 1 } },
|
|
30
|
-
React.createElement(Typography, { variant: "body2", color: "text.secondary",
|
|
30
|
+
React.createElement(Typography, { variant: "body2", color: "text.secondary", sx: { wordBreak: 'break-word' } }, email),
|
|
31
31
|
React.createElement(IconButton, { size: "small", onClick: () => void handleCopy(), sx: { p: 0.5, color: alpha(theme.palette.grey[900], 0.9) }, title: showCopied
|
|
32
32
|
? t('ContactPopover.copiedTooltip')
|
|
33
33
|
: t('ContactPopover.copyTooltip') },
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export interface ContactPopoverCalendarActionProps {
|
|
2
2
|
/** URL for calendar action (e.g., view attendee's calendar) */
|
|
3
3
|
url: string;
|
|
4
|
+
/** Disable the action button */
|
|
5
|
+
disabled?: boolean;
|
|
4
6
|
}
|
|
5
|
-
export declare const ContactPopoverCalendarAction: ({ url }: ContactPopoverCalendarActionProps) => JSX.Element;
|
|
7
|
+
export declare const ContactPopoverCalendarAction: ({ url, disabled }: ContactPopoverCalendarActionProps) => JSX.Element;
|
|
@@ -2,8 +2,8 @@ import { Icon } from '@linagora/twake-icons';
|
|
|
2
2
|
import { CalendarToday } from '@linagora/twake-icons';
|
|
3
3
|
import { IconButton, useTheme } from '@mui/material';
|
|
4
4
|
import React from 'react';
|
|
5
|
-
export const ContactPopoverCalendarAction = ({ url }) => {
|
|
5
|
+
export const ContactPopoverCalendarAction = ({ url, disabled = false }) => {
|
|
6
6
|
const theme = useTheme();
|
|
7
|
-
return (React.createElement(IconButton, { href: url, target: "_blank", rel: "noopener noreferrer", size: "small", sx: { border: `1px solid ${theme.palette.divider}` } },
|
|
7
|
+
return (React.createElement(IconButton, { href: url, target: "_blank", rel: "noopener noreferrer", size: "small", disabled: disabled, sx: { border: `1px solid ${theme.palette.divider}` } },
|
|
8
8
|
React.createElement(Icon, { icon: CalendarToday, size: 20, color: theme.palette.text.icon })));
|
|
9
9
|
};
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export interface ContactPopoverChatActionProps {
|
|
2
2
|
/** URL for chat action (e.g., Twake Chat link) */
|
|
3
3
|
url: string;
|
|
4
|
+
/** Disable the action button */
|
|
5
|
+
disabled?: boolean;
|
|
4
6
|
}
|
|
5
|
-
export declare const ContactPopoverChatAction: ({ url }: ContactPopoverChatActionProps) => JSX.Element;
|
|
7
|
+
export declare const ContactPopoverChatAction: ({ url, disabled }: ContactPopoverChatActionProps) => JSX.Element;
|
|
@@ -2,8 +2,8 @@ import { Icon } from '@linagora/twake-icons';
|
|
|
2
2
|
import { Discuss } from '@linagora/twake-icons';
|
|
3
3
|
import { IconButton, useTheme } from '@mui/material';
|
|
4
4
|
import React from 'react';
|
|
5
|
-
export const ContactPopoverChatAction = ({ url }) => {
|
|
5
|
+
export const ContactPopoverChatAction = ({ url, disabled = false }) => {
|
|
6
6
|
const theme = useTheme();
|
|
7
|
-
return (React.createElement(IconButton, { href: url, target: "_blank", rel: "noopener noreferrer", size: "small", sx: { border: `1px solid ${theme.palette.divider}` } },
|
|
7
|
+
return (React.createElement(IconButton, { href: url, target: "_blank", rel: "noopener noreferrer", size: "small", disabled: disabled, sx: { border: `1px solid ${theme.palette.divider}` } },
|
|
8
8
|
React.createElement(Icon, { icon: Discuss, size: 20, color: theme.palette.text.icon })));
|
|
9
9
|
};
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export interface ContactPopoverEmailActionProps {
|
|
2
2
|
/** URL for email action */
|
|
3
3
|
url: string;
|
|
4
|
+
/** Disable the action button */
|
|
5
|
+
disabled?: boolean;
|
|
4
6
|
}
|
|
5
|
-
export declare const ContactPopoverEmailAction: ({ url }: ContactPopoverEmailActionProps) => JSX.Element;
|
|
7
|
+
export declare const ContactPopoverEmailAction: ({ url, disabled }: ContactPopoverEmailActionProps) => JSX.Element;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Button, useTheme } from '@mui/material';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { useI18n } from 'twake-i18n';
|
|
4
|
-
export const ContactPopoverEmailAction = ({ url }) => {
|
|
4
|
+
export const ContactPopoverEmailAction = ({ url, disabled = false }) => {
|
|
5
5
|
const theme = useTheme();
|
|
6
6
|
const { t } = useI18n();
|
|
7
|
-
return (React.createElement(Button, { href: url, target: "_blank", rel: "noopener noreferrer", variant: "outlined", size: "small",
|
|
7
|
+
return (React.createElement(Button, { href: url, target: "_blank", rel: "noopener noreferrer", variant: "outlined", size: "small", disabled: disabled, sx: {
|
|
8
8
|
justifyContent: 'center',
|
|
9
9
|
color: theme.palette.text.primary,
|
|
10
10
|
borderColor: theme.palette.divider
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export interface ContactPopoverVideoActionProps {
|
|
2
2
|
/** URL for video call action (e.g., Twake Meet link) */
|
|
3
3
|
url: string;
|
|
4
|
+
/** Disable the action button */
|
|
5
|
+
disabled?: boolean;
|
|
4
6
|
}
|
|
5
|
-
export declare const ContactPopoverVideoAction: ({ url }: ContactPopoverVideoActionProps) => JSX.Element;
|
|
7
|
+
export declare const ContactPopoverVideoAction: ({ url, disabled }: ContactPopoverVideoActionProps) => JSX.Element;
|
|
@@ -2,8 +2,8 @@ import { Icon } from '@linagora/twake-icons';
|
|
|
2
2
|
import { Camera } from '@linagora/twake-icons';
|
|
3
3
|
import { IconButton, useTheme } from '@mui/material';
|
|
4
4
|
import React from 'react';
|
|
5
|
-
export const ContactPopoverVideoAction = ({ url }) => {
|
|
5
|
+
export const ContactPopoverVideoAction = ({ url, disabled = false }) => {
|
|
6
6
|
const theme = useTheme();
|
|
7
|
-
return (React.createElement(IconButton, { href: url, target: "_blank", rel: "noopener noreferrer", size: "small", sx: { border: `1px solid ${theme.palette.divider}` } },
|
|
7
|
+
return (React.createElement(IconButton, { href: url, target: "_blank", rel: "noopener noreferrer", size: "small", disabled: disabled, sx: { border: `1px solid ${theme.palette.divider}` } },
|
|
8
8
|
React.createElement(Icon, { icon: Camera, size: 20, color: theme.palette.text.icon })));
|
|
9
9
|
};
|
|
@@ -113,7 +113,8 @@ export const ContactPopover = ({ name, email, children, onEmailCopy, onClose, di
|
|
|
113
113
|
paper: {
|
|
114
114
|
elevation: 4,
|
|
115
115
|
sx: {
|
|
116
|
-
borderRadius: 2
|
|
116
|
+
borderRadius: 2,
|
|
117
|
+
maxWidth: 400
|
|
117
118
|
},
|
|
118
119
|
onMouseEnter: handlePopoverMouseEnter,
|
|
119
120
|
onMouseLeave: handleMouseLeave
|
package/dist/index.d.ts
CHANGED
|
@@ -13,7 +13,6 @@ export { Dialog, default as DialogDefault } from './components/Dialog';
|
|
|
13
13
|
export { ContactPopover, default as ContactPopoverDefault } from './components/ContactPopover';
|
|
14
14
|
export { default as DropdownButton } from './components/DropdownButton';
|
|
15
15
|
export { default as DropdownText } from './components/DropdownText';
|
|
16
|
-
export { ExtendableFab } from './components/ExtendableFab';
|
|
17
16
|
export { default as ListItem } from './components/ListItem';
|
|
18
17
|
export { default as ListItemButton } from './components/ListItemButton';
|
|
19
18
|
export { default as ListItemText } from './components/ListItemText';
|
|
@@ -50,7 +49,6 @@ export type { ChipProps } from './components/Chip';
|
|
|
50
49
|
export type { DialogProps, DialogSize } from './components/Dialog';
|
|
51
50
|
export type { DropdownButtonProps } from './components/DropdownButton';
|
|
52
51
|
export type { DropdownTextProps, DropdownTextVariant } from './components/DropdownText';
|
|
53
|
-
export type { ExtendableFabProps, ScrollOptions } from './components/ExtendableFab';
|
|
54
52
|
export type { ListItemProps, ListItemGutters, ListItemSize } from './components/ListItem';
|
|
55
53
|
export type { ListItemButtonProps } from './components/ListItemButton';
|
|
56
54
|
export type { ListItemTextProps } from './components/ListItemText';
|
package/dist/index.js
CHANGED
|
@@ -16,7 +16,6 @@ export { Dialog, default as DialogDefault } from './components/Dialog';
|
|
|
16
16
|
export { ContactPopover, default as ContactPopoverDefault } from './components/ContactPopover';
|
|
17
17
|
export { default as DropdownButton } from './components/DropdownButton';
|
|
18
18
|
export { default as DropdownText } from './components/DropdownText';
|
|
19
|
-
export { ExtendableFab } from './components/ExtendableFab';
|
|
20
19
|
export { default as ListItem } from './components/ListItem';
|
|
21
20
|
export { default as ListItemButton } from './components/ListItemButton';
|
|
22
21
|
export { default as ListItemText } from './components/ListItemText';
|
package/package.json
CHANGED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
2
|
-
import { ExtendableFab } from './index';
|
|
3
|
-
declare const meta: Meta<typeof ExtendableFab>;
|
|
4
|
-
export default meta;
|
|
5
|
-
type Story = StoryObj<typeof meta>;
|
|
6
|
-
export declare const Default: Story;
|
|
7
|
-
export declare const Screenshot: Story;
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { Plus } from '@linagora/twake-icons';
|
|
2
|
-
import { Box, Stack } from '@mui/material';
|
|
3
|
-
import React from 'react';
|
|
4
|
-
import { ExtendableFab } from './index';
|
|
5
|
-
const meta = {
|
|
6
|
-
title: 'ExtendableFab',
|
|
7
|
-
component: ExtendableFab,
|
|
8
|
-
parameters: { layout: 'fullscreen' },
|
|
9
|
-
tags: ['autodocs'],
|
|
10
|
-
args: {
|
|
11
|
-
label: 'Add',
|
|
12
|
-
icon: Plus,
|
|
13
|
-
color: 'primary',
|
|
14
|
-
size: 'medium',
|
|
15
|
-
topLimit: 50,
|
|
16
|
-
scrollOptions: { delay: 250 }
|
|
17
|
-
},
|
|
18
|
-
argTypes: {
|
|
19
|
-
label: { control: 'text' },
|
|
20
|
-
icon: { control: false },
|
|
21
|
-
color: {
|
|
22
|
-
control: 'select',
|
|
23
|
-
options: ['default', 'primary', 'secondary', 'inherit']
|
|
24
|
-
},
|
|
25
|
-
size: { control: 'select', options: ['small', 'medium', 'large'] },
|
|
26
|
-
topLimit: { control: 'number' },
|
|
27
|
-
scrollOptions: { control: 'object' },
|
|
28
|
-
disabled: { control: 'boolean' }
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
export default meta;
|
|
32
|
-
export const Default = {
|
|
33
|
-
render: args => (React.createElement(Box, { sx: { p: 2 } },
|
|
34
|
-
React.createElement(ExtendableFab, { sx: { position: 'sticky', top: 16 }, ...args }),
|
|
35
|
-
React.createElement(Box, { sx: { py: 2 } }, "Scroll the page vertically"),
|
|
36
|
-
React.createElement(Box, { sx: { height: '200vh' } })))
|
|
37
|
-
};
|
|
38
|
-
export const Screenshot = {
|
|
39
|
-
tags: ['argos'],
|
|
40
|
-
render: () => (React.createElement(Stack, { spacing: 2, direction: "row", sx: { p: 4 } },
|
|
41
|
-
React.createElement(ExtendableFab, { label: "Add", icon: Plus, color: "primary" }),
|
|
42
|
-
React.createElement(ExtendableFab, { label: "Add", icon: Plus, color: "inherit" })))
|
|
43
|
-
};
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { IconProps } from '@linagora/twake-icons';
|
|
2
|
-
import { FabProps } from '@mui/material';
|
|
3
|
-
import React from 'react';
|
|
4
|
-
export interface ScrollOptions {
|
|
5
|
-
/** Delay in ms before the window scroll position is read */
|
|
6
|
-
delay?: number;
|
|
7
|
-
}
|
|
8
|
-
export interface ExtendableFabProps extends Omit<FabProps, 'ref' | 'children'> {
|
|
9
|
-
label: string;
|
|
10
|
-
icon: IconProps['icon'];
|
|
11
|
-
/** Window scroll offset in px below which the Fab stays extended */
|
|
12
|
-
topLimit?: number;
|
|
13
|
-
scrollOptions?: ScrollOptions;
|
|
14
|
-
}
|
|
15
|
-
export declare const ExtendableFab: React.ForwardRefExoticComponent<ExtendableFabProps & React.RefAttributes<HTMLButtonElement>>;
|
|
16
|
-
export default ExtendableFab;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Icon } from '@linagora/twake-icons';
|
|
2
|
-
import { Fab, styled } from '@mui/material';
|
|
3
|
-
import React, { forwardRef, useState } from 'react';
|
|
4
|
-
import { useDebounce, useOnWindowScroll } from 'rooks';
|
|
5
|
-
const GappedFab = styled(Fab)(({ theme }) => ({ gap: theme.spacing(1) }));
|
|
6
|
-
export const ExtendableFab = forwardRef(({ label, icon, topLimit = 50, scrollOptions, ...props }, ref) => {
|
|
7
|
-
const [isBelowTopLimit, setIsBelowTopLimit] = useState(true);
|
|
8
|
-
const handleScroll = useDebounce(() => {
|
|
9
|
-
setIsBelowTopLimit(window.scrollY < topLimit);
|
|
10
|
-
}, scrollOptions?.delay ?? 250);
|
|
11
|
-
useOnWindowScroll(handleScroll);
|
|
12
|
-
return (React.createElement(GappedFab, { ref: ref, "aria-label": label, variant: isBelowTopLimit ? 'extended' : 'circular', ...props },
|
|
13
|
-
React.createElement(Icon, { icon: icon }),
|
|
14
|
-
isBelowTopLimit && label));
|
|
15
|
-
});
|
|
16
|
-
ExtendableFab.displayName = 'ExtendableFab';
|
|
17
|
-
export default ExtendableFab;
|