@chayns-components/typewriter 5.0.0-beta.50 → 5.0.0-beta.54

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/README.md ADDED
@@ -0,0 +1,45 @@
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/typewriter.svg?style=for-the-badge" alt="" />
8
+ <img src="https://img.shields.io/npm/v/@chayns-components/typewriter?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 typewriter part of the chayns-components.
19
+
20
+ ```bash
21
+ # NPM
22
+ npm install @chayns-components/typewriter
23
+
24
+ # Yarn
25
+ yarn add @chayns-components/typewriter
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
+ You can use the components in your project as in the following example.
35
+
36
+ ```typescript jsx
37
+ import { Typewriter } from '@chayns-components/typewriter';
38
+
39
+ <Typewriter>
40
+ Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
41
+ ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo
42
+ dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est. Lorem ipsum dolor
43
+ sit amet.
44
+ </Typewriter>;
45
+ ```
@@ -14,24 +14,35 @@ const Typewriter = _ref => {
14
14
  children
15
15
  } = _ref;
16
16
  const [shownCharCount, setShownCharCount] = (0, _react.useState)(0);
17
- const shownText = (0, _react.useMemo)(() => (0, _utils.getSubTextFromHTML)(children, shownCharCount), [children, shownCharCount]);
17
+ const [shouldStopAnimation, setShouldStopAnimation] = (0, _react.useState)(false);
18
+ const isAnimatingText = shownCharCount !== children.length;
19
+ const handleClick = (0, _react.useCallback)(() => {
20
+ setShouldStopAnimation(true);
21
+ }, []);
18
22
  (0, _react.useEffect)(() => {
19
- setShownCharCount(0);
20
- const interval = window.setInterval(() => {
21
- setShownCharCount(prevState => {
22
- const nextState = prevState + 1;
23
- if (nextState === children.length) {
24
- window.clearInterval(interval);
25
- }
26
- return nextState;
27
- });
28
- }, 35);
23
+ let interval;
24
+ if (shouldStopAnimation) {
25
+ setShownCharCount(children.length);
26
+ } else {
27
+ setShownCharCount(0);
28
+ interval = window.setInterval(() => {
29
+ setShownCharCount(prevState => {
30
+ const nextState = prevState + 1;
31
+ if (nextState === children.length) {
32
+ window.clearInterval(interval);
33
+ }
34
+ return nextState;
35
+ });
36
+ }, 35);
37
+ }
29
38
  return () => {
30
39
  window.clearInterval(interval);
31
40
  };
32
- }, [children.length]);
33
- const isAnimatingText = shownCharCount !== children.length;
34
- return /*#__PURE__*/_react.default.createElement(_Typewriter.StyledTypewriter, null, /*#__PURE__*/_react.default.createElement(_Typewriter.StyledTypewriterText, {
41
+ }, [children.length, shouldStopAnimation]);
42
+ const shownText = (0, _react.useMemo)(() => (0, _utils.getSubTextFromHTML)(children, shownCharCount), [children, shownCharCount]);
43
+ return /*#__PURE__*/_react.default.createElement(_Typewriter.StyledTypewriter, {
44
+ onClick: handleClick
45
+ }, /*#__PURE__*/_react.default.createElement(_Typewriter.StyledTypewriterText, {
35
46
  dangerouslySetInnerHTML: {
36
47
  __html: shownText
37
48
  },
@@ -1 +1 @@
1
- {"version":3,"file":"Typewriter.js","names":["Typewriter","children","shownCharCount","setShownCharCount","useState","shownText","useMemo","getSubTextFromHTML","useEffect","interval","window","setInterval","prevState","nextState","length","clearInterval","isAnimatingText","__html","displayName"],"sources":["../../../src/components/typewriter/Typewriter.tsx"],"sourcesContent":["import React, { FC, useEffect, useMemo, useState } from 'react';\nimport {\n StyledTypewriter,\n StyledTypewriterPseudoText,\n StyledTypewriterText,\n} from './Typewriter.styles';\nimport { getSubTextFromHTML } from './utils';\n\nexport type TypewriterProps = {\n /**\n * The text to type\n */\n children: string;\n};\n\nconst Typewriter: FC<TypewriterProps> = ({ children }) => {\n const [shownCharCount, setShownCharCount] = useState(0);\n\n const shownText = useMemo(\n () => getSubTextFromHTML(children, shownCharCount),\n [children, shownCharCount]\n );\n\n useEffect(() => {\n setShownCharCount(0);\n\n const interval = window.setInterval(() => {\n setShownCharCount((prevState) => {\n const nextState = prevState + 1;\n\n if (nextState === children.length) {\n window.clearInterval(interval);\n }\n\n return nextState;\n });\n }, 35);\n\n return () => {\n window.clearInterval(interval);\n };\n }, [children.length]);\n\n const isAnimatingText = shownCharCount !== children.length;\n\n return (\n <StyledTypewriter>\n <StyledTypewriterText\n dangerouslySetInnerHTML={{ __html: shownText }}\n isAnimatingText={isAnimatingText}\n />\n {isAnimatingText && <StyledTypewriterPseudoText>{children}</StyledTypewriterPseudoText>}\n </StyledTypewriter>\n );\n};\n\nTypewriter.displayName = 'Typewriter';\n\nexport default Typewriter;\n"],"mappings":";;;;;;AAAA;AACA;AAKA;AAA6C;AAAA;AAS7C,MAAMA,UAA+B,GAAG,QAAkB;EAAA,IAAjB;IAAEC;EAAS,CAAC;EACjD,MAAM,CAACC,cAAc,EAAEC,iBAAiB,CAAC,GAAG,IAAAC,eAAQ,EAAC,CAAC,CAAC;EAEvD,MAAMC,SAAS,GAAG,IAAAC,cAAO,EACrB,MAAM,IAAAC,yBAAkB,EAACN,QAAQ,EAAEC,cAAc,CAAC,EAClD,CAACD,QAAQ,EAAEC,cAAc,CAAC,CAC7B;EAED,IAAAM,gBAAS,EAAC,MAAM;IACZL,iBAAiB,CAAC,CAAC,CAAC;IAEpB,MAAMM,QAAQ,GAAGC,MAAM,CAACC,WAAW,CAAC,MAAM;MACtCR,iBAAiB,CAAES,SAAS,IAAK;QAC7B,MAAMC,SAAS,GAAGD,SAAS,GAAG,CAAC;QAE/B,IAAIC,SAAS,KAAKZ,QAAQ,CAACa,MAAM,EAAE;UAC/BJ,MAAM,CAACK,aAAa,CAACN,QAAQ,CAAC;QAClC;QAEA,OAAOI,SAAS;MACpB,CAAC,CAAC;IACN,CAAC,EAAE,EAAE,CAAC;IAEN,OAAO,MAAM;MACTH,MAAM,CAACK,aAAa,CAACN,QAAQ,CAAC;IAClC,CAAC;EACL,CAAC,EAAE,CAACR,QAAQ,CAACa,MAAM,CAAC,CAAC;EAErB,MAAME,eAAe,GAAGd,cAAc,KAAKD,QAAQ,CAACa,MAAM;EAE1D,oBACI,6BAAC,4BAAgB,qBACb,6BAAC,gCAAoB;IACjB,uBAAuB,EAAE;MAAEG,MAAM,EAAEZ;IAAU,CAAE;IAC/C,eAAe,EAAEW;EAAgB,EACnC,EACDA,eAAe,iBAAI,6BAAC,sCAA0B,QAAEf,QAAQ,CAA8B,CACxE;AAE3B,CAAC;AAEDD,UAAU,CAACkB,WAAW,GAAG,YAAY;AAAC,eAEvBlB,UAAU;AAAA"}
1
+ {"version":3,"file":"Typewriter.js","names":["Typewriter","children","shownCharCount","setShownCharCount","useState","shouldStopAnimation","setShouldStopAnimation","isAnimatingText","length","handleClick","useCallback","useEffect","interval","window","setInterval","prevState","nextState","clearInterval","shownText","useMemo","getSubTextFromHTML","__html","displayName"],"sources":["../../../src/components/typewriter/Typewriter.tsx"],"sourcesContent":["import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n StyledTypewriter,\n StyledTypewriterPseudoText,\n StyledTypewriterText,\n} from './Typewriter.styles';\nimport { getSubTextFromHTML } from './utils';\n\nexport type TypewriterProps = {\n /**\n * The text to type\n */\n children: string;\n};\n\nconst Typewriter: FC<TypewriterProps> = ({ children }) => {\n const [shownCharCount, setShownCharCount] = useState(0);\n const [shouldStopAnimation, setShouldStopAnimation] = useState(false);\n\n const isAnimatingText = shownCharCount !== children.length;\n\n const handleClick = useCallback(() => {\n setShouldStopAnimation(true);\n }, []);\n\n useEffect(() => {\n let interval: number | undefined;\n\n if (shouldStopAnimation) {\n setShownCharCount(children.length);\n } else {\n setShownCharCount(0);\n\n interval = window.setInterval(() => {\n setShownCharCount((prevState) => {\n const nextState = prevState + 1;\n\n if (nextState === children.length) {\n window.clearInterval(interval);\n }\n\n return nextState;\n });\n }, 35);\n }\n\n return () => {\n window.clearInterval(interval);\n };\n }, [children.length, shouldStopAnimation]);\n\n const shownText = useMemo(\n () => getSubTextFromHTML(children, shownCharCount),\n [children, shownCharCount]\n );\n\n return (\n <StyledTypewriter onClick={handleClick}>\n <StyledTypewriterText\n dangerouslySetInnerHTML={{ __html: shownText }}\n isAnimatingText={isAnimatingText}\n />\n {isAnimatingText && <StyledTypewriterPseudoText>{children}</StyledTypewriterPseudoText>}\n </StyledTypewriter>\n );\n};\n\nTypewriter.displayName = 'Typewriter';\n\nexport default Typewriter;\n"],"mappings":";;;;;;AAAA;AACA;AAKA;AAA6C;AAAA;AAS7C,MAAMA,UAA+B,GAAG,QAAkB;EAAA,IAAjB;IAAEC;EAAS,CAAC;EACjD,MAAM,CAACC,cAAc,EAAEC,iBAAiB,CAAC,GAAG,IAAAC,eAAQ,EAAC,CAAC,CAAC;EACvD,MAAM,CAACC,mBAAmB,EAAEC,sBAAsB,CAAC,GAAG,IAAAF,eAAQ,EAAC,KAAK,CAAC;EAErE,MAAMG,eAAe,GAAGL,cAAc,KAAKD,QAAQ,CAACO,MAAM;EAE1D,MAAMC,WAAW,GAAG,IAAAC,kBAAW,EAAC,MAAM;IAClCJ,sBAAsB,CAAC,IAAI,CAAC;EAChC,CAAC,EAAE,EAAE,CAAC;EAEN,IAAAK,gBAAS,EAAC,MAAM;IACZ,IAAIC,QAA4B;IAEhC,IAAIP,mBAAmB,EAAE;MACrBF,iBAAiB,CAACF,QAAQ,CAACO,MAAM,CAAC;IACtC,CAAC,MAAM;MACHL,iBAAiB,CAAC,CAAC,CAAC;MAEpBS,QAAQ,GAAGC,MAAM,CAACC,WAAW,CAAC,MAAM;QAChCX,iBAAiB,CAAEY,SAAS,IAAK;UAC7B,MAAMC,SAAS,GAAGD,SAAS,GAAG,CAAC;UAE/B,IAAIC,SAAS,KAAKf,QAAQ,CAACO,MAAM,EAAE;YAC/BK,MAAM,CAACI,aAAa,CAACL,QAAQ,CAAC;UAClC;UAEA,OAAOI,SAAS;QACpB,CAAC,CAAC;MACN,CAAC,EAAE,EAAE,CAAC;IACV;IAEA,OAAO,MAAM;MACTH,MAAM,CAACI,aAAa,CAACL,QAAQ,CAAC;IAClC,CAAC;EACL,CAAC,EAAE,CAACX,QAAQ,CAACO,MAAM,EAAEH,mBAAmB,CAAC,CAAC;EAE1C,MAAMa,SAAS,GAAG,IAAAC,cAAO,EACrB,MAAM,IAAAC,yBAAkB,EAACnB,QAAQ,EAAEC,cAAc,CAAC,EAClD,CAACD,QAAQ,EAAEC,cAAc,CAAC,CAC7B;EAED,oBACI,6BAAC,4BAAgB;IAAC,OAAO,EAAEO;EAAY,gBACnC,6BAAC,gCAAoB;IACjB,uBAAuB,EAAE;MAAEY,MAAM,EAAEH;IAAU,CAAE;IAC/C,eAAe,EAAEX;EAAgB,EACnC,EACDA,eAAe,iBAAI,6BAAC,sCAA0B,QAAEN,QAAQ,CAA8B,CACxE;AAE3B,CAAC;AAEDD,UAAU,CAACsB,WAAW,GAAG,YAAY;AAAC,eAEvBtB,UAAU;AAAA"}
@@ -1,7 +1,7 @@
1
1
  export declare const StyledTypewriter: import("styled-components").StyledComponent<"div", any, {}, never>;
2
2
  export declare const StyledTypewriterPseudoText: import("styled-components").StyledComponent<"div", any, {}, never>;
3
- type StyledTypewriterTextProps = {
3
+ export declare const StyledTypewriterText: import("styled-components").StyledComponent<"div", any, {
4
4
  isAnimatingText: boolean;
5
- };
6
- export declare const StyledTypewriterText: import("styled-components").StyledComponent<"div", any, StyledTypewriterTextProps, never>;
7
- export {};
5
+ } & {
6
+ theme: import("@chayns-components/core/lib/components/color-scheme-provider/ColorSchemeProvider").Theme;
7
+ }, never>;
@@ -23,20 +23,32 @@ const StyledTypewriterPseudoText = _styledComponents.default.div`
23
23
  `;
24
24
  exports.StyledTypewriterPseudoText = StyledTypewriterPseudoText;
25
25
  const StyledTypewriterText = _styledComponents.default.div`
