@zync/zync-screnplay-player 0.1.187
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/dist/ZyncScreenplayPlayer.js +35 -0
- package/dist/bundle.js +2 -0
- package/dist/bundle.js.LICENSE.txt +54 -0
- package/dist/index.js +4 -0
- package/dist/screenplay/RemotionRenderer/RemotionRenderer.js +281 -0
- package/dist/screenplay/RemotionRenderer/Root.js +22 -0
- package/dist/screenplay/RemotionRenderer/components/LottieAnimationGlobal.js +116 -0
- package/dist/screenplay/RemotionRenderer/components/backgrounds/VirtualBackground.js +26 -0
- package/dist/screenplay/RemotionRenderer/components/backgrounds/VirtualBackgroundUnderlay.js +41 -0
- package/dist/screenplay/RemotionRenderer/components/captions/CaptionSimple.js +12 -0
- package/dist/screenplay/RemotionRenderer/components/effects/BrollFullscreen.js +27 -0
- package/dist/screenplay/RemotionRenderer/components/effects/GlitchText.js +22 -0
- package/dist/screenplay/RemotionRenderer/components/effects/HandoffNametag.js +7 -0
- package/dist/screenplay/RemotionRenderer/components/effects/LottieAnimation.js +64 -0
- package/dist/screenplay/RemotionRenderer/components/effects/Nametag.js +9 -0
- package/dist/screenplay/RemotionRenderer/components/effects/PhraseRainbowEffect.js +34 -0
- package/dist/screenplay/RemotionRenderer/components/effects/Sentence.js +50 -0
- package/dist/screenplay/RemotionRenderer/components/effects/Title.js +12 -0
- package/dist/screenplay/RemotionRenderer/components/layouts/BrollGreenScreen.js +742 -0
- package/dist/screenplay/RemotionRenderer/components/layouts/BrollSplitScreen.js +714 -0
- package/dist/screenplay/RemotionRenderer/components/layouts/BrollStudioBackdrop.js +620 -0
- package/dist/screenplay/RemotionRenderer/components/layouts/DynamicTriangle.js +618 -0
- package/dist/screenplay/RemotionRenderer/components/layouts/Handoff.js +161 -0
- package/dist/screenplay/RemotionRenderer/components/layouts/IntroVideo.js +1330 -0
- package/dist/screenplay/RemotionRenderer/components/layouts/KeyPointOverlayDepth.js +397 -0
- package/dist/screenplay/RemotionRenderer/components/layouts/Keyword.js +539 -0
- package/dist/screenplay/RemotionRenderer/components/layouts/KeywordStudioBackdrop.js +714 -0
- package/dist/screenplay/RemotionRenderer/components/layouts/MotionStill.js +381 -0
- package/dist/screenplay/RemotionRenderer/components/layouts/MotionStillFullScreen.js +178 -0
- package/dist/screenplay/RemotionRenderer/components/layouts/MotionStillGreenScreen.js +568 -0
- package/dist/screenplay/RemotionRenderer/components/layouts/MotionStillGreenScreenV2.js +731 -0
- package/dist/screenplay/RemotionRenderer/components/layouts/MotionStillStudioBackdrop.js +588 -0
- package/dist/screenplay/RemotionRenderer/components/layouts/SimpleFrame.js +183 -0
- package/dist/screenplay/RemotionRenderer/components/layouts/SimpleFrameBroll.js +181 -0
- package/dist/screenplay/RemotionRenderer/components/layouts/SimpleFrameSentence.js +17 -0
- package/dist/screenplay/RemotionRenderer/components/layouts/SimpleFrameZoomCut.js +13 -0
- package/dist/screenplay/RemotionRenderer/components/layouts/TextWithVideo.js +373 -0
- package/dist/screenplay/RemotionRenderer/components/layouts/quote-bubble-animation.json +1 -0
- package/dist/screenplay/RemotionRenderer/components/utils/BlurOverlay.js +19 -0
- package/dist/screenplay/RemotionRenderer/components/utils/ChromaKeyedVideo.js +59 -0
- package/dist/screenplay/RemotionRenderer/components/utils/FaceCenteredVideo.js +562 -0
- package/dist/screenplay/RemotionRenderer/components/utils/PausableImg.js +124 -0
- package/dist/screenplay/RemotionRenderer/components/utils/README.md +80 -0
- package/dist/screenplay/RemotionRenderer/components/utils/SafeZones.js +69 -0
- package/dist/screenplay/RemotionRenderer/components/utils/StretchText.js +124 -0
- package/dist/screenplay/RemotionRenderer/components/utils/StretchTextDemo.js +66 -0
- package/dist/screenplay/RemotionRenderer/config.js +8 -0
- package/dist/screenplay/RemotionRenderer/development.js +1370 -0
- package/dist/screenplay/RemotionRenderer/helpers/cleanFacemetadata.js +29 -0
- package/dist/screenplay/RemotionRenderer/helpers/convertToSeconds.js +14 -0
- package/dist/screenplay/RemotionRenderer/helpers/faceBasedVideoStyles.js +212 -0
- package/dist/screenplay/RemotionRenderer/helpers/faceCenteredVideoTransforms.js +468 -0
- package/dist/screenplay/RemotionRenderer/helpers/getContrastColor.js +15 -0
- package/dist/screenplay/RemotionRenderer/helpers/getVideoOrientation.js +21 -0
- package/dist/screenplay/RemotionRenderer/helpers/hexToRgb.js +48 -0
- package/dist/screenplay/RemotionRenderer/hooks/useLottieReplaceColor.js +45 -0
- package/dist/screenplay/RemotionRenderer/hooks/useOrientationBased.js +29 -0
- package/dist/screenplay/RemotionRenderer/hooks/useTimeInterpolate.js +54 -0
- package/dist/screenplay/RemotionRenderer/hooks/useVirtualBackground.js +38 -0
- package/dist/screenplay/RemotionRenderer/index.js +3 -0
- package/dist/screenplay/RemotionRenderer/main/lib/Sequence.js +76 -0
- package/dist/screenplay/RemotionRenderer/main/lib/layouts/DefaultLayout.js +72 -0
- package/dist/screenplay/RemotionRenderer/main/lib/layouts/DynamicTriangleLayout.js +54 -0
- package/dist/screenplay/RemotionRenderer/main/lib/layouts/HandoffLayout.js +50 -0
- package/dist/screenplay/RemotionRenderer/main/lib/layouts/IntroVideoLayout.js +33 -0
- package/dist/screenplay/RemotionRenderer/main/lib/layouts/KeywordLayout.js +36 -0
- package/dist/screenplay/RemotionRenderer/main/lib/layouts/LayoutFactory.js +68 -0
- package/dist/screenplay/RemotionRenderer/main/lib/layouts/MotionStillLayout.js +36 -0
- package/dist/screenplay/RemotionRenderer/main/lib/layouts/SimpleFrameLayout.js +43 -0
- package/dist/screenplay/RemotionRenderer/main/lib/layouts/TextWithVideoLayout.js +52 -0
- package/dist/screenplay/RemotionRenderer/main/screenplaySchema.js +92 -0
- package/dist/screenplay/RemotionRenderer/registeredComponents.js +91 -0
- package/dist/screenplay/RemotionRenderer/theme/config.js +8 -0
- package/dist/screenplay/RemotionRenderer/theme/hooks/useTheme.js +24 -0
- package/dist/screenplay/RemotionRenderer/theme/hooks/useThemedComponents.js +101 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/bigbold/BigBoldNameTag.js +147 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/bigbold/BigBoldSentence.js +138 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/bigbold/BigBoldTitle.js +136 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/default/CaptionColor.js +67 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/default/CaptionColorInverse.js +67 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/default/CaptionColorShadow.js +66 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/default/CaptionElegant.js +134 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/default/CaptionEmphasis.js +122 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/default/CaptionPunctuated.js +84 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/default/CaptionWordBoom.js +88 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/default/CaptionWordBubble.js +91 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/default/CaptionWordPopup.js +118 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/default/DefaultCaption.js +62 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/default/HandoffNametag/handoffNametagConfig.js +59 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/default/HandoffNametag.js +173 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/default/Nametag.js +129 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/default/Sentence/AnimatedSentence.js +20 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/default/Sentence/AnimatedSentenceDefault.js +29 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/default/Sentence/SentenceSimple.helpers.js +61 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/default/Sentence.js +86 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/default/Title.js +112 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/default/constants.js +1 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/glassmorphism/Nametag.js +134 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/glassmorphism/Sentence.js +49 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/glassmorphism/Title.js +108 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/glassmorphism/animations.js +30 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/glassmorphism/config.js +9 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/glitch/GlitchNametag.js +252 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/glitch/GlitchSentence.js +156 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/glitch/GlitchTitle.js +142 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/glitch/components/DisplacedText.js +66 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/glitch/components/GlitchAnimatedLine.js +38 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/glitch/components/SplitSentence.js +80 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/glitch/helpers.js +32 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/none/Nametag.js +3 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/none/Title.js +3 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/pushpull/PushPullNametag.js +165 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/pushpull/PushPullSentence.js +94 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/pushpull/PushPullTitle.js +98 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/pushpull/designs/sentence.js +92 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/pushpull/designs/title.js +119 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/sports/Nametag.js +122 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/sports/SportsCaption.js +93 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/sports/SportsSentence.js +76 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/sports/Title.js +90 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/sports/shared.js +62 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/sportsbounce/Nametag.js +145 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/sportsbounce/SportsBounceSentence.js +148 -0
- package/dist/screenplay/RemotionRenderer/theme/themes/sportsbounce/Title.js +160 -0
- package/dist/screenplay/RemotionRenderer/tracks/AudioTrack.js +23 -0
- package/dist/screenplay/RemotionRenderer/tracks/CaptionsVideoTrack.js +23 -0
- package/dist/screenplay/RemotionRenderer/tracks/DynamicVideoComposition.js +31 -0
- package/dist/screenplay/RemotionRenderer/tracks/EffectsVideoTrack.js +23 -0
- package/dist/screenplay/RemotionRenderer/tracks/LayoutVideoTrack.js +141 -0
- package/dist/screenplay/RemotionRenderer/tracks/Soundtrack.js +16 -0
- package/dist/screenplay/RemotionRenderer/tracks/Watermark.js +23 -0
- package/dist/screenplay/RemotionRenderer/tracks/transitions/GlitchOne.js +92 -0
- package/package.json +45 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
var _excluded = ["src"];
|
|
3
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
4
|
+
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
5
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
6
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
7
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
8
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
9
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
10
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
11
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
12
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
13
|
+
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
|
|
14
|
+
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
|
|
15
|
+
import React, { useEffect, useState } from "react";
|
|
16
|
+
import { Img, delayRender, continueRender } from "remotion";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* PausableImg component that extends Remotion's Img with fetch validation.
|
|
20
|
+
* It delays rendering until the image source can be successfully fetched.
|
|
21
|
+
* If there's an error fetching the image, it renders nothing.
|
|
22
|
+
*/
|
|
23
|
+
export var PausableImg = /*#__PURE__*/React.memo(function (_ref) {
|
|
24
|
+
var src = _ref.src,
|
|
25
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
26
|
+
var _useState = useState(false),
|
|
27
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
28
|
+
isValid = _useState2[0],
|
|
29
|
+
setIsValid = _useState2[1];
|
|
30
|
+
var _useState3 = useState(null),
|
|
31
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
32
|
+
handle = _useState4[0],
|
|
33
|
+
setHandle = _useState4[1];
|
|
34
|
+
useEffect(function () {
|
|
35
|
+
if (!src) {
|
|
36
|
+
setIsValid(false);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Create a delay render handle
|
|
41
|
+
var delayHandle = delayRender();
|
|
42
|
+
setHandle(delayHandle);
|
|
43
|
+
|
|
44
|
+
// Attempt to fetch the image
|
|
45
|
+
var validateImage = /*#__PURE__*/function () {
|
|
46
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
47
|
+
var response, img, _img;
|
|
48
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
49
|
+
while (1) switch (_context.prev = _context.next) {
|
|
50
|
+
case 0:
|
|
51
|
+
_context.prev = 0;
|
|
52
|
+
_context.next = 3;
|
|
53
|
+
return fetch(src, {
|
|
54
|
+
method: "HEAD"
|
|
55
|
+
});
|
|
56
|
+
case 3:
|
|
57
|
+
response = _context.sent;
|
|
58
|
+
if (response.ok) {
|
|
59
|
+
// Also verify it's actually an image by creating an Image object
|
|
60
|
+
img = new Image();
|
|
61
|
+
img.onload = function () {
|
|
62
|
+
setIsValid(true);
|
|
63
|
+
continueRender(delayHandle);
|
|
64
|
+
};
|
|
65
|
+
img.onerror = function () {
|
|
66
|
+
setIsValid(false);
|
|
67
|
+
continueRender(delayHandle);
|
|
68
|
+
};
|
|
69
|
+
img.src = src;
|
|
70
|
+
} else {
|
|
71
|
+
setIsValid(false);
|
|
72
|
+
continueRender(delayHandle);
|
|
73
|
+
}
|
|
74
|
+
_context.next = 13;
|
|
75
|
+
break;
|
|
76
|
+
case 7:
|
|
77
|
+
_context.prev = 7;
|
|
78
|
+
_context.t0 = _context["catch"](0);
|
|
79
|
+
// If fetch fails (network error, CORS, etc.), try loading directly
|
|
80
|
+
_img = new Image();
|
|
81
|
+
_img.onload = function () {
|
|
82
|
+
setIsValid(true);
|
|
83
|
+
continueRender(delayHandle);
|
|
84
|
+
};
|
|
85
|
+
_img.onerror = function () {
|
|
86
|
+
setIsValid(false);
|
|
87
|
+
continueRender(delayHandle);
|
|
88
|
+
};
|
|
89
|
+
_img.src = src;
|
|
90
|
+
case 13:
|
|
91
|
+
case "end":
|
|
92
|
+
return _context.stop();
|
|
93
|
+
}
|
|
94
|
+
}, _callee, null, [[0, 7]]);
|
|
95
|
+
}));
|
|
96
|
+
return function validateImage() {
|
|
97
|
+
return _ref2.apply(this, arguments);
|
|
98
|
+
};
|
|
99
|
+
}();
|
|
100
|
+
validateImage();
|
|
101
|
+
|
|
102
|
+
// Cleanup function
|
|
103
|
+
return function () {
|
|
104
|
+
if (handle !== null && handle !== delayHandle) {
|
|
105
|
+
try {
|
|
106
|
+
continueRender(handle);
|
|
107
|
+
} catch (e) {
|
|
108
|
+
// Handle might already be continued
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
}, [src]);
|
|
113
|
+
|
|
114
|
+
// If image is not valid, render nothing
|
|
115
|
+
if (!isValid) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// If image is valid, render the Remotion Img component with all props
|
|
120
|
+
return /*#__PURE__*/React.createElement(Img, _extends({
|
|
121
|
+
src: src
|
|
122
|
+
}, props));
|
|
123
|
+
});
|
|
124
|
+
export default PausableImg;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# StretchText Component
|
|
2
|
+
|
|
3
|
+
A React component that renders text that stretches to fit the parent's width. Words with fewer characters will have a larger font size than words with more characters. The component uses SVG for rendering text, which ensures proper text-stroke rendering in headless mode.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```jsx
|
|
8
|
+
import StretchText from './StretchText';
|
|
9
|
+
|
|
10
|
+
// Basic usage
|
|
11
|
+
<StretchText text="Hello World" />
|
|
12
|
+
|
|
13
|
+
// With custom styling
|
|
14
|
+
<StretchText
|
|
15
|
+
text="Contribution"
|
|
16
|
+
color="#1a73e8"
|
|
17
|
+
fontFamily="Arial"
|
|
18
|
+
maxFontSize={200}
|
|
19
|
+
minFontSize={10}
|
|
20
|
+
style={{ fontWeight: 'bold' }}
|
|
21
|
+
/>
|
|
22
|
+
|
|
23
|
+
// With text stroke
|
|
24
|
+
<StretchText
|
|
25
|
+
text="Outlined Text"
|
|
26
|
+
color="transparent"
|
|
27
|
+
textStrokeColor="white"
|
|
28
|
+
textStrokeWidth="2px"
|
|
29
|
+
style={{ fontWeight: 'bold' }}
|
|
30
|
+
/>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Props
|
|
34
|
+
|
|
35
|
+
| Prop | Type | Default | Description |
|
|
36
|
+
|------|------|---------|-------------|
|
|
37
|
+
| `text` | string | required | The text to display |
|
|
38
|
+
| `color` | string | '#000000' | Text color |
|
|
39
|
+
| `fontFamily` | string | 'Arial' | Font family |
|
|
40
|
+
| `maxFontSize` | number | 100 | Maximum font size in pixels |
|
|
41
|
+
| `minFontSize` | number | 10 | Minimum font size in pixels |
|
|
42
|
+
| `textStrokeColor` | string | undefined | Color of the text stroke |
|
|
43
|
+
| `textStrokeWidth` | string | undefined | Width of the text stroke (e.g., '2px') |
|
|
44
|
+
| `textFillColor` | string | undefined | Color of the text fill (overrides `color` if provided) |
|
|
45
|
+
| `style` | object | {} | Additional style properties |
|
|
46
|
+
|
|
47
|
+
## Examples
|
|
48
|
+
|
|
49
|
+
The component automatically calculates the appropriate font size to make the text stretch to fit the parent width. For example:
|
|
50
|
+
|
|
51
|
+
- "Work" (4 characters) will have a larger font size than "Contribution" (12 characters) when both are rendered in containers of the same width.
|
|
52
|
+
- The text will always be contained within the parent container and will not overflow.
|
|
53
|
+
- The component recalculates the font size when the window is resized.
|
|
54
|
+
|
|
55
|
+
## Demo
|
|
56
|
+
|
|
57
|
+
You can see a demo of the StretchText component by running the development environment and looking at the first segment in the video timeline.
|
|
58
|
+
|
|
59
|
+
The demo shows several words of different lengths rendered in containers of the same width:
|
|
60
|
+
|
|
61
|
+
- "Contribution" (longer word, smaller font)
|
|
62
|
+
- "Work" (shorter word, larger font)
|
|
63
|
+
- "Hello" (medium length word, medium font)
|
|
64
|
+
- "Supercalifragilisticexpialidocious" (very long word, very small font)
|
|
65
|
+
|
|
66
|
+
Each word stretches to fill the entire width of its container, demonstrating how the component automatically adjusts the font size based on the text length.
|
|
67
|
+
|
|
68
|
+
## Implementation Details
|
|
69
|
+
|
|
70
|
+
The component uses a binary search algorithm to find the optimal font size that makes the text fit the parent width. It uses a simple approximation for text width calculation (character count * fontSize * 0.75) which works well for most fonts.
|
|
71
|
+
|
|
72
|
+
The component uses SVG for rendering text, which provides several advantages:
|
|
73
|
+
- Proper text-stroke rendering in headless mode
|
|
74
|
+
- Better control over text positioning and alignment
|
|
75
|
+
- Consistent rendering across different browsers and environments
|
|
76
|
+
- Support for advanced SVG features like filters for text shadows
|
|
77
|
+
|
|
78
|
+
For text with stroke effects, the component uses SVG's native stroke and fill attributes, which are more reliable than CSS text-stroke properties, especially in headless rendering environments.
|
|
79
|
+
|
|
80
|
+
The component also includes a resize listener to recalculate the font size when the window size changes.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { useOrientationBased } from "../../hooks/useOrientationBased.js";
|
|
3
|
+
import { AbsoluteFill, useVideoConfig } from "remotion";
|
|
4
|
+
export var SafeZones = function SafeZones(_ref) {
|
|
5
|
+
var children = _ref.children;
|
|
6
|
+
var _useVideoConfig = useVideoConfig(),
|
|
7
|
+
width = _useVideoConfig.width,
|
|
8
|
+
height = _useVideoConfig.height;
|
|
9
|
+
var _useOrientationBased = useOrientationBased({
|
|
10
|
+
portrait: {
|
|
11
|
+
insetLeft: 60,
|
|
12
|
+
insetTop: 108,
|
|
13
|
+
insetRight: 120,
|
|
14
|
+
insetBottom: 320
|
|
15
|
+
},
|
|
16
|
+
landscape: {
|
|
17
|
+
insetLeft: 100,
|
|
18
|
+
insetTop: 100,
|
|
19
|
+
insetRight: 100,
|
|
20
|
+
insetBottom: 100
|
|
21
|
+
},
|
|
22
|
+
square: {
|
|
23
|
+
insetLeft: 100,
|
|
24
|
+
insetTop: 100,
|
|
25
|
+
insetRight: 100,
|
|
26
|
+
insetBottom: 100
|
|
27
|
+
}
|
|
28
|
+
}),
|
|
29
|
+
insetTop = _useOrientationBased.insetTop,
|
|
30
|
+
insetLeft = _useOrientationBased.insetLeft,
|
|
31
|
+
insetRight = _useOrientationBased.insetRight,
|
|
32
|
+
insetBottom = _useOrientationBased.insetBottom;
|
|
33
|
+
return /*#__PURE__*/React.createElement(AbsoluteFill, {
|
|
34
|
+
style: {
|
|
35
|
+
zIndex: 9999
|
|
36
|
+
}
|
|
37
|
+
}, /*#__PURE__*/React.createElement(AbsoluteFill, {
|
|
38
|
+
style: {
|
|
39
|
+
left: 0,
|
|
40
|
+
width: insetLeft,
|
|
41
|
+
height: "100%",
|
|
42
|
+
backgroundColor: "red"
|
|
43
|
+
}
|
|
44
|
+
}), /*#__PURE__*/React.createElement(AbsoluteFill, {
|
|
45
|
+
style: {
|
|
46
|
+
left: 0,
|
|
47
|
+
top: 0,
|
|
48
|
+
height: insetTop,
|
|
49
|
+
width: "100%",
|
|
50
|
+
backgroundColor: "red"
|
|
51
|
+
}
|
|
52
|
+
}), /*#__PURE__*/React.createElement(AbsoluteFill, {
|
|
53
|
+
style: {
|
|
54
|
+
left: width - insetRight,
|
|
55
|
+
top: 0,
|
|
56
|
+
height: "100%",
|
|
57
|
+
width: insetRight,
|
|
58
|
+
backgroundColor: "red"
|
|
59
|
+
}
|
|
60
|
+
}), /*#__PURE__*/React.createElement(AbsoluteFill, {
|
|
61
|
+
style: {
|
|
62
|
+
left: 0,
|
|
63
|
+
top: height - insetBottom,
|
|
64
|
+
height: insetBottom,
|
|
65
|
+
width: "100%",
|
|
66
|
+
backgroundColor: "red"
|
|
67
|
+
}
|
|
68
|
+
}), children);
|
|
69
|
+
};
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
var _excluded = ["text", "color", "fontFamily", "maxFontSize", "minFontSize", "style", "textStrokeColor", "textFillColor", "textStrokeWidth"];
|
|
3
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
4
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
5
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
6
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
7
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
8
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
9
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
10
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
11
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
12
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
13
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
14
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
15
|
+
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
|
|
16
|
+
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
|
|
17
|
+
import React, { useLayoutEffect, useRef, useState } from "react";
|
|
18
|
+
import { continueRender, delayRender } from "remotion";
|
|
19
|
+
var StretchText = function StretchText(_ref) {
|
|
20
|
+
var text = _ref.text,
|
|
21
|
+
_ref$color = _ref.color,
|
|
22
|
+
color = _ref$color === void 0 ? "#000" : _ref$color,
|
|
23
|
+
_ref$fontFamily = _ref.fontFamily,
|
|
24
|
+
fontFamily = _ref$fontFamily === void 0 ? "Arial" : _ref$fontFamily,
|
|
25
|
+
_ref$maxFontSize = _ref.maxFontSize,
|
|
26
|
+
maxFontSize = _ref$maxFontSize === void 0 ? 300 : _ref$maxFontSize,
|
|
27
|
+
_ref$minFontSize = _ref.minFontSize,
|
|
28
|
+
minFontSize = _ref$minFontSize === void 0 ? 10 : _ref$minFontSize,
|
|
29
|
+
_ref$style = _ref.style,
|
|
30
|
+
style = _ref$style === void 0 ? {} : _ref$style,
|
|
31
|
+
textStrokeColor = _ref.textStrokeColor,
|
|
32
|
+
textFillColor = _ref.textFillColor,
|
|
33
|
+
textStrokeWidth = _ref.textStrokeWidth,
|
|
34
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
35
|
+
var wrapRef = useRef(null);
|
|
36
|
+
var textRef = useRef(null);
|
|
37
|
+
var _useState = useState({
|
|
38
|
+
fontSize: minFontSize,
|
|
39
|
+
h: 0,
|
|
40
|
+
w: 0
|
|
41
|
+
}),
|
|
42
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
43
|
+
state = _useState2[0],
|
|
44
|
+
setState = _useState2[1];
|
|
45
|
+
var fit = function fit() {
|
|
46
|
+
if (!wrapRef.current || !textRef.current) return;
|
|
47
|
+
var parentW = wrapRef.current.offsetWidth;
|
|
48
|
+
|
|
49
|
+
// binary-search on width
|
|
50
|
+
var lo = minFontSize,
|
|
51
|
+
hi = maxFontSize,
|
|
52
|
+
best = minFontSize;
|
|
53
|
+
while (lo <= hi) {
|
|
54
|
+
var mid = lo + hi >> 1;
|
|
55
|
+
textRef.current.setAttribute("font-size", mid);
|
|
56
|
+
if (textRef.current.getBBox().width <= parentW) {
|
|
57
|
+
best = mid;
|
|
58
|
+
lo = mid + 1;
|
|
59
|
+
} else hi = mid - 1;
|
|
60
|
+
}
|
|
61
|
+
textRef.current.setAttribute("font-size", best);
|
|
62
|
+
var _textRef$current$getB = textRef.current.getBBox(),
|
|
63
|
+
width = _textRef$current$getB.width,
|
|
64
|
+
height = _textRef$current$getB.height;
|
|
65
|
+
setState({
|
|
66
|
+
fontSize: best,
|
|
67
|
+
h: height,
|
|
68
|
+
w: width
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
// on mount + when text changes
|
|
73
|
+
useLayoutEffect(fit, [text]);
|
|
74
|
+
|
|
75
|
+
// whenever parent width changes
|
|
76
|
+
useLayoutEffect(function () {
|
|
77
|
+
var ro = new ResizeObserver(fit);
|
|
78
|
+
ro.observe(wrapRef.current);
|
|
79
|
+
return function () {
|
|
80
|
+
return ro.disconnect();
|
|
81
|
+
};
|
|
82
|
+
}, []);
|
|
83
|
+
var _useState3 = useState(function () {
|
|
84
|
+
return delayRender("stretch");
|
|
85
|
+
}),
|
|
86
|
+
_useState4 = _slicedToArray(_useState3, 1),
|
|
87
|
+
handle = _useState4[0];
|
|
88
|
+
var height = state.h;
|
|
89
|
+
var width = state.w;
|
|
90
|
+
useLayoutEffect(function () {
|
|
91
|
+
if (width >= 0 && height >= 0) {
|
|
92
|
+
continueRender(handle);
|
|
93
|
+
}
|
|
94
|
+
}, [width, height, handle]);
|
|
95
|
+
var fontSize = state.fontSize,
|
|
96
|
+
h = state.h,
|
|
97
|
+
w = state.w;
|
|
98
|
+
var fill = textFillColor || color;
|
|
99
|
+
var stroke = textStrokeColor || "none";
|
|
100
|
+
var sw = textStrokeWidth ? parseInt(textStrokeWidth) : 0;
|
|
101
|
+
return /*#__PURE__*/React.createElement("div", _extends({
|
|
102
|
+
ref: wrapRef,
|
|
103
|
+
style: _objectSpread({
|
|
104
|
+
width: "100%",
|
|
105
|
+
height: h / 1.6
|
|
106
|
+
}, style)
|
|
107
|
+
}, props), /*#__PURE__*/React.createElement("svg", {
|
|
108
|
+
width: "100%",
|
|
109
|
+
height: h,
|
|
110
|
+
viewBox: "0 0 ".concat(w, " ").concat(h),
|
|
111
|
+
preserveAspectRatio: "none"
|
|
112
|
+
}, /*#__PURE__*/React.createElement("text", {
|
|
113
|
+
ref: textRef,
|
|
114
|
+
y: "30%",
|
|
115
|
+
dominantBaseline: "central",
|
|
116
|
+
fontFamily: fontFamily,
|
|
117
|
+
fontSize: fontSize,
|
|
118
|
+
fill: fill,
|
|
119
|
+
stroke: stroke,
|
|
120
|
+
strokeWidth: sw,
|
|
121
|
+
paintOrder: "stroke fill"
|
|
122
|
+
}, text)));
|
|
123
|
+
};
|
|
124
|
+
export default StretchText;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { AbsoluteFill } from "remotion";
|
|
3
|
+
import StretchText from "./StretchText";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Demo component to showcase the StretchText component
|
|
7
|
+
* Shows how different words stretch to the same width with different font sizes
|
|
8
|
+
*/
|
|
9
|
+
var StretchTextDemo = function StretchTextDemo() {
|
|
10
|
+
var containerStyle = {
|
|
11
|
+
display: "flex",
|
|
12
|
+
flexDirection: "column",
|
|
13
|
+
justifyContent: "center",
|
|
14
|
+
alignItems: "center",
|
|
15
|
+
gap: "0px",
|
|
16
|
+
padding: "20px",
|
|
17
|
+
backgroundColor: "#f5f5f5"
|
|
18
|
+
};
|
|
19
|
+
var textContainerStyle = {
|
|
20
|
+
width: "80%",
|
|
21
|
+
border: "1px solid #ccc",
|
|
22
|
+
backgroundColor: "white",
|
|
23
|
+
display: "flex",
|
|
24
|
+
alignItems: "center",
|
|
25
|
+
justifyContent: "center",
|
|
26
|
+
lineHeight: "0.8"
|
|
27
|
+
};
|
|
28
|
+
return /*#__PURE__*/React.createElement(AbsoluteFill, {
|
|
29
|
+
style: containerStyle
|
|
30
|
+
}, /*#__PURE__*/React.createElement("h1", null, "StretchText Component Demo"), /*#__PURE__*/React.createElement("p", null, "Notice how each word stretches to fit the container width with different font sizes"), /*#__PURE__*/React.createElement("div", {
|
|
31
|
+
style: textContainerStyle
|
|
32
|
+
}, /*#__PURE__*/React.createElement(StretchText, {
|
|
33
|
+
text: "Contribution",
|
|
34
|
+
color: "#1a73e8",
|
|
35
|
+
fontFamily: "Arial",
|
|
36
|
+
maxFontSize: 200
|
|
37
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
38
|
+
style: textContainerStyle
|
|
39
|
+
}, /*#__PURE__*/React.createElement(StretchText, {
|
|
40
|
+
text: "Work",
|
|
41
|
+
color: "#ea4335",
|
|
42
|
+
fontFamily: "Arial",
|
|
43
|
+
maxFontSize: 200,
|
|
44
|
+
style: {
|
|
45
|
+
fontWeight: 800,
|
|
46
|
+
textTransform: "uppercase",
|
|
47
|
+
transform: "scale(".concat(1, ")"),
|
|
48
|
+
transition: "transform 0.1s ease-out"
|
|
49
|
+
}
|
|
50
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
51
|
+
style: textContainerStyle
|
|
52
|
+
}, /*#__PURE__*/React.createElement(StretchText, {
|
|
53
|
+
text: "Hello",
|
|
54
|
+
color: "#34a853",
|
|
55
|
+
fontFamily: "Arial",
|
|
56
|
+
maxFontSize: 200
|
|
57
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
58
|
+
style: textContainerStyle
|
|
59
|
+
}, /*#__PURE__*/React.createElement(StretchText, {
|
|
60
|
+
text: "Supercalifragilisticexpialidocious",
|
|
61
|
+
color: "#fbbc05",
|
|
62
|
+
fontFamily: "Arial",
|
|
63
|
+
maxFontSize: 200
|
|
64
|
+
})));
|
|
65
|
+
};
|
|
66
|
+
export default StretchTextDemo;
|