@chayns-components/ranking 5.0.0-beta.1225

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 (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +34 -0
  3. package/lib/cjs/components/ranking/Ranking.js +61 -0
  4. package/lib/cjs/components/ranking/Ranking.js.map +1 -0
  5. package/lib/cjs/components/ranking/Ranking.styles.js +10 -0
  6. package/lib/cjs/components/ranking/Ranking.styles.js.map +1 -0
  7. package/lib/cjs/components/ranking/ranking-entry/RankingEntry.js +74 -0
  8. package/lib/cjs/components/ranking/ranking-entry/RankingEntry.js.map +1 -0
  9. package/lib/cjs/components/ranking/ranking-entry/RankingEntry.styles.js +56 -0
  10. package/lib/cjs/components/ranking/ranking-entry/RankingEntry.styles.js.map +1 -0
  11. package/lib/cjs/components/ranking-overview/RankingOverview.js +22 -0
  12. package/lib/cjs/components/ranking-overview/RankingOverview.js.map +1 -0
  13. package/lib/cjs/components/ranking-overview/RankingOverview.styles.js +22 -0
  14. package/lib/cjs/components/ranking-overview/RankingOverview.styles.js.map +1 -0
  15. package/lib/cjs/index.js +21 -0
  16. package/lib/cjs/index.js.map +1 -0
  17. package/lib/cjs/types/ranking.js +6 -0
  18. package/lib/cjs/types/ranking.js.map +1 -0
  19. package/lib/esm/components/ranking/Ranking.js +53 -0
  20. package/lib/esm/components/ranking/Ranking.js.map +1 -0
  21. package/lib/esm/components/ranking/Ranking.styles.js +3 -0
  22. package/lib/esm/components/ranking/Ranking.styles.js.map +1 -0
  23. package/lib/esm/components/ranking/ranking-entry/RankingEntry.js +67 -0
  24. package/lib/esm/components/ranking/ranking-entry/RankingEntry.js.map +1 -0
  25. package/lib/esm/components/ranking/ranking-entry/RankingEntry.styles.js +49 -0
  26. package/lib/esm/components/ranking/ranking-entry/RankingEntry.styles.js.map +1 -0
  27. package/lib/esm/components/ranking-overview/RankingOverview.js +15 -0
  28. package/lib/esm/components/ranking-overview/RankingOverview.js.map +1 -0
  29. package/lib/esm/components/ranking-overview/RankingOverview.styles.js +15 -0
  30. package/lib/esm/components/ranking-overview/RankingOverview.styles.js.map +1 -0
  31. package/lib/esm/index.js +3 -0
  32. package/lib/esm/index.js.map +1 -0
  33. package/lib/esm/types/ranking.js +2 -0
  34. package/lib/esm/types/ranking.js.map +1 -0
  35. package/lib/types/components/ranking/Ranking.d.ts +45 -0
  36. package/lib/types/components/ranking/Ranking.styles.d.ts +1 -0
  37. package/lib/types/components/ranking/ranking-entry/RankingEntry.d.ts +15 -0
  38. package/lib/types/components/ranking/ranking-entry/RankingEntry.styles.d.ts +16 -0
  39. package/lib/types/components/ranking-overview/RankingOverview.d.ts +17 -0
  40. package/lib/types/components/ranking-overview/RankingOverview.styles.d.ts +3 -0
  41. package/lib/types/index.d.ts +3 -0
  42. package/lib/types/types/ranking.d.ts +18 -0
  43. package/package.json +86 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2021 Tobit Laboratories AG
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,34 @@
1
+ <div align="center">
2
+ <h1>
3
+ <img src="https://raw.githubusercontent.com/TobitSoftware/chayns-components/master/assets/logo.png" width="600px" alt="chayns-components" />
4
+ </h1>
5
+ <p>A set of beautiful React components for developing your own applications with chayns.</p>
6
+ <div>
7
+ <img src="https://img.shields.io/npm/dm/@chayns-components/core.svg?style=for-the-badge" alt="" />
8
+ <img src="https://img.shields.io/npm/v/@chayns-components/core?style=for-the-badge" alt="" />
9
+ <img src="https://img.shields.io/github/license/TobitSoftware/chayns-components?style=for-the-badge" alt="" />
10
+ <img src="https://img.shields.io/github/contributors/TobitSoftware/chayns-components?style=for-the-badge" alt="" />
11
+ </div>
12
+ </div>
13
+
14
+ ---
15
+
16
+ ## Installation
17
+
18
+ First you need to install the core part of the chayns-components.
19
+
20
+ ```bash
21
+ # NPM
22
+ npm install @chayns-components/person-finder
23
+
24
+ # Yarn
25
+ yarn add @chayns-components/person-finder
26
+ ```
27
+
28
+ > **Information:** Since the components have now been implemented with the styled-components
29
+ > library, the styles are delivered directly with the components. There is no need to load an extra
30
+ > stylesheet anymore.
31
+
32
+ ## Usage
33
+
34
+ For detailed usage visit the [storybook](https://components.chayns.site/storybook).
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _Ranking = require("./Ranking.styles");
9
+ var _core = require("@chayns-components/core");
10
+ var _RankingEntry = _interopRequireDefault(require("./ranking-entry/RankingEntry"));
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
13
+ const Ranking = ({
14
+ title = 'Rangliste',
15
+ entries,
16
+ onFriendRemove,
17
+ onFriendAdd,
18
+ shouldShowOnlyFriends,
19
+ friendPersonIds,
20
+ onSearchChange,
21
+ searchValue,
22
+ onFriendVisibleChange
23
+ }) => {
24
+ const content = (0, _react.useMemo)(() => entries.map(({
25
+ content: entryContent,
26
+ rank,
27
+ personId,
28
+ points,
29
+ name,
30
+ icons
31
+ }) => /*#__PURE__*/_react.default.createElement(_RankingEntry.default, {
32
+ key: `ranking-entry--${personId}`,
33
+ rank: rank,
34
+ personId: personId,
35
+ name: name,
36
+ icons: icons,
37
+ points: points,
38
+ content: entryContent,
39
+ onFriendAdd: onFriendAdd,
40
+ onFriendRemove: onFriendRemove,
41
+ isFriend: friendPersonIds === null || friendPersonIds === void 0 ? void 0 : friendPersonIds.includes(personId)
42
+ })), [entries, friendPersonIds, onFriendAdd, onFriendRemove]);
43
+ const handleSearchChange = (0, _react.useCallback)(event => {
44
+ if (typeof onSearchChange === 'function') {
45
+ onSearchChange(event.target.value);
46
+ }
47
+ }, [onSearchChange]);
48
+ return (0, _react.useMemo)(() => /*#__PURE__*/_react.default.createElement(_Ranking.StyledRanking, null, /*#__PURE__*/_react.default.createElement(_core.Accordion, {
49
+ title: title,
50
+ onSearchChange: handleSearchChange,
51
+ searchValue: searchValue,
52
+ rightElement: /*#__PURE__*/_react.default.createElement(_core.Icon, {
53
+ icons: shouldShowOnlyFriends ? ['fas fa-star'] : ['far fa-star'],
54
+ size: 15,
55
+ onClick: onFriendVisibleChange
56
+ })
57
+ }, /*#__PURE__*/_react.default.createElement(_core.AccordionGroup, null, content))), [content, handleSearchChange, onFriendVisibleChange, searchValue, shouldShowOnlyFriends, title]);
58
+ };
59
+ Ranking.displayName = 'Ranking';
60
+ var _default = exports.default = Ranking;
61
+ //# sourceMappingURL=Ranking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Ranking.js","names":["_react","_interopRequireWildcard","require","_Ranking","_core","_RankingEntry","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","Ranking","title","entries","onFriendRemove","onFriendAdd","shouldShowOnlyFriends","friendPersonIds","onSearchChange","searchValue","onFriendVisibleChange","content","useMemo","map","entryContent","rank","personId","points","name","icons","createElement","key","isFriend","includes","handleSearchChange","useCallback","event","target","value","StyledRanking","Accordion","rightElement","Icon","size","onClick","AccordionGroup","displayName","_default","exports"],"sources":["../../../../src/components/ranking/Ranking.tsx"],"sourcesContent":["import React, { ChangeEvent, FC, useCallback, useMemo } from 'react';\nimport { StyledRanking } from './Ranking.styles';\nimport { IRankingEntry } from '../../types/ranking';\nimport { Accordion, AccordionGroup, Icon } from '@chayns-components/core';\nimport RankingEntry from './ranking-entry/RankingEntry';\n\nexport type RankingProps = {\n /**\n * Array of ranking entries to be displayed in the ranking list.\n */\n entries: IRankingEntry[];\n /**\n * Array of personIds that represent the user's friends.\n */\n friendPersonIds: string[];\n /**\n * Callback function triggered when a friend is added to the friends list.\n * @param personId - The ID of the person to be added as friend\n */\n onFriendAdd?: (personId: string) => void;\n /**\n * Callback function triggered when a friend is removed from the friends list.\n * @param personId - The ID of the person to be removed from friends\n */\n onFriendRemove?: (personId: string) => void;\n /**\n * Callback function triggered when the visibility of friends is toggled.\n */\n onFriendVisibleChange?: () => void;\n /**\n * Callback function triggered when the search input value changes.\n * @param value - The current search input value\n */\n onSearchChange?: (value: string) => void;\n /**\n * The current value of the search input field.\n */\n searchValue?: string;\n /**\n * Whether only the friends of the user should be displayed (filtering and fetching the correct data is done by you).\n */\n shouldShowOnlyFriends?: boolean;\n /**\n * The title of the top Accordion.\n */\n title?: string;\n};\n\nconst Ranking: FC<RankingProps> = ({\n title = 'Rangliste',\n entries,\n onFriendRemove,\n onFriendAdd,\n shouldShowOnlyFriends,\n friendPersonIds,\n onSearchChange,\n searchValue,\n onFriendVisibleChange,\n}) => {\n const content = useMemo(\n () =>\n entries.map(({ content: entryContent, rank, personId, points, name, icons }) => (\n <RankingEntry\n key={`ranking-entry--${personId}`}\n rank={rank}\n personId={personId}\n name={name}\n icons={icons}\n points={points}\n content={entryContent}\n onFriendAdd={onFriendAdd}\n onFriendRemove={onFriendRemove}\n isFriend={friendPersonIds?.includes(personId)}\n />\n )),\n [entries, friendPersonIds, onFriendAdd, onFriendRemove],\n );\n\n const handleSearchChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (typeof onSearchChange === 'function') {\n onSearchChange(event.target.value);\n }\n },\n [onSearchChange],\n );\n\n return useMemo(\n () => (\n <StyledRanking>\n <Accordion\n title={title}\n onSearchChange={handleSearchChange}\n searchValue={searchValue}\n rightElement={\n <Icon\n icons={shouldShowOnlyFriends ? ['fas fa-star'] : ['far fa-star']}\n size={15}\n onClick={onFriendVisibleChange}\n />\n }\n >\n <AccordionGroup>{content}</AccordionGroup>\n </Accordion>\n </StyledRanking>\n ),\n [\n content,\n handleSearchChange,\n onFriendVisibleChange,\n searchValue,\n shouldShowOnlyFriends,\n title,\n ],\n );\n};\n\nRanking.displayName = 'Ranking';\n\nexport default Ranking;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.StyledRanking = void 0;
7
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ const StyledRanking = exports.StyledRanking = _styledComponents.default.div``;
10
+ //# sourceMappingURL=Ranking.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Ranking.styles.js","names":["_styledComponents","_interopRequireDefault","require","e","__esModule","default","StyledRanking","exports","styled","div"],"sources":["../../../../src/components/ranking/Ranking.styles.ts"],"sourcesContent":["import styled from 'styled-components';\n\nexport const StyledRanking = styled.div``;\n"],"mappings":";;;;;;AAAA,IAAAA,iBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAuC,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEhC,MAAMG,aAAa,GAAAC,OAAA,CAAAD,aAAA,GAAGE,yBAAM,CAACC,GAAG,EAAE","ignoreList":[]}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _RankingEntry = require("./RankingEntry.styles");
9
+ var _core = require("@chayns-components/core");
10
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
11
+ const RankingEntry = ({
12
+ rank,
13
+ name: fullName,
14
+ personId,
15
+ icons,
16
+ points,
17
+ isFriend,
18
+ content,
19
+ onFriendRemove,
20
+ onFriendAdd
21
+ }) => {
22
+ const handleIconClick = (0, _react.useCallback)(() => {
23
+ if (isFriend && typeof onFriendRemove === 'function') {
24
+ onFriendRemove(personId);
25
+ } else if (typeof onFriendAdd === 'function') {
26
+ onFriendAdd(personId);
27
+ }
28
+ }, [isFriend, onFriendAdd, onFriendRemove, personId]);
29
+ const {
30
+ title,
31
+ rightElement
32
+ } = (0, _react.useMemo)(() => {
33
+ const titleElement = /*#__PURE__*/_react.default.createElement("span", null, /*#__PURE__*/_react.default.createElement("strong", null, rank, ". "), fullName);
34
+ const rightElements = /*#__PURE__*/_react.default.createElement(_RankingEntry.StyledRankingEntryRightElement, null, /*#__PURE__*/_react.default.createElement(_RankingEntry.StyledRankingEntryRightElementPoints, null, points), icons && /*#__PURE__*/_react.default.createElement(_core.Icon, {
35
+ icons: icons
36
+ }), /*#__PURE__*/_react.default.createElement(_core.Icon, {
37
+ icons: isFriend ? ['fas fa-star'] : ['far fa-star'],
38
+ size: 15,
39
+ onClick: handleIconClick
40
+ }));
41
+ return {
42
+ title: titleElement,
43
+ rightElement: rightElements
44
+ };
45
+ }, [handleIconClick, icons, isFriend, fullName, points, rank]);
46
+ const entryContent = (0, _react.useMemo)(() => {
47
+ if (!content) return null;
48
+ return content.map(({
49
+ name,
50
+ value,
51
+ headline,
52
+ id
53
+ }) => {
54
+ if (typeof headline === 'string') {
55
+ return /*#__PURE__*/_react.default.createElement(_RankingEntry.StyledRankingEntryContentHeadline, {
56
+ key: id
57
+ }, headline);
58
+ }
59
+ return /*#__PURE__*/_react.default.createElement(_RankingEntry.StyledRankingEntryContentEntry, {
60
+ key: id
61
+ }, /*#__PURE__*/_react.default.createElement(_RankingEntry.StyledRankingEntryContentEntryName, null, name), /*#__PURE__*/_react.default.createElement(_RankingEntry.StyledRankingEntryContentEntryValue, null, value));
62
+ });
63
+ }, [content]);
64
+ return (0, _react.useMemo)(() => /*#__PURE__*/_react.default.createElement(_RankingEntry.StyledRankingEntry, {
65
+ $shouldShowLines: !entryContent
66
+ }, entryContent ? /*#__PURE__*/_react.default.createElement(_core.Accordion, {
67
+ title: "",
68
+ titleElement: title,
69
+ rightElement: rightElement
70
+ }, /*#__PURE__*/_react.default.createElement(_core.AccordionContent, null, /*#__PURE__*/_react.default.createElement(_RankingEntry.StyledRankingEntryContent, null, entryContent))) : /*#__PURE__*/_react.default.createElement(_RankingEntry.StyledRankingEntryElement, null, /*#__PURE__*/_react.default.createElement(_RankingEntry.StyledRankingEntryElementLeft, null, title), /*#__PURE__*/_react.default.createElement(_RankingEntry.StyledRankingEntryElementRight, null, rightElement))), [entryContent, rightElement, title]);
71
+ };
72
+ RankingEntry.displayName = 'RankingEntry';
73
+ var _default = exports.default = RankingEntry;
74
+ //# sourceMappingURL=RankingEntry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RankingEntry.js","names":["_react","_interopRequireWildcard","require","_RankingEntry","_core","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","RankingEntry","rank","name","fullName","personId","icons","points","isFriend","content","onFriendRemove","onFriendAdd","handleIconClick","useCallback","title","rightElement","useMemo","titleElement","createElement","rightElements","StyledRankingEntryRightElement","StyledRankingEntryRightElementPoints","Icon","size","onClick","entryContent","map","value","headline","id","StyledRankingEntryContentHeadline","key","StyledRankingEntryContentEntry","StyledRankingEntryContentEntryName","StyledRankingEntryContentEntryValue","StyledRankingEntry","$shouldShowLines","Accordion","AccordionContent","StyledRankingEntryContent","StyledRankingEntryElement","StyledRankingEntryElementLeft","StyledRankingEntryElementRight","displayName","_default","exports"],"sources":["../../../../../src/components/ranking/ranking-entry/RankingEntry.tsx"],"sourcesContent":["import React, { FC, useCallback, useMemo } from 'react';\nimport {\n StyledRankingEntry,\n StyledRankingEntryContent,\n StyledRankingEntryContentEntry,\n StyledRankingEntryContentEntryName,\n StyledRankingEntryContentEntryValue,\n StyledRankingEntryContentHeadline,\n StyledRankingEntryElement,\n StyledRankingEntryElementLeft,\n StyledRankingEntryElementRight,\n StyledRankingEntryRightElement,\n StyledRankingEntryRightElementPoints,\n} from './RankingEntry.styles';\nimport { Accordion, AccordionContent, Icon } from '@chayns-components/core';\nimport { IRankingEntry, RankingContentEntry, RankingContentHeadline } from '../../../types/ranking';\n\nexport type RankingEntryProps = {\n onFriendAdd?: (personId: string) => void;\n onFriendRemove?: (personId: string) => void;\n isFriend?: boolean;\n content?: IRankingEntry['content'];\n rank: IRankingEntry['rank'];\n personId: IRankingEntry['personId'];\n points: IRankingEntry['points'];\n name: IRankingEntry['name'];\n icons: IRankingEntry['icons'];\n};\n\nconst RankingEntry: FC<RankingEntryProps> = ({\n rank,\n name: fullName,\n personId,\n icons,\n points,\n isFriend,\n content,\n onFriendRemove,\n onFriendAdd,\n}) => {\n const handleIconClick = useCallback(() => {\n if (isFriend && typeof onFriendRemove === 'function') {\n onFriendRemove(personId);\n } else if (typeof onFriendAdd === 'function') {\n onFriendAdd(personId);\n }\n }, [isFriend, onFriendAdd, onFriendRemove, personId]);\n\n const { title, rightElement } = useMemo(() => {\n const titleElement = (\n <span>\n <strong>{rank}. </strong>\n {fullName}\n </span>\n );\n\n const rightElements = (\n <StyledRankingEntryRightElement>\n <StyledRankingEntryRightElementPoints>\n {points}\n </StyledRankingEntryRightElementPoints>\n {icons && <Icon icons={icons} />}\n <Icon\n icons={isFriend ? ['fas fa-star'] : ['far fa-star']}\n size={15}\n onClick={handleIconClick}\n />\n </StyledRankingEntryRightElement>\n );\n\n return { title: titleElement, rightElement: rightElements };\n }, [handleIconClick, icons, isFriend, fullName, points, rank]);\n\n const entryContent = useMemo(() => {\n if (!content) return null;\n\n return (content as (RankingContentHeadline & RankingContentEntry)[]).map(\n ({ name, value, headline, id }) => {\n if (typeof headline === 'string') {\n return (\n <StyledRankingEntryContentHeadline key={id}>\n {headline}\n </StyledRankingEntryContentHeadline>\n );\n }\n\n return (\n <StyledRankingEntryContentEntry key={id}>\n <StyledRankingEntryContentEntryName>\n {name}\n </StyledRankingEntryContentEntryName>\n <StyledRankingEntryContentEntryValue>\n {value}\n </StyledRankingEntryContentEntryValue>\n </StyledRankingEntryContentEntry>\n );\n },\n );\n }, [content]);\n\n return useMemo(\n () => (\n <StyledRankingEntry $shouldShowLines={!entryContent}>\n {entryContent ? (\n <Accordion title=\"\" titleElement={title} rightElement={rightElement}>\n <AccordionContent>\n <StyledRankingEntryContent>{entryContent}</StyledRankingEntryContent>\n </AccordionContent>\n </Accordion>\n ) : (\n <StyledRankingEntryElement>\n <StyledRankingEntryElementLeft>{title}</StyledRankingEntryElementLeft>\n <StyledRankingEntryElementRight>\n {rightElement}\n </StyledRankingEntryElementRight>\n </StyledRankingEntryElement>\n )}\n </StyledRankingEntry>\n ),\n [entryContent, rightElement, title],\n );\n};\n\nRankingEntry.displayName = 'RankingEntry';\n\nexport default RankingEntry;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.StyledRankingEntryRightElementPoints = exports.StyledRankingEntryRightElement = exports.StyledRankingEntryElementRight = exports.StyledRankingEntryElementLeft = exports.StyledRankingEntryElement = exports.StyledRankingEntryContentHeadline = exports.StyledRankingEntryContentEntryValue = exports.StyledRankingEntryContentEntryName = exports.StyledRankingEntryContentEntry = exports.StyledRankingEntryContent = exports.StyledRankingEntry = void 0;
7
+ var _styledComponents = _interopRequireWildcard(require("styled-components"));
8
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
9
+ const StyledRankingEntry = exports.StyledRankingEntry = _styledComponents.default.div`
10
+ ${({
11
+ theme,
12
+ $shouldShowLines
13
+ }) => theme.accordionLines && $shouldShowLines && (0, _styledComponents.css)`
14
+ &:not(:last-child) {
15
+ border-bottom: 1px solid rgba(${theme['headline-rgb']}, 0.5);
16
+ }
17
+ `}
18
+ `;
19
+ const StyledRankingEntryElement = exports.StyledRankingEntryElement = _styledComponents.default.div`
20
+ display: flex;
21
+ justify-content: space-between;
22
+ align-items: center;
23
+ gap: 20px;
24
+
25
+ padding: 4px 6px;
26
+ `;
27
+ const StyledRankingEntryElementLeft = exports.StyledRankingEntryElementLeft = _styledComponents.default.div``;
28
+ const StyledRankingEntryElementRight = exports.StyledRankingEntryElementRight = _styledComponents.default.div``;
29
+ const StyledRankingEntryRightElement = exports.StyledRankingEntryRightElement = _styledComponents.default.div`
30
+ display: flex;
31
+ gap: 8px;
32
+ align-items: center;
33
+ `;
34
+ const StyledRankingEntryRightElementPoints = exports.StyledRankingEntryRightElementPoints = _styledComponents.default.div`
35
+ line-height: 15px;
36
+ `;
37
+ const StyledRankingEntryContent = exports.StyledRankingEntryContent = _styledComponents.default.div`
38
+ display: flex;
39
+ flex-direction: column;
40
+
41
+ gap: 8px;
42
+ `;
43
+ const StyledRankingEntryContentHeadline = exports.StyledRankingEntryContentHeadline = _styledComponents.default.div`
44
+ font-weight: bold;
45
+ font-size: 80%;
46
+
47
+ margin-bottom: -8px;
48
+ `;
49
+ const StyledRankingEntryContentEntry = exports.StyledRankingEntryContentEntry = _styledComponents.default.div`
50
+ display: flex;
51
+ align-items: center;
52
+ justify-content: space-between;
53
+ `;
54
+ const StyledRankingEntryContentEntryName = exports.StyledRankingEntryContentEntryName = _styledComponents.default.div``;
55
+ const StyledRankingEntryContentEntryValue = exports.StyledRankingEntryContentEntryValue = _styledComponents.default.div``;
56
+ //# sourceMappingURL=RankingEntry.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RankingEntry.styles.js","names":["_styledComponents","_interopRequireWildcard","require","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","StyledRankingEntry","exports","styled","div","theme","$shouldShowLines","accordionLines","css","StyledRankingEntryElement","StyledRankingEntryElementLeft","StyledRankingEntryElementRight","StyledRankingEntryRightElement","StyledRankingEntryRightElementPoints","StyledRankingEntryContent","StyledRankingEntryContentHeadline","StyledRankingEntryContentEntry","StyledRankingEntryContentEntryName","StyledRankingEntryContentEntryValue"],"sources":["../../../../../src/components/ranking/ranking-entry/RankingEntry.styles.ts"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport { WithTheme } from '@chayns-components/core';\n\ntype StyledRankingEntryProps = WithTheme<{\n $shouldShowLines: boolean;\n}>;\n\nexport const StyledRankingEntry = styled.div<StyledRankingEntryProps>`\n ${({ theme, $shouldShowLines }) =>\n theme.accordionLines &&\n $shouldShowLines &&\n css`\n &:not(:last-child) {\n border-bottom: 1px solid rgba(${theme['headline-rgb']}, 0.5);\n }\n `}\n`;\n\nexport const StyledRankingEntryElement = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 20px;\n\n padding: 4px 6px;\n`;\n\nexport const StyledRankingEntryElementLeft = styled.div``;\n\nexport const StyledRankingEntryElementRight = styled.div``;\n\nexport const StyledRankingEntryRightElement = styled.div`\n display: flex;\n gap: 8px;\n align-items: center;\n`;\n\nexport const StyledRankingEntryRightElementPoints = styled.div`\n line-height: 15px;\n`;\n\nexport const StyledRankingEntryContent = styled.div`\n display: flex;\n flex-direction: column;\n\n gap: 8px;\n`;\n\nexport const StyledRankingEntryContentHeadline = styled.div`\n font-weight: bold;\n font-size: 80%;\n\n margin-bottom: -8px;\n`;\n\nexport const StyledRankingEntryContentEntry = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n`;\n\nexport const StyledRankingEntryContentEntryName = styled.div``;\n\nexport const StyledRankingEntryContentEntryValue = styled.div``;\n"],"mappings":";;;;;;AAAA,IAAAA,iBAAA,GAAAC,uBAAA,CAAAC,OAAA;AAAgD,SAAAD,wBAAAE,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAJ,uBAAA,YAAAA,CAAAE,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAOzC,MAAMkB,kBAAkB,GAAAC,OAAA,CAAAD,kBAAA,GAAGE,yBAAM,CAACC,GAA4B;AACrE,MAAM,CAAC;EAAEC,KAAK;EAAEC;AAAiB,CAAC,KAC1BD,KAAK,CAACE,cAAc,IACpBD,gBAAgB,IAChB,IAAAE,qBAAG;AACX;AACA,gDAAgDH,KAAK,CAAC,cAAc,CAAC;AACrE;AACA,SAAS;AACT,CAAC;AAEM,MAAMI,yBAAyB,GAAAP,OAAA,CAAAO,yBAAA,GAAGN,yBAAM,CAACC,GAAG;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAEM,MAAMM,6BAA6B,GAAAR,OAAA,CAAAQ,6BAAA,GAAGP,yBAAM,CAACC,GAAG,EAAE;AAElD,MAAMO,8BAA8B,GAAAT,OAAA,CAAAS,8BAAA,GAAGR,yBAAM,CAACC,GAAG,EAAE;AAEnD,MAAMQ,8BAA8B,GAAAV,OAAA,CAAAU,8BAAA,GAAGT,yBAAM,CAACC,GAAG;AACxD;AACA;AACA;AACA,CAAC;AAEM,MAAMS,oCAAoC,GAAAX,OAAA,CAAAW,oCAAA,GAAGV,yBAAM,CAACC,GAAG;AAC9D;AACA,CAAC;AAEM,MAAMU,yBAAyB,GAAAZ,OAAA,CAAAY,yBAAA,GAAGX,yBAAM,CAACC,GAAG;AACnD;AACA;AACA;AACA;AACA,CAAC;AAEM,MAAMW,iCAAiC,GAAAb,OAAA,CAAAa,iCAAA,GAAGZ,yBAAM,CAACC,GAAG;AAC3D;AACA;AACA;AACA;AACA,CAAC;AAEM,MAAMY,8BAA8B,GAAAd,OAAA,CAAAc,8BAAA,GAAGb,yBAAM,CAACC,GAAG;AACxD;AACA;AACA;AACA,CAAC;AAEM,MAAMa,kCAAkC,GAAAf,OAAA,CAAAe,kCAAA,GAAGd,yBAAM,CAACC,GAAG,EAAE;AAEvD,MAAMc,mCAAmC,GAAAhB,OAAA,CAAAgB,mCAAA,GAAGf,yBAAM,CAACC,GAAG,EAAE","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _RankingOverview = require("./RankingOverview.styles");
9
+ var _core = require("@chayns-components/core");
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ const RankingOverview = ({
12
+ userRank,
13
+ totalPlayers,
14
+ suffix
15
+ }) => /*#__PURE__*/_react.default.createElement(_RankingOverview.StyledRankingOverview, null, /*#__PURE__*/_react.default.createElement(_RankingOverview.StyledRankingOverviewTitle, null, "Platz ", /*#__PURE__*/_react.default.createElement(_core.AnimatedNumber, {
16
+ value: userRank
17
+ })), /*#__PURE__*/_react.default.createElement(_RankingOverview.StyledRankingOverviewSubtitle, null, suffix, " von ", /*#__PURE__*/_react.default.createElement(_core.AnimatedNumber, {
18
+ value: totalPlayers
19
+ }), " Mitspielern"));
20
+ RankingOverview.displayName = 'RankingOverview';
21
+ var _default = exports.default = RankingOverview;
22
+ //# sourceMappingURL=RankingOverview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RankingOverview.js","names":["_react","_interopRequireDefault","require","_RankingOverview","_core","e","__esModule","default","RankingOverview","userRank","totalPlayers","suffix","createElement","StyledRankingOverview","StyledRankingOverviewTitle","AnimatedNumber","value","StyledRankingOverviewSubtitle","displayName","_default","exports"],"sources":["../../../../src/components/ranking-overview/RankingOverview.tsx"],"sourcesContent":["import React, { FC } from 'react';\nimport {\n StyledRankingOverview,\n StyledRankingOverviewSubtitle,\n StyledRankingOverviewTitle,\n} from './RankingOverview.styles';\nimport { AnimatedNumber } from '@chayns-components/core';\n\nexport type RankingOverviewProps = {\n /**\n * A suffix that will be displayed before the total players.\n */\n suffix: string;\n /**\n * The amount of the total players.\n */\n totalPlayers: number;\n /**\n * The Rank of the current user.\n */\n userRank: number;\n};\n\nconst RankingOverview: FC<RankingOverviewProps> = ({ userRank, totalPlayers, suffix }) => (\n <StyledRankingOverview>\n <StyledRankingOverviewTitle>\n Platz <AnimatedNumber value={userRank} />\n </StyledRankingOverviewTitle>\n <StyledRankingOverviewSubtitle>\n {suffix} von <AnimatedNumber value={totalPlayers} /> Mitspielern\n </StyledRankingOverviewSubtitle>\n </StyledRankingOverview>\n);\n\nRankingOverview.displayName = 'RankingOverview';\n\nexport default RankingOverview;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AAKA,IAAAE,KAAA,GAAAF,OAAA;AAAyD,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAiBzD,MAAMG,eAAyC,GAAGA,CAAC;EAAEC,QAAQ;EAAEC,YAAY;EAAEC;AAAO,CAAC,kBACjFX,MAAA,CAAAO,OAAA,CAAAK,aAAA,CAACT,gBAAA,CAAAU,qBAAqB,qBAClBb,MAAA,CAAAO,OAAA,CAAAK,aAAA,CAACT,gBAAA,CAAAW,0BAA0B,QAAC,QAClB,eAAAd,MAAA,CAAAO,OAAA,CAAAK,aAAA,CAACR,KAAA,CAAAW,cAAc;EAACC,KAAK,EAAEP;AAAS,CAAE,CAChB,CAAC,eAC7BT,MAAA,CAAAO,OAAA,CAAAK,aAAA,CAACT,gBAAA,CAAAc,6BAA6B,QACzBN,MAAM,EAAC,OAAK,eAAAX,MAAA,CAAAO,OAAA,CAAAK,aAAA,CAACR,KAAA,CAAAW,cAAc;EAACC,KAAK,EAAEN;AAAa,CAAE,CAAC,gBACzB,CACZ,CAC1B;AAEDF,eAAe,CAACU,WAAW,GAAG,iBAAiB;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAb,OAAA,GAEjCC,eAAe","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.StyledRankingOverviewTitle = exports.StyledRankingOverviewSubtitle = exports.StyledRankingOverview = void 0;
7
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ const StyledRankingOverview = exports.StyledRankingOverview = _styledComponents.default.div`
10
+ display: flex;
11
+ flex-direction: column;
12
+
13
+ text-align: center;
14
+
15
+ padding: 16px;
16
+ `;
17
+ const StyledRankingOverviewTitle = exports.StyledRankingOverviewTitle = _styledComponents.default.div`
18
+ font-weight: bold;
19
+ font-size: 200%;
20
+ `;
21
+ const StyledRankingOverviewSubtitle = exports.StyledRankingOverviewSubtitle = _styledComponents.default.div``;
22
+ //# sourceMappingURL=RankingOverview.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RankingOverview.styles.js","names":["_styledComponents","_interopRequireDefault","require","e","__esModule","default","StyledRankingOverview","exports","styled","div","StyledRankingOverviewTitle","StyledRankingOverviewSubtitle"],"sources":["../../../../src/components/ranking-overview/RankingOverview.styles.ts"],"sourcesContent":["import styled from 'styled-components';\n\nexport const StyledRankingOverview = styled.div`\n display: flex;\n flex-direction: column;\n\n text-align: center;\n\n padding: 16px;\n`;\n\nexport const StyledRankingOverviewTitle = styled.div`\n font-weight: bold;\n font-size: 200%;\n`;\n\nexport const StyledRankingOverviewSubtitle = styled.div``;\n"],"mappings":";;;;;;AAAA,IAAAA,iBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAuC,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEhC,MAAMG,qBAAqB,GAAAC,OAAA,CAAAD,qBAAA,GAAGE,yBAAM,CAACC,GAAG;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAEM,MAAMC,0BAA0B,GAAAH,OAAA,CAAAG,0BAAA,GAAGF,yBAAM,CAACC,GAAG;AACpD;AACA;AACA,CAAC;AAEM,MAAME,6BAA6B,GAAAJ,OAAA,CAAAI,6BAAA,GAAGH,yBAAM,CAACC,GAAG,EAAE","ignoreList":[]}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "Ranking", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _Ranking.default;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "RankingOverview", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _RankingOverview.default;
16
+ }
17
+ });
18
+ var _Ranking = _interopRequireDefault(require("./components/ranking/Ranking"));
19
+ var _RankingOverview = _interopRequireDefault(require("./components/ranking-overview/RankingOverview"));
20
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_Ranking","_interopRequireDefault","require","_RankingOverview","e","__esModule","default"],"sources":["../../src/index.ts"],"sourcesContent":["export { default as Ranking } from './components/ranking/Ranking';\nexport { default as RankingOverview } from './components/ranking-overview/RankingOverview';\nexport type {\n IRankingEntry as RankingEntry,\n RankingContentEntry,\n RankingContentHeadline,\n RankingContent,\n} from './types/ranking';\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAAA,QAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAF,sBAAA,CAAAC,OAAA;AAA2F,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=ranking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ranking.js","names":[],"sources":["../../../src/types/ranking.ts"],"sourcesContent":["export interface IRankingEntry {\n rank: number;\n name: string;\n personId: string;\n points: number;\n content?: RankingContent[];\n icons?: string[];\n}\n\nexport type RankingContent = RankingContentHeadline | RankingContentEntry;\n\nexport interface RankingContentHeadline {\n headline: string;\n id: string;\n}\n\nexport interface RankingContentEntry {\n id: string;\n name: string;\n value: string;\n}\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,53 @@
1
+ import React, { useCallback, useMemo } from 'react';
2
+ import { StyledRanking } from './Ranking.styles';
3
+ import { Accordion, AccordionGroup, Icon } from '@chayns-components/core';
4
+ import RankingEntry from './ranking-entry/RankingEntry';
5
+ const Ranking = ({
6
+ title = 'Rangliste',
7
+ entries,
8
+ onFriendRemove,
9
+ onFriendAdd,
10
+ shouldShowOnlyFriends,
11
+ friendPersonIds,
12
+ onSearchChange,
13
+ searchValue,
14
+ onFriendVisibleChange
15
+ }) => {
16
+ const content = useMemo(() => entries.map(({
17
+ content: entryContent,
18
+ rank,
19
+ personId,
20
+ points,
21
+ name,
22
+ icons
23
+ }) => /*#__PURE__*/React.createElement(RankingEntry, {
24
+ key: `ranking-entry--${personId}`,
25
+ rank: rank,
26
+ personId: personId,
27
+ name: name,
28
+ icons: icons,
29
+ points: points,
30
+ content: entryContent,
31
+ onFriendAdd: onFriendAdd,
32
+ onFriendRemove: onFriendRemove,
33
+ isFriend: friendPersonIds?.includes(personId)
34
+ })), [entries, friendPersonIds, onFriendAdd, onFriendRemove]);
35
+ const handleSearchChange = useCallback(event => {
36
+ if (typeof onSearchChange === 'function') {
37
+ onSearchChange(event.target.value);
38
+ }
39
+ }, [onSearchChange]);
40
+ return useMemo(() => /*#__PURE__*/React.createElement(StyledRanking, null, /*#__PURE__*/React.createElement(Accordion, {
41
+ title: title,
42
+ onSearchChange: handleSearchChange,
43
+ searchValue: searchValue,
44
+ rightElement: /*#__PURE__*/React.createElement(Icon, {
45
+ icons: shouldShowOnlyFriends ? ['fas fa-star'] : ['far fa-star'],
46
+ size: 15,
47
+ onClick: onFriendVisibleChange
48
+ })
49
+ }, /*#__PURE__*/React.createElement(AccordionGroup, null, content))), [content, handleSearchChange, onFriendVisibleChange, searchValue, shouldShowOnlyFriends, title]);
50
+ };
51
+ Ranking.displayName = 'Ranking';
52
+ export default Ranking;
53
+ //# sourceMappingURL=Ranking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Ranking.js","names":["React","useCallback","useMemo","StyledRanking","Accordion","AccordionGroup","Icon","RankingEntry","Ranking","title","entries","onFriendRemove","onFriendAdd","shouldShowOnlyFriends","friendPersonIds","onSearchChange","searchValue","onFriendVisibleChange","content","map","entryContent","rank","personId","points","name","icons","createElement","key","isFriend","includes","handleSearchChange","event","target","value","rightElement","size","onClick","displayName"],"sources":["../../../../src/components/ranking/Ranking.tsx"],"sourcesContent":["import React, { ChangeEvent, FC, useCallback, useMemo } from 'react';\nimport { StyledRanking } from './Ranking.styles';\nimport { IRankingEntry } from '../../types/ranking';\nimport { Accordion, AccordionGroup, Icon } from '@chayns-components/core';\nimport RankingEntry from './ranking-entry/RankingEntry';\n\nexport type RankingProps = {\n /**\n * Array of ranking entries to be displayed in the ranking list.\n */\n entries: IRankingEntry[];\n /**\n * Array of personIds that represent the user's friends.\n */\n friendPersonIds: string[];\n /**\n * Callback function triggered when a friend is added to the friends list.\n * @param personId - The ID of the person to be added as friend\n */\n onFriendAdd?: (personId: string) => void;\n /**\n * Callback function triggered when a friend is removed from the friends list.\n * @param personId - The ID of the person to be removed from friends\n */\n onFriendRemove?: (personId: string) => void;\n /**\n * Callback function triggered when the visibility of friends is toggled.\n */\n onFriendVisibleChange?: () => void;\n /**\n * Callback function triggered when the search input value changes.\n * @param value - The current search input value\n */\n onSearchChange?: (value: string) => void;\n /**\n * The current value of the search input field.\n */\n searchValue?: string;\n /**\n * Whether only the friends of the user should be displayed (filtering and fetching the correct data is done by you).\n */\n shouldShowOnlyFriends?: boolean;\n /**\n * The title of the top Accordion.\n */\n title?: string;\n};\n\nconst Ranking: FC<RankingProps> = ({\n title = 'Rangliste',\n entries,\n onFriendRemove,\n onFriendAdd,\n shouldShowOnlyFriends,\n friendPersonIds,\n onSearchChange,\n searchValue,\n onFriendVisibleChange,\n}) => {\n const content = useMemo(\n () =>\n entries.map(({ content: entryContent, rank, personId, points, name, icons }) => (\n <RankingEntry\n key={`ranking-entry--${personId}`}\n rank={rank}\n personId={personId}\n name={name}\n icons={icons}\n points={points}\n content={entryContent}\n onFriendAdd={onFriendAdd}\n onFriendRemove={onFriendRemove}\n isFriend={friendPersonIds?.includes(personId)}\n />\n )),\n [entries, friendPersonIds, onFriendAdd, onFriendRemove],\n );\n\n const handleSearchChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (typeof onSearchChange === 'function') {\n onSearchChange(event.target.value);\n }\n },\n [onSearchChange],\n );\n\n return useMemo(\n () => (\n <StyledRanking>\n <Accordion\n title={title}\n onSearchChange={handleSearchChange}\n searchValue={searchValue}\n rightElement={\n <Icon\n icons={shouldShowOnlyFriends ? ['fas fa-star'] : ['far fa-star']}\n size={15}\n onClick={onFriendVisibleChange}\n />\n }\n >\n <AccordionGroup>{content}</AccordionGroup>\n </Accordion>\n </StyledRanking>\n ),\n [\n content,\n handleSearchChange,\n onFriendVisibleChange,\n searchValue,\n shouldShowOnlyFriends,\n title,\n ],\n );\n};\n\nRanking.displayName = 'Ranking';\n\nexport default Ranking;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAqBC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AACpE,SAASC,aAAa,QAAQ,kBAAkB;AAEhD,SAASC,SAAS,EAAEC,cAAc,EAAEC,IAAI,QAAQ,yBAAyB;AACzE,OAAOC,YAAY,MAAM,8BAA8B;AA4CvD,MAAMC,OAAyB,GAAGA,CAAC;EAC/BC,KAAK,GAAG,WAAW;EACnBC,OAAO;EACPC,cAAc;EACdC,WAAW;EACXC,qBAAqB;EACrBC,eAAe;EACfC,cAAc;EACdC,WAAW;EACXC;AACJ,CAAC,KAAK;EACF,MAAMC,OAAO,GAAGhB,OAAO,CACnB,MACIQ,OAAO,CAACS,GAAG,CAAC,CAAC;IAAED,OAAO,EAAEE,YAAY;IAAEC,IAAI;IAAEC,QAAQ;IAAEC,MAAM;IAAEC,IAAI;IAAEC;EAAM,CAAC,kBACvEzB,KAAA,CAAA0B,aAAA,CAACnB,YAAY;IACToB,GAAG,EAAE,kBAAkBL,QAAQ,EAAG;IAClCD,IAAI,EAAEA,IAAK;IACXC,QAAQ,EAAEA,QAAS;IACnBE,IAAI,EAAEA,IAAK;IACXC,KAAK,EAAEA,KAAM;IACbF,MAAM,EAAEA,MAAO;IACfL,OAAO,EAAEE,YAAa;IACtBR,WAAW,EAAEA,WAAY;IACzBD,cAAc,EAAEA,cAAe;IAC/BiB,QAAQ,EAAEd,eAAe,EAAEe,QAAQ,CAACP,QAAQ;EAAE,CACjD,CACJ,CAAC,EACN,CAACZ,OAAO,EAAEI,eAAe,EAAEF,WAAW,EAAED,cAAc,CAC1D,CAAC;EAED,MAAMmB,kBAAkB,GAAG7B,WAAW,CACjC8B,KAAoC,IAAK;IACtC,IAAI,OAAOhB,cAAc,KAAK,UAAU,EAAE;MACtCA,cAAc,CAACgB,KAAK,CAACC,MAAM,CAACC,KAAK,CAAC;IACtC;EACJ,CAAC,EACD,CAAClB,cAAc,CACnB,CAAC;EAED,OAAOb,OAAO,CACV,mBACIF,KAAA,CAAA0B,aAAA,CAACvB,aAAa,qBACVH,KAAA,CAAA0B,aAAA,CAACtB,SAAS;IACNK,KAAK,EAAEA,KAAM;IACbM,cAAc,EAAEe,kBAAmB;IACnCd,WAAW,EAAEA,WAAY;IACzBkB,YAAY,eACRlC,KAAA,CAAA0B,aAAA,CAACpB,IAAI;MACDmB,KAAK,EAAEZ,qBAAqB,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAE;MACjEsB,IAAI,EAAE,EAAG;MACTC,OAAO,EAAEnB;IAAsB,CAClC;EACJ,gBAEDjB,KAAA,CAAA0B,aAAA,CAACrB,cAAc,QAAEa,OAAwB,CAClC,CACA,CAClB,EACD,CACIA,OAAO,EACPY,kBAAkB,EAClBb,qBAAqB,EACrBD,WAAW,EACXH,qBAAqB,EACrBJ,KAAK,CAEb,CAAC;AACL,CAAC;AAEDD,OAAO,CAAC6B,WAAW,GAAG,SAAS;AAE/B,eAAe7B,OAAO","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ import styled from 'styled-components';
2
+ export const StyledRanking = styled.div``;
3
+ //# sourceMappingURL=Ranking.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Ranking.styles.js","names":["styled","StyledRanking","div"],"sources":["../../../../src/components/ranking/Ranking.styles.ts"],"sourcesContent":["import styled from 'styled-components';\n\nexport const StyledRanking = styled.div``;\n"],"mappings":"AAAA,OAAOA,MAAM,MAAM,mBAAmB;AAEtC,OAAO,MAAMC,aAAa,GAAGD,MAAM,CAACE,GAAG,EAAE","ignoreList":[]}
@@ -0,0 +1,67 @@
1
+ import React, { useCallback, useMemo } from 'react';
2
+ import { StyledRankingEntry, StyledRankingEntryContent, StyledRankingEntryContentEntry, StyledRankingEntryContentEntryName, StyledRankingEntryContentEntryValue, StyledRankingEntryContentHeadline, StyledRankingEntryElement, StyledRankingEntryElementLeft, StyledRankingEntryElementRight, StyledRankingEntryRightElement, StyledRankingEntryRightElementPoints } from './RankingEntry.styles';
3
+ import { Accordion, AccordionContent, Icon } from '@chayns-components/core';
4
+ const RankingEntry = ({
5
+ rank,
6
+ name: fullName,
7
+ personId,
8
+ icons,
9
+ points,
10
+ isFriend,
11
+ content,
12
+ onFriendRemove,
13
+ onFriendAdd
14
+ }) => {
15
+ const handleIconClick = useCallback(() => {
16
+ if (isFriend && typeof onFriendRemove === 'function') {
17
+ onFriendRemove(personId);
18
+ } else if (typeof onFriendAdd === 'function') {
19
+ onFriendAdd(personId);
20
+ }
21
+ }, [isFriend, onFriendAdd, onFriendRemove, personId]);
22
+ const {
23
+ title,
24
+ rightElement
25
+ } = useMemo(() => {
26
+ const titleElement = /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement("strong", null, rank, ". "), fullName);
27
+ const rightElements = /*#__PURE__*/React.createElement(StyledRankingEntryRightElement, null, /*#__PURE__*/React.createElement(StyledRankingEntryRightElementPoints, null, points), icons && /*#__PURE__*/React.createElement(Icon, {
28
+ icons: icons
29
+ }), /*#__PURE__*/React.createElement(Icon, {
30
+ icons: isFriend ? ['fas fa-star'] : ['far fa-star'],
31
+ size: 15,
32
+ onClick: handleIconClick
33
+ }));
34
+ return {
35
+ title: titleElement,
36
+ rightElement: rightElements
37
+ };
38
+ }, [handleIconClick, icons, isFriend, fullName, points, rank]);
39
+ const entryContent = useMemo(() => {
40
+ if (!content) return null;
41
+ return content.map(({
42
+ name,
43
+ value,
44
+ headline,
45
+ id
46
+ }) => {
47
+ if (typeof headline === 'string') {
48
+ return /*#__PURE__*/React.createElement(StyledRankingEntryContentHeadline, {
49
+ key: id
50
+ }, headline);
51
+ }
52
+ return /*#__PURE__*/React.createElement(StyledRankingEntryContentEntry, {
53
+ key: id
54
+ }, /*#__PURE__*/React.createElement(StyledRankingEntryContentEntryName, null, name), /*#__PURE__*/React.createElement(StyledRankingEntryContentEntryValue, null, value));
55
+ });
56
+ }, [content]);
57
+ return useMemo(() => /*#__PURE__*/React.createElement(StyledRankingEntry, {
58
+ $shouldShowLines: !entryContent
59
+ }, entryContent ? /*#__PURE__*/React.createElement(Accordion, {
60
+ title: "",
61
+ titleElement: title,
62
+ rightElement: rightElement
63
+ }, /*#__PURE__*/React.createElement(AccordionContent, null, /*#__PURE__*/React.createElement(StyledRankingEntryContent, null, entryContent))) : /*#__PURE__*/React.createElement(StyledRankingEntryElement, null, /*#__PURE__*/React.createElement(StyledRankingEntryElementLeft, null, title), /*#__PURE__*/React.createElement(StyledRankingEntryElementRight, null, rightElement))), [entryContent, rightElement, title]);
64
+ };
65
+ RankingEntry.displayName = 'RankingEntry';
66
+ export default RankingEntry;
67
+ //# sourceMappingURL=RankingEntry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RankingEntry.js","names":["React","useCallback","useMemo","StyledRankingEntry","StyledRankingEntryContent","StyledRankingEntryContentEntry","StyledRankingEntryContentEntryName","StyledRankingEntryContentEntryValue","StyledRankingEntryContentHeadline","StyledRankingEntryElement","StyledRankingEntryElementLeft","StyledRankingEntryElementRight","StyledRankingEntryRightElement","StyledRankingEntryRightElementPoints","Accordion","AccordionContent","Icon","RankingEntry","rank","name","fullName","personId","icons","points","isFriend","content","onFriendRemove","onFriendAdd","handleIconClick","title","rightElement","titleElement","createElement","rightElements","size","onClick","entryContent","map","value","headline","id","key","$shouldShowLines","displayName"],"sources":["../../../../../src/components/ranking/ranking-entry/RankingEntry.tsx"],"sourcesContent":["import React, { FC, useCallback, useMemo } from 'react';\nimport {\n StyledRankingEntry,\n StyledRankingEntryContent,\n StyledRankingEntryContentEntry,\n StyledRankingEntryContentEntryName,\n StyledRankingEntryContentEntryValue,\n StyledRankingEntryContentHeadline,\n StyledRankingEntryElement,\n StyledRankingEntryElementLeft,\n StyledRankingEntryElementRight,\n StyledRankingEntryRightElement,\n StyledRankingEntryRightElementPoints,\n} from './RankingEntry.styles';\nimport { Accordion, AccordionContent, Icon } from '@chayns-components/core';\nimport { IRankingEntry, RankingContentEntry, RankingContentHeadline } from '../../../types/ranking';\n\nexport type RankingEntryProps = {\n onFriendAdd?: (personId: string) => void;\n onFriendRemove?: (personId: string) => void;\n isFriend?: boolean;\n content?: IRankingEntry['content'];\n rank: IRankingEntry['rank'];\n personId: IRankingEntry['personId'];\n points: IRankingEntry['points'];\n name: IRankingEntry['name'];\n icons: IRankingEntry['icons'];\n};\n\nconst RankingEntry: FC<RankingEntryProps> = ({\n rank,\n name: fullName,\n personId,\n icons,\n points,\n isFriend,\n content,\n onFriendRemove,\n onFriendAdd,\n}) => {\n const handleIconClick = useCallback(() => {\n if (isFriend && typeof onFriendRemove === 'function') {\n onFriendRemove(personId);\n } else if (typeof onFriendAdd === 'function') {\n onFriendAdd(personId);\n }\n }, [isFriend, onFriendAdd, onFriendRemove, personId]);\n\n const { title, rightElement } = useMemo(() => {\n const titleElement = (\n <span>\n <strong>{rank}. </strong>\n {fullName}\n </span>\n );\n\n const rightElements = (\n <StyledRankingEntryRightElement>\n <StyledRankingEntryRightElementPoints>\n {points}\n </StyledRankingEntryRightElementPoints>\n {icons && <Icon icons={icons} />}\n <Icon\n icons={isFriend ? ['fas fa-star'] : ['far fa-star']}\n size={15}\n onClick={handleIconClick}\n />\n </StyledRankingEntryRightElement>\n );\n\n return { title: titleElement, rightElement: rightElements };\n }, [handleIconClick, icons, isFriend, fullName, points, rank]);\n\n const entryContent = useMemo(() => {\n if (!content) return null;\n\n return (content as (RankingContentHeadline & RankingContentEntry)[]).map(\n ({ name, value, headline, id }) => {\n if (typeof headline === 'string') {\n return (\n <StyledRankingEntryContentHeadline key={id}>\n {headline}\n </StyledRankingEntryContentHeadline>\n );\n }\n\n return (\n <StyledRankingEntryContentEntry key={id}>\n <StyledRankingEntryContentEntryName>\n {name}\n </StyledRankingEntryContentEntryName>\n <StyledRankingEntryContentEntryValue>\n {value}\n </StyledRankingEntryContentEntryValue>\n </StyledRankingEntryContentEntry>\n );\n },\n );\n }, [content]);\n\n return useMemo(\n () => (\n <StyledRankingEntry $shouldShowLines={!entryContent}>\n {entryContent ? (\n <Accordion title=\"\" titleElement={title} rightElement={rightElement}>\n <AccordionContent>\n <StyledRankingEntryContent>{entryContent}</StyledRankingEntryContent>\n </AccordionContent>\n </Accordion>\n ) : (\n <StyledRankingEntryElement>\n <StyledRankingEntryElementLeft>{title}</StyledRankingEntryElementLeft>\n <StyledRankingEntryElementRight>\n {rightElement}\n </StyledRankingEntryElementRight>\n </StyledRankingEntryElement>\n )}\n </StyledRankingEntry>\n ),\n [entryContent, rightElement, title],\n );\n};\n\nRankingEntry.displayName = 'RankingEntry';\n\nexport default RankingEntry;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,49 @@
1
+ import styled, { css } from 'styled-components';
2
+ export const StyledRankingEntry = styled.div`
3
+ ${({
4
+ theme,
5
+ $shouldShowLines
6
+ }) => theme.accordionLines && $shouldShowLines && css`
7
+ &:not(:last-child) {
8
+ border-bottom: 1px solid rgba(${theme['headline-rgb']}, 0.5);
9
+ }
10
+ `}
11
+ `;
12
+ export const StyledRankingEntryElement = styled.div`
13
+ display: flex;
14
+ justify-content: space-between;
15
+ align-items: center;
16
+ gap: 20px;
17
+
18
+ padding: 4px 6px;
19
+ `;
20
+ export const StyledRankingEntryElementLeft = styled.div``;
21
+ export const StyledRankingEntryElementRight = styled.div``;
22
+ export const StyledRankingEntryRightElement = styled.div`
23
+ display: flex;
24
+ gap: 8px;
25
+ align-items: center;
26
+ `;
27
+ export const StyledRankingEntryRightElementPoints = styled.div`
28
+ line-height: 15px;
29
+ `;
30
+ export const StyledRankingEntryContent = styled.div`
31
+ display: flex;
32
+ flex-direction: column;
33
+
34
+ gap: 8px;
35
+ `;
36
+ export const StyledRankingEntryContentHeadline = styled.div`
37
+ font-weight: bold;
38
+ font-size: 80%;
39
+
40
+ margin-bottom: -8px;
41
+ `;
42
+ export const StyledRankingEntryContentEntry = styled.div`
43
+ display: flex;
44
+ align-items: center;
45
+ justify-content: space-between;
46
+ `;
47
+ export const StyledRankingEntryContentEntryName = styled.div``;
48
+ export const StyledRankingEntryContentEntryValue = styled.div``;
49
+ //# sourceMappingURL=RankingEntry.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RankingEntry.styles.js","names":["styled","css","StyledRankingEntry","div","theme","$shouldShowLines","accordionLines","StyledRankingEntryElement","StyledRankingEntryElementLeft","StyledRankingEntryElementRight","StyledRankingEntryRightElement","StyledRankingEntryRightElementPoints","StyledRankingEntryContent","StyledRankingEntryContentHeadline","StyledRankingEntryContentEntry","StyledRankingEntryContentEntryName","StyledRankingEntryContentEntryValue"],"sources":["../../../../../src/components/ranking/ranking-entry/RankingEntry.styles.ts"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport { WithTheme } from '@chayns-components/core';\n\ntype StyledRankingEntryProps = WithTheme<{\n $shouldShowLines: boolean;\n}>;\n\nexport const StyledRankingEntry = styled.div<StyledRankingEntryProps>`\n ${({ theme, $shouldShowLines }) =>\n theme.accordionLines &&\n $shouldShowLines &&\n css`\n &:not(:last-child) {\n border-bottom: 1px solid rgba(${theme['headline-rgb']}, 0.5);\n }\n `}\n`;\n\nexport const StyledRankingEntryElement = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 20px;\n\n padding: 4px 6px;\n`;\n\nexport const StyledRankingEntryElementLeft = styled.div``;\n\nexport const StyledRankingEntryElementRight = styled.div``;\n\nexport const StyledRankingEntryRightElement = styled.div`\n display: flex;\n gap: 8px;\n align-items: center;\n`;\n\nexport const StyledRankingEntryRightElementPoints = styled.div`\n line-height: 15px;\n`;\n\nexport const StyledRankingEntryContent = styled.div`\n display: flex;\n flex-direction: column;\n\n gap: 8px;\n`;\n\nexport const StyledRankingEntryContentHeadline = styled.div`\n font-weight: bold;\n font-size: 80%;\n\n margin-bottom: -8px;\n`;\n\nexport const StyledRankingEntryContentEntry = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n`;\n\nexport const StyledRankingEntryContentEntryName = styled.div``;\n\nexport const StyledRankingEntryContentEntryValue = styled.div``;\n"],"mappings":"AAAA,OAAOA,MAAM,IAAIC,GAAG,QAAQ,mBAAmB;AAO/C,OAAO,MAAMC,kBAAkB,GAAGF,MAAM,CAACG,GAA4B;AACrE,MAAM,CAAC;EAAEC,KAAK;EAAEC;AAAiB,CAAC,KAC1BD,KAAK,CAACE,cAAc,IACpBD,gBAAgB,IAChBJ,GAAG;AACX;AACA,gDAAgDG,KAAK,CAAC,cAAc,CAAC;AACrE;AACA,SAAS;AACT,CAAC;AAED,OAAO,MAAMG,yBAAyB,GAAGP,MAAM,CAACG,GAAG;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMK,6BAA6B,GAAGR,MAAM,CAACG,GAAG,EAAE;AAEzD,OAAO,MAAMM,8BAA8B,GAAGT,MAAM,CAACG,GAAG,EAAE;AAE1D,OAAO,MAAMO,8BAA8B,GAAGV,MAAM,CAACG,GAAG;AACxD;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMQ,oCAAoC,GAAGX,MAAM,CAACG,GAAG;AAC9D;AACA,CAAC;AAED,OAAO,MAAMS,yBAAyB,GAAGZ,MAAM,CAACG,GAAG;AACnD;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMU,iCAAiC,GAAGb,MAAM,CAACG,GAAG;AAC3D;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMW,8BAA8B,GAAGd,MAAM,CAACG,GAAG;AACxD;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMY,kCAAkC,GAAGf,MAAM,CAACG,GAAG,EAAE;AAE9D,OAAO,MAAMa,mCAAmC,GAAGhB,MAAM,CAACG,GAAG,EAAE","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import { StyledRankingOverview, StyledRankingOverviewSubtitle, StyledRankingOverviewTitle } from './RankingOverview.styles';
3
+ import { AnimatedNumber } from '@chayns-components/core';
4
+ const RankingOverview = ({
5
+ userRank,
6
+ totalPlayers,
7
+ suffix
8
+ }) => /*#__PURE__*/React.createElement(StyledRankingOverview, null, /*#__PURE__*/React.createElement(StyledRankingOverviewTitle, null, "Platz ", /*#__PURE__*/React.createElement(AnimatedNumber, {
9
+ value: userRank
10
+ })), /*#__PURE__*/React.createElement(StyledRankingOverviewSubtitle, null, suffix, " von ", /*#__PURE__*/React.createElement(AnimatedNumber, {
11
+ value: totalPlayers
12
+ }), " Mitspielern"));
13
+ RankingOverview.displayName = 'RankingOverview';
14
+ export default RankingOverview;
15
+ //# sourceMappingURL=RankingOverview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RankingOverview.js","names":["React","StyledRankingOverview","StyledRankingOverviewSubtitle","StyledRankingOverviewTitle","AnimatedNumber","RankingOverview","userRank","totalPlayers","suffix","createElement","value","displayName"],"sources":["../../../../src/components/ranking-overview/RankingOverview.tsx"],"sourcesContent":["import React, { FC } from 'react';\nimport {\n StyledRankingOverview,\n StyledRankingOverviewSubtitle,\n StyledRankingOverviewTitle,\n} from './RankingOverview.styles';\nimport { AnimatedNumber } from '@chayns-components/core';\n\nexport type RankingOverviewProps = {\n /**\n * A suffix that will be displayed before the total players.\n */\n suffix: string;\n /**\n * The amount of the total players.\n */\n totalPlayers: number;\n /**\n * The Rank of the current user.\n */\n userRank: number;\n};\n\nconst RankingOverview: FC<RankingOverviewProps> = ({ userRank, totalPlayers, suffix }) => (\n <StyledRankingOverview>\n <StyledRankingOverviewTitle>\n Platz <AnimatedNumber value={userRank} />\n </StyledRankingOverviewTitle>\n <StyledRankingOverviewSubtitle>\n {suffix} von <AnimatedNumber value={totalPlayers} /> Mitspielern\n </StyledRankingOverviewSubtitle>\n </StyledRankingOverview>\n);\n\nRankingOverview.displayName = 'RankingOverview';\n\nexport default RankingOverview;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAc,OAAO;AACjC,SACIC,qBAAqB,EACrBC,6BAA6B,EAC7BC,0BAA0B,QACvB,0BAA0B;AACjC,SAASC,cAAc,QAAQ,yBAAyB;AAiBxD,MAAMC,eAAyC,GAAGA,CAAC;EAAEC,QAAQ;EAAEC,YAAY;EAAEC;AAAO,CAAC,kBACjFR,KAAA,CAAAS,aAAA,CAACR,qBAAqB,qBAClBD,KAAA,CAAAS,aAAA,CAACN,0BAA0B,QAAC,QAClB,eAAAH,KAAA,CAAAS,aAAA,CAACL,cAAc;EAACM,KAAK,EAAEJ;AAAS,CAAE,CAChB,CAAC,eAC7BN,KAAA,CAAAS,aAAA,CAACP,6BAA6B,QACzBM,MAAM,EAAC,OAAK,eAAAR,KAAA,CAAAS,aAAA,CAACL,cAAc;EAACM,KAAK,EAAEH;AAAa,CAAE,CAAC,gBACzB,CACZ,CAC1B;AAEDF,eAAe,CAACM,WAAW,GAAG,iBAAiB;AAE/C,eAAeN,eAAe","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ import styled from 'styled-components';
2
+ export const StyledRankingOverview = styled.div`
3
+ display: flex;
4
+ flex-direction: column;
5
+
6
+ text-align: center;
7
+
8
+ padding: 16px;
9
+ `;
10
+ export const StyledRankingOverviewTitle = styled.div`
11
+ font-weight: bold;
12
+ font-size: 200%;
13
+ `;
14
+ export const StyledRankingOverviewSubtitle = styled.div``;
15
+ //# sourceMappingURL=RankingOverview.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RankingOverview.styles.js","names":["styled","StyledRankingOverview","div","StyledRankingOverviewTitle","StyledRankingOverviewSubtitle"],"sources":["../../../../src/components/ranking-overview/RankingOverview.styles.ts"],"sourcesContent":["import styled from 'styled-components';\n\nexport const StyledRankingOverview = styled.div`\n display: flex;\n flex-direction: column;\n\n text-align: center;\n\n padding: 16px;\n`;\n\nexport const StyledRankingOverviewTitle = styled.div`\n font-weight: bold;\n font-size: 200%;\n`;\n\nexport const StyledRankingOverviewSubtitle = styled.div``;\n"],"mappings":"AAAA,OAAOA,MAAM,MAAM,mBAAmB;AAEtC,OAAO,MAAMC,qBAAqB,GAAGD,MAAM,CAACE,GAAG;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMC,0BAA0B,GAAGH,MAAM,CAACE,GAAG;AACpD;AACA;AACA,CAAC;AAED,OAAO,MAAME,6BAA6B,GAAGJ,MAAM,CAACE,GAAG,EAAE","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ export { default as Ranking } from './components/ranking/Ranking';
2
+ export { default as RankingOverview } from './components/ranking-overview/RankingOverview';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["default","Ranking","RankingOverview"],"sources":["../../src/index.ts"],"sourcesContent":["export { default as Ranking } from './components/ranking/Ranking';\nexport { default as RankingOverview } from './components/ranking-overview/RankingOverview';\nexport type {\n IRankingEntry as RankingEntry,\n RankingContentEntry,\n RankingContentHeadline,\n RankingContent,\n} from './types/ranking';\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,OAAO,QAAQ,8BAA8B;AACjE,SAASD,OAAO,IAAIE,eAAe,QAAQ,+CAA+C","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ranking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ranking.js","names":[],"sources":["../../../src/types/ranking.ts"],"sourcesContent":["export interface IRankingEntry {\n rank: number;\n name: string;\n personId: string;\n points: number;\n content?: RankingContent[];\n icons?: string[];\n}\n\nexport type RankingContent = RankingContentHeadline | RankingContentEntry;\n\nexport interface RankingContentHeadline {\n headline: string;\n id: string;\n}\n\nexport interface RankingContentEntry {\n id: string;\n name: string;\n value: string;\n}\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,45 @@
1
+ import { FC } from 'react';
2
+ import { IRankingEntry } from '../../types/ranking';
3
+ export type RankingProps = {
4
+ /**
5
+ * Array of ranking entries to be displayed in the ranking list.
6
+ */
7
+ entries: IRankingEntry[];
8
+ /**
9
+ * Array of personIds that represent the user's friends.
10
+ */
11
+ friendPersonIds: string[];
12
+ /**
13
+ * Callback function triggered when a friend is added to the friends list.
14
+ * @param personId - The ID of the person to be added as friend
15
+ */
16
+ onFriendAdd?: (personId: string) => void;
17
+ /**
18
+ * Callback function triggered when a friend is removed from the friends list.
19
+ * @param personId - The ID of the person to be removed from friends
20
+ */
21
+ onFriendRemove?: (personId: string) => void;
22
+ /**
23
+ * Callback function triggered when the visibility of friends is toggled.
24
+ */
25
+ onFriendVisibleChange?: () => void;
26
+ /**
27
+ * Callback function triggered when the search input value changes.
28
+ * @param value - The current search input value
29
+ */
30
+ onSearchChange?: (value: string) => void;
31
+ /**
32
+ * The current value of the search input field.
33
+ */
34
+ searchValue?: string;
35
+ /**
36
+ * Whether only the friends of the user should be displayed (filtering and fetching the correct data is done by you).
37
+ */
38
+ shouldShowOnlyFriends?: boolean;
39
+ /**
40
+ * The title of the top Accordion.
41
+ */
42
+ title?: string;
43
+ };
44
+ declare const Ranking: FC<RankingProps>;
45
+ export default Ranking;
@@ -0,0 +1 @@
1
+ export declare const StyledRanking: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
@@ -0,0 +1,15 @@
1
+ import { FC } from 'react';
2
+ import { IRankingEntry } from '../../../types/ranking';
3
+ export type RankingEntryProps = {
4
+ onFriendAdd?: (personId: string) => void;
5
+ onFriendRemove?: (personId: string) => void;
6
+ isFriend?: boolean;
7
+ content?: IRankingEntry['content'];
8
+ rank: IRankingEntry['rank'];
9
+ personId: IRankingEntry['personId'];
10
+ points: IRankingEntry['points'];
11
+ name: IRankingEntry['name'];
12
+ icons: IRankingEntry['icons'];
13
+ };
14
+ declare const RankingEntry: FC<RankingEntryProps>;
15
+ export default RankingEntry;
@@ -0,0 +1,16 @@
1
+ import { WithTheme } from '@chayns-components/core';
2
+ type StyledRankingEntryProps = WithTheme<{
3
+ $shouldShowLines: boolean;
4
+ }>;
5
+ export declare const StyledRankingEntry: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, StyledRankingEntryProps>> & string;
6
+ export declare const StyledRankingEntryElement: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
7
+ export declare const StyledRankingEntryElementLeft: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
8
+ export declare const StyledRankingEntryElementRight: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
9
+ export declare const StyledRankingEntryRightElement: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
10
+ export declare const StyledRankingEntryRightElementPoints: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
11
+ export declare const StyledRankingEntryContent: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
12
+ export declare const StyledRankingEntryContentHeadline: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
13
+ export declare const StyledRankingEntryContentEntry: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
14
+ export declare const StyledRankingEntryContentEntryName: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
15
+ export declare const StyledRankingEntryContentEntryValue: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
16
+ export {};
@@ -0,0 +1,17 @@
1
+ import { FC } from 'react';
2
+ export type RankingOverviewProps = {
3
+ /**
4
+ * A suffix that will be displayed before the total players.
5
+ */
6
+ suffix: string;
7
+ /**
8
+ * The amount of the total players.
9
+ */
10
+ totalPlayers: number;
11
+ /**
12
+ * The Rank of the current user.
13
+ */
14
+ userRank: number;
15
+ };
16
+ declare const RankingOverview: FC<RankingOverviewProps>;
17
+ export default RankingOverview;
@@ -0,0 +1,3 @@
1
+ export declare const StyledRankingOverview: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
2
+ export declare const StyledRankingOverviewTitle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
3
+ export declare const StyledRankingOverviewSubtitle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
@@ -0,0 +1,3 @@
1
+ export { default as Ranking } from './components/ranking/Ranking';
2
+ export { default as RankingOverview } from './components/ranking-overview/RankingOverview';
3
+ export type { IRankingEntry as RankingEntry, RankingContentEntry, RankingContentHeadline, RankingContent, } from './types/ranking';
@@ -0,0 +1,18 @@
1
+ export interface IRankingEntry {
2
+ rank: number;
3
+ name: string;
4
+ personId: string;
5
+ points: number;
6
+ content?: RankingContent[];
7
+ icons?: string[];
8
+ }
9
+ export type RankingContent = RankingContentHeadline | RankingContentEntry;
10
+ export interface RankingContentHeadline {
11
+ headline: string;
12
+ id: string;
13
+ }
14
+ export interface RankingContentEntry {
15
+ id: string;
16
+ name: string;
17
+ value: string;
18
+ }
package/package.json ADDED
@@ -0,0 +1,86 @@
1
+ {
2
+ "name": "@chayns-components/ranking",
3
+ "version": "5.0.0-beta.1225",
4
+ "description": "A set of beautiful React components for developing your own applications with chayns.",
5
+ "sideEffects": false,
6
+ "browserslist": [
7
+ ">0.5%",
8
+ "not dead",
9
+ "not op_mini all",
10
+ "not IE 11"
11
+ ],
12
+ "keywords": [
13
+ "chayns",
14
+ "react",
15
+ "components"
16
+ ],
17
+ "author": "Tobit.Software",
18
+ "homepage": "https://github.com/TobitSoftware/chayns-components/tree/main/packages/ranking#readme",
19
+ "license": "MIT",
20
+ "types": "lib/types/index.d.ts",
21
+ "main": "lib/cjs/index.js",
22
+ "module": "lib/esm/index.js",
23
+ "exports": {
24
+ ".": {
25
+ "types": "./lib/types/index.d.ts",
26
+ "require": "./lib/cjs/index.js",
27
+ "import": "./lib/esm/index.js"
28
+ }
29
+ },
30
+ "directories": {
31
+ "lib": "lib",
32
+ "test": "__tests__"
33
+ },
34
+ "files": [
35
+ "lib"
36
+ ],
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "git+https://github.com/TobitSoftware/chayns-components.git"
40
+ },
41
+ "scripts": {
42
+ "build": "npm run build:cjs && npm run build:esm && npm run build:types",
43
+ "build:types": "tsc",
44
+ "build:cjs": "cross-env NODE_ENV=cjs babel src --out-dir lib/cjs --extensions=.ts,.tsx --source-maps --ignore=src/stories",
45
+ "build:esm": "cross-env NODE_ENV=esm babel src --out-dir lib/esm --extensions=.ts,.tsx --source-maps --ignore=src/stories",
46
+ "prepublishOnly": "npm run build",
47
+ "watch:js": "npm run build:esm -- --watch",
48
+ "link": "npm link && npm run watch:js"
49
+ },
50
+ "bugs": {
51
+ "url": "https://github.com/TobitSoftware/chayns-components/issues"
52
+ },
53
+ "devDependencies": {
54
+ "@babel/cli": "^7.28.3",
55
+ "@babel/core": "^7.28.3",
56
+ "@babel/preset-env": "^7.28.3",
57
+ "@babel/preset-react": "^7.27.1",
58
+ "@babel/preset-typescript": "^7.27.1",
59
+ "@types/lodash.throttle": "^4.1.9",
60
+ "@types/react": "^18.3.24",
61
+ "@types/react-dom": "^18.3.7",
62
+ "@types/styled-components": "^5.1.34",
63
+ "@types/uuid": "^10.0.0",
64
+ "babel-loader": "^9.2.1",
65
+ "cross-env": "^7.0.3",
66
+ "lerna": "^8.2.4",
67
+ "react": "^18.3.1",
68
+ "react-dom": "^18.3.1",
69
+ "styled-components": "^6.1.19",
70
+ "typescript": "^5.9.2"
71
+ },
72
+ "dependencies": {
73
+ "@chayns-components/core": "^5.0.0-beta.1225"
74
+ },
75
+ "peerDependencies": {
76
+ "chayns-api": ">=2.2.0",
77
+ "motion": ">=12.4.1",
78
+ "react": ">=18.0.0",
79
+ "react-dom": ">=18.0.0",
80
+ "styled-components": ">=5.3.11"
81
+ },
82
+ "publishConfig": {
83
+ "access": "public"
84
+ },
85
+ "gitHead": "56619e84ba448c2b2a0d770e9ea8805278131a54"
86
+ }