@selfcommunity/react-ui 1.2.13 → 1.2.14-alpha.1

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.
Files changed (70) hide show
  1. package/lib/cjs/assets/leaderboard/crown.d.ts +2 -0
  2. package/lib/cjs/assets/leaderboard/crown.js +3 -0
  3. package/lib/cjs/assets/leaderboard/edit.d.ts +2 -0
  4. package/lib/cjs/assets/leaderboard/edit.js +3 -0
  5. package/lib/cjs/assets/leaderboard/star.d.ts +2 -0
  6. package/lib/cjs/assets/leaderboard/star.js +3 -0
  7. package/lib/cjs/assets/leaderboard/trophy.d.ts +2 -0
  8. package/lib/cjs/assets/leaderboard/trophy.js +3 -0
  9. package/lib/cjs/assets/leaderboard/users.d.ts +2 -0
  10. package/lib/cjs/assets/leaderboard/users.js +3 -0
  11. package/lib/cjs/components/LeaderboardInfoWidget/LeaderboardInfoWidget.d.ts +36 -0
  12. package/lib/cjs/components/LeaderboardInfoWidget/LeaderboardInfoWidget.js +77 -0
  13. package/lib/cjs/components/LeaderboardInfoWidget/constants.d.ts +1 -0
  14. package/lib/cjs/components/LeaderboardInfoWidget/constants.js +4 -0
  15. package/lib/cjs/components/LeaderboardInfoWidget/index.d.ts +3 -0
  16. package/lib/cjs/components/LeaderboardInfoWidget/index.js +5 -0
  17. package/lib/cjs/components/LeaderboardPositionWidget/LeaderboardPositionWidget.d.ts +40 -0
  18. package/lib/cjs/components/LeaderboardPositionWidget/LeaderboardPositionWidget.js +93 -0
  19. package/lib/cjs/components/LeaderboardPositionWidget/Skeleton.d.ts +21 -0
  20. package/lib/cjs/components/LeaderboardPositionWidget/Skeleton.js +41 -0
  21. package/lib/cjs/components/LeaderboardPositionWidget/constants.d.ts +1 -0
  22. package/lib/cjs/components/LeaderboardPositionWidget/constants.js +4 -0
  23. package/lib/cjs/components/LeaderboardPositionWidget/index.d.ts +4 -0
  24. package/lib/cjs/components/LeaderboardPositionWidget/index.js +8 -0
  25. package/lib/cjs/components/LeaderboardWidget/LeaderboardWidget.d.ts +80 -0
  26. package/lib/cjs/components/LeaderboardWidget/LeaderboardWidget.js +155 -0
  27. package/lib/cjs/components/LeaderboardWidget/Skeleton.d.ts +29 -0
  28. package/lib/cjs/components/LeaderboardWidget/Skeleton.js +44 -0
  29. package/lib/cjs/components/LeaderboardWidget/constants.d.ts +1 -0
  30. package/lib/cjs/components/LeaderboardWidget/constants.js +4 -0
  31. package/lib/cjs/components/LeaderboardWidget/index.d.ts +4 -0
  32. package/lib/cjs/components/LeaderboardWidget/index.js +8 -0
  33. package/lib/cjs/index.d.ts +4 -1
  34. package/lib/cjs/index.js +13 -4
  35. package/lib/esm/assets/leaderboard/crown.d.ts +2 -0
  36. package/lib/esm/assets/leaderboard/crown.js +1 -0
  37. package/lib/esm/assets/leaderboard/edit.d.ts +2 -0
  38. package/lib/esm/assets/leaderboard/edit.js +1 -0
  39. package/lib/esm/assets/leaderboard/star.d.ts +2 -0
  40. package/lib/esm/assets/leaderboard/star.js +1 -0
  41. package/lib/esm/assets/leaderboard/trophy.d.ts +2 -0
  42. package/lib/esm/assets/leaderboard/trophy.js +1 -0
  43. package/lib/esm/assets/leaderboard/users.d.ts +2 -0
  44. package/lib/esm/assets/leaderboard/users.js +1 -0
  45. package/lib/esm/components/LeaderboardInfoWidget/LeaderboardInfoWidget.d.ts +36 -0
  46. package/lib/esm/components/LeaderboardInfoWidget/LeaderboardInfoWidget.js +74 -0
  47. package/lib/esm/components/LeaderboardInfoWidget/constants.d.ts +1 -0
  48. package/lib/esm/components/LeaderboardInfoWidget/constants.js +1 -0
  49. package/lib/esm/components/LeaderboardInfoWidget/index.d.ts +3 -0
  50. package/lib/esm/components/LeaderboardInfoWidget/index.js +2 -0
  51. package/lib/esm/components/LeaderboardPositionWidget/LeaderboardPositionWidget.d.ts +40 -0
  52. package/lib/esm/components/LeaderboardPositionWidget/LeaderboardPositionWidget.js +90 -0
  53. package/lib/esm/components/LeaderboardPositionWidget/Skeleton.d.ts +21 -0
  54. package/lib/esm/components/LeaderboardPositionWidget/Skeleton.js +37 -0
  55. package/lib/esm/components/LeaderboardPositionWidget/constants.d.ts +1 -0
  56. package/lib/esm/components/LeaderboardPositionWidget/constants.js +1 -0
  57. package/lib/esm/components/LeaderboardPositionWidget/index.d.ts +4 -0
  58. package/lib/esm/components/LeaderboardPositionWidget/index.js +4 -0
  59. package/lib/esm/components/LeaderboardWidget/LeaderboardWidget.d.ts +80 -0
  60. package/lib/esm/components/LeaderboardWidget/LeaderboardWidget.js +152 -0
  61. package/lib/esm/components/LeaderboardWidget/Skeleton.d.ts +29 -0
  62. package/lib/esm/components/LeaderboardWidget/Skeleton.js +40 -0
  63. package/lib/esm/components/LeaderboardWidget/constants.d.ts +1 -0
  64. package/lib/esm/components/LeaderboardWidget/constants.js +1 -0
  65. package/lib/esm/components/LeaderboardWidget/index.d.ts +4 -0
  66. package/lib/esm/components/LeaderboardWidget/index.js +4 -0
  67. package/lib/esm/index.d.ts +4 -1
  68. package/lib/esm/index.js +4 -1
  69. package/lib/umd/react-ui.js +1 -1
  70. package/package.json +8 -8
