diff --git a/README.md b/README.md index 3dc14a7..8e2c493 100644 --- a/README.md +++ b/README.md @@ -25,17 +25,42 @@ import TypeIt from "typeit-react"; export default () => { return (
0&&void 0!==arguments[0]&&arguments[0];return new Promise((function(n,i){t.wait((function(){return n()}),e||t.opts.nextStringDelay.total)}))},this.reset=function(){return this.queue.reset(),new I({typeIt:i,element:this.$e,id:c,options:this.opts,queue:this.queue.waiting,isAReset:!0})},this.init=function(){var t=this;if(!this.status.started){if(D(),!this.opts.waitUntilVisible)return this.status.started=!0,this.fire();new IntersectionObserver((function(e,n){e.forEach((function(e){e.isIntersecting&&(t.fire(),n.unobserve(t.$e))}))}),{threshold:1}).observe(this.$e)}},this.fire=function(){for(var t=this,e=this,n=this.queue.waiting.slice(),r=Promise.resolve(),o=function(t){var o=n[t],s=[o,e.queue,i];r=r.then((function(){return new Promise((function(t,n){var i,r;if(e.status.frozen)return n();e.pace=P(e.opts.speed,e.opts.deleteSpeed,e.opts.lifeLike),o[2]&&o[2].isFirst&&(i=e.opts).beforeString.apply(i,s),(r=e.opts).beforeStep.apply(r,s),o[0].call(e,o[1],o[2]).then((function(){var n,i,r=e.queue.waiting.shift();return o[2]&&o[2].isPhantom?t():(o[2]&&o[2].isLast&&(n=e.opts).afterString.apply(n,s),(i=e.opts).afterStep.apply(i,s),e.queue.executed.push(r),t())}))}))}))},s=0;s0&&void 0!==arguments[0]&&arguments[0];return new Promise((function(n){t.wait((function(){var i=q();return i.length&&O(i[i.length-1]),$(t.$e),e&&i.length-1>0?t.delete(!0).then((function(){return n()})):n()}),t.pace[1])}))},this.setOptions=function(t){var e=this;return new Promise((function(n){return e.opts=Object.assign({},e.opts,t),n()}))};var k=null,B=h(r);this.status={started:!1,complete:!1,frozen:!1,destroyed:!1},this.$e=r,this.timeouts=[],this.opts=Object.assign({},s,v),this.opts.html=!B&&this.opts.html,this.opts.nextStringDelay=M(this.opts.nextStringDelay),this.opts.loopDelay=M(this.opts.loopDelay),this.queue=new u(b,[this.pause,this.opts.startDelay]),this.$e.setAttribute("data-typeit-id",c),l("[data-typeit-id]:before {content: '.'; display: inline-block; width: 0; visibility: hidden;}"),L(r,B);var R=p(this.opts.strings);R=C(R),this.opts.strings=f(R),this.opts.strings.length&&!S&&j()}function j(t,e){var n,i=this,r=this;this.instances=(n=t,"string"==typeof n?n=document.querySelectorAll(n):n.forEach||(n=[n]),d(n)).map((function(t){return new I({typeIt:i,element:t,id:Math.random().toString(36).substring(2,15),options:e,queue:[],isAReset:!1})}));var o=function(t){i.instances.forEach((function(e){t.call(i,e)}))},s=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;o((function(i){var o="string"!=typeof t,s=o?t:i[t],u=x(n,[s,o?r:e]);i.queue.add(u)}))};this.is=function(t){return e=this.instances,n=t,!0,!!e.length&&!e.some((function(t){return!0!==t.status[n]}));var e,n},this.freeze=function(){o((function(t){t.status.frozen=!0}))},this.unfreeze=function(){o((function(t){t.status.frozen&&(t.status.frozen=!1,t.fire())}))},this.type=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return o((function(e){var n=N(t,e.opts.html);e.queue.add(x(n,e.type,!0))})),this},this.delete=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return s("delete",null===t,null===t?1:t),this},this.pause=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return s("pause",t),this},this.break=function(){return s("type",a("BR")),this},this.options=function(t){return s("setOptions",t),this},this.exec=function(t){return s(t),this},this.destroy=function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.instances=this.instances.map((function(e){if(e.timeouts.forEach((function(t){clearTimeout(t)})),e.timeouts=[],t){var n=e.isInput?null:e.$e.querySelector(".ti-cursor");n&&e.$e.removeChild(n)}return e.status.destroyed=!0,e}))},this.empty=function(){return s("empty"),this},this.reset=function(){return this.destroy(),this.instances=this.instances.map((function(t){return t.reset()})),this},this.go=function(){return o((function(t){t.init()})),this}}var H=e,C=n,k=i,B=function(e){var n=k(!0),i=n[0],o=n[1],s=H(null),u=e.options,a=e.element,c=e.children,l=e.getBeforeInit,f=e.getAfterInit,h=function(t,e){var n={};for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.indexOf(i)<0&&(n[i]=t[i]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(t);r (https://macarthur.me) - * Version: v0.0.1 + * Version: v0.0.2 * License: GPL-2.0 * URL: undefined * @@ -21,4 +21,4 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. - ***************************************************************************** */var e=function(){return(e=Object.assign||function(t){for(var e,n=1,i=arguments.length;n0&&void 0!==arguments[0]?arguments[0]:[],i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.insert=function(e,n){t.waiting.splice(e,0,n)},this.add=function(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return Array.isArray(t[0])?(e.waiting=e.waiting.concat(t),e):(e.waiting[n?"unshift":"push"](t),e)},this.delete=function(e){return t.waiting.splice(e,1),t},this.reset=function(){return t.waiting=t.executed.concat(t.waiting),t.executed=[],t},this.executed=[],this.waiting=n,!n.length&&i&&this.add(i)}var o=function(t){return document.createElement(t)};function u(t,e){return Math.abs(Math.random()*(t+e-(t-e))+(t-e))}function s(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=o("style");n.id=e,n.appendChild(document.createTextNode(t)),document.head.appendChild(n)}function a(t){return t.map((function(t){return t.replace(/<\!--.*?-->/g,"")}))}var c=function(t){return["textarea","input"].indexOf(t.tagName.toLowerCase())>-1},l=function(t){return Array.isArray(t)?t:[t]},f=function(t){return[].slice.call(t)},h=function(t,e){var n=t.nextSibling;return!!n&&!n.isEqualNode(e)},p=function(t,e){var i=e;if(c(t))t.value="".concat(t.value).concat(i);else{var r=f(t.childNodes).filter((function(t){return t.classList&&t.classList.contains("ti-cursor")}));if(r=r.length?r[0]:null,"object"==n(e)&&!(e instanceof HTMLElement)){var u=e.ancestorTree.slice(0).reverse().join(" "),s=f(t.querySelectorAll("".concat(u))),a=(s=s.filter((function(t){return!r||!r.isEqualNode(t)}))).length>0?s[s.length-1]:null;if(a&&function(t,e){if(!t)return!1;for(var n=!1,i=[],r=t;!n;)i.push(h(r,e)),(r=r.parentNode)&&r.hasAttribute&&!r.hasAttribute("data-typeit-id")||(n=!0);return!i.some((function(t){return t}))}(a,r))t=a,i=e.content;else if(i=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",i=o(t);return e.forEach((function(t){i.setAttribute(t.name,t.value)})),i.innerHTML=n,i}(e.ancestorTree[0],e.attributes,e.content),e.ancestorTree.length>1){var l=f(t.querySelectorAll(e.ancestorTree[1]));t=l[l.length-1]}}i="object"==n(i)?i:document.createTextNode(i),t.insertBefore(i,r&&t.hasAttribute("data-typeit-id")?r:null)}},d=function(t){var e=[];return e.concat.apply(e,t)},v=function(t){var e=document.implementation.createHTMLDocument("");return e.body.innerHTML=t,e.body},y=function(t){return f(t.childNodes).map((function(t){return 3===t.nodeType?t.nodeValue.split(""):t}))},m=function(t,e,n){return{ancestorTree:e,attributes:(i=t,f(i.attributes).map((function(t){return{name:t.name,value:t.nodeValue}}))),content:n};var i},g=function(t,e){var n=m(t,e,""),i=y(t).map((function(n,i){return Array.isArray(n)?n.map((function(n,i){return m(t,e,n)})):n}));return i.unshift(n),d(i)},b=function(t){return t instanceof HTMLElement&&"BR"!==t.tagName},w=function t(e){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=e.map((function(t){if(b(t)){if(!n)return f(t.childNodes);for(var e=t.parentNode,i=[t.tagName];["BODY","HTML"].indexOf(e.tagName)<0;)i.push(e.tagName),e=e.parentNode;return g(t,i)}return t}));return(i=d(i)).some((function(t){return b(t)}))?t(i,n):i};function S(t){var e=v(t),n=y(e);return w(n)}function q(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return e?S(t):t.split("")}var A=function(t,e){e?t.value="":t.querySelector(".ti-cursor")&&(t.innerHTML="")},T=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=!Array.isArray(t),r=t.length;return(t=i?new Array(t).fill(0):t).map((function(t,o){if(i)return e;var u=[e,t];return n&&(0===o&&u.push({isFirst:!0}),o+1===r&&u.push({isLast:!0})),u}))},N=function(t){t.parentNode.removeChild(t)},x=function(t){return 3!==t.nodeType&&"BR"!==t.tagName&&!t.firstChild},L=function(t){return t.some((function(t){return x(t)}))},O=function(t){for(var e=f(t.querySelectorAll("*")),n=L(e);e.length&&n;){var i=!1;e.forEach((function(t){x(t)&&(N(t),i=!0)})),i&&(e=f(t.querySelectorAll("*"))),n=L(e)}return e},E=function(t){return Array.isArray(t)||(t=[t/2,t/2]),{before:t[0],after:t[1],total:t[0]+t[1]}};function D(t,e,n){var i=(e=null!==e?e:t/3)/2;return n?[u(t,t/2),u(e,i)]:[t,e]}function $(){var t=this,e=this,u=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},h=u.typeIt,d=u.element,y=u.id,m=u.options,g=u.queue,b=void 0===g?[]:g,x=u.isAReset,L=void 0!==x&&x,P=function(){var e=f(t.$e.childNodes).filter((function(t){return!t.isEqualNode(R)}));return w(e,!1)},M=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,i=e.opts.nextStringDelay;e.queue.insert(t,[e.pause,i.before]),e.queue.insert(t+n+1,[e.pause,i.after])},j=function(){!I&&t.opts.cursor&&(s("@keyframes blink-".concat(y," { 0% {opacity: 0} 49% {opacity: 0} 50% {opacity: 1} }[data-typeit-id='").concat(y,"'] .ti-cursor { animation: blink-").concat(y," ").concat(t.opts.cursorSpeed/1e3,"s infinite; }"),y),(R=o("span")).innerHTML=v(t.opts.cursorChar).innerHTML,R.className="ti-cursor",R.setAttribute("style","display:inline;position:relative;font:inherit;color:inherit;line-height:inherit;"),t.$e.appendChild(R))};this.wait=function(t,e){this.timeouts.push(setTimeout(t,e))};var C=function(){t.opts.strings.forEach((function(e,n){var i=q(e,t.opts.html);t.queue.add(T(i,t.type,!0));var r=t.queue.waiting.length;if(n+1!==t.opts.strings.length){if(t.opts.breakLines)return t.queue.add([t.type,o("BR")]),void M(r);t.queue.add(T(i,t.delete)),M(r,e.length)}}))},H=function(e){t.queue.reset().delete(0).add([t.pause,e.before],!0);for(var n=0;n 0&&void 0!==arguments[0]&&arguments[0];return new Promise((function(n,i){t.wait((function(){return n()}),e||t.opts.nextStringDelay.total)}))},this.reset=function(){return this.queue.reset(),new $({typeIt:h,element:this.$e,id:y,options:this.opts,queue:this.queue.waiting,isAReset:!0})},this.init=function(){var t=this;if(!this.status.started){if(j(),!this.opts.waitUntilVisible)return this.status.started=!0,this.fire();new IntersectionObserver((function(e,n){e.forEach((function(e){e.isIntersecting&&(t.fire(),n.unobserve(t.$e))}))}),{threshold:1}).observe(this.$e)}},this.fire=function(){for(var t=this,e=this,n=this.queue.waiting.slice(),i=Promise.resolve(),r=function(t){var r=n[t],o=[r,e.queue,h];i=i.then((function(){return new Promise((function(t,n){var i,u;if(e.status.frozen)return n();e.pace=D(e.opts.speed,e.opts.deleteSpeed,e.opts.lifeLike),r[2]&&r[2].isFirst&&(i=e.opts).beforeString.apply(i,o),(u=e.opts).beforeStep.apply(u,o),r[0].call(e,r[1],r[2]).then((function(){var n,i,u=e.queue.waiting.shift();return r[2]&&r[2].isPhantom?t():(r[2]&&r[2].isLast&&(n=e.opts).afterString.apply(n,o),(i=e.opts).afterStep.apply(i,o),e.queue.executed.push(u),t())}))}))}))},o=0;o
0&&void 0!==arguments[0]&&arguments[0];return new Promise((function(n){t.wait((function(){var i=P();return i.length&&N(i[i.length-1]),O(t.$e),e&&i.length-1>0?t.delete(!0).then((function(){return n()})):n()}),t.pace[1])}))},this.setOptions=function(t){var e=this;return new Promise((function(n){return e.opts=Object.assign({},e.opts,t),n()}))};var R=null,I=c(d);this.status={started:!1,complete:!1,frozen:!1,destroyed:!1},this.$e=d,this.timeouts=[],this.opts=Object.assign({},i,m),this.opts.html=!I&&this.opts.html,this.opts.nextStringDelay=E(this.opts.nextStringDelay),this.opts.loopDelay=E(this.opts.loopDelay),this.queue=new r(b,[this.pause,this.opts.startDelay]),this.$e.setAttribute("data-typeit-id",y),s("[data-typeit-id]:before {content: '.'; display: inline-block; width: 0; visibility: hidden;}"),A(d,I);var z=l(this.opts.strings);z=k(z),this.opts.strings=a(z),this.opts.strings.length&&!L&&C()}function P(t,e){var n,i=this,r=this;this.instances=(n=t,"string"==typeof n?n=document.querySelectorAll(n):n.forEach||(n=[n]),f(n)).map((function(t){return new $({typeIt:i,element:t,id:Math.random().toString(36).substring(2,15),options:e,queue:[],isAReset:!1})}));var u=function(t){i.instances.forEach((function(e){t.call(i,e)}))},s=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;u((function(i){var o="string"!=typeof t,u=o?t:i[t],s=T(n,[u,o?r:e]);i.queue.add(s)}))};this.is=function(t){return e=this.instances,n=t,!0,!!e.length&&!e.some((function(t){return!0!==t.status[n]}));var e,n},this.freeze=function(){u((function(t){t.status.frozen=!0}))},this.unfreeze=function(){u((function(t){t.status.frozen&&(t.status.frozen=!1,t.fire())}))},this.type=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return u((function(e){var n=q(t,e.opts.html);e.queue.add(T(n,e.type,!0))})),this},this.delete=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return s("delete",null===t,null===t?1:t),this},this.pause=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return s("pause",t),this},this.break=function(){return s("type",o("BR")),this},this.options=function(t){return s("setOptions",t),this},this.exec=function(t){return s(t),this},this.destroy=function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.instances=this.instances.map((function(e){if(e.timeouts.forEach((function(t){clearTimeout(t)})),e.timeouts=[],t){var n=e.isInput?null:e.$e.querySelector(".ti-cursor");n&&e.$e.removeChild(n)}return e.status.destroyed=!0,e}))},this.empty=function(){return s("empty"),this},this.reset=function(){return this.destroy(),this.instances=this.instances.map((function(t){return t.reset()})),this},this.go=function(){return u((function(t){t.init()})),this}}var M=t.useRef,j=t.useEffect,C=function(n){var i=M(null),r=n.options,o=n.element,u=n.children,s=function(t,e){var n={};for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.indexOf(i)<0&&(n[i]=t[i]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(t);r 0&&void 0!==arguments[0]?arguments[0]:[],i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.insert=function(e,n){t.waiting.splice(e,0,n)},this.add=function(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return Array.isArray(t[0])?(e.waiting=e.waiting.concat(t),e):(e.waiting[n?"unshift":"push"](t),e)},this.delete=function(e){return t.waiting.splice(e,1),t},this.reset=function(){return t.waiting=t.executed.concat(t.waiting),t.executed=[],t},this.executed=[],this.waiting=n,!n.length&&i&&this.add(i)}var o=function(t){return document.createElement(t)};function u(t,e){return Math.abs(Math.random()*(t+e-(t-e))+(t-e))}function s(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=o("style");n.id=e,n.appendChild(document.createTextNode(t)),document.head.appendChild(n)}function a(t){return t.map((function(t){return t.replace(/<\!--.*?-->/g,"")}))}var c=function(t){return["textarea","input"].indexOf(t.tagName.toLowerCase())>-1},f=function(t){return Array.isArray(t)?t:[t]},l=function(t){return[].slice.call(t)},h=function(t,e){var n=t.nextSibling;return!!n&&!n.isEqualNode(e)},p=function(t,e){var i=e;if(c(t))t.value="".concat(t.value).concat(i);else{var r=l(t.childNodes).filter((function(t){return t.classList&&t.classList.contains("ti-cursor")}));if(r=r.length?r[0]:null,"object"==n(e)&&!(e instanceof HTMLElement)){var u=e.ancestorTree.slice(0).reverse().join(" "),s=l(t.querySelectorAll("".concat(u))),a=(s=s.filter((function(t){return!r||!r.isEqualNode(t)}))).length>0?s[s.length-1]:null;if(a&&function(t,e){if(!t)return!1;for(var n=!1,i=[],r=t;!n;)i.push(h(r,e)),(r=r.parentNode)&&r.hasAttribute&&!r.hasAttribute("data-typeit-id")||(n=!0);return!i.some((function(t){return t}))}(a,r))t=a,i=e.content;else if(i=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",i=o(t);return e.forEach((function(t){i.setAttribute(t.name,t.value)})),i.innerHTML=n,i}(e.ancestorTree[0],e.attributes,e.content),e.ancestorTree.length>1){var f=l(t.querySelectorAll(e.ancestorTree[1]));t=f[f.length-1]}}i="object"==n(i)?i:document.createTextNode(i),t.insertBefore(i,r&&t.hasAttribute("data-typeit-id")?r:null)}},d=function(t){var e=[];return e.concat.apply(e,t)},v=function(t){var e=document.implementation.createHTMLDocument("");return e.body.innerHTML=t,e.body},y=function(t){return l(t.childNodes).map((function(t){return 3===t.nodeType?t.nodeValue.split(""):t}))},g=function(t,e,n){return{ancestorTree:e,attributes:(i=t,l(i.attributes).map((function(t){return{name:t.name,value:t.nodeValue}}))),content:n};var i},m=function(t,e){var n=g(t,e,""),i=y(t).map((function(n,i){return Array.isArray(n)?n.map((function(n,i){return g(t,e,n)})):n}));return i.unshift(n),d(i)},b=function(t){return t instanceof HTMLElement&&"BR"!==t.tagName},w=function t(e){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=e.map((function(t){if(b(t)){if(!n)return l(t.childNodes);for(var e=t.parentNode,i=[t.tagName];["BODY","HTML"].indexOf(e.tagName)<0;)i.push(e.tagName),e=e.parentNode;return m(t,i)}return t}));return(i=d(i)).some((function(t){return b(t)}))?t(i,n):i};function S(t){var e=v(t),n=y(e);return w(n)}function q(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return e?S(t):t.split("")}var A=function(t,e){e?t.value="":t.querySelector(".ti-cursor")&&(t.innerHTML="")},T=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=!Array.isArray(t),r=t.length;return(t=i?new Array(t).fill(0):t).map((function(t,o){if(i)return e;var u=[e,t];return n&&(0===o&&u.push({isFirst:!0}),o+1===r&&u.push({isLast:!0})),u}))},N=function(t){t.parentNode.removeChild(t)},x=function(t){return 3!==t.nodeType&&"BR"!==t.tagName&&!t.firstChild},L=function(t){return t.some((function(t){return x(t)}))},E=function(t){for(var e=l(t.querySelectorAll("*")),n=L(e);e.length&&n;){var i=!1;e.forEach((function(t){x(t)&&(N(t),i=!0)})),i&&(e=l(t.querySelectorAll("*"))),n=L(e)}return e},O=function(t){return Array.isArray(t)||(t=[t/2,t/2]),{before:t[0],after:t[1],total:t[0]+t[1]}};function D(t,e,n){var i=(e=null!==e?e:t/3)/2;return n?[u(t,t/2),u(e,i)]:[t,e]}function $(){var t=this,e=this,u=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},h=u.typeIt,d=u.element,y=u.id,g=u.options,m=u.queue,b=void 0===m?[]:m,x=u.isAReset,L=void 0!==x&&x,M=function(){var e=l(t.$e.childNodes).filter((function(t){return!t.isEqualNode(k)}));return w(e,!1)},P=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,i=e.opts.nextStringDelay;e.queue.insert(t,[e.pause,i.before]),e.queue.insert(t+n+1,[e.pause,i.after])},I=function(){!B&&t.opts.cursor&&(s("@keyframes blink-".concat(y," { 0% {opacity: 0} 49% {opacity: 0} 50% {opacity: 1} }[data-typeit-id='").concat(y,"'] .ti-cursor { animation: blink-").concat(y," ").concat(t.opts.cursorSpeed/1e3,"s infinite; }"),y),(k=o("span")).innerHTML=v(t.opts.cursorChar).innerHTML,k.className="ti-cursor",k.setAttribute("style","display:inline;position:relative;font:inherit;color:inherit;line-height:inherit;"),t.$e.appendChild(k))};this.wait=function(t,e){this.timeouts.push(setTimeout(t,e))};var j=function(){t.opts.strings.forEach((function(e,n){var i=q(e,t.opts.html);t.queue.add(T(i,t.type,!0));var r=t.queue.waiting.length;if(n+1!==t.opts.strings.length){if(t.opts.breakLines)return t.queue.add([t.type,o("BR")]),void P(r);t.queue.add(T(i,t.delete)),P(r,e.length)}}))},H=function(e){t.queue.reset().delete(0).add([t.pause,e.before],!0);for(var n=0;n 0&&void 0!==arguments[0]&&arguments[0];return new Promise((function(n,i){t.wait((function(){return n()}),e||t.opts.nextStringDelay.total)}))},this.reset=function(){return this.queue.reset(),new $({typeIt:h,element:this.$e,id:y,options:this.opts,queue:this.queue.waiting,isAReset:!0})},this.init=function(){var t=this;if(!this.status.started){if(I(),!this.opts.waitUntilVisible)return this.status.started=!0,this.fire();new IntersectionObserver((function(e,n){e.forEach((function(e){e.isIntersecting&&(t.fire(),n.unobserve(t.$e))}))}),{threshold:1}).observe(this.$e)}},this.fire=function(){for(var t=this,e=this,n=this.queue.waiting.slice(),i=Promise.resolve(),r=function(t){var r=n[t],o=[r,e.queue,h];i=i.then((function(){return new Promise((function(t,n){var i,u;if(e.status.frozen)return n();e.pace=D(e.opts.speed,e.opts.deleteSpeed,e.opts.lifeLike),r[2]&&r[2].isFirst&&(i=e.opts).beforeString.apply(i,o),(u=e.opts).beforeStep.apply(u,o),r[0].call(e,r[1],r[2]).then((function(){var n,i,u=e.queue.waiting.shift();return r[2]&&r[2].isPhantom?t():(r[2]&&r[2].isLast&&(n=e.opts).afterString.apply(n,o),(i=e.opts).afterStep.apply(i,o),e.queue.executed.push(u),t())}))}))}))},o=0;o 0&&void 0!==arguments[0]&&arguments[0];return new Promise((function(n){t.wait((function(){var i=M();return i.length&&N(i[i.length-1]),E(t.$e),e&&i.length-1>0?t.delete(!0).then((function(){return n()})):n()}),t.pace[1])}))},this.setOptions=function(t){var e=this;return new Promise((function(n){return e.opts=Object.assign({},e.opts,t),n()}))};var k=null,B=c(d);this.status={started:!1,complete:!1,frozen:!1,destroyed:!1},this.$e=d,this.timeouts=[],this.opts=Object.assign({},i,g),this.opts.html=!B&&this.opts.html,this.opts.nextStringDelay=O(this.opts.nextStringDelay),this.opts.loopDelay=O(this.opts.loopDelay),this.queue=new r(b,[this.pause,this.opts.startDelay]),this.$e.setAttribute("data-typeit-id",y),s("[data-typeit-id]:before {content: '.'; display: inline-block; width: 0; visibility: hidden;}"),A(d,B);var R=f(this.opts.strings);R=C(R),this.opts.strings=a(R),this.opts.strings.length&&!L&&j()}function M(t,e){var n,i=this,r=this;this.instances=(n=t,"string"==typeof n?n=document.querySelectorAll(n):n.forEach||(n=[n]),l(n)).map((function(t){return new $({typeIt:i,element:t,id:Math.random().toString(36).substring(2,15),options:e,queue:[],isAReset:!1})}));var u=function(t){i.instances.forEach((function(e){t.call(i,e)}))},s=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;u((function(i){var o="string"!=typeof t,u=o?t:i[t],s=T(n,[u,o?r:e]);i.queue.add(s)}))};this.is=function(t){return e=this.instances,n=t,!0,!!e.length&&!e.some((function(t){return!0!==t.status[n]}));var e,n},this.freeze=function(){u((function(t){t.status.frozen=!0}))},this.unfreeze=function(){u((function(t){t.status.frozen&&(t.status.frozen=!1,t.fire())}))},this.type=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return u((function(e){var n=q(t,e.opts.html);e.queue.add(T(n,e.type,!0))})),this},this.delete=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return s("delete",null===t,null===t?1:t),this},this.pause=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return s("pause",t),this},this.break=function(){return s("type",o("BR")),this},this.options=function(t){return s("setOptions",t),this},this.exec=function(t){return s(t),this},this.destroy=function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.instances=this.instances.map((function(e){if(e.timeouts.forEach((function(t){clearTimeout(t)})),e.timeouts=[],t){var n=e.isInput?null:e.$e.querySelector(".ti-cursor");n&&e.$e.removeChild(n)}return e.status.destroyed=!0,e}))},this.empty=function(){return s("empty"),this},this.reset=function(){return this.destroy(),this.instances=this.instances.map((function(t){return t.reset()})),this},this.go=function(){return u((function(t){t.init()})),this}}var P=t.useRef,I=t.useEffect,j=t.useState,H=function(n){var i=j(!0),r=i[0],o=i[1],u=P(null),s=n.options,a=n.element,c=n.children,f=n.getBeforeInit,l=n.getAfterInit,h=function(t,e){var n={};for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.indexOf(i)<0&&(n[i]=t[i]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(t);r | string +} export interface TypeItProps { element?: string, - options?: object, - children?: React.ReactNode -} + options?: TypeItOptions, + children?: React.ReactNode, + getBeforeInit?: any, + getAfterInit?: any +} const defaultProps: TypeItProps = { element: 'span', - options: {} + options: {}, + getBeforeInit: (instance: object) => instance, + getAfterInit: (instance: object) => instance } const TypeIt: React.FunctionComponent = (props: TypeItProps) => { - const ref = useRef (null); - const {options, element, children, ...remainingProps} = props; + const [shouldRenderChildren, setShouldRenderChildren] = useState (true); + const ref = useRef (null); + const {options, element, children, getBeforeInit, getAfterInit, ...remainingProps} = props; const DynamicElement = element; + /** + * After the component mounts (and any children are rendered), + * we can safely set the strings of the instance using the rendered HTML + * from those optionally-defined children. Otherwise, we'll just use the strings + * defined via the options prop. + */ + useEffect(() => { + if(children) { + options.strings = ref.current.innerHTML; + } + + setShouldRenderChildren(false); + }, []); + + /** + * Once options (and strings) have been defined, we can hide any children we might + * have rendered to make room for the TypeIt animation. On cleanup, destroy + * that instance. + */ useEffect(() => { - const instance = (new TypeItCore(ref.current, { + if(shouldRenderChildren) { + return; + } + + let i = (new TypeItCore(ref.current, { ...options - })).go(); + })); + + i = getBeforeInit(i); + i.go(); + i = getAfterInit(i); return () => { - instance.destroy(); + // @ts-ignore + i.destroy(); } - }, []); + }, [shouldRenderChildren]); return ( - - {children} - ++) } diff --git a/types/index.d.ts b/types/index.d.ts index f489157..7b0714c 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -1,5 +1,6 @@ declare namespace JSX { interface IntrinsicElements { - DynamicElement: any + DynamicElement: any, + ref: HTMLElement | null } }+ {shouldRenderChildren && children} + +