@chayns-components/devalue-slider 5.0.0-beta.1000

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 (48) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +18 -0
  3. package/lib/cjs/components/DevalueSlider.js +58 -0
  4. package/lib/cjs/components/DevalueSlider.js.map +1 -0
  5. package/lib/cjs/components/slider/Slider.js +212 -0
  6. package/lib/cjs/components/slider/Slider.js.map +1 -0
  7. package/lib/cjs/components/slider/Slider.styles.js +265 -0
  8. package/lib/cjs/components/slider/Slider.styles.js.map +1 -0
  9. package/lib/cjs/components/timer/Timer.js +78 -0
  10. package/lib/cjs/components/timer/Timer.js.map +1 -0
  11. package/lib/cjs/components/timer/Timer.styles.js +30 -0
  12. package/lib/cjs/components/timer/Timer.styles.js.map +1 -0
  13. package/lib/cjs/hooks/design.js +29 -0
  14. package/lib/cjs/hooks/design.js.map +1 -0
  15. package/lib/cjs/index.js +14 -0
  16. package/lib/cjs/index.js.map +1 -0
  17. package/lib/cjs/utils/common.js +11 -0
  18. package/lib/cjs/utils/common.js.map +1 -0
  19. package/lib/cjs/utils/date.js +91 -0
  20. package/lib/cjs/utils/date.js.map +1 -0
  21. package/lib/esm/components/DevalueSlider.js +48 -0
  22. package/lib/esm/components/DevalueSlider.js.map +1 -0
  23. package/lib/esm/components/slider/Slider.js +204 -0
  24. package/lib/esm/components/slider/Slider.js.map +1 -0
  25. package/lib/esm/components/slider/Slider.styles.js +293 -0
  26. package/lib/esm/components/slider/Slider.styles.js.map +1 -0
  27. package/lib/esm/components/timer/Timer.js +71 -0
  28. package/lib/esm/components/timer/Timer.js.map +1 -0
  29. package/lib/esm/components/timer/Timer.styles.js +29 -0
  30. package/lib/esm/components/timer/Timer.styles.js.map +1 -0
  31. package/lib/esm/hooks/design.js +22 -0
  32. package/lib/esm/hooks/design.js.map +1 -0
  33. package/lib/esm/index.js +2 -0
  34. package/lib/esm/index.js.map +1 -0
  35. package/lib/esm/utils/common.js +4 -0
  36. package/lib/esm/utils/common.js.map +1 -0
  37. package/lib/esm/utils/date.js +80 -0
  38. package/lib/esm/utils/date.js.map +1 -0
  39. package/lib/types/components/DevalueSlider.d.ts +50 -0
  40. package/lib/types/components/slider/Slider.d.ts +19 -0
  41. package/lib/types/components/slider/Slider.styles.d.ts +1884 -0
  42. package/lib/types/components/timer/Timer.d.ts +8 -0
  43. package/lib/types/components/timer/Timer.styles.d.ts +269 -0
  44. package/lib/types/hooks/design.d.ts +6 -0
  45. package/lib/types/index.d.ts +1 -0
  46. package/lib/types/utils/common.d.ts +1 -0
  47. package/lib/types/utils/date.d.ts +23 -0
  48. package/package.json +85 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Slider.styles.js","names":["_framerMotion","require","_styledComponents","_interopRequireDefault","e","__esModule","default","Container","exports","styled","motion","div","Track","$height","$backgroundColor","TrackBackground","Thumb","$size","$trackHeight","TrackText","$baseFontSize","$color","ThumbIconContainer","ThumbIcon","i","attrs","icon","className","createThumbVariants","thumbSize","trackWidth","scaleFactor","base","x","backgroundColor","transition","duration","completed","boxShadow","leaving","scale","THUMB_ICON_VARIANTS","ease","repeat","Infinity","repeatDelay","dragging","opacity"],"sources":["../../../../src/components/slider/Slider.styles.ts"],"sourcesContent":["import { motion, Variant, Variants } from 'framer-motion';\nimport styled from 'styled-components';\n\ninterface IBaseVariant extends Variants {\n base: Variant;\n}\n\ninterface IDraggingVariant extends Variants {\n dragging: Variant;\n}\n\ninterface ICompletedVariant extends Variants {\n completed: Variant;\n}\n\ninterface ILeavingVariant extends Variants {\n leaving: Variant;\n}\n\nexport const Container = styled(motion.div)``;\n\nexport type TrackProps = {\n $height: number;\n $borderSize: number;\n $backgroundColor: string;\n};\n\nexport const Track = styled(motion.div)<TrackProps>`\n user-select: none;\n position: relative;\n z-index: 3;\n height: ${({ $height }) => $height}px;\n border-radius: ${({ $height }) => $height / 2}px;\n background-color: ${({ $backgroundColor }) => $backgroundColor};\n`;\n\nexport const TrackBackground = styled(motion.div)<{ $height: number }>`\n position: absolute;\n width: 100%;\n height: 100%;\n border-radius: ${({ $height }) => $height / 2}px;\n z-index: 2;\n`;\n\nexport const Thumb = styled(motion.div)<{\n $size: number;\n $trackHeight: number;\n}>`\n height: ${({ $size }) => $size}px;\n width: ${({ $size }) => $size}px;\n border-radius: 50%;\n background-color: white;\n left: ${({ $size, $trackHeight }) => ($trackHeight - $size - 2) / 2}px;\n bottom: ${({ $size, $trackHeight }) => ($trackHeight - $size - 2) / 2 + 1}px;\n position: absolute;\n z-index: 3;\n box-shadow: rgba(0, 0, 0, 0.2) 1px 1px 2px 0;\n`;\n\nexport const TrackText = styled(motion.div)<{ $color: string; $baseFontSize: number }>`\n position: absolute;\n line-height: 1.15;\n font-size: ${({ $baseFontSize }) => $baseFontSize}px;\n font-weight: 700;\n color: ${({ $color }) => $color};\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n white-space: nowrap;\n text-overflow: ellipsis;\n z-index: 1;\n font-family:\n Roboto Regular,\n sans-serif;\n\n @font-face {\n font-family: 'Roboto Regular';\n font-style: normal;\n font-weight: normal;\n src:\n local('Roboto Regular'),\n local('Roboto Regular'),\n url(https://api.chayns-static.space/font/Roboto%20Regular/Regular.woff2) format('woff2'),\n url(https://api.chayns-static.space/font/Roboto%20Regular/Regular.woff) format('woff'),\n url(https://api.chayns-static.space/font/Roboto%20Regular/Regular.ttf)\n format('truetype'),\n url(https://api.chayns-static.space/font/Roboto%20Regular/Regular.svg) format('svg');\n unicode-range: U+0020-00FF, U+20A0-20CF, U+2122, U+2000-206F;\n }\n\n @font-face {\n font-family: 'Roboto Regular';\n font-style: italic;\n font-weight: normal;\n src:\n local('Roboto Regular Italic'),\n local('Roboto Regular-Italic'),\n url(https://api.chayns-static.space/font/Roboto%20Regular/Italic.woff2) format('woff2'),\n url(https://api.chayns-static.space/font/Roboto%20Regular/Italic.woff) format('woff'),\n url(https://api.chayns-static.space/font/Roboto%20Regular/Italic.ttf) format('truetype'),\n url(https://api.chayns-static.space/font/Roboto%20Regular/Italic.svg) format('svg');\n unicode-range: U+0020-00FF, U+20A0-20CF, U+2122, U+2000-206F;\n }\n\n @font-face {\n font-family: 'Roboto Regular';\n font-style: normal;\n font-weight: bold;\n src:\n local('Roboto Regular Bold'),\n local('Roboto Regular-Bold'),\n url(https://api.chayns-static.space/font/Roboto%20Regular/Bold.woff2) format('woff2'),\n url(https://api.chayns-static.space/font/Roboto%20Regular/Bold.woff) format('woff'),\n url(https://api.chayns-static.space/font/Roboto%20Regular/Bold.ttf) format('truetype'),\n url(https://api.chayns-static.space/font/Roboto%20Regular/Bold.svg) format('svg');\n unicode-range: U+0020-00FF, U+20A0-20CF, U+2122, U+2000-206F;\n }\n\n @font-face {\n font-family: 'Roboto Regular';\n font-style: italic;\n font-weight: bold;\n src:\n local('Roboto Regular Bold Italic'),\n local('Roboto Regular-BoldItalic'),\n url(https://api.chayns-static.space/font/Roboto%20Regular/ItalicBold.woff2)\n format('woff2'),\n url(https://api.chayns-static.space/font/Roboto%20Regular/ItalicBold.woff)\n format('woff'),\n url(https://api.chayns-static.space/font/Roboto%20Regular/ItalicBold.ttf)\n format('truetype'),\n url(https://api.chayns-static.space/font/Roboto%20Regular/ItalicBold.svg) format('svg');\n unicode-range: U+0020-00FF, U+20A0-20CF, U+2122, U+2000-206F;\n }\n\n @font-face {\n font-family: 'Roboto Bold';\n font-style: normal;\n font-weight: normal;\n src:\n local('Roboto Bold'),\n local('Roboto Bold'),\n url(https://api.chayns-static.space/font/Roboto%20Bold/Regular.woff2) format('woff2'),\n url(https://api.chayns-static.space/font/Roboto%20Bold/Regular.woff) format('woff'),\n url(https://api.chayns-static.space/font/Roboto%20Bold/Regular.ttf) format('truetype'),\n url(https://api.chayns-static.space/font/Roboto%20Bold/Regular.svg) format('svg');\n unicode-range: U+0020-00FF, U+20A0-20CF, U+2122, U+2000-206F;\n }\n\n @font-face {\n font-family: 'Roboto Bold';\n font-style: italic;\n font-weight: normal;\n src:\n local('Roboto Bold Italic'),\n local('Roboto Bold-Italic'),\n url(https://api.chayns-static.space/font/Roboto%20Bold/Italic.woff2) format('woff2'),\n url(https://api.chayns-static.space/font/Roboto%20Bold/Italic.woff) format('woff'),\n url(https://api.chayns-static.space/font/Roboto%20Bold/Italic.ttf) format('truetype'),\n url(https://api.chayns-static.space/font/Roboto%20Bold/Italic.svg) format('svg');\n unicode-range: U+0020-00FF, U+20A0-20CF, U+2122, U+2000-206F;\n }\n\n @font-face {\n font-family: 'Roboto Bold';\n font-style: normal;\n font-weight: bold;\n src:\n local('Roboto Bold Bold'),\n local('Roboto Bold-Bold'),\n url(https://api.chayns-static.space/font/Roboto%20Bold/Bold.woff2) format('woff2'),\n url(https://api.chayns-static.space/font/Roboto%20Bold/Bold.woff) format('woff'),\n url(https://api.chayns-static.space/font/Roboto%20Bold/Bold.ttf) format('truetype'),\n url(https://api.chayns-static.space/font/Roboto%20Bold/Bold.svg) format('svg');\n unicode-range: U+0020-00FF, U+20A0-20CF, U+2122, U+2000-206F;\n }\n\n @font-face {\n font-family: 'Roboto Bold';\n font-style: italic;\n font-weight: bold;\n src:\n local('Roboto Bold Bold Italic'),\n local('Roboto Bold-BoldItalic'),\n url(https://api.chayns-static.space/font/Roboto%20Bold/ItalicBold.woff2) format('woff2'),\n url(https://api.chayns-static.space/font/Roboto%20Bold/ItalicBold.woff) format('woff'),\n url(https://api.chayns-static.space/font/Roboto%20Bold/ItalicBold.ttf)\n format('truetype'),\n url(https://api.chayns-static.space/font/Roboto%20Bold/ItalicBold.svg) format('svg');\n unicode-range: U+0020-00FF, U+20A0-20CF, U+2122, U+2000-206F;\n }\n`;\n\nexport const ThumbIconContainer = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n`;\n\nexport const ThumbIcon = styled(motion.i).attrs<{ icon: string }>(({ icon }) => ({\n className: `react-chayns-icon ${icon}`,\n}))`\n font-size: 22px;\n z-index: 1;\n color: black;\n padding: 5px;\n`;\n\nexport type CreateThumbVariantsArgs = {\n trackWidth: number;\n thumbSize: number;\n scaleFactor: number;\n};\n\nexport const createThumbVariants = ({\n thumbSize,\n trackWidth,\n scaleFactor,\n}: CreateThumbVariantsArgs): IBaseVariant & ICompletedVariant & ILeavingVariant => ({\n base: {\n x: 0,\n backgroundColor: 'white',\n transition: { duration: 0.2 },\n },\n completed: {\n x: (trackWidth - thumbSize * scaleFactor) / 2,\n backgroundColor: 'transparent',\n boxShadow: 'none',\n transition: { duration: 0.3 },\n },\n leaving: {\n scale: [1, 2.4, 1],\n boxShadow: 'none',\n },\n});\n\nexport const THUMB_ICON_VARIANTS: IBaseVariant &\n IDraggingVariant &\n ICompletedVariant &\n ILeavingVariant = {\n base: {\n x: [0, 8, 0, 8, 0],\n transition: {\n duration: 1,\n ease: 'easeInOut',\n repeat: Infinity,\n repeatDelay: 5,\n },\n },\n dragging: {\n x: 0,\n },\n completed: {\n opacity: 1,\n transition: { duration: 0 },\n },\n leaving: {\n opacity: 1,\n scale: [1, 2.4, 1],\n transition: { duration: 0.4, ease: 'easeInOut' },\n },\n};\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,iBAAA,GAAAC,sBAAA,CAAAF,OAAA;AAAuC,SAAAE,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAkBhC,MAAMG,SAAS,GAAAC,OAAA,CAAAD,SAAA,GAAG,IAAAE,yBAAM,EAACC,oBAAM,CAACC,GAAG,CAAC,EAAE;AAQtC,MAAMC,KAAK,GAAAJ,OAAA,CAAAI,KAAA,GAAG,IAAAH,yBAAM,EAACC,oBAAM,CAACC,GAAG,CAAa;AACnD;AACA;AACA;AACA,cAAc,CAAC;EAAEE;AAAQ,CAAC,KAAKA,OAAO;AACtC,qBAAqB,CAAC;EAAEA;AAAQ,CAAC,KAAKA,OAAO,GAAG,CAAC;AACjD,wBAAwB,CAAC;EAAEC;AAAiB,CAAC,KAAKA,gBAAgB;AAClE,CAAC;AAEM,MAAMC,eAAe,GAAAP,OAAA,CAAAO,eAAA,GAAG,IAAAN,yBAAM,EAACC,oBAAM,CAACC,GAAG,CAAsB;AACtE;AACA;AACA;AACA,qBAAqB,CAAC;EAAEE;AAAQ,CAAC,KAAKA,OAAO,GAAG,CAAC;AACjD;AACA,CAAC;AAEM,MAAMG,KAAK,GAAAR,OAAA,CAAAQ,KAAA,GAAG,IAAAP,yBAAM,EAACC,oBAAM,CAACC,GAAG,CAGpC;AACF,cAAc,CAAC;EAAEM;AAAM,CAAC,KAAKA,KAAK;AAClC,aAAa,CAAC;EAAEA;AAAM,CAAC,KAAKA,KAAK;AACjC;AACA;AACA,YAAY,CAAC;EAAEA,KAAK;EAAEC;AAAa,CAAC,KAAK,CAACA,YAAY,GAAGD,KAAK,GAAG,CAAC,IAAI,CAAC;AACvE,cAAc,CAAC;EAAEA,KAAK;EAAEC;AAAa,CAAC,KAAK,CAACA,YAAY,GAAGD,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AAC7E;AACA;AACA;AACA,CAAC;AAEM,MAAME,SAAS,GAAAX,OAAA,CAAAW,SAAA,GAAG,IAAAV,yBAAM,EAACC,oBAAM,CAACC,GAAG,CAA4C;AACtF;AACA;AACA,iBAAiB,CAAC;EAAES;AAAc,CAAC,KAAKA,aAAa;AACrD;AACA,aAAa,CAAC;EAAEC;AAAO,CAAC,KAAKA,MAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAEM,MAAMC,kBAAkB,GAAAd,OAAA,CAAAc,kBAAA,GAAGb,yBAAM,CAACE,GAAG;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAEM,MAAMY,SAAS,GAAAf,OAAA,CAAAe,SAAA,GAAG,IAAAd,yBAAM,EAACC,oBAAM,CAACc,CAAC,CAAC,CAACC,KAAK,CAAmB,CAAC;EAAEC;AAAK,CAAC,MAAM;EAC7EC,SAAS,EAAE,qBAAqBD,IAAI;AACxC,CAAC,CAAC,CAAC;AACH;AACA;AACA;AACA;AACA,CAAC;AAQM,MAAME,mBAAmB,GAAGA,CAAC;EAChCC,SAAS;EACTC,UAAU;EACVC;AACqB,CAAC,MAA0D;EAChFC,IAAI,EAAE;IACFC,CAAC,EAAE,CAAC;IACJC,eAAe,EAAE,OAAO;IACxBC,UAAU,EAAE;MAAEC,QAAQ,EAAE;IAAI;EAChC,CAAC;EACDC,SAAS,EAAE;IACPJ,CAAC,EAAE,CAACH,UAAU,GAAGD,SAAS,GAAGE,WAAW,IAAI,CAAC;IAC7CG,eAAe,EAAE,aAAa;IAC9BI,SAAS,EAAE,MAAM;IACjBH,UAAU,EAAE;MAAEC,QAAQ,EAAE;IAAI;EAChC,CAAC;EACDG,OAAO,EAAE;IACLC,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAClBF,SAAS,EAAE;EACf;AACJ,CAAC,CAAC;AAAC9B,OAAA,CAAAoB,mBAAA,GAAAA,mBAAA;AAEI,MAAMa,mBAGM,GAAAjC,OAAA,CAAAiC,mBAAA,GAAG;EAClBT,IAAI,EAAE;IACFC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClBE,UAAU,EAAE;MACRC,QAAQ,EAAE,CAAC;MACXM,IAAI,EAAE,WAAW;MACjBC,MAAM,EAAEC,QAAQ;MAChBC,WAAW,EAAE;IACjB;EACJ,CAAC;EACDC,QAAQ,EAAE;IACNb,CAAC,EAAE;EACP,CAAC;EACDI,SAAS,EAAE;IACPU,OAAO,EAAE,CAAC;IACVZ,UAAU,EAAE;MAAEC,QAAQ,EAAE;IAAE;EAC9B,CAAC;EACDG,OAAO,EAAE;IACLQ,OAAO,EAAE,CAAC;IACVP,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAClBL,UAAU,EAAE;MAAEC,QAAQ,EAAE,GAAG;MAAEM,IAAI,EAAE;IAAY;EACnD;AACJ,CAAC","ignoreList":[]}
@@ -0,0 +1,78 @@
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 _chaynsApi = require("chayns-api");
9
+ var _Timer = require("./Timer.styles");
10
+ var _date = require("../../utils/date");
11
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
12
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
13
+ const Timer = ({
14
+ devalueTime,
15
+ color,
16
+ textColor = 'white'
17
+ }) => {
18
+ const {
19
+ active: language
20
+ } = (0, _chaynsApi.getLanguage)();
21
+ const refDate = (0, _react.useRef)(new Date());
22
+ const [distance, setDistance] = (0, _react.useState)((0, _date.intervalToDuration)({
23
+ start: devalueTime,
24
+ end: new Date()
25
+ }));
26
+ const minutesShowValue = (0, _react.useMemo)(() => Math.max(distance.minutes ?? 0, 0).toString(), [distance.minutes]);
27
+ const secondsShowValue = (0, _react.useMemo)(() => Math.max(distance.seconds ?? 0, 0).toString(), [distance.seconds]);
28
+ (0, _react.useEffect)(() => {
29
+ refDate.current = new Date();
30
+ const interval = setInterval(() => {
31
+ refDate.current = new Date();
32
+ setDistance((0, _date.intervalToDuration)({
33
+ start: devalueTime,
34
+ end: refDate.current
35
+ }));
36
+ }, 500);
37
+ return () => clearInterval(interval);
38
+ }, [devalueTime]);
39
+ const handlePointerDownCapture = (0, _react.useCallback)(() => {
40
+ void (0, _chaynsApi.vibrate)({
41
+ pattern: [50],
42
+ iOSFeedbackVibration: 7
43
+ });
44
+ }, []);
45
+ const label = (0, _react.useMemo)(() => {
46
+ let text = 'Vor ##SECONDS## Sek. (##TIME## Uhr)';
47
+ if ((0, _date.differenceInHours)(refDate.current, devalueTime) > 0) {
48
+ const distanceLabel = (0, _date.getTimeTillNow)({
49
+ date: new Date(),
50
+ currentDate: devalueTime,
51
+ language
52
+ });
53
+ text = `${distanceLabel} (##TIME## Uhr)`;
54
+ } else if ((0, _date.differenceInMinutes)(refDate.current, devalueTime) > 0) {
55
+ text = 'Vor ##MINUTES## Min. ##SECONDS## Sek. (##TIME## Uhr)';
56
+ }
57
+ const formatTime = (date, formatString) => {
58
+ const hours = date.getHours().toString().padStart(2, '0');
59
+ const minutes = date.getMinutes().toString().padStart(2, '0');
60
+ if (formatString === 'HH:mm') {
61
+ return `${hours}:${minutes}`;
62
+ }
63
+ return '';
64
+ };
65
+ return text.replace('##MINUTES##', minutesShowValue).replace('##SECONDS##', secondsShowValue).replace('##TIME##', formatTime(devalueTime, 'HH:mm'));
66
+ }, [devalueTime, minutesShowValue, secondsShowValue, language]);
67
+ return /*#__PURE__*/_react.default.createElement(_Timer.Container, {
68
+ $baseFontSize: 17,
69
+ $borderSize: 2,
70
+ $height: 50,
71
+ $color: color,
72
+ $textColor: textColor,
73
+ $backgroundColor: color,
74
+ onPointerDownCapture: handlePointerDownCapture
75
+ }, /*#__PURE__*/_react.default.createElement(_Timer.Time, null, label));
76
+ };
77
+ var _default = exports.default = Timer;
78
+ //# sourceMappingURL=Timer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Timer.js","names":["_react","_interopRequireWildcard","require","_chaynsApi","_Timer","_date","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","Timer","devalueTime","color","textColor","active","language","getLanguage","refDate","useRef","Date","distance","setDistance","useState","intervalToDuration","start","end","minutesShowValue","useMemo","Math","max","minutes","toString","secondsShowValue","seconds","useEffect","current","interval","setInterval","clearInterval","handlePointerDownCapture","useCallback","vibrate","pattern","iOSFeedbackVibration","label","text","differenceInHours","distanceLabel","getTimeTillNow","date","currentDate","differenceInMinutes","formatTime","formatString","hours","getHours","padStart","getMinutes","replace","createElement","Container","$baseFontSize","$borderSize","$height","$color","$textColor","$backgroundColor","onPointerDownCapture","Time","_default","exports"],"sources":["../../../../src/components/timer/Timer.tsx"],"sourcesContent":["\nimport React, { FunctionComponent, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport {getLanguage, vibrate} from 'chayns-api';\n\nimport { Container, Time } from './Timer.styles';\nimport {\n differenceInHours,\n differenceInMinutes,\n getTimeTillNow,\n intervalToDuration\n} from \"../../utils/date\";\n\nexport type TimerProps = {\n color: string;\n devalueTime: Date;\n textColor?: string;\n};\n\nconst Timer: FunctionComponent<TimerProps> = ({ devalueTime, color, textColor = 'white' }) => {\n const {active:language } = getLanguage()\n\n const refDate = useRef(new Date());\n const [distance, setDistance] = useState(\n intervalToDuration({\n start: devalueTime,\n end: new Date(),\n }),\n );\n const minutesShowValue = useMemo(\n () => Math.max(distance.minutes ?? 0, 0).toString(),\n [distance.minutes],\n );\n const secondsShowValue = useMemo(\n () => Math.max(distance.seconds ?? 0, 0).toString(),\n [distance.seconds],\n );\n\n useEffect(() => {\n refDate.current = new Date();\n const interval = setInterval(() => {\n refDate.current = new Date();\n setDistance(\n intervalToDuration({\n start: devalueTime,\n end: refDate.current,\n }),\n );\n }, 500);\n return () => clearInterval(interval);\n }, [devalueTime]);\n\n const handlePointerDownCapture = useCallback(() => {\n void vibrate({ pattern: [50], iOSFeedbackVibration: 7 });\n }, []);\n\n const label = useMemo(() => {\n let text = 'Vor ##SECONDS## Sek. (##TIME## Uhr)';\n if (differenceInHours(refDate.current, devalueTime) > 0) {\n const distanceLabel =\n getTimeTillNow({date: new Date(), currentDate: devalueTime, language});\n text = `${distanceLabel} (##TIME## Uhr)`;\n } else if (differenceInMinutes(refDate.current, devalueTime) > 0) {\n text = 'Vor ##MINUTES## Min. ##SECONDS## Sek. (##TIME## Uhr)';\n }\n\n const formatTime = (date: Date, formatString: string): string => {\n const hours = date.getHours().toString().padStart(2, '0');\n const minutes = date.getMinutes().toString().padStart(2, '0');\n\n if (formatString === 'HH:mm') {\n return `${hours}:${minutes}`;\n }\n return '';\n };\n\n return text\n .replace('##MINUTES##', minutesShowValue)\n .replace('##SECONDS##', secondsShowValue)\n .replace('##TIME##', formatTime(devalueTime, 'HH:mm'));\n }, [devalueTime, minutesShowValue, secondsShowValue, language]);\n\n return (\n <Container\n $baseFontSize={17}\n $borderSize={2}\n $height={50}\n $color={color}\n $textColor={textColor}\n $backgroundColor={color}\n onPointerDownCapture={handlePointerDownCapture}\n >\n <Time>{label}</Time>\n </Container>\n );\n};\n\nexport default Timer;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Time = exports.Container = void 0;
7
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
8
+ var _Slider = require("../slider/Slider.styles");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ const Container = exports.Container = (0, _styledComponents.default)(_Slider.Track)`
11
+ height: ${({
12
+ $height
13
+ }) => $height}px !important;
14
+ background-color: ${({
15
+ $color
16
+ }) => $color};
17
+ display: flex;
18
+ flex-direction: row;
19
+ align-items: center;
20
+ justify-content: center;
21
+ cursor: pointer;
22
+ color: white;
23
+ container-type: inline-size;
24
+ `;
25
+ const Time = exports.Time = _styledComponents.default.div`
26
+ font-size: 6cqw;
27
+ font-weight: 700;
28
+ color: white;
29
+ `;
30
+ //# sourceMappingURL=Timer.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Timer.styles.js","names":["_styledComponents","_interopRequireDefault","require","_Slider","e","__esModule","default","Container","exports","styled","Track","$height","$color","Time","div"],"sources":["../../../../src/components/timer/Timer.styles.ts"],"sourcesContent":["import styled from 'styled-components';\nimport { Track } from '../slider/Slider.styles';\n\nexport const Container = styled(Track)<{\n $color: string;\n $textColor: string;\n $baseFontSize: number;\n}>`\n height: ${({ $height }) => $height}px !important;\n background-color: ${({ $color }) => $color};\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n color: white;\n container-type: inline-size;\n`;\n\nexport const Time = styled.div`\n font-size: 6cqw;\n font-weight: 700;\n color: white;\n`;\n"],"mappings":";;;;;;AAAA,IAAAA,iBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAAgD,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEzC,MAAMG,SAAS,GAAAC,OAAA,CAAAD,SAAA,GAAG,IAAAE,yBAAM,EAACC,aAAK,CAInC;AACF,cAAc,CAAC;EAAEC;AAAQ,CAAC,KAAKA,OAAO;AACtC,wBAAwB,CAAC;EAAEC;AAAO,CAAC,KAAKA,MAAM;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAEM,MAAMC,IAAI,GAAAL,OAAA,CAAAK,IAAA,GAAGJ,yBAAM,CAACK,GAAG;AAC9B;AACA;AACA;AACA,CAAC","ignoreList":[]}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useThumbIcon = void 0;
7
+ var _framerMotion = require("framer-motion");
8
+ var _react = require("react");
9
+ const useThumbIcon = (x, iconColor) => {
10
+ const [icon, setIcon] = (0, _react.useState)('fas fa-arrow-right');
11
+ const opacity = (0, _framerMotion.useTransform)(x, [0, 5, 6, 200], [1, 0, 0, 1]);
12
+ const styles = (0, _react.useMemo)(() => ({
13
+ opacity,
14
+ color: iconColor
15
+ }), [iconColor, opacity]);
16
+ (0, _react.useEffect)(() => x.on('change', value => {
17
+ if (value > 5) {
18
+ setIcon('fas fa-check');
19
+ } else {
20
+ setIcon('fas fa-arrow-right');
21
+ }
22
+ }), [x]);
23
+ return (0, _react.useMemo)(() => ({
24
+ icon,
25
+ styles
26
+ }), [icon, styles]);
27
+ };
28
+ exports.useThumbIcon = useThumbIcon;
29
+ //# sourceMappingURL=design.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design.js","names":["_framerMotion","require","_react","useThumbIcon","x","iconColor","icon","setIcon","useState","opacity","useTransform","styles","useMemo","color","useEffect","on","value","exports"],"sources":["../../../src/hooks/design.ts"],"sourcesContent":["import { MotionStyle, MotionValue, useTransform } from 'framer-motion';\nimport { useEffect, useMemo, useState } from 'react';\n\nexport type UseThumbIconRes = {\n icon: string;\n styles: MotionStyle;\n};\nexport const useThumbIcon = (x: MotionValue<number>, iconColor: string): UseThumbIconRes => {\n const [icon, setIcon] = useState('fas fa-arrow-right');\n const opacity = useTransform(x, [0, 5, 6, 200], [1, 0, 0, 1]);\n const styles = useMemo<MotionStyle>(\n () => ({\n opacity,\n color: iconColor,\n }),\n [iconColor, opacity],\n );\n\n useEffect(\n () =>\n x.on('change', (value) => {\n if (value > 5) {\n setIcon('fas fa-check');\n } else {\n setIcon('fas fa-arrow-right');\n }\n }),\n [x],\n );\n\n return useMemo(() => ({ icon, styles }), [icon, styles]);\n};\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAMO,MAAME,YAAY,GAAGA,CAACC,CAAsB,EAAEC,SAAiB,KAAsB;EACxF,MAAM,CAACC,IAAI,EAAEC,OAAO,CAAC,GAAG,IAAAC,eAAQ,EAAC,oBAAoB,CAAC;EACtD,MAAMC,OAAO,GAAG,IAAAC,0BAAY,EAACN,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EAC7D,MAAMO,MAAM,GAAG,IAAAC,cAAO,EAClB,OAAO;IACHH,OAAO;IACPI,KAAK,EAAER;EACX,CAAC,CAAC,EACF,CAACA,SAAS,EAAEI,OAAO,CACvB,CAAC;EAED,IAAAK,gBAAS,EACL,MACIV,CAAC,CAACW,EAAE,CAAC,QAAQ,EAAGC,KAAK,IAAK;IACtB,IAAIA,KAAK,GAAG,CAAC,EAAE;MACXT,OAAO,CAAC,cAAc,CAAC;IAC3B,CAAC,MAAM;MACHA,OAAO,CAAC,oBAAoB,CAAC;IACjC;EACJ,CAAC,CAAC,EACN,CAACH,CAAC,CACN,CAAC;EAED,OAAO,IAAAQ,cAAO,EAAC,OAAO;IAAEN,IAAI;IAAEK;EAAO,CAAC,CAAC,EAAE,CAACL,IAAI,EAAEK,MAAM,CAAC,CAAC;AAC5D,CAAC;AAACM,OAAA,CAAAd,YAAA,GAAAA,YAAA","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "DevalueSlider", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _DevalueSlider.default;
10
+ }
11
+ });
12
+ var _DevalueSlider = _interopRequireDefault(require("./components/DevalueSlider"));
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_DevalueSlider","_interopRequireDefault","require","e","__esModule","default"],"sources":["../../src/index.ts"],"sourcesContent":["export {\n default as DevalueSlider,\n type DevalueSliderOnChangeHandler,\n type DevalueSliderOnCompleteHandler,\n type DevalueSliderOnDevalueHandler,\n type DevalueSliderOnDevalueHandlerResult,\n type DevalueSliderProps,\n} from './components/DevalueSlider';\n"],"mappings":";;;;;;;;;;;AAAA,IAAAA,cAAA,GAAAC,sBAAA,CAAAC,OAAA;AAOoC,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.sleep = void 0;
7
+ const sleep = ms => new Promise(resolve => {
8
+ setTimeout(resolve, ms);
9
+ });
10
+ exports.sleep = sleep;
11
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","names":["sleep","ms","Promise","resolve","setTimeout","exports"],"sources":["../../../src/utils/common.ts"],"sourcesContent":["export const sleep = (ms: number) =>\n new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n"],"mappings":";;;;;;AAAO,MAAMA,KAAK,GAAIC,EAAU,IAC5B,IAAIC,OAAO,CAAEC,OAAO,IAAK;EACrBC,UAAU,CAACD,OAAO,EAAEF,EAAE,CAAC;AAC3B,CAAC,CAAC;AAACI,OAAA,CAAAL,KAAA,GAAAA,KAAA","ignoreList":[]}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.subHours = exports.intervalToDuration = exports.getTimeTillNow = exports.differenceInMinutes = exports.differenceInHours = exports.addSeconds = void 0;
7
+ var _chaynsApi = require("chayns-api");
8
+ const addSeconds = (date, seconds) => {
9
+ const result = new Date(date);
10
+ result.setSeconds(date.getSeconds() + seconds);
11
+ return result;
12
+ };
13
+ exports.addSeconds = addSeconds;
14
+ const subHours = (date, hours) => {
15
+ const result = new Date(date);
16
+ result.setHours(date.getHours() - hours);
17
+ return result;
18
+ };
19
+ exports.subHours = subHours;
20
+ const differenceInHours = (date1, date2) => {
21
+ const diffInMilliseconds = date1.getTime() - date2.getTime();
22
+ return Math.floor(diffInMilliseconds / (1000 * 60 * 60)); // Millisekunden in Stunden umrechnen
23
+ };
24
+ exports.differenceInHours = differenceInHours;
25
+ const getTimeTillNow = ({
26
+ date,
27
+ currentDate,
28
+ language = _chaynsApi.Language.English
29
+ }) => {
30
+ const diffInSeconds = Math.floor((currentDate.getTime() - date.getTime()) / 1000);
31
+ const isPast = diffInSeconds > 0;
32
+ const units = [{
33
+ label: 'year',
34
+ seconds: 31536000
35
+ }, {
36
+ label: 'month',
37
+ seconds: 2592000
38
+ }, {
39
+ label: 'day',
40
+ seconds: 86400
41
+ }, {
42
+ label: 'hour',
43
+ seconds: 3600
44
+ }, {
45
+ label: 'minute',
46
+ seconds: 60
47
+ }, {
48
+ label: 'second',
49
+ seconds: 1
50
+ }];
51
+ const absDiff = Math.abs(diffInSeconds);
52
+ const {
53
+ label,
54
+ seconds
55
+ } = units.find(u => absDiff >= u.seconds) || {
56
+ label: 'second',
57
+ seconds: 1
58
+ };
59
+ const count = Math.floor(absDiff / seconds);
60
+ const formatter = new Intl.RelativeTimeFormat(language, {
61
+ numeric: 'auto'
62
+ });
63
+ return formatter.format(isPast ? -count : count, label);
64
+ };
65
+ exports.getTimeTillNow = getTimeTillNow;
66
+ const intervalToDuration = interval => {
67
+ const startTime = interval.start.getTime();
68
+ const endTime = interval.end.getTime();
69
+ const diffInMilliseconds = endTime - startTime;
70
+ const years = Math.floor(diffInMilliseconds / (1000 * 60 * 60 * 24 * 365.25));
71
+ const months = Math.floor(diffInMilliseconds % (1000 * 60 * 60 * 24 * 365.25) / (1000 * 60 * 60 * 24 * 30));
72
+ const days = Math.floor(diffInMilliseconds % (1000 * 60 * 60 * 24 * 30) / (1000 * 60 * 60 * 24));
73
+ const hours = Math.floor(diffInMilliseconds % (1000 * 60 * 60 * 24) / (1000 * 60 * 60));
74
+ const minutes = Math.floor(diffInMilliseconds % (1000 * 60 * 60) / (1000 * 60));
75
+ const seconds = Math.floor(diffInMilliseconds % (1000 * 60) / 1000);
76
+ return {
77
+ years,
78
+ months,
79
+ days,
80
+ hours,
81
+ minutes,
82
+ seconds
83
+ };
84
+ };
85
+ exports.intervalToDuration = intervalToDuration;
86
+ const differenceInMinutes = (date1, date2) => {
87
+ const diffInMilliseconds = date1.getTime() - date2.getTime();
88
+ return Math.floor(diffInMilliseconds / (1000 * 60)); // Millisekunden in Minuten umrechnen
89
+ };
90
+ exports.differenceInMinutes = differenceInMinutes;
91
+ //# sourceMappingURL=date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.js","names":["_chaynsApi","require","addSeconds","date","seconds","result","Date","setSeconds","getSeconds","exports","subHours","hours","setHours","getHours","differenceInHours","date1","date2","diffInMilliseconds","getTime","Math","floor","getTimeTillNow","currentDate","language","Language","English","diffInSeconds","isPast","units","label","absDiff","abs","find","u","count","formatter","Intl","RelativeTimeFormat","numeric","format","intervalToDuration","interval","startTime","start","endTime","end","years","months","days","minutes","differenceInMinutes"],"sources":["../../../src/utils/date.ts"],"sourcesContent":["import {Language} from \"chayns-api\";\n\nexport const addSeconds = (date: Date, seconds: number): Date => {\n const result = new Date(date);\n result.setSeconds(date.getSeconds() + seconds);\n return result;\n};\n\nexport const subHours = (date: Date, hours: number): Date => {\n const result = new Date(date);\n result.setHours(date.getHours() - hours);\n return result;\n};\n\nexport const differenceInHours = (date1: Date, date2: Date): number => {\n const diffInMilliseconds = date1.getTime() - date2.getTime();\n return Math.floor(diffInMilliseconds / (1000 * 60 * 60)); // Millisekunden in Stunden umrechnen\n};\n\ninterface GetTimeTillNow {\n date: Date;\n currentDate: Date;\n language: Language;\n}\n\ntype RelativeTimeUnit = 'year' | 'month' | 'day' | 'hour' | 'minute' | 'second';\n\nexport const getTimeTillNow = ({\n date,\n currentDate,\n language = Language.English,\n }: GetTimeTillNow): string => {\n const diffInSeconds = Math.floor((currentDate.getTime() - date.getTime()) / 1000);\n const isPast = diffInSeconds > 0;\n\n const units: { label: RelativeTimeUnit; seconds: number }[] = [\n {label: 'year', seconds: 31536000},\n {label: 'month', seconds: 2592000},\n {label: 'day', seconds: 86400},\n {label: 'hour', seconds: 3600},\n {label: 'minute', seconds: 60},\n {label: 'second', seconds: 1},\n ];\n\n const absDiff = Math.abs(diffInSeconds);\n const {label, seconds} = units.find((u) => absDiff >= u.seconds) || {\n label: 'second',\n seconds: 1,\n };\n const count = Math.floor(absDiff / seconds);\n\n const formatter = new Intl.RelativeTimeFormat(language, {numeric: 'auto'});\n\n return formatter.format(isPast ? -count : count, label);\n};\n\nexport const intervalToDuration = (interval: { start: Date, end: Date }): { years: number, months: number, days: number, hours: number, minutes: number, seconds: number } => {\n const startTime = interval.start.getTime();\n const endTime = interval.end.getTime();\n const diffInMilliseconds = endTime - startTime;\n\n const years = Math.floor(diffInMilliseconds / (1000 * 60 * 60 * 24 * 365.25));\n const months = Math.floor((diffInMilliseconds % (1000 * 60 * 60 * 24 * 365.25)) / (1000 * 60 * 60 * 24 * 30));\n const days = Math.floor((diffInMilliseconds % (1000 * 60 * 60 * 24 * 30)) / (1000 * 60 * 60 * 24));\n const hours = Math.floor((diffInMilliseconds % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\n const minutes = Math.floor((diffInMilliseconds % (1000 * 60 * 60)) / (1000 * 60));\n const seconds = Math.floor((diffInMilliseconds % (1000 * 60)) / 1000);\n\n return { years, months, days, hours, minutes, seconds };\n};\n\nexport const differenceInMinutes = (date1: Date, date2: Date): number => {\n const diffInMilliseconds = date1.getTime() - date2.getTime();\n return Math.floor(diffInMilliseconds / (1000 * 60)); // Millisekunden in Minuten umrechnen\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,48 @@
1
+ import React, { useCallback, useEffect, useRef, useState } from 'react';
2
+ import Slider from './slider/Slider';
3
+ import Timer from './timer/Timer';
4
+ const DevalueSlider = _ref => {
5
+ let {
6
+ backgroundColor = 'red',
7
+ devalueBackgroundColor = 'green',
8
+ devalueTime,
9
+ isDisabled,
10
+ label = 'EINLÖSEN',
11
+ onDevalue,
12
+ onChange,
13
+ onComplete
14
+ } = _ref;
15
+ const [timerDevalueTime, setTimerDevalueTime] = useState(devalueTime);
16
+ const sliderRef = useRef(null);
17
+ useEffect(() => {
18
+ setTimerDevalueTime(devalueTime);
19
+ }, [devalueTime]);
20
+ const handleCompleted = useCallback(() => {
21
+ setTimerDevalueTime(new Date());
22
+ onComplete?.();
23
+ }, [onComplete]);
24
+ useEffect(() => {
25
+ if (isDisabled) {
26
+ sliderRef.current?.disable();
27
+ return;
28
+ }
29
+ sliderRef.current?.enable();
30
+ }, [isDisabled]);
31
+ if (timerDevalueTime) {
32
+ return /*#__PURE__*/React.createElement(Timer, {
33
+ color: devalueBackgroundColor,
34
+ devalueTime: timerDevalueTime
35
+ });
36
+ }
37
+ return /*#__PURE__*/React.createElement(Slider, {
38
+ ref: sliderRef,
39
+ onDevalue: onDevalue,
40
+ color: backgroundColor,
41
+ devalueColor: devalueBackgroundColor,
42
+ onComplete: handleCompleted,
43
+ onChange: onChange,
44
+ trackText: label
45
+ });
46
+ };
47
+ export default DevalueSlider;
48
+ //# sourceMappingURL=DevalueSlider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DevalueSlider.js","names":["React","useCallback","useEffect","useRef","useState","Slider","Timer","DevalueSlider","_ref","backgroundColor","devalueBackgroundColor","devalueTime","isDisabled","label","onDevalue","onChange","onComplete","timerDevalueTime","setTimerDevalueTime","sliderRef","handleCompleted","Date","current","disable","enable","createElement","color","ref","devalueColor","trackText"],"sources":["../../../src/components/DevalueSlider.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState, type CSSProperties } from 'react';\nimport Slider, { type SliderRef } from './slider/Slider';\nimport Timer from './timer/Timer';\n\nexport type DevalueSliderOnDevalueHandlerResult = { success: boolean };\nexport type DevalueSliderOnDevalueHandler = () => Promise<DevalueSliderOnDevalueHandlerResult>;\n\nexport type DevalueSliderOnChangeHandler = (relativeValue: number) => void;\nexport type DevalueSliderOnCompleteHandler = () => void;\n\nexport type DevalueSliderProps = {\n /**\n * The basic color of the slider.\n * This color is the background of the track before the slider is devalued.\n */\n backgroundColor?: CSSProperties['backgroundColor'];\n /**\n * The devalue color of the slider.\n * This color fills the track from the left on user movement.\n * This color is the background of the timer after the slider is devalued.\n */\n devalueBackgroundColor?: CSSProperties['backgroundColor'];\n /**\n * If this slider was devalued, provide the time when it was devalued.\n * This will show a timer.\n */\n devalueTime?: Date;\n /**\n * Disables the slider and cancels any active drags.\n */\n isDisabled?: boolean;\n /**\n * The label of the slider. The default value is \"EINLÖSEN\"\n */\n label?: string;\n /**\n * This function is called when the slider is devalued.\n */\n onDevalue?: DevalueSliderOnDevalueHandler;\n /**\n * This function is called when the slider value changes.\n * With this function you can keep track of the movement of the slider.\n */\n onChange?: DevalueSliderOnChangeHandler;\n /**\n * This function is called when the slider is completed.\n * The slider is completed when the user devalues the slider\n * and the animation is completed.\n */\n onComplete?: DevalueSliderOnCompleteHandler;\n};\n\nconst DevalueSlider: React.FC<DevalueSliderProps> = ({\n backgroundColor = 'red',\n devalueBackgroundColor = 'green',\n devalueTime,\n isDisabled,\n label = 'EINLÖSEN',\n onDevalue,\n onChange,\n onComplete,\n}) => {\n const [timerDevalueTime, setTimerDevalueTime] = useState(devalueTime);\n\n const sliderRef = useRef<SliderRef>(null);\n\n useEffect(() => {\n setTimerDevalueTime(devalueTime);\n }, [devalueTime]);\n\n const handleCompleted = useCallback(() => {\n setTimerDevalueTime(new Date());\n\n onComplete?.();\n }, [onComplete]);\n\n useEffect(() => {\n if (isDisabled) {\n sliderRef.current?.disable();\n\n return;\n }\n\n sliderRef.current?.enable();\n }, [isDisabled]);\n\n if (timerDevalueTime) {\n return <Timer color={devalueBackgroundColor} devalueTime={timerDevalueTime} />;\n }\n\n return (\n <Slider\n ref={sliderRef}\n onDevalue={onDevalue}\n color={backgroundColor}\n devalueColor={devalueBackgroundColor}\n onComplete={handleCompleted}\n onChange={onChange}\n trackText={label}\n />\n );\n};\n\nexport default DevalueSlider;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAA4B,OAAO;AAC3F,OAAOC,MAAM,MAA0B,iBAAiB;AACxD,OAAOC,KAAK,MAAM,eAAe;AAkDjC,MAAMC,aAA2C,GAAGC,IAAA,IAS9C;EAAA,IAT+C;IACjDC,eAAe,GAAG,KAAK;IACvBC,sBAAsB,GAAG,OAAO;IAChCC,WAAW;IACXC,UAAU;IACVC,KAAK,GAAG,UAAU;IAClBC,SAAS;IACTC,QAAQ;IACRC;EACJ,CAAC,GAAAR,IAAA;EACG,MAAM,CAACS,gBAAgB,EAAEC,mBAAmB,CAAC,GAAGd,QAAQ,CAACO,WAAW,CAAC;EAErE,MAAMQ,SAAS,GAAGhB,MAAM,CAAY,IAAI,CAAC;EAEzCD,SAAS,CAAC,MAAM;IACZgB,mBAAmB,CAACP,WAAW,CAAC;EACpC,CAAC,EAAE,CAACA,WAAW,CAAC,CAAC;EAEjB,MAAMS,eAAe,GAAGnB,WAAW,CAAC,MAAM;IACtCiB,mBAAmB,CAAC,IAAIG,IAAI,CAAC,CAAC,CAAC;IAE/BL,UAAU,GAAG,CAAC;EAClB,CAAC,EAAE,CAACA,UAAU,CAAC,CAAC;EAEhBd,SAAS,CAAC,MAAM;IACZ,IAAIU,UAAU,EAAE;MACZO,SAAS,CAACG,OAAO,EAAEC,OAAO,CAAC,CAAC;MAE5B;IACJ;IAEAJ,SAAS,CAACG,OAAO,EAAEE,MAAM,CAAC,CAAC;EAC/B,CAAC,EAAE,CAACZ,UAAU,CAAC,CAAC;EAEhB,IAAIK,gBAAgB,EAAE;IAClB,oBAAOjB,KAAA,CAAAyB,aAAA,CAACnB,KAAK;MAACoB,KAAK,EAAEhB,sBAAuB;MAACC,WAAW,EAAEM;IAAiB,CAAE,CAAC;EAClF;EAEA,oBACIjB,KAAA,CAAAyB,aAAA,CAACpB,MAAM;IACHsB,GAAG,EAAER,SAAU;IACfL,SAAS,EAAEA,SAAU;IACrBY,KAAK,EAAEjB,eAAgB;IACvBmB,YAAY,EAAElB,sBAAuB;IACrCM,UAAU,EAAEI,eAAgB;IAC5BL,QAAQ,EAAEA,QAAS;IACnBc,SAAS,EAAEhB;EAAM,CACpB,CAAC;AAEV,CAAC;AAED,eAAeN,aAAa","ignoreList":[]}
@@ -0,0 +1,204 @@
1
+ import { SmallWaitCursor } from '@chayns-components/core';
2
+ import useSize from '@react-hook/size';
3
+ import { invokeCall, vibrate } from 'chayns-api';
4
+ import { useAnimation, useDragControls, useMotionValue, useTransform } from 'framer-motion';
5
+ import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
6
+ import { useThumbIcon } from '../../hooks/design';
7
+ import { sleep } from '../../utils/common';
8
+ import { Container, createThumbVariants, Thumb, ThumbIcon, ThumbIconContainer, THUMB_ICON_VARIANTS, Track, TrackBackground, TrackText } from './Slider.styles';
9
+ const Slider = /*#__PURE__*/forwardRef((_ref, ref) => {
10
+ let {
11
+ color,
12
+ devalueColor,
13
+ trackHeight = 50,
14
+ thumbSize = 40,
15
+ borderSize = 2,
16
+ trackText = 'EINLÖSEN',
17
+ onChange = () => {},
18
+ onDevalue = () => Promise.resolve({
19
+ success: true
20
+ }),
21
+ onComplete
22
+ } = _ref;
23
+ const [trackRef, setTrackRef] = useState(null);
24
+ const [trackWidth] = useSize(trackRef, {
25
+ initialWidth: 300,
26
+ initialHeight: 50
27
+ });
28
+ const [iconColor, setIconColor] = useState('black');
29
+ const [isCompleted, setIsCompleted] = useState(false);
30
+ const [isDisabled, setIsDisabled] = useState(false);
31
+ const isCompletedRef = useRef(isCompleted);
32
+ const [showWaitCursor, setShowWaitCursor] = useState(false);
33
+ const scaleFactor = useMemo(() => trackHeight / thumbSize, [thumbSize, trackHeight]);
34
+ const x = useMotionValue(0);
35
+ const {
36
+ icon,
37
+ styles: iconStyles
38
+ } = useThumbIcon(x, iconColor);
39
+ const dragControls = useDragControls();
40
+ const vibrationTrigger = useTransform(x,
41
+ // round to 10 to avoid unnecessary vibrate calls
42
+ value => Math.round(value / 10) * 10);
43
+ const lastVibrationValue = useRef(0);
44
+ useEffect(() => {
45
+ vibrationTrigger.on('change', value => {
46
+ if (!isCompletedRef.current && value !== lastVibrationValue.current) {
47
+ lastVibrationValue.current = value;
48
+ void vibrate({
49
+ pattern: [10]
50
+ });
51
+ }
52
+ });
53
+ }, [vibrationTrigger]);
54
+ const containerAnimation = useAnimation();
55
+ const thumbVariants = useMemo(() => createThumbVariants({
56
+ thumbSize,
57
+ trackWidth,
58
+ scaleFactor
59
+ }), [scaleFactor, thumbSize, trackWidth]);
60
+ const textOpacity = useTransform(x, [0, 120], [1, 0]);
61
+
62
+ // this is the relative value of the right edge of the thumb
63
+ const relativeValue = useTransform(x, value => {
64
+ if (!value) return 0;
65
+ const thumbRadius = thumbSize * scaleFactor;
66
+ return parseFloat(((value + thumbRadius) / trackWidth * 100).toPrecision(2));
67
+ });
68
+
69
+ // this is the relative value of the center of the thumb, it is used for the background gradient
70
+ const relativeBackgroundValue = useTransform(x, value => {
71
+ if (!value) return 0;
72
+ const thumbRadius = thumbSize * scaleFactor / 2;
73
+ return parseFloat(((value + thumbRadius) / trackWidth * 100).toPrecision(2));
74
+ });
75
+ const trackBackground = useTransform(relativeBackgroundValue, value => {
76
+ if (isCompleted) return devalueColor;
77
+ if (!value) return 'transparent';
78
+ return `linear-gradient(to right, ${devalueColor} ${value}%, transparent ${value}%)`;
79
+ });
80
+ const handlePointerDownCapture = useCallback(event => {
81
+ const currentValue = relativeValue.get();
82
+ if (currentValue > 5) {
83
+ event.preventDefault();
84
+ event.stopPropagation();
85
+ }
86
+ void invokeCall({
87
+ action: 19,
88
+ value: {
89
+ pattern: [50],
90
+ iOSFeedbackVibration: 7
91
+ }
92
+ });
93
+ }, [relativeValue]);
94
+ const handleRedeem = useCallback(async () => {
95
+ setShowWaitCursor(true);
96
+ setIsCompleted(true);
97
+ isCompletedRef.current = true;
98
+ const devaluePromise = onDevalue();
99
+ const sleepPromise = sleep(1000);
100
+ const [devalued] = await Promise.all([devaluePromise, sleepPromise]);
101
+ if (!devalued.success) {
102
+ setShowWaitCursor(false);
103
+ setIsCompleted(false);
104
+ isCompletedRef.current = false;
105
+ await containerAnimation.start('base');
106
+ return;
107
+ }
108
+ setShowWaitCursor(false);
109
+ setIconColor('white');
110
+ void invokeCall({
111
+ action: 19,
112
+ value: {
113
+ iOSFeedbackVibration: 3,
114
+ pattern: [100, 200, 100]
115
+ }
116
+ });
117
+ await containerAnimation.start('completed');
118
+ await containerAnimation.start('leaving');
119
+ onComplete?.();
120
+ }, [containerAnimation, onComplete, onDevalue]);
121
+ const handleTrackRef = useCallback(node => {
122
+ setTrackRef(node);
123
+ }, []);
124
+ const handleDragStart = useCallback(() => {
125
+ void containerAnimation.start('dragging');
126
+ }, [containerAnimation]);
127
+ const handleDragEnd = useCallback(() => {
128
+ if (relativeValue.get() > 98) {
129
+ void handleRedeem();
130
+ return;
131
+ }
132
+ void containerAnimation.start('base');
133
+ }, [relativeValue, containerAnimation, handleRedeem]);
134
+ useEffect(() => {
135
+ void containerAnimation.start('base');
136
+ }, [containerAnimation]);
137
+ useEffect(() => {
138
+ if (isCompleted) return () => {};
139
+ return relativeValue.on('change', onChange);
140
+ }, [isCompleted, onChange, relativeValue]);
141
+ useImperativeHandle(ref, () => ({
142
+ disable: () => {
143
+ setIsDisabled(true);
144
+ setShowWaitCursor(false);
145
+ setIsCompleted(false);
146
+ isCompletedRef.current = false;
147
+ void containerAnimation.start('base');
148
+ },
149
+ enable: () => {
150
+ setIsDisabled(false);
151
+ }
152
+ }), [containerAnimation]);
153
+ const baseFontSize = useMemo(() => 22, []);
154
+ return /*#__PURE__*/React.createElement(Container, {
155
+ animate: containerAnimation
156
+ }, /*#__PURE__*/React.createElement(Track, {
157
+ $height: trackHeight,
158
+ $borderSize: borderSize,
159
+ $backgroundColor: color,
160
+ ref: handleTrackRef
161
+ }, /*#__PURE__*/React.createElement(TrackBackground, {
162
+ $height: trackHeight,
163
+ style: {
164
+ background: trackBackground
165
+ }
166
+ }), /*#__PURE__*/React.createElement(Thumb, {
167
+ variants: thumbVariants,
168
+ $size: thumbSize,
169
+ $trackHeight: trackHeight,
170
+ style: {
171
+ x
172
+ },
173
+ drag: isCompleted || isDisabled ? false : 'x',
174
+ dragElastic: 0,
175
+ onPointerDownCapture: handlePointerDownCapture,
176
+ whileTap: {
177
+ scale: 1.4,
178
+ cursor: 'grabbing'
179
+ },
180
+ onDragStart: handleDragStart,
181
+ onDragEnd: handleDragEnd,
182
+ dragControls: dragControls,
183
+ dragConstraints: {
184
+ right: trackWidth - thumbSize * scaleFactor,
185
+ left: 0
186
+ }
187
+ }, /*#__PURE__*/React.createElement(ThumbIconContainer, null, !showWaitCursor && /*#__PURE__*/React.createElement(ThumbIcon, {
188
+ key: "thumb-icon",
189
+ icon: icon,
190
+ variants: THUMB_ICON_VARIANTS,
191
+ style: iconStyles
192
+ }), showWaitCursor && /*#__PURE__*/React.createElement(SmallWaitCursor, {
193
+ shouldHideBackground: true,
194
+ color: "black"
195
+ }))), /*#__PURE__*/React.createElement(TrackText, {
196
+ style: {
197
+ opacity: textOpacity
198
+ },
199
+ $color: "white",
200
+ $baseFontSize: baseFontSize
201
+ }, trackText)));
202
+ });
203
+ export default Slider;
204
+ //# sourceMappingURL=Slider.js.map