@@ -0,0 +1,40 @@
1
+ import { WidgetProps } from '../Widget';
2
+ import { SCLeaderboardEntry } from '@selfcommunity/types';
3
+ export interface LeaderboardPositionWidgetProps extends WidgetProps {
4
+ position: SCLeaderboardEntry;
5
+ isLoading?: boolean;
6
+ }
7
+ /**
8
+ * > API documentation for the Community-JS Leaderboard Position Widget component. Learn about the available props and the CSS API.
9
+ *
10
+ *
11
+ * This component renders a widget showing the current logged user position in the leaderboard.
12
+ * The widget is hidden if the user is not authenticated, the leaderboard feature is disabled or no position data is available.
13
+
14
+ #### Import
15
+
16
+ ```jsx
17
+ import {LeaderboardPositionWidget} from '@selfcommunity/react-ui';
18
+ ```
19
+
20
+ #### Component Name
21
+
22
+ The name `SCLeaderboardPositionWidget` can be used when providing style overrides in the theme.
23
+
24
+
25
+ #### CSS
26
+
27
+ |Rule Name|Global class|Description|
28
+ |---|---|---|
29
+ |root|.SCLeaderboardPositionWidget-root|Styles applied to the root element.|
30
+ |title|.SCLeaderboardPositionWidget-title|Styles applied to the title element.|
31
+ |user|.SCLeaderboardPositionWidget-user|Styles applied to the user element.|
32
+ |userAvatar|.SCLeaderboardPositionWidget-user-avatar|Styles applied to the user avatar element.|
33
+ |userName|.SCLeaderboardPositionWidget-user-name|Styles applied to the username element.|
34
+ |footer|.SCLeaderboardPositionWidget-footer|Styles applied to the footer element.|
35
+ |position|.SCLeaderboardPositionWidget-position|Styles applied to the position element.|
36
+ |score|.SCLeaderboardPositionWidget-score|Styles applied to the score element.|
37
+ *
38
+ * @param inProps
39
+ */
40
+ export default function LeaderboardPositionWidget(inProps: LeaderboardPositionWidgetProps): JSX.Element;
@@ -0,0 +1,90 @@
1
+ import { __rest } from "tslib";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useContext } from 'react';
4
+ import { Avatar, CardContent, Stack, Typography, styled } from '@mui/material';
5
+ import { FormattedMessage } from 'react-intl';
6
+ import classNames from 'classnames';
7
+ import Widget from '../Widget';
8
+ import { useThemeProps } from '@mui/system';
9
+ import { PREFIX } from './constants';
10
+ import { Link, SCPreferences, SCRoutes, SCUserContext, useSCPreferenceEnabled, useSCRouting } from '@selfcommunity/react-core';
11
+ import HiddenPlaceholder from '../../shared/HiddenPlaceholder';
12
+ import LeaderboardPositionWidgetSkeleton from './Skeleton';
13
+ const classes = {
14
+ root: `${PREFIX}-root`,
15
+ title: `${PREFIX}-title`,
16
+ user: `${PREFIX}-user`,
17
+ userAvatar: `${PREFIX}-user-avatar`,
18
+ userName: `${PREFIX}-user-name`,
19
+ footer: `${PREFIX}-footer`,
20
+ position: `${PREFIX}-position`,
21
+ score: `${PREFIX}-score`
22
+ };
23
+ const Root = styled(Widget, {
24
+ name: PREFIX,
25
+ slot: 'Root'
26
+ })(() => ({}));
27
+ /**
28
+ * > API documentation for the Community-JS Leaderboard Position Widget component. Learn about the available props and the CSS API.
29
+ *
30
+ *
31
+ * This component renders a widget showing the current logged user position in the leaderboard.
32
+ * The widget is hidden if the user is not authenticated, the leaderboard feature is disabled or no position data is available.
33
+
34
+ #### Import
35
+
36
+ ```jsx
37
+ import {LeaderboardPositionWidget} from '@selfcommunity/react-ui';
38
+ ```
39
+
40
+ #### Component Name
41
+
42
+ The name `SCLeaderboardPositionWidget` can be used when providing style overrides in the theme.
43
+
44
+
45
+ #### CSS
46
+
47
+ |Rule Name|Global class|Description|
48
+ |---|---|---|
49
+ |root|.SCLeaderboardPositionWidget-root|Styles applied to the root element.|
50
+ |title|.SCLeaderboardPositionWidget-title|Styles applied to the title element.|
51
+ |user|.SCLeaderboardPositionWidget-user|Styles applied to the user element.|
52
+ |userAvatar|.SCLeaderboardPositionWidget-user-avatar|Styles applied to the user avatar element.|
53
+ |userName|.SCLeaderboardPositionWidget-user-name|Styles applied to the username element.|
54
+ |footer|.SCLeaderboardPositionWidget-footer|Styles applied to the footer element.|
55
+ |position|.SCLeaderboardPositionWidget-position|Styles applied to the position element.|
56
+ |score|.SCLeaderboardPositionWidget-score|Styles applied to the score element.|
57
+ *
58
+ * @param inProps
59
+ */
60
+ export default function LeaderboardPositionWidget(inProps) {
61
+ const props = useThemeProps({
62
+ props: inProps,
63
+ name: PREFIX
64
+ });
65
+ const { className, position, isLoading = true } = props, rest = __rest(props, ["className", "position", "isLoading"]);
66
+ // CONTEXT
67
+ const scUserContext = useContext(SCUserContext);
68
+ const scRoutingContext = useSCRouting();
69
+ // PREFERENCES
70
+ const leaderboardsEnabled = useSCPreferenceEnabled(SCPreferences.CONFIGURATIONS_LEADERBOARDS_ENABLED);
71
+ /**
72
+ * Renders nothing if the user is not authenticated or the leaderboard feature is disabled
73
+ */
74
+ if (!scUserContext.user || !leaderboardsEnabled) {
75
+ return _jsx(HiddenPlaceholder, {});
76
+ }
77
+ /**
78
+ * Renders the skeleton while fetching the position data
79
+ */
80
+ if (isLoading) {
81
+ return _jsx(LeaderboardPositionWidgetSkeleton, {});
82
+ }
83
+ /**
84
+ * Renders nothing if there's no position data
85
+ */
86
+ if (!position) {
87
+ return _jsx(HiddenPlaceholder, {});
88
+ }
89
+ return (_jsx(Root, Object.assign({ className: classNames(classes.root, className) }, rest, { children: _jsxs(CardContent, { children: [_jsx(Typography, Object.assign({ variant: "h4", className: classes.title }, { children: _jsx(FormattedMessage, { id: "ui.leaderboardPositionWidget.title", defaultMessage: "ui.leaderboardPositionWidget.title" }) })), _jsxs(Stack, Object.assign({ direction: "row", spacing: 1.5, alignItems: "center", component: Link, to: scRoutingContext.url(SCRoutes.USER_PROFILE_ROUTE_NAME, { id: position.user.id }), className: classes.user }, { children: [_jsx(Avatar, { alt: position.user.username, src: position.user.avatar, className: classes.userAvatar }), _jsx(Typography, Object.assign({ variant: "body1", fontWeight: 600, className: classes.userName }, { children: position.user.real_name || position.user.username }))] })), _jsxs(Stack, Object.assign({ direction: "row", justifyContent: "space-between", alignItems: "center", className: classes.footer }, { children: [_jsx(Typography, Object.assign({ variant: "h3", className: classes.position }, { children: _jsx(FormattedMessage, { id: "ui.leaderboardPositionWidget.position", defaultMessage: "ui.leaderboardPositionWidget.position", values: { position: position.position } }) })), _jsx(Typography, Object.assign({ variant: "body1", className: classes.score }, { children: _jsx(FormattedMessage, { id: "ui.leaderboardPositionWidget.score", defaultMessage: "ui.leaderboardPositionWidget.score", values: { score: position.total_score } }) }))] }))] }) })));
90
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * > API documentation for the Community-JS Leaderboard Position Widget Skeleton component. Learn about the available props and the CSS API.
3
+
4
+ #### Import
5
+
6
+ ```jsx
7
+ import {LeaderboardPositionWidgetSkeleton} from '@selfcommunity/react-ui';
8
+ ```
9
+
10
+ #### Component Name
11
+
12
+ The name `SCLeaderboardPositionWidget-skeleton-root` can be used when providing style overrides in the theme.
13
+
14
+ #### CSS
15
+
16
+ |Rule Name|Global class|Description|
17
+ |---|---|---|
18
+ |root|.SCLeaderboardPositionWidget-skeleton-root|Styles applied to the root element.|
19
+ *
20
+ */
21
+ export default function LeaderboardPositionWidgetSkeleton(): JSX.Element;
@@ -0,0 +1,37 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { CardContent, Skeleton, Stack, styled } from '@mui/material';
3
+ import Widget from '../Widget';
4
+ import { PREFIX } from './constants';
5
+ const classes = {
6
+ root: `${PREFIX}-skeleton-root`,
7
+ header: `${PREFIX}-header`,
8
+ user: `${PREFIX}-user`,
9
+ footer: `${PREFIX}-footer`
10
+ };
11
+ const Root = styled(Widget, {
12
+ name: PREFIX,
13
+ slot: 'SkeletonRoot'
14
+ })(() => ({}));
15
+ /**
16
+ * > API documentation for the Community-JS Leaderboard Position Widget Skeleton component. Learn about the available props and the CSS API.
17
+
18
+ #### Import
19
+
20
+ ```jsx
21
+ import {LeaderboardPositionWidgetSkeleton} from '@selfcommunity/react-ui';
22
+ ```
23
+
24
+ #### Component Name
25
+
26
+ The name `SCLeaderboardPositionWidget-skeleton-root` can be used when providing style overrides in the theme.
27
+
28
+ #### CSS
29
+
30
+ |Rule Name|Global class|Description|
31
+ |---|---|---|
32
+ |root|.SCLeaderboardPositionWidget-skeleton-root|Styles applied to the root element.|
33
+ *
34
+ */
35
+ export default function LeaderboardPositionWidgetSkeleton() {
36
+ return (_jsx(Root, Object.assign({ className: classes.root }, { children: _jsxs(CardContent, { children: [_jsx(Skeleton, { animation: "wave", height: 28, width: "50%", variant: "rectangular", className: classes.header }), _jsxs(Stack, Object.assign({ direction: "row", spacing: 1.5, alignItems: "center", className: classes.user }, { children: [_jsx(Skeleton, { animation: "wave", variant: "circular", width: 40, height: 40 }), _jsx(Skeleton, { animation: "wave", height: 20, width: "60%", variant: "rectangular" })] })), _jsxs(Stack, Object.assign({ direction: "row", justifyContent: "space-between", alignItems: "center", className: classes.footer }, { children: [_jsx(Skeleton, { animation: "wave", height: 32, width: 40, variant: "rectangular" }), _jsx(Skeleton, { animation: "wave", height: 20, width: 50, variant: "rectangular" })] }))] }) })));
37
+ }
@@ -0,0 +1 @@
1
+ export declare const PREFIX = "SCLeaderboardPositionWidget";
@@ -0,0 +1 @@
1
+ export const PREFIX = 'SCLeaderboardPositionWidget';
@@ -0,0 +1,4 @@
1
+ import LeaderboardPositionWidget, { LeaderboardPositionWidgetProps } from './LeaderboardPositionWidget';
2
+ import LeaderboardPositionWidgetSkeleton from './Skeleton';
3
+ export default LeaderboardPositionWidget;
4
+ export { LeaderboardPositionWidgetProps, LeaderboardPositionWidgetSkeleton };
@@ -0,0 +1,4 @@
1
+ import LeaderboardPositionWidget from './LeaderboardPositionWidget';
2
+ import LeaderboardPositionWidgetSkeleton from './Skeleton';
3
+ export default LeaderboardPositionWidget;
4
+ export { LeaderboardPositionWidgetSkeleton };
@@ -0,0 +1,80 @@
1
+ import { WidgetProps } from '../Widget';
2
+ import { SCLeaderboardEntry } from '@selfcommunity/types';
3
+ export type LeaderboardWidgetVariant = 'full' | 'podium';
4
+ export type LeaderboardWidgetPeriod = 'week' | 'month' | 'year';
5
+ export interface LeaderboardWidgetProps extends WidgetProps {
6
+ /**
7
+ * The widget mode.
8
+ * `full` renders the podium and the general ranking list, `podium` renders the podium only.
9
+ * @default 'full'
10
+ */
11
+ mode?: LeaderboardWidgetVariant;
12
+ /**
13
+ * The period the podium refers to.
14
+ * @default 'month'
15
+ */
16
+ period?: LeaderboardWidgetPeriod;
17
+ /**
18
+ * The leaderboard entries to render. The top 3 entries (by position) are rendered in the podium,
19
+ * the full list is rendered in the general ranking (for the `full` mode).
20
+ */
21
+ entries?: SCLeaderboardEntry[];
22
+ /**
23
+ * If true, shows the skeleton in place of the widget content.
24
+ * @default true
25
+ */
26
+ isLoading?: boolean;
27
+ /**
28
+ * Callback fired when the user clicks on the "see more" action.
29
+ */
30
+ onSeeMoreClick?: () => void;
31
+ }
32
+ /**
33
+ * > API documentation for the Community-JS Leaderboard Widget component. Learn about the available props and the CSS API.
34
+ *
35
+ *
36
+ * This component renders a widget showing the top 3 users of the leaderboard for the given period (podium) and, optionally, the general ranking list.
37
+ * Leaderboard entries can be provided via the `entries` prop; if `mode` is `full` and no `entries` are provided, the component fetches the general
38
+ * ranking on its own.
39
+ * The widget is hidden if the leaderboard feature is disabled or no podium data is available.
40
+
41
+ #### Import
42
+
43
+ ```jsx
44
+ import {LeaderboardWidget} from '@selfcommunity/react-ui';
45
+ ```
46
+
47
+ #### Component Name
48
+
49
+ The name `SCLeaderboardWidget` can be used when providing style overrides in the theme.
50
+
51
+
52
+ #### CSS
53
+
54
+ |Rule Name|Global class|Description|
55
+ |---|---|---|
56
+ |root|.SCLeaderboardWidget-root|Styles applied to the root element.|
57
+ |podiumHeader|.SCLeaderboardWidget-podium-header|Styles applied to the podium header element.|
58
+ |podiumTitle|.SCLeaderboardWidget-podium-title|Styles applied to the podium title element.|
59
+ |podium|.SCLeaderboardWidget-podium|Styles applied to the podium element.|
60
+ |podiumItem|.SCLeaderboardWidget-podium-item|Styles applied to the single podium item.|
61
+ |podiumCrown|.SCLeaderboardWidget-podium-crown|Styles applied to the crown icon of the first podium item.|
62
+ |podiumAvatarWrap|.SCLeaderboardWidget-podium-avatar-wrap|Styles applied to the avatar wrapper of the single podium item.|
63
+ |podiumAvatar|.SCLeaderboardWidget-podium-avatar|Styles applied to the avatar of the single podium item.|
64
+ |podiumBadge|.SCLeaderboardWidget-podium-badge|Styles applied to the position badge of the single podium item.|
65
+ |podiumName|.SCLeaderboardWidget-podium-name|Styles applied to the name of the single podium item.|
66
+ |podiumScore|.SCLeaderboardWidget-podium-score|Styles applied to the score of the single podium item.|
67
+ |rankingHeader|.SCLeaderboardWidget-ranking-header|Styles applied to the ranking header element.|
68
+ |rankingTitle|.SCLeaderboardWidget-ranking-title|Styles applied to the ranking title element.|
69
+ |rankingList|.SCLeaderboardWidget-ranking-list|Styles applied to the ranking list element.|
70
+ |rankingItem|.SCLeaderboardWidget-ranking-item|Styles applied to the single ranking item.|
71
+ |rankingItemActive|.SCLeaderboardWidget-ranking-item-active|Styles applied to the single ranking item when it belongs to the logged user.|
72
+ |rankingPosition|.SCLeaderboardWidget-ranking-position|Styles applied to the position of the single ranking item.|
73
+ |rankingAvatar|.SCLeaderboardWidget-ranking-avatar|Styles applied to the avatar of the single ranking item.|
74
+ |rankingName|.SCLeaderboardWidget-ranking-name|Styles applied to the name of the single ranking item.|
75
+ |rankingScore|.SCLeaderboardWidget-ranking-score|Styles applied to the score of the single ranking item.|
76
+ |seeMore|.SCLeaderboardWidget-see-more|Styles applied to the "see more" action element.|
77
+ *
78
+ * @param inProps
79
+ */
80
+ export default function LeaderboardWidget(inProps: LeaderboardWidgetProps): JSX.Element;
@@ -0,0 +1,152 @@
1
+ import { __rest } from "tslib";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useContext, useEffect, useState } from 'react';
4
+ import { Avatar, Box, CardContent, Stack, Typography, styled } from '@mui/material';
5
+ import { FormattedMessage } from 'react-intl';
6
+ import classNames from 'classnames';
7
+ import Widget from '../Widget';
8
+ import { useThemeProps } from '@mui/system';
9
+ import { PREFIX } from './constants';
10
+ import crownIcon from '../../assets/leaderboard/crown';
11
+ import { SCPreferences, SCUserContext, useIsComponentMountedRef, useSCPreferenceEnabled } from '@selfcommunity/react-core';
12
+ import { ScoreService } from '@selfcommunity/api-services';
13
+ import { Logger } from '@selfcommunity/utils';
14
+ import { SCOPE_SC_UI } from '../../constants/Errors';
15
+ import HiddenPlaceholder from '../../shared/HiddenPlaceholder';
16
+ import LeaderboardWidgetSkeleton from './Skeleton';
17
+ const RANKING_LIMIT = 5;
18
+ const classes = {
19
+ root: `${PREFIX}-root`,
20
+ podiumHeader: `${PREFIX}-podium-header`,
21
+ podiumTitle: `${PREFIX}-podium-title`,
22
+ podium: `${PREFIX}-podium`,
23
+ podiumItem: `${PREFIX}-podium-item`,
24
+ podiumCrown: `${PREFIX}-podium-crown`,
25
+ podiumAvatarWrap: `${PREFIX}-podium-avatar-wrap`,
26
+ podiumAvatar: `${PREFIX}-podium-avatar`,
27
+ podiumBadge: `${PREFIX}-podium-badge`,
28
+ podiumName: `${PREFIX}-podium-name`,
29
+ podiumScore: `${PREFIX}-podium-score`,
30
+ rankingHeader: `${PREFIX}-ranking-header`,
31
+ rankingTitle: `${PREFIX}-ranking-title`,
32
+ rankingList: `${PREFIX}-ranking-list`,
33
+ rankingItem: `${PREFIX}-ranking-item`,
34
+ rankingItemActive: `${PREFIX}-ranking-item-active`,
35
+ rankingPosition: `${PREFIX}-ranking-position`,
36
+ rankingAvatar: `${PREFIX}-ranking-avatar`,
37
+ rankingName: `${PREFIX}-ranking-name`,
38
+ rankingScore: `${PREFIX}-ranking-score`,
39
+ seeMore: `${PREFIX}-see-more`
40
+ };
41
+ const Root = styled(Widget, {
42
+ name: PREFIX,
43
+ slot: 'Root'
44
+ })(() => ({}));
45
+ /**
46
+ * > API documentation for the Community-JS Leaderboard Widget component. Learn about the available props and the CSS API.
47
+ *
48
+ *
49
+ * This component renders a widget showing the top 3 users of the leaderboard for the given period (podium) and, optionally, the general ranking list.
50
+ * Leaderboard entries can be provided via the `entries` prop; if `mode` is `full` and no `entries` are provided, the component fetches the general
51
+ * ranking on its own.
52
+ * The widget is hidden if the leaderboard feature is disabled or no podium data is available.
53
+
54
+ #### Import
55
+
56
+ ```jsx
57
+ import {LeaderboardWidget} from '@selfcommunity/react-ui';
58
+ ```
59
+
60
+ #### Component Name
61
+
62
+ The name `SCLeaderboardWidget` can be used when providing style overrides in the theme.
63
+
64
+
65
+ #### CSS
66
+
67
+ |Rule Name|Global class|Description|
68
+ |---|---|---|
69
+ |root|.SCLeaderboardWidget-root|Styles applied to the root element.|
70
+ |podiumHeader|.SCLeaderboardWidget-podium-header|Styles applied to the podium header element.|
71
+ |podiumTitle|.SCLeaderboardWidget-podium-title|Styles applied to the podium title element.|
72
+ |podium|.SCLeaderboardWidget-podium|Styles applied to the podium element.|
73
+ |podiumItem|.SCLeaderboardWidget-podium-item|Styles applied to the single podium item.|
74
+ |podiumCrown|.SCLeaderboardWidget-podium-crown|Styles applied to the crown icon of the first podium item.|
75
+ |podiumAvatarWrap|.SCLeaderboardWidget-podium-avatar-wrap|Styles applied to the avatar wrapper of the single podium item.|
76
+ |podiumAvatar|.SCLeaderboardWidget-podium-avatar|Styles applied to the avatar of the single podium item.|
77
+ |podiumBadge|.SCLeaderboardWidget-podium-badge|Styles applied to the position badge of the single podium item.|
78
+ |podiumName|.SCLeaderboardWidget-podium-name|Styles applied to the name of the single podium item.|
79
+ |podiumScore|.SCLeaderboardWidget-podium-score|Styles applied to the score of the single podium item.|
80
+ |rankingHeader|.SCLeaderboardWidget-ranking-header|Styles applied to the ranking header element.|
81
+ |rankingTitle|.SCLeaderboardWidget-ranking-title|Styles applied to the ranking title element.|
82
+ |rankingList|.SCLeaderboardWidget-ranking-list|Styles applied to the ranking list element.|
83
+ |rankingItem|.SCLeaderboardWidget-ranking-item|Styles applied to the single ranking item.|
84
+ |rankingItemActive|.SCLeaderboardWidget-ranking-item-active|Styles applied to the single ranking item when it belongs to the logged user.|
85
+ |rankingPosition|.SCLeaderboardWidget-ranking-position|Styles applied to the position of the single ranking item.|
86
+ |rankingAvatar|.SCLeaderboardWidget-ranking-avatar|Styles applied to the avatar of the single ranking item.|
87
+ |rankingName|.SCLeaderboardWidget-ranking-name|Styles applied to the name of the single ranking item.|
88
+ |rankingScore|.SCLeaderboardWidget-ranking-score|Styles applied to the score of the single ranking item.|
89
+ |seeMore|.SCLeaderboardWidget-see-more|Styles applied to the "see more" action element.|
90
+ *
91
+ * @param inProps
92
+ */
93
+ export default function LeaderboardWidget(inProps) {
94
+ const props = useThemeProps({
95
+ props: inProps,
96
+ name: PREFIX
97
+ });
98
+ const { className, mode = 'full', period = 'month', entries: entriesProp, isLoading: isLoadingProp = true, onSeeMoreClick } = props, rest = __rest(props, ["className", "mode", "period", "entries", "isLoading", "onSeeMoreClick"]);
99
+ // CONTEXT
100
+ const scUserContext = useContext(SCUserContext);
101
+ // PREFERENCES
102
+ const leaderboardsEnabled = useSCPreferenceEnabled(SCPreferences.CONFIGURATIONS_LEADERBOARDS_ENABLED);
103
+ // Self-fetches the leaderboard data when running in `full` mode and no entries are provided by the parent
104
+ const shouldFetch = mode === 'full' && !entriesProp;
105
+ const [fetchedEntries, setFetchedEntries] = useState([]);
106
+ const [isFetching, setIsFetching] = useState(shouldFetch);
107
+ const isMountedRef = useIsComponentMountedRef();
108
+ useEffect(() => {
109
+ if (!shouldFetch) {
110
+ return;
111
+ }
112
+ setIsFetching(true);
113
+ ScoreService.getLeaderboards({ limit: RANKING_LIMIT })
114
+ .then((data) => {
115
+ if (isMountedRef.current) {
116
+ setFetchedEntries(data.results);
117
+ setIsFetching(false);
118
+ }
119
+ })
120
+ .catch((error) => {
121
+ Logger.error(SCOPE_SC_UI, error);
122
+ if (isMountedRef.current) {
123
+ setIsFetching(false);
124
+ }
125
+ });
126
+ }, [shouldFetch, period]);
127
+ const entries = shouldFetch ? fetchedEntries : entriesProp || [];
128
+ const isLoading = shouldFetch ? isFetching : isLoadingProp;
129
+ /**
130
+ * Renders nothing if the leaderboard feature is disabled
131
+ */
132
+ if (!leaderboardsEnabled) {
133
+ return _jsx(HiddenPlaceholder, {});
134
+ }
135
+ /**
136
+ * Renders the skeleton while the leaderboard data is loading
137
+ */
138
+ if (isLoading) {
139
+ return _jsx(LeaderboardWidgetSkeleton, { mode: mode });
140
+ }
141
+ const podium = entries.filter((entry) => entry.position <= 3);
142
+ /**
143
+ * Renders nothing if there's no podium data
144
+ */
145
+ if (!podium.length) {
146
+ return _jsx(HiddenPlaceholder, {});
147
+ }
148
+ return (_jsx(Root, Object.assign({ className: classNames(classes.root, className) }, rest, { children: _jsxs(CardContent, { children: [_jsx(Stack, Object.assign({ direction: "row", justifyContent: "space-between", alignItems: "center", className: classes.podiumHeader }, { children: _jsx(Typography, Object.assign({ variant: "h4", className: classes.podiumTitle }, { children: _jsx(FormattedMessage, { id: "ui.leaderboardWidget.podium.title", defaultMessage: "ui.leaderboardWidget.podium.title", values: { period } }) })) })), _jsx(Stack, Object.assign({ direction: "row", justifyContent: "center", alignItems: "flex-end", className: classes.podium }, { children: podium.map((entry) => (_jsxs(Stack, Object.assign({ alignItems: "center", className: classNames(classes.podiumItem, `${classes.podiumItem}-${entry.position}`) }, { children: [_jsxs(Box, Object.assign({ className: classes.podiumAvatarWrap }, { children: [entry.position === 1 && (_jsx(Box, { component: "span", className: classes.podiumCrown, style: { maskImage: `url(${crownIcon})`, WebkitMaskImage: `url(${crownIcon})` } })), _jsx(Avatar, { alt: entry.user.username, src: entry.user.avatar, className: classes.podiumAvatar }), _jsx(Box, Object.assign({ component: "span", className: classes.podiumBadge }, { children: entry.position }))] })), _jsx(Typography, Object.assign({ variant: "body2", fontWeight: 600, className: classes.podiumName }, { children: entry.user.real_name || entry.user.username })), _jsx(Typography, Object.assign({ variant: "caption", className: classes.podiumScore }, { children: _jsx(FormattedMessage, { id: "ui.leaderboardWidget.podium.score", defaultMessage: "ui.leaderboardWidget.podium.score", values: { score: entry.total_score } }) }))] }), entry.user.id))) })), mode === 'full' && entries.length > 0 && (_jsxs(_Fragment, { children: [_jsx(Stack, Object.assign({ direction: "row", justifyContent: "space-between", alignItems: "center", className: classes.rankingHeader }, { children: _jsx(Typography, Object.assign({ variant: "h4", className: classes.rankingTitle }, { children: _jsx(FormattedMessage, { id: "ui.leaderboardWidget.ranking.title", defaultMessage: "ui.leaderboardWidget.ranking.title" }) })) })), _jsx(Stack, Object.assign({ spacing: 1, className: classes.rankingList }, { children: entries.map((entry) => {
149
+ const isMe = Boolean(scUserContext.user) && entry.user.id === scUserContext.user.id && entry.position <= RANKING_LIMIT;
150
+ return (_jsxs(Stack, Object.assign({ direction: "row", spacing: 1.5, alignItems: "center", className: classNames(classes.rankingItem, { [classes.rankingItemActive]: isMe }) }, { children: [_jsx(Typography, Object.assign({ variant: "body2", className: classes.rankingPosition }, { children: entry.position })), _jsx(Avatar, { alt: entry.user.username, src: entry.user.avatar, className: classes.rankingAvatar }), _jsx(Typography, Object.assign({ variant: "body2", fontWeight: isMe ? 600 : 400, className: classes.rankingName }, { children: isMe ? (_jsx(FormattedMessage, { id: "ui.leaderboardWidget.ranking.you", defaultMessage: "ui.leaderboardWidget.ranking.you" })) : (entry.user.real_name || entry.user.username) })), _jsx(Typography, Object.assign({ variant: "body2", className: classes.rankingScore }, { children: _jsx(FormattedMessage, { id: "ui.leaderboardWidget.ranking.score", defaultMessage: "ui.leaderboardWidget.ranking.score", values: { score: entry.total_score } }) }))] }), entry.user.id));
151
+ }) })), _jsx(Typography, Object.assign({ component: "span", role: "button", tabIndex: 0, onClick: onSeeMoreClick, className: classes.seeMore }, { children: _jsx(FormattedMessage, { id: "ui.leaderboardWidget.ranking.seeMore", defaultMessage: "ui.leaderboardWidget.ranking.seeMore" }) }))] }))] }) })));
152
+ }
@@ -0,0 +1,29 @@
1
+ import { LeaderboardWidgetVariant } from './LeaderboardWidget';
2
+ export interface LeaderboardWidgetSkeletonProps {
3
+ /**
4
+ * The widget mode.
5
+ * @default 'full'
6
+ */
7
+ mode?: LeaderboardWidgetVariant;
8
+ }
9
+ /**
10
+ * > API documentation for the Community-JS Leaderboard Widget Skeleton component. Learn about the available props and the CSS API.
11
+
12
+ #### Import
13
+
14
+ ```jsx
15
+ import {LeaderboardWidgetSkeleton} from '@selfcommunity/react-ui';
16
+ ```
17
+
18
+ #### Component Name
19
+
20
+ The name `SCLeaderboardWidget-skeleton-root` can be used when providing style overrides in the theme.
21
+
22
+ #### CSS
23
+
24
+ |Rule Name|Global class|Description|
25
+ |---|---|---|
26
+ |root|.SCLeaderboardWidget-skeleton-root|Styles applied to the root element.|
27
+ *
28
+ */
29
+ export default function LeaderboardWidgetSkeleton({ mode }: LeaderboardWidgetSkeletonProps): JSX.Element;
@@ -0,0 +1,40 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { CardContent, Skeleton, Stack, styled } from '@mui/material';
3
+ import Widget from '../Widget';
4
+ import { PREFIX } from './constants';
5
+ const classes = {
6
+ root: `${PREFIX}-skeleton-root`,
7
+ podiumHeader: `${PREFIX}-podium-header`,
8
+ podium: `${PREFIX}-podium`,
9
+ podiumItem: `${PREFIX}-podium-item`,
10
+ rankingHeader: `${PREFIX}-ranking-header`,
11
+ rankingList: `${PREFIX}-ranking-list`,
12
+ rankingItem: `${PREFIX}-ranking-item`
13
+ };
14
+ const Root = styled(Widget, {
15
+ name: PREFIX,
16
+ slot: 'SkeletonRoot'
17
+ })(() => ({}));
18
+ /**
19
+ * > API documentation for the Community-JS Leaderboard Widget Skeleton component. Learn about the available props and the CSS API.
20
+
21
+ #### Import
22
+
23
+ ```jsx
24
+ import {LeaderboardWidgetSkeleton} from '@selfcommunity/react-ui';
25
+ ```
26
+
27
+ #### Component Name
28
+
29
+ The name `SCLeaderboardWidget-skeleton-root` can be used when providing style overrides in the theme.
30
+
31
+ #### CSS
32
+
33
+ |Rule Name|Global class|Description|
34
+ |---|---|---|
35
+ |root|.SCLeaderboardWidget-skeleton-root|Styles applied to the root element.|
36
+ *
37
+ */
38
+ export default function LeaderboardWidgetSkeleton({ mode = 'full' }) {
39
+ return (_jsx(Root, Object.assign({ className: classes.root }, { children: _jsxs(CardContent, { children: [_jsx(Stack, Object.assign({ direction: "row", justifyContent: "space-between", alignItems: "center", className: classes.podiumHeader }, { children: _jsx(Skeleton, { animation: "wave", height: 28, width: "50%", variant: "rectangular" }) })), _jsx(Stack, Object.assign({ direction: "row", justifyContent: "center", alignItems: "flex-end", spacing: 2, className: classes.podium }, { children: [1, 2, 3].map((item) => (_jsxs(Stack, Object.assign({ spacing: 1, alignItems: "center", className: classes.podiumItem }, { children: [_jsx(Skeleton, { animation: "wave", variant: "circular", width: 56, height: 56 }), _jsx(Skeleton, { animation: "wave", height: 16, width: 60, variant: "rectangular" }), _jsx(Skeleton, { animation: "wave", height: 14, width: 40, variant: "rectangular" })] }), item))) })), mode === 'full' && (_jsxs(_Fragment, { children: [_jsx(Stack, Object.assign({ direction: "row", justifyContent: "space-between", alignItems: "center", className: classes.rankingHeader }, { children: _jsx(Skeleton, { animation: "wave", height: 28, width: "50%", variant: "rectangular" }) })), _jsx(Stack, Object.assign({ spacing: 1, className: classes.rankingList }, { children: [1, 2, 3, 4, 5].map((item) => (_jsxs(Stack, Object.assign({ direction: "row", spacing: 1.5, alignItems: "center", className: classes.rankingItem }, { children: [_jsx(Skeleton, { animation: "wave", variant: "circular", width: 36, height: 36 }), _jsx(Skeleton, { animation: "wave", height: 16, width: "60%", variant: "rectangular" })] }), item))) }))] }))] }) })));
40
+ }
@@ -0,0 +1 @@
1
+ export declare const PREFIX = "SCLeaderboardWidget";
@@ -0,0 +1 @@
1
+ export const PREFIX = 'SCLeaderboardWidget';
@@ -0,0 +1,4 @@
1
+ import LeaderboardWidget, { LeaderboardWidgetProps, LeaderboardWidgetVariant } from './LeaderboardWidget';
2
+ import LeaderboardWidgetSkeleton from './Skeleton';
3
+ export default LeaderboardWidget;
4
+ export { LeaderboardWidgetProps, LeaderboardWidgetVariant, LeaderboardWidgetSkeleton };
@@ -0,0 +1,4 @@
1
+ import LeaderboardWidget from './LeaderboardWidget';
2
+ import LeaderboardWidgetSkeleton from './Skeleton';
3
+ export default LeaderboardWidget;
4
+ export { LeaderboardWidgetSkeleton };
@@ -87,6 +87,9 @@ import IncubatorSubscribeButton, { IncubatorSubscribeButtonProps } from './compo
87
87
  import IncubatorSuggestionWidget, { IncubatorSuggestionWidgetProps } from './components/IncubatorSuggestionWidget';