26
- position: ${_ref => {
26
+ color: ${_ref => {
27
27
  let {
28
- isAnimatingText
28
+ theme
29
29
  } = _ref;
30
+ return theme.text;
31
+ }};
32
+ position: ${_ref2 => {
33
+ let {
34
+ isAnimatingText
35
+ } = _ref2;
30
36
  return isAnimatingText ? 'absolute' : 'relative';
31
37
  }};
32
38
 
33
- ${_ref2 => {
39
+ ${_ref3 => {
34
40
  let {
35
41
  isAnimatingText
36
- } = _ref2;
42
+ } = _ref3;
37
43
  return isAnimatingText && (0, _styledComponents.css)`
38
44
  &:after {
39
45
  animation: ${blinkAnimation} 1s steps(5, start) infinite;
46
+ color: ${_ref4 => {
47
+ let {
48
+ theme
49
+ } = _ref4;
50
+ return theme.text;
51
+ }};
40
52
  content: '▋';
41
53
  margin-left: 0.25rem;
42
54
  opacity: 0.85;
@@ -1 +1 @@
1
- {"version":3,"file":"Typewriter.styles.js","names":["StyledTypewriter","styled","div","blinkAnimation","keyframes","StyledTypewriterPseudoText","StyledTypewriterText","isAnimatingText","css"],"sources":["../../../src/components/typewriter/Typewriter.styles.ts"],"sourcesContent":["import styled, { css, keyframes } from 'styled-components';\n\nexport const StyledTypewriter = styled.div`\n position: relative;\n`;\n\nconst blinkAnimation = keyframes`\n 100% {\n visibility: hidden;\n }\n`;\n\nexport const StyledTypewriterPseudoText = styled.div`\n opacity: 0;\n pointer-events: none;\n user-select: none;\n`;\n\ntype StyledTypewriterTextProps = {\n isAnimatingText: boolean;\n};\n\nexport const StyledTypewriterText = styled.div<StyledTypewriterTextProps>`\n position: ${({ isAnimatingText }) => (isAnimatingText ? 'absolute' : 'relative')};\n\n ${({ isAnimatingText }) =>\n isAnimatingText &&\n css`\n &:after {\n animation: ${blinkAnimation} 1s steps(5, start) infinite;\n content: '▋';\n margin-left: 0.25rem;\n opacity: 0.85;\n vertical-align: baseline;\n }\n `}\n`;\n"],"mappings":";;;;;;AAAA;AAA2D;AAAA;AAEpD,MAAMA,gBAAgB,GAAGC,yBAAM,CAACC,GAAI;AAC3C;AACA,CAAC;AAAC;AAEF,MAAMC,cAAc,GAAG,IAAAC,2BAAS,CAAC;AACjC;AACA;AACA;AACA,CAAC;AAEM,MAAMC,0BAA0B,GAAGJ,yBAAM,CAACC,GAAI;AACrD;AACA;AACA;AACA,CAAC;AAAC;AAMK,MAAMI,oBAAoB,GAAGL,yBAAM,CAACC,GAA+B;AAC1E,gBAAgB;EAAA,IAAC;IAAEK;EAAgB,CAAC;EAAA,OAAMA,eAAe,GAAG,UAAU,GAAG,UAAU;AAAA,CAAE;AACrF;AACA,MAAM;EAAA,IAAC;IAAEA;EAAgB,CAAC;EAAA,OAClBA,eAAe,IACf,IAAAC,qBAAG,CAAC;AACZ;AACA,6BAA6BL,cAAe;AAC5C;AACA;AACA;AACA;AACA;AACA,SAAS;AAAA,CAAC;AACV,CAAC;AAAC"}
1
+ {"version":3,"file":"Typewriter.styles.js","names":["StyledTypewriter","styled","div","blinkAnimation","keyframes","StyledTypewriterPseudoText","StyledTypewriterText","theme","text","isAnimatingText","css"],"sources":["../../../src/components/typewriter/Typewriter.styles.ts"],"sourcesContent":["import type { WithTheme } from '@chayns-components/core';\nimport styled, { css, keyframes } from 'styled-components';\n\nexport const StyledTypewriter = styled.div`\n position: relative;\n`;\n\nconst blinkAnimation = keyframes`\n 100% {\n visibility: hidden;\n }\n`;\n\nexport const StyledTypewriterPseudoText = styled.div`\n opacity: 0;\n pointer-events: none;\n user-select: none;\n`;\n\ntype StyledTypewriterTextProps = WithTheme<{\n isAnimatingText: boolean;\n}>;\n\nexport const StyledTypewriterText = styled.div<StyledTypewriterTextProps>`\n color: ${({ theme }: StyledTypewriterTextProps) => theme.text};\n position: ${({ isAnimatingText }) => (isAnimatingText ? 'absolute' : 'relative')};\n\n ${({ isAnimatingText }) =>\n isAnimatingText &&\n css`\n &:after {\n animation: ${blinkAnimation} 1s steps(5, start) infinite;\n color: ${({ theme }: StyledTypewriterTextProps) => theme.text};\n content: '▋';\n margin-left: 0.25rem;\n opacity: 0.85;\n vertical-align: baseline;\n }\n `}\n`;\n"],"mappings":";;;;;;AACA;AAA2D;AAAA;AAEpD,MAAMA,gBAAgB,GAAGC,yBAAM,CAACC,GAAI;AAC3C;AACA,CAAC;AAAC;AAEF,MAAMC,cAAc,GAAG,IAAAC,2BAAS,CAAC;AACjC;AACA;AACA;AACA,CAAC;AAEM,MAAMC,0BAA0B,GAAGJ,yBAAM,CAACC,GAAI;AACrD;AACA;AACA;AACA,CAAC;AAAC;AAMK,MAAMI,oBAAoB,GAAGL,yBAAM,CAACC,GAA+B;AAC1E,aAAa;EAAA,IAAC;IAAEK;EAAiC,CAAC;EAAA,OAAKA,KAAK,CAACC,IAAI;AAAA,CAAC;AAClE,gBAAgB;EAAA,IAAC;IAAEC;EAAgB,CAAC;EAAA,OAAMA,eAAe,GAAG,UAAU,GAAG,UAAU;AAAA,CAAE;AACrF;AACA,MAAM;EAAA,IAAC;IAAEA;EAAgB,CAAC;EAAA,OAClBA,eAAe,IACf,IAAAC,qBAAG,CAAC;AACZ;AACA,6BAA6BP,cAAe;AAC5C,yBAAyB;IAAA,IAAC;MAAEI;IAAiC,CAAC;IAAA,OAAKA,KAAK,CAACC,IAAI;EAAA,CAAC;AAC9E;AACA;AACA;AACA;AACA;AACA,SAAS;AAAA,CAAC;AACV,CAAC;AAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chayns-components/typewriter",
3
- "version": "5.0.0-beta.50",
3
+ "version": "5.0.0-beta.54",
4
4
  "description": "A set of beautiful React components for developing your own applications with chayns.",
5
5
  "keywords": [
6
6
  "chayns",
@@ -49,6 +49,7 @@
49
49
  "typescript": "^4.9.5"
50
50
  },
51
51
  "dependencies": {
52
+ "@chayns-components/core": "^5.0.0-beta.54",
52
53
  "@chayns/colors": "^2.0.0",
53
54
  "clsx": "^1.2.1",
54
55
  "framer-motion": "^6.5.1",
@@ -62,5 +63,5 @@
62
63
  "publishConfig": {
63
64
  "access": "public"
64
65
  },
65
- "gitHead": "dadd6f76c23d1b7aa67e7bfaab4536e72c7ed71e"
66
+ "gitHead": "5938050611ab8bd504ef5b610189548d5a62ba7d"
66
67
  }