UNPKG

@omnedia/rxjs-typewriter

Version:

A simple typewriter effect to animate text.

1 lines 3.4 kB
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\r\n Observable,\r\n concat,\r\n concatMap,\r\n delay,\r\n from,\r\n ignoreElements,\r\n interval,\r\n map,\r\n of,\r\n repeat,\r\n take,\r\n} from \"rxjs\";\r\n\r\nexport class TypeWriter {\r\n private writeSpeed = 40;\r\n private waitAfterTyped = 3500;\r\n private waitAfterDeleted = 50;\r\n private loop = true;\r\n private wordsCount = 0;\r\n\r\n typeWriteEffect(\r\n words: string[],\r\n loop?: boolean,\r\n writeSpeed?: number,\r\n deleteDelay?: number,\r\n writeDelay?: number\r\n ): Observable<string> {\r\n this.writeSpeed = writeSpeed ?? this.writeSpeed;\r\n this.waitAfterTyped = deleteDelay ?? this.waitAfterTyped;\r\n this.waitAfterDeleted = writeDelay ?? this.waitAfterDeleted;\r\n this.loop = loop ?? this.loop;\r\n\r\n this.wordsCount = words.length;\r\n\r\n return this.startTypewriter(words);\r\n }\r\n\r\n private startTypewriter(words: string[]): Observable<string> {\r\n if (this.loop === false) {\r\n return from(words).pipe(concatMap((word) => this.typeEffect(word)));\r\n }\r\n\r\n return from(words).pipe(\r\n concatMap((word) => this.typeEffect(word)),\r\n repeat()\r\n );\r\n }\r\n\r\n private typeEffect(word: string): Observable<string> {\r\n if (this.loop === false) {\r\n this.wordsCount -= 1;\r\n }\r\n\r\n return concat(\r\n this.typeWord(word),\r\n of(\"\").pipe(delay(this.waitAfterTyped), ignoreElements()),\r\n this.typeWord(word, true),\r\n of(\"\").pipe(delay(this.waitAfterDeleted), ignoreElements())\r\n );\r\n }\r\n\r\n private typeWord(word: string, backwards?: boolean): Observable<string> {\r\n if (this.loop === false && this.wordsCount <= 0 && backwards) {\r\n return of(word);\r\n }\r\n\r\n return interval(this.writeSpeed).pipe(\r\n map((x) => {\r\n return backwards\r\n ? word.substring(0, word.length - x)\r\n : word.substring(0, x + 1);\r\n }),\r\n take(word.length + 1)\r\n );\r\n }\r\n}\r\n"],"mappings":";AAAA;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEA,IAAM,aAAN,MAAiB;AAAA,EAAjB;AACL,SAAQ,aAAa;AACrB,SAAQ,iBAAiB;AACzB,SAAQ,mBAAmB;AAC3B,SAAQ,OAAO;AACf,SAAQ,aAAa;AAAA;AAAA,EAErB,gBACE,OACA,MACA,YACA,aACA,YACoB;AACpB,SAAK,aAAa,kCAAc,KAAK;AACrC,SAAK,iBAAiB,oCAAe,KAAK;AAC1C,SAAK,mBAAmB,kCAAc,KAAK;AAC3C,SAAK,OAAO,sBAAQ,KAAK;AAEzB,SAAK,aAAa,MAAM;AAExB,WAAO,KAAK,gBAAgB,KAAK;AAAA,EACnC;AAAA,EAEQ,gBAAgB,OAAqC;AAC3D,QAAI,KAAK,SAAS,OAAO;AACvB,aAAO,KAAK,KAAK,EAAE,KAAK,UAAU,CAAC,SAAS,KAAK,WAAW,IAAI,CAAC,CAAC;AAAA,IACpE;AAEA,WAAO,KAAK,KAAK,EAAE;AAAA,MACjB,UAAU,CAAC,SAAS,KAAK,WAAW,IAAI,CAAC;AAAA,MACzC,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,WAAW,MAAkC;AACnD,QAAI,KAAK,SAAS,OAAO;AACvB,WAAK,cAAc;AAAA,IACrB;AAEA,WAAO;AAAA,MACL,KAAK,SAAS,IAAI;AAAA,MAClB,GAAG,EAAE,EAAE,KAAK,MAAM,KAAK,cAAc,GAAG,eAAe,CAAC;AAAA,MACxD,KAAK,SAAS,MAAM,IAAI;AAAA,MACxB,GAAG,EAAE,EAAE,KAAK,MAAM,KAAK,gBAAgB,GAAG,eAAe,CAAC;AAAA,IAC5D;AAAA,EACF;AAAA,EAEQ,SAAS,MAAc,WAAyC;AACtE,QAAI,KAAK,SAAS,SAAS,KAAK,cAAc,KAAK,WAAW;AAC5D,aAAO,GAAG,IAAI;AAAA,IAChB;AAEA,WAAO,SAAS,KAAK,UAAU,EAAE;AAAA,MAC/B,IAAI,CAAC,MAAM;AACT,eAAO,YACH,KAAK,UAAU,GAAG,KAAK,SAAS,CAAC,IACjC,KAAK,UAAU,GAAG,IAAI,CAAC;AAAA,MAC7B,CAAC;AAAA,MACD,KAAK,KAAK,SAAS,CAAC;AAAA,IACtB;AAAA,EACF;AACF;","names":[]}