88
88
  import InlineComposerWidget, { InlineComposerWidgetProps, InlineComposerWidgetSkeleton } from './components/InlineComposerWidget';
89
89
  import InviteUserEventButton, { InviteUserEventButtonProps } from './components/InviteUserEventButton';
90
+ import LeaderboardInfoWidget, { LeaderboardInfoWidgetProps } from './components/LeaderboardInfoWidget';
91
+ import LeaderboardPositionWidget, { LeaderboardPositionWidgetProps, LeaderboardPositionWidgetSkeleton } from './components/LeaderboardPositionWidget';
92
+ import LeaderboardWidget, { LeaderboardWidgetProps, LeaderboardWidgetSkeleton, LeaderboardWidgetVariant } from './components/LeaderboardWidget';
90
93
  import LessonAppbar, { LessonAppbarProps } from './components/LessonAppbar';
91
94
  import LessonDrawer, { LessonDrawerProps } from './components/LessonDrawer';
92
95
  import LessonEditForm, { LessonEditFormProps } from './components/LessonEditForm';
@@ -235,4 +238,4 @@ import DefaultCoverSelfCommunity from './assets/deafultCover';
235
238
  /**
236
239
  * List all exports
237
240
  */
238
- export { AcceptRequestUserEventButton, AcceptRequestUserEventButtonProps, AccountChangeMailValidation, AccountChangeMailValidationProps, AccountDataPortability, AccountDataPortabilityButton, AccountDataPortabilityButtonProps, AccountDataPortabilityProps, AccountDelete, AccountDeleteButton, AccountDeleteButtonProps, AccountDeleteProps, AccountRecover, AccountRecoverProps, AccountReset, AccountResetProps, AccountVerify, AccountVerifyProps, AvatarGroupSkeleton, BaseDialog, BaseDialogProps, BaseItem, BaseItemProps, BaseLightbox, BaseLightboxProps, BottomNavigation, BottomNavigationProps, BroadcastMessages, BroadcastMessagesProps, BroadcastMessagesSkeleton, bytesToSize, generateRoomId, randomString, decodePassphrase, encodePassphrase, Calendar, CalendarProps, Categories, CategoriesPopularWidget, CategoriesPopularWidgetSkeleton, CategoriesProps, CategoriesSkeleton, CategoriesSkeletonProps, CategoriesSuggestionWidget, CategoriesSuggestionWidgetProps, CategoriesSuggestionWidgetSkeleton, Category, CategoryAutocomplete, CategoryAutocompleteProps, CategoryFollowButton, CategoryFollowButtonProps, CategoryFollowersButton, CategoryFollowersButtonProps, CategoryHeader, CategoryHeaderProps, CategoryHeaderSkeleton, CategoryProps, CategorySkeleton, CategoryTrendingFeedWidget, CategoryTrendingFeedWidgetProps, CategoryTrendingFeedWidgetSkeleton, CategoryTrendingPeopleWidgetSkeleton, CategoryTrendingUsersWidget, CategoryTrendingUsersWidgetProps, CentralProgress, ChangeCover, ChangeCoverProps, ChangeGroupCover, ChangeGroupCoverProps, ChangeGroupPicture, ChangeGroupPictureProps, ChangePicture, ChangePictureProps, CommentObject, CommentObjectProps, CommentObjectReply, CommentObjectReplyProps, CommentObjectSkeleton, CommentsFeedObject, CommentsFeedObjectProps, CommentsFeedObjectSkeleton, CommentsObject, CommentsObjectProps, CommentsObjectSkeleton, Composer, ComposerIconButton, ComposerIconButtonProps, ComposerProps, ConfirmDialog, ConnectionUserButton, ConsentSolution, ConsentSolutionButton, ConsentSolutionButtonProps, ConsentSolutionProps, ConsentSolutionSkeleton, ContributionUtils, SCCourseEditTabType, Course, CourseProps, CourseSkeleton, CourseSkeletonProps, CourseJoinButton, CourseJoinButtonProps, Courses, CoursesProps, CoursesSkeleton, CoursesSkeletonProps, CourseTypePopover, CourseTypePopoverProps, CreateCourseButton, CreateCourseButtonProps, CourseContentMenu, CourseContentMenuProps, CourseDashboard, TeacherCourseDashboardProps, TeacherSkeleton, StudentCourseDashboardProps, StudentSkeleton, CreateEventButton, CreateEventButtonProps, CreateEventWidget, CreateEventWidgetProps, CreateEventWidgetSkeleton, CreateGroupButton, EventForm, EventFormProps, EventFormDialog, EventFormDialogProps, CreateGroupButtonProps, CustomAdv, CustomAdvProps, CustomAdvSkeleton, DEFAULT_FIELDS, DEFAULT_PAGINATION_LIMIT, DEFAULT_PAGINATION_OFFSET, DEFAULT_PAGINATION_QUERY_PARAM_NAME, DEFAULT_PRELOAD_OFFSET_VIEWPORT, DEFAULT_WIDGETS_NUMBER, DefaultDrawerContent, DefaultDrawerContentProps, DefaultHeaderContent, DefaultHeaderContentProps, DefaultDrawerSkeleton, DefaultDrawerSkeletonProps, EditEventButton, EditEventButtonProps, EditGroupButton, EditGroupButtonProps, EditMediaProps, Editor, EditorProps, EditorSkeleton, EmailTextField, EditCourse, EditCourseProps, EditCourseSkeleton, Event, EventActionsMenu, EventActionsMenuProps, EventHeader, EventHeaderProps, EventHeaderSkeleton, EventInfoDetails, EventInfoDetailsProps, EventInfoWidget, EventInfoWidgetProps, EventInviteButton, EventInviteButtonProps, EventLocationWidget, EventLocationWidgetProps, EventLocationWidgetSkeleton, EventMediaWidget, EventMediaWidgetProps, EventMediaWidgetSkeleton, EventMembersWidget, EventMembersWidgetProps, EventMembersWidgetSkeleton, EventParticipantsButton, EventParticipantsButtonProps, EventProps, Events, EventSkeleton, EventSkeletonProps, EventsProps, EventsSkeleton, EventsSkeletonProps, FACEBOOK_SHARE, Feed, FeedObject, FeedObjectMediaPreview, FeedObjectMediaPreviewProps, FeedObjectProps, FeedObjectSkeleton, FeedProps, FeedRef, FeedSidebarProps, FeedSkeleton, FeedUpdatesWidget, FeedUpdatesWidgetProps, FeedUpdatesWidgetSkeleton, File, FollowUserButton, FollowUserButtonProps, Footer, FooterProps, FooterSkeleton, FriendshipButtonProps, FriendshipUserButton, GenericSkeleton, getRelativeTime, getUnseenNotification, getUnseenNotificationCounter, getUrlLesson, Group, GroupActionsMenu, GroupActionsMenuProps, GroupForm, GroupFormProps, GroupHeader, GroupHeaderProps, GroupHeaderSkeleton, GroupInfoWidget, GroupInfoWidgetProps, GroupInfoWidgetSkeleton, GroupInviteButton, GroupInviteButtonProps, GroupInvitedWidget, GroupInvitedWidgetProps, GroupInvitedWidgetSkeleton, GroupMembersButton, GroupMembersButtonProps, GroupMembersWidget, GroupMembersWidgetProps, GroupMembersWidgetSkeleton, GroupProps, GroupRequestsWidget, GroupRequestsWidgetProps, GroupRequestsWidgetSkeleton, Groups, GroupSettingsIconButton, GroupSettingsIconButtonProps, GroupSkeleton, GroupsProps, GroupsSkeleton, GroupSubscribeButton, GroupSubscribeButtonProps, AccordionLessons, AccordionLessonsProps, AccordionLessonsSkeleton, AddUsersButton, AddUsersButtonProps, CourseUsersTable, CourseUsersTableProps, CourseUsersTableSkeleton, EmptyStatus, EmptyStatusProps, HiddenPlaceholder, Incubator, IncubatorDetail, IncubatorDetailProps, IncubatorListWidget, IncubatorListWidgetProps, IncubatorProps, IncubatorSubscribeButton, IncubatorSubscribeButtonProps, IncubatorSuggestionWidget, IncubatorSuggestionWidgetProps, InfiniteScroll, ScrollContainer, InlineComposerWidget, InlineComposerWidgetProps, InlineComposerWidgetSkeleton, InviteUserEventButton, LessonAppbar, LessonAppbarProps, LessonDrawer, LessonDrawerProps, LessonEditForm, LessonEditFormProps, LessonObject, LessonObjectProps, InviteUserEventButtonProps, LanguageSwitcher, LEGAL_POLICIES, CourseCompletedDialog, CourseCompletedDialogProps, Lightbox, LightboxProps, Link, LINKEDIN_SHARE, LocationAutocomplete, LocationAutocompleteProps, LogoSelfCommunity, DefaultCoverSelfCommunity, LoyaltyProgramWidget, LoyaltyProgramWidgetProps, LoyaltyProgramWidgetSkeleton, MAX_PRELOAD_OFFSET_VIEWPORT, MEDIA_EMBED_SC_LINK_TYPE, MEDIA_EMBED_SC_SHARED_EVENT, MEDIA_EMBED_SC_SHARED_OBJECT, MEDIA_TYPE_DOCUMENT, MEDIA_TYPE_EMBED, MEDIA_TYPE_EVENT, MEDIA_TYPE_IMAGE, MEDIA_TYPE_LINK, MEDIA_TYPE_SHARE, MEDIA_TYPE_URL, MEDIA_TYPE_VIDEO, SCCourseFormStepType, MediaChunkUploader, MediaChunkUploaderProps, MessageUploaderUtils, MetadataField, MetadataFieldProps, MIN_PRELOAD_OFFSET_VIEWPORT, MyEventsWidget, MyEventsWidgetProps, MyEventsWidgetSkeleton, NavigationMenuContent, NavigationMenuDrawer, NavigationMenuDrawerProps, NavigationMenuHeader, NavigationMenuIconButton, NavigationMenuIconButtonProps, NavigationSettingsIconButton, NavigationSettingsIconButtonProps, NavigationSettingsItem, NavigationToolbar, NavigationToolbarMobile, NavigationToolbarMobileProps, NavigationToolbarMobileSkeleton, NavigationToolbarProps, NavigationToolbarSkeleton, Notification, NotificationProps, NotificationSkeleton, OnBoardingWidget, OnBoardingWidgetProps, OnBoardingWidgetSkeleton, PasswordTextField, PhoneTextField, PlatformWidget, PlatformWidgetActionType, PlatformWidgetProps, PlatformWidgetSkeleton, PollSuggestionWidget, PollSuggestionWidgetProps, PrivateMessageComponent, PrivateMessageComponentProps, PrivateMessageComponentSkeleton, PrivateMessageEditor, PrivateMessageEditorProps, PrivateMessageEditorSkeleton, PrivateMessageSettingsIconButton, PrivateMessageSettingsIconButtonProps, PrivateMessageSnippetItem, PrivateMessageSnippetItemProps, PrivateMessageSnippetItemSkeleton, PrivateMessageSnippets, PrivateMessageSnippetsProps, PrivateMessageSnippetsSkeleton, PrivateMessageThread, PrivateMessageThreadItem, PrivateMessageThreadItemProps, PrivateMessageThreadItemSkeleton, PrivateMessageThreadProps, PrivateMessageThreadSkeleton, ProgressBar, ProgressBarProps, RelatedEventsWidget, RelatedEventsWidgetProps, RelatedEventsWidgetSkeleton, RelatedFeedObjectsWidget, RelatedFeedObjectsWidgetSkeleton, RelatedFeedObjectWidgetProps, ReplyComment, SCBroadcastMessageTemplateType, SCCommentsOrderBy, SCEventMembersEventType, SCEventTemplateType, SCFeedObjectActivitiesType, SCFeedObjectTemplateType, SCFeedWidgetType, SCGroupMembersEventType, SCMediaChunkType, SCMediaObjectType, SCNotificationObjectTemplateType, SCUserProfileFields, SCUserProfileSettings, SCUserSocialAssociations, SearchAutocomplete, SearchAutocompleteProps, SearchDialog, SearchDialogProps, Share, SnippetNotifications, SnippetNotificationsProps, SnippetNotificationsSkeleton, StickyBox, StickyBoxComponent, StickyBoxProps, SuggestedEventsWidget, TagAutocomplete, TagAutocompleteProps, SuggestedEventsWidgetProps, SuggestedEventsWidgetSkeleton, TagChip, TagChipProps, ToastNotifications, ToastNotificationsProps, ToastNotificationsSkeleton, UrlTextField, User, UserActionIconButton, UserActionIconButtonProps, UserAvatar, UserAvatarProps, UserConnectionsRequestsSentWidget, UserConnectionsRequestsSentWidgetProps, UserConnectionsRequestsSentWidgetSkeleton, UserConnectionsRequestsWidget, UserConnectionsRequestsWidgetProps, UserConnectionsRequestsWidgetSkeleton, UserConnectionsWidget, UserConnectionsWidgetProps, UserConnectionsWidgetSkeleton, UserCounters, UserCountersProps, UserCreatedCoursesWidget, UserCreatedCoursesWidgetProps, UserCreatedCoursesWidgetSkeleton, UserDeletedSnackBar, UserDeletedSnackBarProps, UserFollowedCategoriesWidget, UserFollowedCategoriesWidgetProps, UserFollowedCategoriesWidgetSkeleton, UserFollowedUsersWidget, UserFollowedUsersWidgetProps, UserFollowedUsersWidgetSkeleton, UserFollowersWidget, UserFollowersWidgetProps, UserFollowersWidgetSkeleton, UserInfo, UserInfoDialog, UserInfoDialogProps, UserInfoProps, UserInfoSkeleton, UsernameTextField, UserProfileBlocked, UserProfileBlockedProps, UserProfileEdit, UserProfileEditProps, UserProfileEditSectionAccount, UserProfileEditSectionAccountProps, UserProfileEditSectionPublicInfo, UserProfileEditSectionPublicInfoProps, UserProfileEditSectionSettings, UserProfileEditSectionSettingsProps, UserProfileEditSkeleton, UserProfileHeader, UserProfileHeaderProps, UserProfileHeaderSkeleton, UserAutocomplete, UserAutocompleteProps, UserProps, UserSkeleton, UserSocialAssociation, UserSocialAssociationProps, UserSubscribedGroupsWidget, UserSubscribedGroupsWidgetProps, UserSubscribedGroupsWidgetSkeleton, UserSuggestionWidget, UserSuggestionWidgetProps, UserSuggestionWidgetSkeleton, UserLiveStreamWidget, UserLiveStreamWidgetProps, UserLiveStreamWidgetSkeleton, UserPaymentMethodsPortal, UserPaymentMethodsPortalProps, UserPaymentMethodsPortalSkeleton, useStickyBox, UseStickyBoxProps, LiveStream, LiveStreamProps, LiveStreamSkeletonProps, LiveStreamSkeleton, LiveStreamInfoDetails, LiveStreamInfoDetailsProps, UpScalingTierBadge, UpScalingTierProps, CreateLiveStreamDialog, CreateLiveStreamDialogProps, CreateLiveStreamButton, CreateLiveStreamButtonProps, LiveStreamForm, LiveStreamFormProps, LiveStreamRoom, LiveStreamRoomProps, LiveStreamVideoConference, LiveStreamVideoConferenceProps, VirtualScrollerItemProps, SCCourseTemplateType, SCLessonActionsType, SCLessonModeType, Widget, WidgetProps, X_SHARE, PROVIDER_ICONS_CONTAINED, PROVIDER_ICONS_OUTLINED, PROVIDER_ENTRAID_ALTERNATIVE_NAME, getDefaultLocale, getDefaultPaymentMethodConfiguration, getDefaultAppearanceStyle, getConvertedAmount, PaywallsDialog, PaywallsDialogProps, PaywallsConfigurator, PaywallsConfiguratorProps, PaywallsConfiguratorSkeleton, PaymentProducts, PaymentProductsProps, PaymentProduct, PaymentProductProps, PaymentOrder, PaymentOrderProps, PaymentOrderPdfButton, PaymentOrderPdfButtonProps, PaymentDetailDialog, PaymentDetailDialogProps, PaymentOrders, PaymentOrdersProps, PaymentProductPrice, PaymentProductPriceProps, PdfPreviewDialog, PdfPreviewDialogProps, PdfPreview, PdfPreviewProps, UserPaymentMethods, UserPaymentMethodsProps, UserPaymentMethodsSkeleton, UserAddPaymentMethodForm, UserAddPaymentMethodFormProps, UserAddPaymentMethodDialog, UserAddPaymentMethodDialogProps, UserChangeAddressDialog, UserChangeAddressDialogProps, UserBillingInfo, UserBillingInfoProps, UserBillingInfoSkeleton, Checkout, CheckoutProps, CheckoutReturnDialog, CheckoutReturnDialogProps, HiddenPurchasableContent, CommunityPaywalls, CommunityPaywallsProps, CommunityPaywallsSkeleton, FooterWidget, FooterWidgetProps };
241
+ export { AcceptRequestUserEventButton, AcceptRequestUserEventButtonProps, AccountChangeMailValidation, AccountChangeMailValidationProps, AccountDataPortability, AccountDataPortabilityButton, AccountDataPortabilityButtonProps, AccountDataPortabilityProps, AccountDelete, AccountDeleteButton, AccountDeleteButtonProps, AccountDeleteProps, AccountRecover, AccountRecoverProps, AccountReset, AccountResetProps, AccountVerify, AccountVerifyProps, AvatarGroupSkeleton, BaseDialog, BaseDialogProps, BaseItem, BaseItemProps, BaseLightbox, BaseLightboxProps, BottomNavigation, BottomNavigationProps, BroadcastMessages, BroadcastMessagesProps, BroadcastMessagesSkeleton, bytesToSize, generateRoomId, randomString, decodePassphrase, encodePassphrase, Calendar, CalendarProps, Categories, CategoriesPopularWidget, CategoriesPopularWidgetSkeleton, CategoriesProps, CategoriesSkeleton, CategoriesSkeletonProps, CategoriesSuggestionWidget, CategoriesSuggestionWidgetProps, CategoriesSuggestionWidgetSkeleton, Category, CategoryAutocomplete, CategoryAutocompleteProps, CategoryFollowButton, CategoryFollowButtonProps, CategoryFollowersButton, CategoryFollowersButtonProps, CategoryHeader, CategoryHeaderProps, CategoryHeaderSkeleton, CategoryProps, CategorySkeleton, CategoryTrendingFeedWidget, CategoryTrendingFeedWidgetProps, CategoryTrendingFeedWidgetSkeleton, CategoryTrendingPeopleWidgetSkeleton, CategoryTrendingUsersWidget, CategoryTrendingUsersWidgetProps, CentralProgress, ChangeCover, ChangeCoverProps, ChangeGroupCover, ChangeGroupCoverProps, ChangeGroupPicture, ChangeGroupPictureProps, ChangePicture, ChangePictureProps, CommentObject, CommentObjectProps, CommentObjectReply, CommentObjectReplyProps, CommentObjectSkeleton, CommentsFeedObject, CommentsFeedObjectProps, CommentsFeedObjectSkeleton, CommentsObject, CommentsObjectProps, CommentsObjectSkeleton, Composer, ComposerIconButton, ComposerIconButtonProps, ComposerProps, ConfirmDialog, ConnectionUserButton, ConsentSolution, ConsentSolutionButton, ConsentSolutionButtonProps, ConsentSolutionProps, ConsentSolutionSkeleton, ContributionUtils, SCCourseEditTabType, Course, CourseProps, CourseSkeleton, CourseSkeletonProps, CourseJoinButton, CourseJoinButtonProps, Courses, CoursesProps, CoursesSkeleton, CoursesSkeletonProps, CourseTypePopover, CourseTypePopoverProps, CreateCourseButton, CreateCourseButtonProps, CourseContentMenu, CourseContentMenuProps, CourseDashboard, TeacherCourseDashboardProps, TeacherSkeleton, StudentCourseDashboardProps, StudentSkeleton, CreateEventButton, CreateEventButtonProps, CreateEventWidget, CreateEventWidgetProps, CreateEventWidgetSkeleton, CreateGroupButton, EventForm, EventFormProps, EventFormDialog, EventFormDialogProps, CreateGroupButtonProps, CustomAdv, CustomAdvProps, CustomAdvSkeleton, DEFAULT_FIELDS, DEFAULT_PAGINATION_LIMIT, DEFAULT_PAGINATION_OFFSET, DEFAULT_PAGINATION_QUERY_PARAM_NAME, DEFAULT_PRELOAD_OFFSET_VIEWPORT, DEFAULT_WIDGETS_NUMBER, DefaultDrawerContent, DefaultDrawerContentProps, DefaultHeaderContent, DefaultHeaderContentProps, DefaultDrawerSkeleton, DefaultDrawerSkeletonProps, EditEventButton, EditEventButtonProps, EditGroupButton, EditGroupButtonProps, EditMediaProps, Editor, EditorProps, EditorSkeleton, EmailTextField, EditCourse, EditCourseProps, EditCourseSkeleton, Event, EventActionsMenu, EventActionsMenuProps, EventHeader, EventHeaderProps, EventHeaderSkeleton, EventInfoDetails, EventInfoDetailsProps, EventInfoWidget, EventInfoWidgetProps, EventInviteButton, EventInviteButtonProps, EventLocationWidget, EventLocationWidgetProps, EventLocationWidgetSkeleton, EventMediaWidget, EventMediaWidgetProps, EventMediaWidgetSkeleton, EventMembersWidget, EventMembersWidgetProps, EventMembersWidgetSkeleton, EventParticipantsButton, EventParticipantsButtonProps, EventProps, Events, EventSkeleton, EventSkeletonProps, EventsProps, EventsSkeleton, EventsSkeletonProps, FACEBOOK_SHARE, Feed, FeedObject, FeedObjectMediaPreview, FeedObjectMediaPreviewProps, FeedObjectProps, FeedObjectSkeleton, FeedProps, FeedRef, FeedSidebarProps, FeedSkeleton, FeedUpdatesWidget, FeedUpdatesWidgetProps, FeedUpdatesWidgetSkeleton, File, FollowUserButton, FollowUserButtonProps, Footer, FooterProps, FooterSkeleton, FriendshipButtonProps, FriendshipUserButton, GenericSkeleton, getRelativeTime, getUnseenNotification, getUnseenNotificationCounter, getUrlLesson, Group, GroupActionsMenu, GroupActionsMenuProps, GroupForm, GroupFormProps, GroupHeader, GroupHeaderProps, GroupHeaderSkeleton, GroupInfoWidget, GroupInfoWidgetProps, GroupInfoWidgetSkeleton, GroupInviteButton, GroupInviteButtonProps, GroupInvitedWidget, GroupInvitedWidgetProps, GroupInvitedWidgetSkeleton, GroupMembersButton, GroupMembersButtonProps, GroupMembersWidget, GroupMembersWidgetProps, GroupMembersWidgetSkeleton, GroupProps, GroupRequestsWidget, GroupRequestsWidgetProps, GroupRequestsWidgetSkeleton, Groups, GroupSettingsIconButton, GroupSettingsIconButtonProps, GroupSkeleton, GroupsProps, GroupsSkeleton, GroupSubscribeButton, GroupSubscribeButtonProps, AccordionLessons, AccordionLessonsProps, AccordionLessonsSkeleton, AddUsersButton, AddUsersButtonProps, CourseUsersTable, CourseUsersTableProps, CourseUsersTableSkeleton, EmptyStatus, EmptyStatusProps, HiddenPlaceholder, Incubator, IncubatorDetail, IncubatorDetailProps, IncubatorListWidget, IncubatorListWidgetProps, IncubatorProps, IncubatorSubscribeButton, IncubatorSubscribeButtonProps, IncubatorSuggestionWidget, IncubatorSuggestionWidgetProps, InfiniteScroll, ScrollContainer, InlineComposerWidget, InlineComposerWidgetProps, InlineComposerWidgetSkeleton, InviteUserEventButton, LeaderboardInfoWidget, LeaderboardInfoWidgetProps, LeaderboardPositionWidget, LeaderboardPositionWidgetProps, LeaderboardPositionWidgetSkeleton, LeaderboardWidget, LeaderboardWidgetProps, LeaderboardWidgetSkeleton, LeaderboardWidgetVariant, LessonAppbar, LessonAppbarProps, LessonDrawer, LessonDrawerProps, LessonEditForm, LessonEditFormProps, LessonObject, LessonObjectProps, InviteUserEventButtonProps, LanguageSwitcher, LEGAL_POLICIES, CourseCompletedDialog, CourseCompletedDialogProps, Lightbox, LightboxProps, Link, LINKEDIN_SHARE, LocationAutocomplete, LocationAutocompleteProps, LogoSelfCommunity, DefaultCoverSelfCommunity, LoyaltyProgramWidget, LoyaltyProgramWidgetProps, LoyaltyProgramWidgetSkeleton, MAX_PRELOAD_OFFSET_VIEWPORT, MEDIA_EMBED_SC_LINK_TYPE, MEDIA_EMBED_SC_SHARED_EVENT, MEDIA_EMBED_SC_SHARED_OBJECT, MEDIA_TYPE_DOCUMENT, MEDIA_TYPE_EMBED, MEDIA_TYPE_EVENT, MEDIA_TYPE_IMAGE, MEDIA_TYPE_LINK, MEDIA_TYPE_SHARE, MEDIA_TYPE_URL, MEDIA_TYPE_VIDEO, SCCourseFormStepType, MediaChunkUploader, MediaChunkUploaderProps, MessageUploaderUtils, MetadataField, MetadataFieldProps, MIN_PRELOAD_OFFSET_VIEWPORT, MyEventsWidget, MyEventsWidgetProps, MyEventsWidgetSkeleton, NavigationMenuContent, NavigationMenuDrawer, NavigationMenuDrawerProps, NavigationMenuHeader, NavigationMenuIconButton, NavigationMenuIconButtonProps, NavigationSettingsIconButton, NavigationSettingsIconButtonProps, NavigationSettingsItem, NavigationToolbar, NavigationToolbarMobile, NavigationToolbarMobileProps, NavigationToolbarMobileSkeleton, NavigationToolbarProps, NavigationToolbarSkeleton, Notification, NotificationProps, NotificationSkeleton, OnBoardingWidget, OnBoardingWidgetProps, OnBoardingWidgetSkeleton, PasswordTextField, PhoneTextField, PlatformWidget, PlatformWidgetActionType, PlatformWidgetProps, PlatformWidgetSkeleton, PollSuggestionWidget, PollSuggestionWidgetProps, PrivateMessageComponent, PrivateMessageComponentProps, PrivateMessageComponentSkeleton, PrivateMessageEditor, PrivateMessageEditorProps, PrivateMessageEditorSkeleton, PrivateMessageSettingsIconButton, PrivateMessageSettingsIconButtonProps, PrivateMessageSnippetItem, PrivateMessageSnippetItemProps, PrivateMessageSnippetItemSkeleton, PrivateMessageSnippets, PrivateMessageSnippetsProps, PrivateMessageSnippetsSkeleton, PrivateMessageThread, PrivateMessageThreadItem, PrivateMessageThreadItemProps, PrivateMessageThreadItemSkeleton, PrivateMessageThreadProps, PrivateMessageThreadSkeleton, ProgressBar, ProgressBarProps, RelatedEventsWidget, RelatedEventsWidgetProps, RelatedEventsWidgetSkeleton, RelatedFeedObjectsWidget, RelatedFeedObjectsWidgetSkeleton, RelatedFeedObjectWidgetProps, ReplyComment, SCBroadcastMessageTemplateType, SCCommentsOrderBy, SCEventMembersEventType, SCEventTemplateType, SCFeedObjectActivitiesType, SCFeedObjectTemplateType, SCFeedWidgetType, SCGroupMembersEventType, SCMediaChunkType, SCMediaObjectType, SCNotificationObjectTemplateType, SCUserProfileFields, SCUserProfileSettings, SCUserSocialAssociations, SearchAutocomplete, SearchAutocompleteProps, SearchDialog, SearchDialogProps, Share, SnippetNotifications, SnippetNotificationsProps, SnippetNotificationsSkeleton, StickyBox, StickyBoxComponent, StickyBoxProps, SuggestedEventsWidget, TagAutocomplete, TagAutocompleteProps, SuggestedEventsWidgetProps, SuggestedEventsWidgetSkeleton, TagChip, TagChipProps, ToastNotifications, ToastNotificationsProps, ToastNotificationsSkeleton, UrlTextField, User, UserActionIconButton, UserActionIconButtonProps, UserAvatar, UserAvatarProps, UserConnectionsRequestsSentWidget, UserConnectionsRequestsSentWidgetProps, UserConnectionsRequestsSentWidgetSkeleton, UserConnectionsRequestsWidget, UserConnectionsRequestsWidgetProps, UserConnectionsRequestsWidgetSkeleton, UserConnectionsWidget, UserConnectionsWidgetProps, UserConnectionsWidgetSkeleton, UserCounters, UserCountersProps, UserCreatedCoursesWidget, UserCreatedCoursesWidgetProps, UserCreatedCoursesWidgetSkeleton, UserDeletedSnackBar, UserDeletedSnackBarProps, UserFollowedCategoriesWidget, UserFollowedCategoriesWidgetProps, UserFollowedCategoriesWidgetSkeleton, UserFollowedUsersWidget, UserFollowedUsersWidgetProps, UserFollowedUsersWidgetSkeleton, UserFollowersWidget, UserFollowersWidgetProps, UserFollowersWidgetSkeleton, UserInfo, UserInfoDialog, UserInfoDialogProps, UserInfoProps, UserInfoSkeleton, UsernameTextField, UserProfileBlocked, UserProfileBlockedProps, UserProfileEdit, UserProfileEditProps, UserProfileEditSectionAccount, UserProfileEditSectionAccountProps, UserProfileEditSectionPublicInfo, UserProfileEditSectionPublicInfoProps, UserProfileEditSectionSettings, UserProfileEditSectionSettingsProps, UserProfileEditSkeleton, UserProfileHeader, UserProfileHeaderProps, UserProfileHeaderSkeleton, UserAutocomplete, UserAutocompleteProps, UserProps, UserSkeleton, UserSocialAssociation, UserSocialAssociationProps, UserSubscribedGroupsWidget, UserSubscribedGroupsWidgetProps, UserSubscribedGroupsWidgetSkeleton, UserSuggestionWidget, UserSuggestionWidgetProps, UserSuggestionWidgetSkeleton, UserLiveStreamWidget, UserLiveStreamWidgetProps, UserLiveStreamWidgetSkeleton, UserPaymentMethodsPortal, UserPaymentMethodsPortalProps, UserPaymentMethodsPortalSkeleton, useStickyBox, UseStickyBoxProps, LiveStream, LiveStreamProps, LiveStreamSkeletonProps, LiveStreamSkeleton, LiveStreamInfoDetails, LiveStreamInfoDetailsProps, UpScalingTierBadge, UpScalingTierProps, CreateLiveStreamDialog, CreateLiveStreamDialogProps, CreateLiveStreamButton, CreateLiveStreamButtonProps, LiveStreamForm, LiveStreamFormProps, LiveStreamRoom, LiveStreamRoomProps, LiveStreamVideoConference, LiveStreamVideoConferenceProps, VirtualScrollerItemProps, SCCourseTemplateType, SCLessonActionsType, SCLessonModeType, Widget, WidgetProps, X_SHARE, PROVIDER_ICONS_CONTAINED, PROVIDER_ICONS_OUTLINED, PROVIDER_ENTRAID_ALTERNATIVE_NAME, getDefaultLocale, getDefaultPaymentMethodConfiguration, getDefaultAppearanceStyle, getConvertedAmount, PaywallsDialog, PaywallsDialogProps, PaywallsConfigurator, PaywallsConfiguratorProps, PaywallsConfiguratorSkeleton, PaymentProducts, PaymentProductsProps, PaymentProduct, PaymentProductProps, PaymentOrder, PaymentOrderProps, PaymentOrderPdfButton, PaymentOrderPdfButtonProps, PaymentDetailDialog, PaymentDetailDialogProps, PaymentOrders, PaymentOrdersProps, PaymentProductPrice, PaymentProductPriceProps, PdfPreviewDialog, PdfPreviewDialogProps, PdfPreview, PdfPreviewProps, UserPaymentMethods, UserPaymentMethodsProps, UserPaymentMethodsSkeleton, UserAddPaymentMethodForm, UserAddPaymentMethodFormProps, UserAddPaymentMethodDialog, UserAddPaymentMethodDialogProps, UserChangeAddressDialog, UserChangeAddressDialogProps, UserBillingInfo, UserBillingInfoProps, UserBillingInfoSkeleton, Checkout, CheckoutProps, CheckoutReturnDialog, CheckoutReturnDialogProps, HiddenPurchasableContent, CommunityPaywalls, CommunityPaywallsProps, CommunityPaywallsSkeleton, FooterWidget, FooterWidgetProps };