From 2d53745881058c310cc678adc4b21e248dfb7fb1 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 2 Sep 2026 17:59:23 +0200 Subject: [PATCH] feat: add Instagram voice message delete example Instagram DM thread clone with the voice-message composer: the blue pill swells out of the camera button and streams a waveform, and discarding it collapses the bar into a red trash button that bursts into a smoke-poof shader before the camera returns. Claude-Session: https://claude.ai/code/session_011GBMbyATaiUE4dMfkXfa4H --- .gitignore | 3 + example/assets/components/voice-delete.png | Bin 0 -> 82938 bytes example/assets/instagram/back.png | Bin 0 -> 601 bytes example/assets/instagram/bookmark.png | Bin 0 -> 846 bytes example/assets/instagram/camera.png | Bin 0 -> 1097 bytes example/assets/instagram/image.png | Bin 0 -> 1508 bytes example/assets/instagram/info.png | Bin 0 -> 1305 bytes example/assets/instagram/mic.png | Bin 0 -> 1577 bytes example/assets/instagram/phone.png | Bin 0 -> 1338 bytes example/assets/instagram/play.png | Bin 0 -> 1228 bytes example/assets/instagram/plus.png | Bin 0 -> 1676 bytes example/assets/instagram/send.png | Bin 0 -> 948 bytes example/assets/instagram/share.png | Bin 0 -> 1174 bytes example/assets/instagram/sticker.png | Bin 0 -> 1727 bytes example/assets/instagram/trash.png | Bin 0 -> 1645 bytes example/assets/instagram/video.png | Bin 0 -> 901 bytes example/src/App.tsx | 5 + .../src/components/instagram/SmokePoof.tsx | 136 ++++++ .../components/instagram/VoiceComposer.tsx | 409 ++++++++++++++++ example/src/components/instagram/icons.ts | 25 + example/src/screens/HomeScreen.tsx | 8 + example/src/screens/VoiceDeleteScreen.tsx | 455 ++++++++++++++++++ example/src/types.ts | 1 + 23 files changed, 1042 insertions(+) create mode 100644 example/assets/components/voice-delete.png create mode 100644 example/assets/instagram/back.png create mode 100644 example/assets/instagram/bookmark.png create mode 100644 example/assets/instagram/camera.png create mode 100644 example/assets/instagram/image.png create mode 100644 example/assets/instagram/info.png create mode 100644 example/assets/instagram/mic.png create mode 100644 example/assets/instagram/phone.png create mode 100644 example/assets/instagram/play.png create mode 100644 example/assets/instagram/plus.png create mode 100644 example/assets/instagram/send.png create mode 100644 example/assets/instagram/share.png create mode 100644 example/assets/instagram/sticker.png create mode 100644 example/assets/instagram/trash.png create mode 100644 example/assets/instagram/video.png create mode 100644 example/src/components/instagram/SmokePoof.tsx create mode 100644 example/src/components/instagram/VoiceComposer.tsx create mode 100644 example/src/components/instagram/icons.ts create mode 100644 example/src/screens/VoiceDeleteScreen.tsx diff --git a/.gitignore b/.gitignore index 9ea2689..a3c6b1e 100644 --- a/.gitignore +++ b/.gitignore @@ -84,3 +84,6 @@ android/generated # React Native Nitro Modules nitrogen/ + +# argent screen recordings +.argent/ diff --git a/example/assets/components/voice-delete.png b/example/assets/components/voice-delete.png new file mode 100644 index 0000000000000000000000000000000000000000..01bb617eb29f98bd874f1997c4bdf0763245197f GIT binary patch literal 82938 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 hxFj*R08Nhx(0EITB}I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9fnimzvJsHSUgGKN%KnOziC=>&>zIW( zP~OPX#W5t~-rE`Hy{9-z9N&L=T~fk^n^lu?nE5Am{NtW<{pbd(>Mo5J7y6S+BhECx zOFbRoeDQ@u$-CnV1#FfGvWl{tUp6@ShEz<*a`k-RE?$92=eg5ko75LmZ2R+c|0#&`EM=E@u-vQq($)*wkLRp7lU2OC7#SFu=^9w- z8W@Ebnpzo|SQ%Mp8yHv_7_>ib<3Q1no1c=IR*74~w|#b7fEqO5Hk4%MrWThZ<`$so bF)^?*G=Nz0cdE@bpdJQKS3j3^P6;15==?n?k)@rt9q4c@8#i!rc9^t??dCbdrSGij)%P^#kV$(~Q|rfLQ>yzH>l8WcSy;sTJ@K>C zjE6@Tt~T53(^f37e}&WTV9nW=&M*1d8Q5kKHNohB@+=qiR~v7wQ8C(}d~1Hlvegd{ zzU7tGTfI5)fvtv=9D~jFqq~DcY#1uiny-hI*f8wSNfOXAp0V(#;u)cx(>58#O-`73 z@L|V?4y&KOO5F8vD4JON^NJJlovQZCn29 z&2J|Achj=jZp=0nm@cca;jZy--=LX{&+>LgFWu)G*<9Pr_n|%gs#mRck5L5EvvYEs zE8kzZ&#>l`&d;UKU9TOO^n#)IvzFtd^3|2!E^Pkp%6{YF=J%Yo)wN~21NG*aluas+ z*}iA8LLGP6q-zD*9{<|8!;Y7B|E`*&w%9Tw;^2YIG=&Er_8m}GwmI7p>!@V&^?%aW zD;~A?&R^fsz4r9ycbh6to32u5n0;y^pVP7r+8!>l7VBHKyMOW*Keg_I_yyggyZvm< zG`(1KwLYw!@#uc$MzQ9SGpksbIwZZcT{|u&_dLpASSQK(%c0cEuw%b`=e;zw6(Pkt z;x#=NNVOXKEtI;^VD}(>)kVLQRT8t~b~u`xcT+wr{rq7k<9Sy$jS3&}{Tu4cE3Oy{ z2nTdbpQI+$-|&8dYy6yvc|qG=ZIY4mOWM>?Vea&UX~i**zz3Hm#79k4Oy2Q!ZpU+j zeBSH*$1XgW0|oyQ|1$n#HeuNF;HDxlFR7NeMwFx^mZVxG7o`Fz1|tI_GhG8qT?3;K zLsKgw6DuPNZ36=<1B3R*Z5${Xa`RI%(<*Um__oh(3s8dw+=i0O+|=Td#M}ZjJthWL Yh6WHz{!X>I2Gqmg>FVdQ&MBb@0K0?Jg#Z8m literal 0 HcmV?d00001 diff --git a/example/assets/instagram/image.png b/example/assets/instagram/image.png new file mode 100644 index 0000000000000000000000000000000000000000..83987dfede0d518b7ae1023aa8e923a31ed3b0f7 GIT binary patch literal 1508 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 literal 0 HcmV?d00001 diff --git a/example/assets/instagram/mic.png b/example/assets/instagram/mic.png new file mode 100644 index 0000000000000000000000000000000000000000..9b89ac6a104cbff8c426dae9e3210549da2d2efe GIT binary patch literal 1577 zcmZ{kdpHw%7{`B`Iom{(mC?#Ua@%S)Wm~gUc5rgt!Eq~h3n{gALs~MWB3%>{qqYuZ zZV_`!F6%-r6@{hTb16h9v9t4>=Q+=F&hwl<-uL^w@Avt<-~ZkOCkJa4B`qZYfQqe+ z6+^Bze-#2I@3O(DX1V+vV8gHnAaWA`oHzi!%U7I_035{wFy;#YB^3aTh+7rTRJj55 z-(zhBz`aC0f_#FrZSCpsF(g#gP$^VGG6z6W#nx)4%l_U^X91yrnXSibSTU^Nnx<$4yQb52CCwEx zG-~`B!(ViMQro#*E5dS}?DzaQed&vsyU+2D2G@7RBd1hW;;XI1d~R30(Xd9zjZSPw z!tv=G70gv-)-@TaY2hSqcHolmZA?Gq^x;@(#&trSXFd#sR`FaXY(fuxII!c)J>`LW z{7SUVbXNM~;lyy^Us60U(N?D1$N+Zu$9>$G9Kb7#w!U;x_Bpu&nL z)6^)l$I~S9*w35^DZxVrzQ~Xn4^EJqpvfp7GIsw8QD)djF`oltlE`I@$SRx7?@NJ^5-Q*;YO_Td~XpjiC0^UkZP< z+FXi^>q^a?#dr@v+Tu{>EnJ-fi@@_$ogB|=-ub;?)4U_uzvb??nXq61#IRmrU40`= z`HFpGGj>&MrnDHD6+LL|#T#l+{;2y?3Ju=G7Qvl^UT{lcDcj--^Kq+hnqSzLZrRO8 zuk|x{$bY9>Yv=hokyvQ6q*?2+H=PT0&d%|0oY_wH$QHZb4y!KD%6sEmO+VF%$lA#s z?Uvi+$9ieWRpd9L-OeQ@;|v#fAhJ$-Y2BU`W`17dw$4n_u;t#{T6C-ez{Rh;WH@eo z(AKd&(NN<`W$6asYkI?^NBi(zk8@*0e_PVvGKd01LIGi~+U>I zh2#z8C`BX{7)I$wF;-u0x7&Q=+}KyVqjA(NK1Bj4PleN`u0>mxQbRq3funufIs)`n z6K<$YvLUc3`m%l<<`1nB?-vEQh?u)PN*WWbdp5dt&B|KpXX3_?+wRB23E5_N=C@cK zhwAK7{j)f2ZIqs#vv6zt9HX!C0GG6@aNVP~UGdG&hypQhBPIqC0R;5+q}1IQUH`9SGrhiRKN{PM zJu^&flm8FQ)zC`hfZ;z0?2zyv7TYg8;y;WTo??psJ7g(^+9_v% ME#1K?f0u9UpTU~MX#fBK literal 0 HcmV?d00001 diff --git a/example/assets/instagram/phone.png b/example/assets/instagram/phone.png new file mode 100644 index 0000000000000000000000000000000000000000..7d9ca114c2f1ce4f9d8e85c7d8452c13344e90fa GIT binary patch literal 1338 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 literal 0 HcmV?d00001 diff --git a/example/assets/instagram/plus.png b/example/assets/instagram/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..01601b50a0d43b37b0f35960b34d8303df4131d9 GIT binary patch literal 1676 zcmZ{kdpOgJAIHCQ$xKXGa!HJ3VcJF+%QcQ|nQNq6G9%a3%tkIhlv|G5FB!|_#6caG z){&8%W2xM>P?TFPg>*UYL?k&o&v~BnJm>d3zdt^o*Yo*&p4apK?~~!|XfF#8>CXs9>^@p?=6bT9K#F+qqB%Nq$eL8q@wkRxI$z7>yw;|lC zW}?&H+8Oeh4IzJCb`9E)RjT1PfbBG|6CCP^Ulf84qxSL3BO8f9D#KKxzK8=3<XvmIkq@342-|G`BMtbZi7-Tf!(jzmS?J)NiA3kTI`xQNA72sO6uUBZ}b zT1*Ca1*_Jla#1KN1$cHxhZF2geY)sZP;C3re0R_IckMSgpiLK1NiBI_>8ZC9R66JsXz|Q?V_A#5 zAja24foP6D_Fg@gg>Q`THKxJ6YeO)_2L}we?nip_^1t#Tgrn56tPn3BLlpbgFQc=(S(XRoAE~@Z5XOL8N1!+rYB&lgIPM#MVwcKq=fK9_CpI;i$vWjCPUyWfv z4`CAWjV*aX@Z;b>i7yrEDGw6AD7F0BF;b)cZ1Ut(Xu0v2+07+`IrZ<}AgjyJtjeeP zg0;5I)rDKX?k$8w7+-1ME}A(iPpTq4l`zXlsBK7sUA%I;^-1Nin$5kYq9~iZMc-W6k4KfQoQTq;t!_bMIiH53PB=BY?JRKgRTQ}!)#pMQ z%doc}8TBeV6eADy^EgLJQ%YDPf&l4gNGOJ1ll^(`Z!ykly4}&KbM0FN4WY?QKE}QH zC#O@hyUXpuImGNf!ybHJ=>W{%8&e;9?GSO#)HirNk@P-gMy}4!_1POlWxNI|yv(39 z_JXW>Q>r_@Rd-o6pjbA@YFjf`KRi9Uz9jd~`-X`$#V8B7yJ<5yc1UOI&LYp_a+tfi zl*dCB!zg#GL}&DI6_+wJ!Wj4u)8Nedd{7f}#kw`<`OSD=BpS=RxQwu5MbD_|2Pzd*A z$+&FwN#^n+@I|4FpkO-cl&C6Bk5SSNkk@{ z9#nX1OX1$S7&tRXmt8a8u(uV?NUI@Z1633A_4hN0yBgb7|Ep2=>Ovwqs=hrze9G| RCx%20K(uqT<=XgN{S%67Up7T=Mrx-l>^5o%{myDHuOT83MX0FS#%f8@p zB9X6>|9Umk(uVr`&t~!QRVgw=7iumO)>-tZm4V@E!rWcL)q4aRw!R5f?yGWPu)fl< zDBNYa)W@URO3Q0HRo8b!nkF6b{OEe;_?Cn_#!r`@vA)53{%W@D^`2_^?#CY94beII zE2h@`)>i-0k*~w(zvJeDOFoZUlN#-N7)9keuH2ktu~__M;zavij_0DLdTQq?6eG5= z^&I@*EBPR<&S%c&-rX!54Y5qeG_Jcpn`*IeZn&5rLxc2=2>~y3`Q6gC6h~ax%~hPl za)2rOlu>+Tl;N+Y4@~on6c`w;Ye<+&e{cG=$?eZr3}Np_fnXkr{703a7phIQV|XL>-SNMBA~#QD+-6Gu_XunzfemL1V(1y$Kda?HF`2 zejDiDR*g>Hb4fvOx!(o5J3ZAvpRYe6ly&DFC*uYg=NBK{7#O~NsO~U0*1PR0)9p?M z^M@*45uN1~UDA$Mv&A>1ocuKZsrbR!jdL>+t?mMot!jyDL`h0wNvc(HQ7VvPFfuSQ z(>1WvH82V>G_^7^u`)5$HZZUBQ;SOy fa|_V)m>5_Y8bB=hJJseIP!EHrtDnm{r-UW|*6VyT literal 0 HcmV?d00001 diff --git a/example/assets/instagram/share.png b/example/assets/instagram/share.png new file mode 100644 index 0000000000000000000000000000000000000000..a4d32e843d22c5b78945fc5ac3dcc7b984862590 GIT binary patch literal 1174 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhaw6p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9fnimzvJsHSUgGKN%KnOziC=>&>zIW( z0|RrFr;B4q#=W;Qygft%C651BPJODpq&-ca*HGi7t4jn&UegjDC2`w~=$5p!EgKdc zSDNeET%1>042@3?N|$M!qtnBvLyn9M0xA1qqNz4B0wljc1} zj>9SmpAMBVM>P4QD1Z9D=|tGOh?VD+$~tXLi&j51s=j7@*l}ar%D_4A?=DN)w;^ll zv;&P(lD=>lcX_X6*!i^Z)>TKfqxmd{)-rre2#GlTcELj}9f4;Gzt-x0jJ+qh-1m%E zI`i&`6CQUfrpCN&x@vp($&84krk!H{|d9(ZdC4C zR~P#@cjDu4oyQD555oUXm~pty_xJ0kic`(~?|nMIQ-hSsE7I;fUeU4p{LyX9j6KiT zdHp1(OS&xoxV+=_w@_#6RbQOdERCGkJTKDwX5W1Byi}@ye5+-nqVt@`5$ZnTtC~XO z86I%*Nqo(fe4Z(ies)d%zr*i!*;+-j8;Zp}53M=UtZVoS!1LSR9|AbS5o?eXkvZ`6lN#|J%a%FSiz- z5qn$fQu@RXg5f@&MT;V;9-m#G`}9PE*~i_E-)3pf`D)RV!Eiv})s*;!s{;1bsGhxE zx$0@*-DOM9My(Doc54w`e$cW*_E1g#@h)qZuZ$skS6upBv2;<@mszjQl`-rU>Abzu zy)Sn1d`D9sKGT48HH$(EOc@NCZIeuB;_WoQ7gzopr0Ln1>tpET3 literal 0 HcmV?d00001 diff --git a/example/assets/instagram/sticker.png b/example/assets/instagram/sticker.png new file mode 100644 index 0000000000000000000000000000000000000000..a2be709801fc90e905249a026154e67d6161983d GIT binary patch literal 1727 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 literal 0 HcmV?d00001 diff --git a/example/src/App.tsx b/example/src/App.tsx index 3b8fbc8..bf8d018 100644 --- a/example/src/App.tsx +++ b/example/src/App.tsx @@ -37,6 +37,7 @@ import TelegramDissolveScreen from './screens/TelegramDissolveScreen'; import BirthdayCandleScreen from './screens/BirthdayCandleScreen'; import ParticleDispersionScreen from './screens/ParticleDispersionScreen'; import FoamLabScreen from './screens/FoamLabScreen'; +import VoiceDeleteScreen from './screens/VoiceDeleteScreen'; import type { RootStackParamList } from './types'; const Stack = createNativeStackNavigator(); @@ -129,6 +130,10 @@ export default function App() { component={ParticleDispersionScreen} /> + diff --git a/example/src/components/instagram/SmokePoof.tsx b/example/src/components/instagram/SmokePoof.tsx new file mode 100644 index 0000000..62b143c --- /dev/null +++ b/example/src/components/instagram/SmokePoof.tsx @@ -0,0 +1,136 @@ +import { + ShaderView, + type ParamsSynchronizable, + type ShaderViewProps, +} from 'react-native-effects'; + +type SmokePoofProps = Omit< + ShaderViewProps, + 'fragmentShader' | 'paramsSynchronizable' | 'transparent' +> & { + /** `u.live = (progress 0→1, seed, 0, 0)`. Nothing is drawn at 0 or 1. */ + paramsSynchronizable: ParamsSynchronizable; +}; + +/** + * A single grey smoke puff that bursts out of the centre, billows, drifts + * up-left and thins into wisps — the "poof" Instagram plays when a voice + * message is discarded. Progress is pushed through the live channel so a + * Reanimated timing curve drives it frame-accurately. + */ +export default function SmokePoof({ + paramsSynchronizable, + ...rest +}: SmokePoofProps) { + return ( + + ); +} + +const SHADER = /* wgsl */ ` +struct Uniforms { + resolution: vec4, + time: vec4, + color0: vec4, + color1: vec4, + params0: vec4, + params1: vec4, + live: vec4, +}; +@group(0) @binding(0) var u: Uniforms; + +fn hash21(p: vec2) -> f32 { + var p3 = fract(vec3(p.xyx) * 0.1031); + p3 = p3 + dot(p3, p3.yzx + 33.33); + return fract((p3.x + p3.y) * p3.z); +} + +fn vnoise(p: vec2) -> f32 { + let i = floor(p); + let f = fract(p); + let w = f * f * (3.0 - 2.0 * f); + let a = hash21(i); + let b = hash21(i + vec2(1.0, 0.0)); + let c = hash21(i + vec2(0.0, 1.0)); + let d = hash21(i + vec2(1.0, 1.0)); + return mix(mix(a, b, w.x), mix(c, d, w.x), w.y); +} + +fn fbm(p0: vec2) -> f32 { + var p = p0; + var v = 0.0; + var a = 0.5; + let m = mat2x2(1.6, 1.2, -1.2, 1.6); + for (var i = 0; i < 4; i = i + 1) { + v = v + a * vnoise(p); + p = m * p; + a = a * 0.5; + } + return v; +} + +// Soft round puff: 1 at the centre, 0 at radius r. +fn puff(q: vec2, centre: vec2, r: f32) -> f32 { + let d = length(q - centre) / r; + return 1.0 - smoothstep(0.0, 1.0, d); +} + +@fragment +fn main(@location(0) ndc: vec2) -> @location(0) vec4 { + let p = u.live.x; + if (p <= 0.001 || p >= 0.999) { + return vec4(0.0); + } + let seed = u.live.y * 17.0; + + // Centred, aspect-corrected, y-up. The button sits at the origin. + let c = (ndc * 0.5) * vec2(u.resolution.z, 1.0); + + // Burst: fast expansion that decelerates, then a gentle drift up and left. + let grow = 1.0 - pow(1.0 - p, 2.4); + let radius = 0.12 + 0.25 * grow; + let drift = vec2(-0.05, 0.07) * p * p + vec2(-0.01, 0.02) * p; + var q = c - drift; + + // Domain warp so the cloud boils rather than scales like a sticker. + let warpN = fbm(q * 4.0 + seed + vec2(0.0, -p * 1.2)); + let warpM = fbm(q * 4.0 - seed + vec2(p * 0.9, 0.4)); + q = q + (vec2(warpN, warpM) - 0.5) * (0.03 + 0.07 * grow); + + // Overlapping puffs around the centre with a slight upward bias. + var d = puff(q, vec2(0.0, 0.0), radius * 1.1); + d = d + puff(q, vec2(-0.6, 0.35) * radius, radius * 0.8); + d = d + puff(q, vec2(0.6, 0.3) * radius, radius * 0.75); + d = d + puff(q, vec2(-0.35, -0.55) * radius, radius * 0.7); + d = d + puff(q, vec2(0.45, -0.5) * radius, radius * 0.7); + d = d + puff(q, vec2(-0.15, 0.8) * radius, radius * 0.7); + d = d + puff(q, vec2(0.2, 0.75) * radius, radius * 0.6); + d = min(d, 1.5); + + // Erode with soft, low-frequency noise; the threshold rises over time so + // the cloud thins into a few wisps instead of fading uniformly. + let n = fbm(q * 4.5 + seed * 0.7 + vec2(p * 0.5, p * 1.4)); + let field = d * (0.6 + 0.8 * n); + let thr = 0.32 + 0.7 * p; + var alpha = smoothstep(thr, thr + 0.85, field); + + // Envelope: pops in over the first ~5%, holds, thins out at the end. + let env = smoothstep(0.0, 0.05, p) * (1.0 - smoothstep(0.5, 1.0, p)); + alpha = alpha * env * 0.82; + + // Colour: mid ash grey, a touch lighter where dense and lit from top-left, + // with the button's red bleeding into the young smoke. + let lit = fbm(q * 4.5 + seed * 0.7 + vec2(p * 0.5 - 0.1, p * 1.4 + 0.1)); + var col = vec3(0.44, 0.45, 0.48); + col = col + vec3(0.16) * clamp((lit - n) * 3.0 + 0.3, 0.0, 1.0) * min(d, 1.0); + col = mix(col, col * vec3(1.3, 0.7, 0.75), + (1.0 - smoothstep(0.0, 0.3, p)) * 0.5 * min(d, 1.0)); + + return vec4(col * alpha, alpha); +} +`; diff --git a/example/src/components/instagram/VoiceComposer.tsx b/example/src/components/instagram/VoiceComposer.tsx new file mode 100644 index 0000000..8b4db32 --- /dev/null +++ b/example/src/components/instagram/VoiceComposer.tsx @@ -0,0 +1,409 @@ +import { useCallback, useEffect, useRef, useState } from 'react'; +import { + View, + Text, + StyleSheet, + Image, + Pressable, + type LayoutChangeEvent, +} from 'react-native'; +import Animated, { + Easing, + FadeIn, + interpolate, + interpolateColor, + runOnJS, + useAnimatedReaction, + useAnimatedStyle, + useSharedValue, + withDelay, + withTiming, +} from 'react-native-reanimated'; +import { useParamsSynchronizable } from 'react-native-effects'; +import SmokePoof from './SmokePoof'; +import { IG_BAR, IG_BLUE, IG_ICONS, IG_MUTED, IG_RED } from './icons'; + +// Timings measured off the Instagram recording (60 fps frames). +const EXPAND_MS = 320; // mic tap → full blue bar +const COLLAPSE_MS = 130; // trash tap → bar sucked into the trash button +const HOLD_MS = 300; // red trash button sits still before it pops +const POOF_MS = 700; // smoke burst → wisps gone +const BAR_EVERY_MS = 90; // one new waveform bar per tick +const BAR_STEP = 5; // 2pt bar + 3pt gap + +const BAR_H = 44; +const BTN = 36; +const PAD = 4; +const SMOKE = 130; // smoke canvas size, centred on the trash button + +function Icon({ + source, + size, + color = '#fff', +}: { + source: number; + size: number; + color?: string; +}) { + return ( + + ); +} + +type Phase = 'idle' | 'recording' | 'deleting'; + +/** + * Instagram DM composer with the voice-message flow: tap the mic and a blue bar + * swells out of the camera button and starts drawing a waveform; tap the trash + * and the bar is sucked back into the button, which turns red, holds, and + * bursts into a puff of smoke that clears to reveal the camera again. + */ +export default function VoiceComposer() { + const [phase, setPhase] = useState('idle'); + const [bars, setBars] = useState([]); + const [elapsed, setElapsed] = useState(0); + const [width, setWidth] = useState(0); + const lastTall = useRef(false); + + // 0 → 1 as the blue bar expands out of the camera button. + const rec = useSharedValue(0); + // 0 → 1 as the bar collapses back into the (now red) trash button. + const del = useSharedValue(0); + // 0 → 1 smoke burst; also fades the red button out underneath it. + const poof = useSharedValue(0); + const seed = useSharedValue(0); + + // Bridge the poof curve into the shader every frame on the UI thread. + const { paramsSynchronizable } = useParamsSynchronizable([0, 0, 0, 0]); + useAnimatedReaction( + () => [poof.value, seed.value] as const, + ([p, s]) => { + 'worklet'; + paramsSynchronizable.setBlocking(() => Float64Array.of(p, s, 0, 0)); + } + ); + + // Waveform + clock tick while recording. + useEffect(() => { + if (phase !== 'recording') { + return; + } + const waveArea = width - (PAD + BTN + 10) - (10 + 44 + BTN + PAD); + const maxBars = Math.max(1, Math.floor(waveArea / BAR_STEP)); + const wave = setInterval(() => { + // Bursty amplitude: tall bars tend to come in runs, like speech. + const tall = Math.random() < (lastTall.current ? 0.55 : 0.22); + lastTall.current = tall; + const h = tall ? 10 + Math.random() * 14 : 4 + Math.random() * 3; + setBars((prev) => [...prev.slice(-(maxBars - 1)), h]); + }, BAR_EVERY_MS); + const clock = setInterval(() => setElapsed((t) => t + 1), 1000); + return () => { + clearInterval(wave); + clearInterval(clock); + }; + }, [phase, width]); + + const startRecording = useCallback(() => { + if (phase !== 'idle') { + return; + } + setBars([]); + setElapsed(0); + setPhase('recording'); + rec.value = withTiming(1, { + duration: EXPAND_MS, + easing: Easing.out(Easing.cubic), + }); + }, [phase, rec]); + + const finish = useCallback(() => { + setPhase('idle'); + setBars([]); + setElapsed(0); + rec.value = 0; + del.value = 0; + poof.value = 0; + }, [rec, del, poof]); + + const send = useCallback(() => { + if (phase !== 'recording') { + return; + } + setPhase('deleting'); + rec.value = withTiming( + 0, + { duration: 260, easing: Easing.inOut(Easing.cubic) }, + (done) => { + if (done) { + runOnJS(finish)(); + } + } + ); + }, [phase, rec, finish]); + + const discard = useCallback(() => { + if (phase !== 'recording') { + return; + } + setPhase('deleting'); + seed.value = Math.random(); + del.value = withTiming(1, { + duration: COLLAPSE_MS, + easing: Easing.out(Easing.cubic), + }); + poof.value = withDelay( + COLLAPSE_MS + HOLD_MS, + withTiming(1, { duration: POOF_MS, easing: Easing.linear }, (done) => { + if (done) { + runOnJS(finish)(); + } + }) + ); + }, [phase, del, poof, seed, finish]); + + const onLayout = useCallback((e: LayoutChangeEvent) => { + setWidth(e.nativeEvent.layout.width); + }, []); + + // --- animated styles ----------------------------------------------------- + + // The blue pill grows out of the camera circle, then shrinks back into it. + const pillStyle = useAnimatedStyle(() => { + const open = rec.value * (1 - del.value); + const w = interpolate(open, [0, 1], [BTN + PAD * 2, Math.max(width, 1)]); + return { + width: w, + opacity: rec.value * (1 - interpolate(del.value, [0.85, 1], [0, 1])), + }; + }); + + // Trash button: white while recording, red + 1.2× while deleting, then gone. + const trashStyle = useAnimatedStyle(() => { + const scale = interpolate(del.value, [0, 1], [1, 1.2]); + const gone = interpolate(poof.value, [0.12, 0.42], [0, 1], 'clamp'); + return { + backgroundColor: interpolateColor(del.value, [0, 1], ['#F8F8F8', IG_RED]), + transform: [{ scale: scale * (1 - 0.15 * gone) }], + opacity: interpolate(rec.value, [0, 0.4], [0, 1], 'clamp') * (1 - gone), + }; + }); + const trashGreyIcon = useAnimatedStyle(() => ({ + opacity: 1 - del.value, + })); + const trashWhiteIcon = useAnimatedStyle(() => ({ + opacity: del.value, + })); + + // Waveform, clock and send button live inside the pill: they fade in once + // the bar is mostly open and vanish the instant a delete starts. + const contentStyle = useAnimatedStyle(() => ({ + opacity: + interpolate(rec.value, [0.6, 1], [0, 1], 'clamp') * (1 - del.value), + })); + const timerStyle = useAnimatedStyle(() => ({ + opacity: interpolate(rec.value, [0.6, 1], [0, 1], 'clamp'), + })); + const sendStyle = useAnimatedStyle(() => ({ + opacity: + interpolate(rec.value, [0.85, 1], [0, 1], 'clamp') * + (1 - interpolate(del.value, [0, 0.15], [0, 1], 'clamp')), + transform: [ + { scale: interpolate(rec.value, [0.85, 1], [0.6, 1], 'clamp') }, + ], + })); + + const clock = `${Math.floor(elapsed / 60)}:${elapsed % 60 < 10 ? '0' : ''}${ + elapsed % 60 + }`; + + return ( + + {/* Idle composer — always mounted; the pill slides over it. */} + + + + + Message... + + + + + + + + + + + + + + + {/* Recording pill */} + + + {bars.map((h, i) => ( + + ))} + + + {clock} + + + + + + + + + {/* Trash button — outside the pill so it can pop past its bounds. */} + + + + + + + + + + + + + + ); +} + +const styles = StyleSheet.create({ + wrap: { + height: BAR_H, + }, + composer: { + height: BAR_H, + borderRadius: BAR_H / 2, + backgroundColor: IG_BAR, + flexDirection: 'row', + alignItems: 'center', + paddingLeft: PAD, + paddingRight: 8, + }, + circle: { + width: BTN, + height: BTN, + borderRadius: BTN / 2, + alignItems: 'center', + justifyContent: 'center', + }, + white: { + backgroundColor: '#F8F8F8', + }, + placeholder: { + flex: 1, + marginLeft: 11, + color: IG_MUTED, + fontSize: 16, + }, + composerIcon: { + width: 39, + height: BAR_H, + alignItems: 'center', + justifyContent: 'center', + }, + pill: { + position: 'absolute', + left: 0, + top: 0, + height: BAR_H, + borderRadius: BAR_H / 2, + backgroundColor: IG_BLUE, + overflow: 'hidden', + flexDirection: 'row', + alignItems: 'center', + paddingLeft: PAD + BTN + 10, + paddingRight: PAD, + }, + waveRow: { + flex: 1, + flexDirection: 'row', + alignItems: 'center', + gap: 3, + overflow: 'hidden', + }, + waveBar: { + width: 2, + borderRadius: 1, + backgroundColor: '#fff', + }, + timer: { + flexShrink: 0, + color: '#fff', + fontSize: 15, + fontWeight: '600', + marginLeft: 10, + marginRight: 10, + fontVariant: ['tabular-nums'], + }, + sendWrap: { + flexShrink: 0, + width: BTN, + height: BTN, + }, + trash: { + position: 'absolute', + left: PAD, + top: PAD, + width: BTN, + height: BTN, + borderRadius: BTN / 2, + }, + fill: { + flex: 1, + alignItems: 'center', + justifyContent: 'center', + }, + abs: { + ...StyleSheet.absoluteFill, + alignItems: 'center', + justifyContent: 'center', + }, + smoke: { + position: 'absolute', + width: SMOKE, + height: SMOKE, + left: PAD + BTN / 2 - SMOKE / 2, + top: PAD + BTN / 2 - SMOKE / 2, + }, +}); diff --git a/example/src/components/instagram/icons.ts b/example/src/components/instagram/icons.ts new file mode 100644 index 0000000..f11bbd4 --- /dev/null +++ b/example/src/components/instagram/icons.ts @@ -0,0 +1,25 @@ +// Instagram glyphs cropped from a screen recording and converted to white +// alpha masks — tint them with `tintColor`. +export const IG_ICONS = { + back: require('../../../assets/instagram/back.png'), + phone: require('../../../assets/instagram/phone.png'), + video: require('../../../assets/instagram/video.png'), + share: require('../../../assets/instagram/share.png'), + bookmark: require('../../../assets/instagram/bookmark.png'), + info: require('../../../assets/instagram/info.png'), + play: require('../../../assets/instagram/play.png'), + camera: require('../../../assets/instagram/camera.png'), + mic: require('../../../assets/instagram/mic.png'), + image: require('../../../assets/instagram/image.png'), + sticker: require('../../../assets/instagram/sticker.png'), + plus: require('../../../assets/instagram/plus.png'), + trash: require('../../../assets/instagram/trash.png'), + send: require('../../../assets/instagram/send.png'), +}; + +export const IG_BLUE = '#4C49FA'; +export const IG_RED = '#FE5971'; +export const IG_BG = '#0E1115'; +export const IG_SURFACE = '#21242A'; +export const IG_BAR = '#16191F'; +export const IG_MUTED = '#8B8F96'; diff --git a/example/src/screens/HomeScreen.tsx b/example/src/screens/HomeScreen.tsx index 2a94e2e..80faaa4 100644 --- a/example/src/screens/HomeScreen.tsx +++ b/example/src/screens/HomeScreen.tsx @@ -11,6 +11,14 @@ import { useNavigation } from '@react-navigation/native'; import type { ExampleCategory, HomeScreenNavigationProp } from '../types'; const EXAMPLE_CATEGORIES: ExampleCategory[] = [ + { + id: 'voice-delete', + title: 'Voice Delete', + description: 'Instagram DM — delete a voice message', + screen: 'VoiceDeleteExample', + color: '#4C49FA', + image: require('../../assets/components/voice-delete.png'), + }, { id: 'particle-dispersion', title: 'Particle Dispersion', diff --git a/example/src/screens/VoiceDeleteScreen.tsx b/example/src/screens/VoiceDeleteScreen.tsx new file mode 100644 index 0000000..f13860b --- /dev/null +++ b/example/src/screens/VoiceDeleteScreen.tsx @@ -0,0 +1,455 @@ +import { + View, + Text, + StyleSheet, + StatusBar, + Image, + Pressable, + ScrollView, +} from 'react-native'; +import { useNavigation } from '@react-navigation/native'; +import { useSafeAreaInsets } from 'react-native-safe-area-context'; +import VoiceComposer from '../components/instagram/VoiceComposer'; +import { + IG_BG as BG, + IG_ICONS as ICONS, + IG_MUTED as MUTED, + IG_SURFACE as SURFACE, +} from '../components/instagram/icons'; + +// Instagram DM thread clone. The chrome (icons, colours, spacing) mirrors the +// real app; the people, posts and copy are placeholders. + +const AVATAR = { uri: 'https://picsum.photos/seed/rne-dm-avatar/200/200' }; +const POST_IMAGE = { uri: 'https://picsum.photos/seed/rne-dm-post/720/612' }; +const REEL_IMAGE = { uri: 'https://picsum.photos/seed/rne-dm-reel/480/870' }; +const REEL_AVATAR = { + uri: 'https://picsum.photos/seed/rne-dm-reel-av/100/100', +}; + +function Icon({ + source, + size, + color = '#fff', +}: { + source: number; + size: number; + color?: string; +}) { + return ( + + ); +} + +function CircleButton({ + size, + color, + children, + style, + onPress, + label, +}: { + size: number; + color: string; + children: React.ReactNode; + style?: object; + onPress?: () => void; + label?: string; +}) { + return ( + + {children} + + ); +} + +function MessageActions({ top }: { top: number }) { + return ( + + + + + + + + + ); +} + +export default function VoiceDeleteScreen() { + const insets = useSafeAreaInsets(); + const navigation = useNavigation(); + const headerHeight = insets.top + 56; + + return ( + + + + + {/* Shared post */} + + + + + + + AI info + + + + reanimated_daily + Tomasz Zawadzki is the goat 🐐 + + + + ❤️ + + + + + 16 AUG AT 10:10 + + {/* Shared reel */} + + + + + + + + + yarn_ios_enjoyer and the… + + + + What it's like living with someone who runs pod install a lot? + + + + + + + + + + + Seen + + + {/* Header */} + + + navigation.goBack()} + label="Back" + > + + + + + + Metro Bundler › + + Bundling 99% for 22m + + + + + + + + + {/* Fade the thread out under the header. */} + + {[0.85, 0.7, 0.55, 0.4, 0.25, 0.12, 0.04].map((o, i) => ( + + ))} + + + + {/* Composer */} + + + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: BG, + }, + thread: { + paddingHorizontal: 8, + }, + row: { + flexDirection: 'row', + justifyContent: 'flex-end', + alignItems: 'flex-start', + }, + actions: { + marginRight: 9, + alignItems: 'center', + }, + actionCircle: { + width: 30, + height: 30, + borderRadius: 15, + backgroundColor: SURFACE, + alignItems: 'center', + justifyContent: 'center', + }, + + // Post card + postCard: { + width: 240, + borderRadius: 16, + backgroundColor: SURFACE, + overflow: 'visible', + }, + postImage: { + width: 240, + height: 204, + borderTopLeftRadius: 16, + borderTopRightRadius: 16, + backgroundColor: '#3a4a5a', + }, + aiPill: { + position: 'absolute', + left: 8, + top: 204 - 8 - 30, + height: 30, + paddingLeft: 7, + paddingRight: 10, + borderRadius: 15, + backgroundColor: 'rgba(18,16,14,0.82)', + flexDirection: 'row', + alignItems: 'center', + gap: 6, + }, + aiPillText: { + color: '#fff', + fontSize: 13, + fontWeight: '600', + }, + postCaption: { + paddingHorizontal: 12, + paddingVertical: 8, + minHeight: 50, + justifyContent: 'center', + borderBottomLeftRadius: 16, + borderBottomRightRadius: 16, + }, + captionText: { + color: '#fff', + fontSize: 14, + lineHeight: 17, + }, + captionUser: { + fontWeight: '700', + }, + reaction: { + position: 'absolute', + left: 5, + bottom: -23, + width: 30, + height: 30, + borderRadius: 15, + backgroundColor: SURFACE, + alignItems: 'center', + justifyContent: 'center', + }, + reactionText: { + fontSize: 13, + }, + + date: { + marginTop: 42, + marginBottom: 23, + textAlign: 'center', + color: MUTED, + fontSize: 12, + letterSpacing: 0.2, + }, + + // Reel card + reelCard: { + width: 160, + height: 289, + borderRadius: 16, + overflow: 'hidden', + backgroundColor: SURFACE, + }, + reelImage: { + ...StyleSheet.absoluteFill, + width: 160, + height: 289, + }, + reelShade: { + position: 'absolute', + left: 0, + right: 0, + top: 0, + height: 70, + backgroundColor: 'rgba(0,0,0,0.3)', + }, + reelHeader: { + position: 'absolute', + left: 19, + top: 13, + right: 10, + flexDirection: 'row', + alignItems: 'flex-start', + gap: 8, + }, + reelAvatar: { + width: 20, + height: 20, + borderRadius: 10, + backgroundColor: '#555', + }, + reelUser: { + flex: 1, + color: '#fff', + fontSize: 14, + lineHeight: 17, + fontWeight: '600', + textShadowColor: 'rgba(0,0,0,0.6)', + textShadowRadius: 3, + }, + reelCaption: { + position: 'absolute', + left: 10, + right: 10, + top: 55, + color: '#fff', + fontSize: 12, + lineHeight: 15, + fontWeight: '800', + fontStyle: 'italic', + textAlign: 'center', + textShadowColor: '#000', + textShadowRadius: 2, + textShadowOffset: { width: 0, height: 1 }, + }, + playButton: { + position: 'absolute', + left: 60, + top: 125, + width: 40, + height: 40, + borderRadius: 20, + backgroundColor: 'rgba(255,255,255,0.4)', + alignItems: 'center', + justifyContent: 'center', + paddingLeft: 3, + }, + reelBadge: { + position: 'absolute', + left: 14, + bottom: 14, + width: 18, + height: 18, + borderRadius: 5, + backgroundColor: '#fff', + alignItems: 'center', + justifyContent: 'center', + paddingLeft: 1, + }, + + seen: { + marginTop: 8, + marginRight: 14, + textAlign: 'right', + color: MUTED, + fontSize: 12, + }, + + // Header + header: { + position: 'absolute', + top: 0, + left: 0, + right: 0, + backgroundColor: BG, + justifyContent: 'flex-end', + }, + headerRow: { + height: 56, + flexDirection: 'row', + alignItems: 'center', + paddingLeft: 16, + paddingRight: 12, + }, + avatar: { + width: 36, + height: 36, + borderRadius: 18, + marginLeft: 11, + backgroundColor: '#444', + }, + headerText: { + flex: 1, + marginLeft: 10, + }, + name: { + color: '#fff', + fontSize: 16, + fontWeight: '600', + }, + chevron: { + color: '#fff', + fontSize: 18, + fontWeight: '400', + }, + active: { + color: MUTED, + fontSize: 13, + marginTop: 1, + }, + headerFade: { + position: 'absolute', + left: 0, + right: 0, + top: '100%', + height: 28, + }, + + // Composer + composerWrap: { + position: 'absolute', + left: 8, + right: 8, + }, +}); diff --git a/example/src/types.ts b/example/src/types.ts index d75940a..da6b37a 100644 --- a/example/src/types.ts +++ b/example/src/types.ts @@ -37,6 +37,7 @@ export type RootStackParamList = { BirthdayCandleExample: undefined; ParticleDispersionExample: undefined; FoamLabExample: undefined; + VoiceDeleteExample: undefined; }; export type HomeScreenNavigationProp =