@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.
- package/LICENSE +21 -0
- package/README.md +34 -0
- package/lib/cjs/components/ranking/Ranking.js +61 -0
- package/lib/cjs/components/ranking/Ranking.js.map +1 -0
- package/lib/cjs/components/ranking/Ranking.styles.js +10 -0
- package/lib/cjs/components/ranking/Ranking.styles.js.map +1 -0
- package/lib/cjs/components/ranking/ranking-entry/RankingEntry.js +74 -0
- package/lib/cjs/components/ranking/ranking-entry/RankingEntry.js.map +1 -0
- package/lib/cjs/components/ranking/ranking-entry/RankingEntry.styles.js +56 -0
- package/lib/cjs/components/ranking/ranking-entry/RankingEntry.styles.js.map +1 -0
- package/lib/cjs/components/ranking-overview/RankingOverview.js +22 -0
- package/lib/cjs/components/ranking-overview/RankingOverview.js.map +1 -0
- package/lib/cjs/components/ranking-overview/RankingOverview.styles.js +22 -0
- package/lib/cjs/components/ranking-overview/RankingOverview.styles.js.map +1 -0
- package/lib/cjs/index.js +21 -0
- package/lib/cjs/index.js.map +1 -0
- package/lib/cjs/types/ranking.js +6 -0
- package/lib/cjs/types/ranking.js.map +1 -0
- package/lib/esm/components/ranking/Ranking.js +53 -0
- package/lib/esm/components/ranking/Ranking.js.map +1 -0
- package/lib/esm/components/ranking/Ranking.styles.js +3 -0
- package/lib/esm/components/ranking/Ranking.styles.js.map +1 -0
- package/lib/esm/components/ranking/ranking-entry/RankingEntry.js +67 -0
- package/lib/esm/components/ranking/ranking-entry/RankingEntry.js.map +1 -0
- package/lib/esm/components/ranking/ranking-entry/RankingEntry.styles.js +49 -0
- package/lib/esm/components/ranking/ranking-entry/RankingEntry.styles.js.map +1 -0
- package/lib/esm/components/ranking-overview/RankingOverview.js +15 -0
- package/lib/esm/components/ranking-overview/RankingOverview.js.map +1 -0
- package/lib/esm/components/ranking-overview/RankingOverview.styles.js +15 -0
- package/lib/esm/components/ranking-overview/RankingOverview.styles.js.map +1 -0
- package/lib/esm/index.js +3 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/types/ranking.js +2 -0
- package/lib/esm/types/ranking.js.map +1 -0
- package/lib/types/components/ranking/Ranking.d.ts +45 -0
- package/lib/types/components/ranking/Ranking.styles.d.ts +1 -0
- package/lib/types/components/ranking/ranking-entry/RankingEntry.d.ts +15 -0
- package/lib/types/components/ranking/ranking-entry/RankingEntry.styles.d.ts +16 -0
- package/lib/types/components/ranking-overview/RankingOverview.d.ts +17 -0
- package/lib/types/components/ranking-overview/RankingOverview.styles.d.ts +3 -0
- package/lib/types/index.d.ts +3 -0
- package/lib/types/types/ranking.d.ts +18 -0
- 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":[]}
|
package/lib/cjs/index.js
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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":[]}
|
package/lib/esm/index.js
ADDED
|
@@ -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 @@
|
|
|
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
|
+
}
|