@linagora/twake-mui 9.11.2 → 9.12.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,11 @@
1
+ # @linagora/twake-mui [9.12.0](https://github.com/linagora/twake-ui/compare/@linagora/twake-mui@9.11.2...@linagora/twake-mui@9.12.0) (2026-09-29)
2
+
3
+
4
+ ### Features
5
+
6
+ * **twake-mui:** Migrate ListItemSkeleton from cozy-ui ([b1ec8f8](https://github.com/linagora/twake-ui/commit/b1ec8f86a86f5caf1003dc139c57697e5e314bce))
7
+ * **twake-mui:** Migrate ListSkeleton from cozy-ui ([782492a](https://github.com/linagora/twake-ui/commit/782492a0a5b5f30f9454641e645081cb6689d415))
8
+
1
9
  ## @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
10
 
3
11
 
@@ -0,0 +1,7 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import ListItemSkeleton from './index';
3
+ declare const meta: Meta<typeof ListItemSkeleton>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
7
+ export declare const Screenshot: Story;
@@ -0,0 +1,43 @@
1
+ import { Box, List, Stack } from '@mui/material';
2
+ import React from 'react';
3
+ import ListItemSkeleton from './index';
4
+ const meta = {
5
+ title: 'ListItemSkeleton',
6
+ component: ListItemSkeleton,
7
+ tags: ['autodocs'],
8
+ argTypes: {
9
+ hasSecondary: { control: 'boolean' },
10
+ divider: { control: 'boolean' },
11
+ gutters: {
12
+ control: 'select',
13
+ options: ['default', 'double', 'disabled']
14
+ }
15
+ },
16
+ decorators: [
17
+ (Story) => (React.createElement(Box, { sx: { maxWidth: 480 } },
18
+ React.createElement(List, null,
19
+ React.createElement(Story, null))))
20
+ ]
21
+ };
22
+ export default meta;
23
+ export const Default = {
24
+ args: {
25
+ hasSecondary: false,
26
+ divider: false,
27
+ gutters: 'default'
28
+ }
29
+ };
30
+ const Example = ({ title, ...props }) => (React.createElement("section", null,
31
+ React.createElement("h3", null, title),
32
+ React.createElement(ListItemSkeleton, { ...props })));
33
+ // Visual Regression - Combined view for Argos testing
34
+ export const Screenshot = {
35
+ tags: ['argos'],
36
+ render: () => (React.createElement(Stack, { spacing: 4 },
37
+ React.createElement(Example, { title: "Default" }),
38
+ React.createElement(Example, { title: "With secondary", hasSecondary: true }),
39
+ React.createElement(Example, { title: "With divider", divider: true }),
40
+ React.createElement(Example, { title: "Disabled gutters", gutters: "disabled" }),
41
+ React.createElement(Example, { title: "Double gutters", gutters: "double" }),
42
+ React.createElement(Example, { title: "With secondary, divider and double gutters", hasSecondary: true, divider: true, gutters: "double" })))
43
+ };
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { ListItemGutters } from '../ListItem';
3
+ export interface ListItemSkeletonProps {
4
+ hasSecondary?: boolean;
5
+ divider?: boolean;
6
+ gutters?: ListItemGutters;
7
+ }
8
+ declare const ListItemSkeleton: ({ hasSecondary, divider, gutters }: ListItemSkeletonProps) => React.ReactElement;
9
+ export default ListItemSkeleton;
@@ -0,0 +1,12 @@
1
+ import { Divider, ListItemIcon, Skeleton } from '@mui/material';
2
+ import React from 'react';
3
+ import { radius } from '../../lib/radius';
4
+ import ListItem from '../ListItem';
5
+ import ListItemText from '../ListItemText';
6
+ const ListItemSkeleton = ({ hasSecondary, divider, gutters }) => (React.createElement(React.Fragment, null,
7
+ React.createElement(ListItem, { gutters: gutters },
8
+ React.createElement(ListItemIcon, null,
9
+ React.createElement(Skeleton, { variant: "rectangular", width: 32, height: 32, sx: { borderRadius: radius.md } })),
10
+ React.createElement(ListItemText, { primary: React.createElement(Skeleton, { width: "75%", height: 13 }), secondary: hasSecondary ? React.createElement(Skeleton, { width: "37%", height: 13 }) : undefined })),
11
+ divider && React.createElement(Divider, null)));
12
+ export default ListItemSkeleton;
@@ -0,0 +1,7 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import ListSkeleton from './index';
3
+ declare const meta: Meta<typeof ListSkeleton>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
7
+ export declare const Screenshot: Story;
@@ -0,0 +1,40 @@
1
+ import { Box, Stack } from '@mui/material';
2
+ import React from 'react';
3
+ import ListSkeleton from './index';
4
+ const meta = {
5
+ title: 'ListSkeleton',
6
+ component: ListSkeleton,
7
+ tags: ['autodocs'],
8
+ argTypes: {
9
+ count: { control: { type: 'number', min: 1 } },
10
+ hasSecondary: { control: 'boolean' },
11
+ withSubheader: { control: 'boolean' },
12
+ divider: { control: 'boolean' }
13
+ },
14
+ decorators: [
15
+ (Story) => (React.createElement(Box, { sx: { maxWidth: 480 } },
16
+ React.createElement(Story, null)))
17
+ ]
18
+ };
19
+ export default meta;
20
+ export const Default = {
21
+ args: {
22
+ count: 5,
23
+ hasSecondary: false,
24
+ withSubheader: false,
25
+ divider: false
26
+ }
27
+ };
28
+ const Example = ({ title, ...props }) => (React.createElement("section", null,
29
+ React.createElement("h3", null, title),
30
+ React.createElement(ListSkeleton, { count: 3, ...props })));
31
+ // Visual Regression - Combined view for Argos testing
32
+ export const Screenshot = {
33
+ tags: ['argos'],
34
+ render: () => (React.createElement(Stack, { spacing: 4 },
35
+ React.createElement(Example, { title: "Default" }),
36
+ React.createElement(Example, { title: "With secondary", hasSecondary: true }),
37
+ React.createElement(Example, { title: "With subheader", withSubheader: true }),
38
+ React.createElement(Example, { title: "With divider", divider: true }),
39
+ React.createElement(Example, { title: "With secondary, subheader and divider", hasSecondary: true, withSubheader: true, divider: true })))
40
+ };
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ export interface ListSkeletonProps {
3
+ count?: number;
4
+ hasSecondary?: boolean;
5
+ withSubheader?: boolean;
6
+ divider?: boolean;
7
+ }
8
+ declare const ListSkeleton: ({ count, hasSecondary, withSubheader, divider }: ListSkeletonProps) => React.ReactElement;
9
+ export default ListSkeleton;
@@ -0,0 +1,6 @@
1
+ import { List } from '@mui/material';
2
+ import React from 'react';
3
+ import ListItemSkeleton from '../ListItemSkeleton';
4
+ import ListSubheader from '../ListSubheader';
5
+ const ListSkeleton = ({ count = 1, hasSecondary, withSubheader, divider }) => (React.createElement(List, { subheader: withSubheader ? React.createElement(ListSubheader, null, "\u00A0") : undefined }, Array.from({ length: count }, (_, idx) => (React.createElement(ListItemSkeleton, { key: idx, hasSecondary: hasSecondary, divider: divider })))));
6
+ export default ListSkeleton;
package/dist/index.d.ts CHANGED
@@ -16,6 +16,8 @@ export { default as DropdownText } from './components/DropdownText';
16
16
  export { default as ListItem } from './components/ListItem';
17
17
  export { default as ListItemButton } from './components/ListItemButton';
18
18
  export { default as ListItemText } from './components/ListItemText';
19
+ export { default as ListItemSkeleton } from './components/ListItemSkeleton';
20
+ export { default as ListSkeleton } from './components/ListSkeleton';
19
21
  export { default as ListSubheader } from './components/ListSubheader';
20
22
  export { Tabs, default as TabsDefault } from './components/Tabs';
21
23
  export { Switch, default as SwitchDefault } from './components/Switch';
@@ -52,6 +54,8 @@ export type { DropdownTextProps, DropdownTextVariant } from './components/Dropdo
52
54
  export type { ListItemProps, ListItemGutters, ListItemSize } from './components/ListItem';
53
55
  export type { ListItemButtonProps } from './components/ListItemButton';
54
56
  export type { ListItemTextProps } from './components/ListItemText';
57
+ export type { ListItemSkeletonProps } from './components/ListItemSkeleton';
58
+ export type { ListSkeletonProps } from './components/ListSkeleton';
55
59
  export type { ListSubheaderProps } from './components/ListSubheader';
56
60
  export type { TabsProps } from './components/Tabs';
57
61
  export type { SwitchProps } from './components/Switch';
package/dist/index.js CHANGED
@@ -19,6 +19,8 @@ export { default as DropdownText } from './components/DropdownText';
19
19
  export { default as ListItem } from './components/ListItem';
20
20
  export { default as ListItemButton } from './components/ListItemButton';
21
21
  export { default as ListItemText } from './components/ListItemText';
22
+ export { default as ListItemSkeleton } from './components/ListItemSkeleton';
23
+ export { default as ListSkeleton } from './components/ListSkeleton';
22
24
  export { default as ListSubheader } from './components/ListSubheader';
23
25
  export { Tabs, default as TabsDefault } from './components/Tabs';
24
26
  export { Switch, default as SwitchDefault } from './components/Switch';
@@ -68,5 +68,5 @@ export const Screenshot = {
68
68
  tags: ['argos'],
69
69
  parameters: { layout: 'padded' },
70
70
  render: () => (React.createElement(Box, { sx: { minHeight: 440 } },
71
- React.createElement(ExampleMenu, { defaultOpen: true, autoFocus: false, disablePortal: true, disableScrollLock: true, transitionDuration: 0 })))
71
+ React.createElement(ExampleMenu, { defaultOpen: true, autoFocus: false, disablePortal: true, disableScrollLock: true })))
72
72
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@linagora/twake-mui",
3
3
  "type": "module",
4
- "version": "9.11.2",
4
+ "version": "9.12.0",
5
5
  "description": "MUI v9 theme system for Twake applications",
6
6
  "author": "Twake",
7
7
  "license": "MIT",