streamlit-nightly 1.52.3.dev20260111__py3-none-any.whl → 1.52.3.dev20260112__py3-none-any.whl

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.
Files changed (101) hide show
  1. streamlit/auth_util.py +24 -1
  2. streamlit/static/index.html +1 -1
  3. streamlit/static/manifest.json +296 -296
  4. streamlit/static/static/js/{ErrorOutline.esm.D0HiUB0L.js → ErrorOutline.esm.BjVqd_6R.js} +1 -1
  5. streamlit/static/static/js/{FileDownload.esm.BuUS-pfi.js → FileDownload.esm.DJCSsghl.js} +1 -1
  6. streamlit/static/static/js/{FileHelper.Pf8URFng.js → FileHelper.C---TH7o.js} +1 -1
  7. streamlit/static/static/js/{FormClearHelper.By4vKj6A.js → FormClearHelper.C-6BC487.js} +1 -1
  8. streamlit/static/static/js/{InputInstructions.BiaGyIXk.js → InputInstructions.sxc3InCI.js} +1 -1
  9. streamlit/static/static/js/{Particles.2-EdjYhR.js → Particles.S8yD7iW-.js} +1 -1
  10. streamlit/static/static/js/{ProgressBar.Dgbh0B0d.js → ProgressBar.BiYsyZCC.js} +1 -1
  11. streamlit/static/static/js/{StreamlitSyntaxHighlighter.DSl8Wr3R.js → StreamlitSyntaxHighlighter.9jZF8jX1.js} +1 -1
  12. streamlit/static/static/js/{TableChart.esm.MOwyTUPh.js → TableChart.esm.BdA4Q1rZ.js} +1 -1
  13. streamlit/static/static/js/{Toolbar.CowuXIFr.js → Toolbar.B9DaaDfN.js} +1 -1
  14. streamlit/static/static/js/{WidgetLabelHelpIconInline.BdGIJQe4.js → WidgetLabelHelpIconInline.DxODTLS2.js} +1 -1
  15. streamlit/static/static/js/{base-input.CHPo5oJ1.js → base-input.Gf1cKuQR.js} +1 -1
  16. streamlit/static/static/js/{checkbox.Dkt2TQVS.js → checkbox.CnoNruf3.js} +1 -1
  17. streamlit/static/static/js/{createDownloadLinkElement.BaE-_v8I.js → createDownloadLinkElement.B48AepiL.js} +1 -1
  18. streamlit/static/static/js/{data-grid-overlay-editor.C1ncL-Nr.js → data-grid-overlay-editor.Cmdq9aqU.js} +1 -1
  19. streamlit/static/static/js/{downloader.yaq2AzD9.js → downloader.CQLoQdMX.js} +1 -1
  20. streamlit/static/static/js/{embed.DJJvCVz2.js → embed.oKwocwU8.js} +1 -1
  21. streamlit/static/static/js/{es6.D2jK98VU.js → es6.BRxlY_y5.js} +2 -2
  22. streamlit/static/static/js/{formatNumber.Cxr2q_Sk.js → formatNumber.DaagZyZe.js} +1 -1
  23. streamlit/static/static/js/{iconPosition.5dHEZYw2.js → iconPosition.Q3hNvmK4.js} +1 -1
  24. streamlit/static/static/js/{iframeResizer.contentWindow.Cedt4qbc.js → iframeResizer.contentWindow.B6EBvI9L.js} +1 -1
  25. streamlit/static/static/js/{index.DaITTdfQ.js → index.19_qtO6t.js} +1 -1
  26. streamlit/static/static/js/{index._nL4Yjdr.js → index.43b777iP.js} +1 -1
  27. streamlit/static/static/js/{index.P-CMMGUY.js → index.B03eQZoH.js} +1 -1
  28. streamlit/static/static/js/{index.D2EVLt1U.js → index.B9kZB0o1.js} +1 -1
  29. streamlit/static/static/js/{index.BkDplL5I.js → index.BAI9aHCq.js} +1 -1
  30. streamlit/static/static/js/{index.CT9jvPcD.js → index.BF23fbfs.js} +1 -1
  31. streamlit/static/static/js/{index.TO9vodwr.js → index.BGBTkulf.js} +1 -1
  32. streamlit/static/static/js/{index.01VsD2h1.js → index.BRfGUOQ-.js} +5 -5
  33. streamlit/static/static/js/{index.D6ea3OJl.js → index.BVT89mQw.js} +1 -1
  34. streamlit/static/static/js/{index.BHMoYAbd.js → index.BXEC4cf3.js} +1 -1
  35. streamlit/static/static/js/{index.B6EliwN_.js → index.BbSFVZ3p.js} +1 -1
  36. streamlit/static/static/js/{index.B7EzT2pL.js → index.BkSwGJoh.js} +1 -1
  37. streamlit/static/static/js/{index.B6Uhb_NP.js → index.BnfTPrHb.js} +1 -1
  38. streamlit/static/static/js/{index.qzz9PjCO.js → index.BoX8d5rK.js} +1 -1
  39. streamlit/static/static/js/{index.Bb9kjc_v.js → index.Boa0Egng.js} +1 -1
  40. streamlit/static/static/js/{index.CjQo7CUO.js → index.BzwlrgZO.js} +1 -1
  41. streamlit/static/static/js/{index.Ba6hzYdl.js → index.C0fSEz-3.js} +1 -1
  42. streamlit/static/static/js/{index.B2TDaHdI.js → index.CCFwVy90.js} +1 -1
  43. streamlit/static/static/js/{index.Dt0Psatx.js → index.CCQ5p_WC.js} +1 -1
  44. streamlit/static/static/js/{index.DeGjj5Xy.js → index.CFCBhOfx.js} +1 -1
  45. streamlit/static/static/js/{index.DredtYc0.js → index.CIbgt5wY.js} +1 -1
  46. streamlit/static/static/js/{index.CD8IIWcc.js → index.CJ4oJe0V.js} +1 -1
  47. streamlit/static/static/js/{index.6_D2Y2jA.js → index.CP-hoxJM.js} +1 -1
  48. streamlit/static/static/js/{index.BXCQzqUL.js → index.CSfsEKCF.js} +1 -1
  49. streamlit/static/static/js/{index.C8PH2B2k.js → index.CVlg41MB.js} +1 -1
  50. streamlit/static/static/js/{index.BVit6ClT.js → index.CYE7b5Du.js} +1 -1
  51. streamlit/static/static/js/{index.DKUtJ1wC.js → index.Ca7MUNWJ.js} +1 -1
  52. streamlit/static/static/js/index.CrPjcPY1.js +1 -0
  53. streamlit/static/static/js/{index.BMPclSge.js → index.CvB9JBqS.js} +5 -5
  54. streamlit/static/static/js/{index.BCCeRfnu.js → index.CvIqsWy1.js} +1 -1
  55. streamlit/static/static/js/{index.wLJVkoPD.js → index.D1pK_Vw2.js} +1 -1
  56. streamlit/static/static/js/{index.B0GsKOuI.js → index.D6X2coHR.js} +1 -1
  57. streamlit/static/static/js/{index.B4x2O71H.js → index.DGYHxruh.js} +1 -1
  58. streamlit/static/static/js/{index.DcKOiCiE.js → index.DJ7P09eb.js} +1 -1
  59. streamlit/static/static/js/{index.CcHnYd9w.js → index.Dh5SAThV.js} +1 -1
  60. streamlit/static/static/js/{index.BFopzcDu.js → index.Fu73QtkD.js} +1 -1
  61. streamlit/static/static/js/{index.CIlqaESj.js → index.KN1VmyYN.js} +1 -1
  62. streamlit/static/static/js/{index.B9DrCSR6.js → index.KtjGDGY5.js} +1 -1
  63. streamlit/static/static/js/{index.DLB_Wwth.js → index.OpATzEaW.js} +1 -1
  64. streamlit/static/static/js/{index.CcJEaOpw.js → index.QHnxuesF.js} +1 -1
  65. streamlit/static/static/js/{index.1djeb6e0.js → index.QTaWooav.js} +1 -1
  66. streamlit/static/static/js/{index.BgVtKHgk.js → index.WXybx2Xq.js} +1 -1
  67. streamlit/static/static/js/{index.DtGneC7j.js → index.Xg-Qttib.js} +1 -1
  68. streamlit/static/static/js/{index.Dewn3Ni9.js → index.j4fnjyHo.js} +1 -1
  69. streamlit/static/static/js/{index.CAobVzMK.js → index.na9UBuse.js} +1 -1
  70. streamlit/static/static/js/{index.D2v1x0i_.js → index.pU9mQeVC.js} +1 -1
  71. streamlit/static/static/js/{index.DbTMA1_Q.js → index.slgxPafU.js} +1 -1
  72. streamlit/static/static/js/{index.DozBVd6-.js → index.whRT3Vm3.js} +1 -1
  73. streamlit/static/static/js/{input.27t-DftI.js → input.CPzINTl-.js} +1 -1
  74. streamlit/static/static/js/{main.BEfv2Y8-.js → main.DSPn8dUe.js} +1 -1
  75. streamlit/static/static/js/{memory.CaZBVQ_1.js → memory.CfD8IGoU.js} +1 -1
  76. streamlit/static/static/js/{number-overlay-editor.CAIp-3oo.js → number-overlay-editor.4Ae0qegV.js} +1 -1
  77. streamlit/static/static/js/{pandasStylerUtils.BY9qaz81.js → pandasStylerUtils.D2EjZ7k6.js} +1 -1
  78. streamlit/static/static/js/{sandbox.BJUaaWFJ.js → sandbox.C6vcPIm0.js} +1 -1
  79. streamlit/static/static/js/{styled-components.DQsMkvXn.js → styled-components.BBmp8buj.js} +1 -1
  80. streamlit/static/static/js/{throttle.DSR3q89S.js → throttle.BPcPpy-S.js} +1 -1
  81. streamlit/static/static/js/{timepicker.gie5YwtP.js → timepicker.ryzkTs2C.js} +1 -1
  82. streamlit/static/static/js/{toConsumableArray.C9lVwnAo.js → toConsumableArray.Dg1nDaB_.js} +1 -1
  83. streamlit/static/static/js/uniqueId.BFHzT5KQ.js +1 -0
  84. streamlit/static/static/js/{useBasicWidgetState.DrTKs46R.js → useBasicWidgetState.A4U5lzAm.js} +1 -1
  85. streamlit/static/static/js/{useIntlLocale.CmSionuT.js → useIntlLocale.DWJgLlNz.js} +1 -1
  86. streamlit/static/static/js/{useTextInputAutoExpand.D7lViJSu.js → useTextInputAutoExpand.BrBonw8t.js} +1 -1
  87. streamlit/static/static/js/{useUpdateUiValue.Ct3CJQBQ.js → useUpdateUiValue.BkOWyNVX.js} +1 -1
  88. streamlit/static/static/js/{useWaveformController.D-KQLpLI.js → useWaveformController.CBlvXlgZ.js} +1 -1
  89. streamlit/static/static/js/{withCalculatedWidth.CD0pPoZr.js → withCalculatedWidth.D4cpOyNe.js} +1 -1
  90. streamlit/static/static/js/{withFullScreenWrapper.Ch22PgdD.js → withFullScreenWrapper.BMim3w94.js} +1 -1
  91. streamlit/user_info.py +6 -4
  92. streamlit/web/server/browser_websocket_handler.py +2 -2
  93. streamlit/web/server/oauth_authlib_routes.py +97 -20
  94. {streamlit_nightly-1.52.3.dev20260111.dist-info → streamlit_nightly-1.52.3.dev20260112.dist-info}/METADATA +1 -1
  95. {streamlit_nightly-1.52.3.dev20260111.dist-info → streamlit_nightly-1.52.3.dev20260112.dist-info}/RECORD +99 -99
  96. streamlit/static/static/js/index.i_eQw7NS.js +0 -1
  97. streamlit/static/static/js/uniqueId.BdEQNrWF.js +0 -1
  98. {streamlit_nightly-1.52.3.dev20260111.data → streamlit_nightly-1.52.3.dev20260112.data}/scripts/streamlit.cmd +0 -0
  99. {streamlit_nightly-1.52.3.dev20260111.dist-info → streamlit_nightly-1.52.3.dev20260112.dist-info}/WHEEL +0 -0
  100. {streamlit_nightly-1.52.3.dev20260111.dist-info → streamlit_nightly-1.52.3.dev20260112.dist-info}/entry_points.txt +0 -0
  101. {streamlit_nightly-1.52.3.dev20260111.dist-info → streamlit_nightly-1.52.3.dev20260112.dist-info}/top_level.txt +0 -0
@@ -1 +1 @@
1
- import{l as Z,r as i,aR as M,ab as $,aS as O}from"./index.01VsD2h1.js";async function q(l,e=16e3){if(!l||l.size===0)throw new Error("Invalid or empty blob provided");if(!window.AudioContext)throw new Error("AudioContext not supported in this browser");const o=new AudioContext;try{const n=await l.arrayBuffer(),r=await o.decodeAudioData(n),d=e??r.sampleRate,s=await J(r,d);return K(s,d)}finally{o.close()}}async function J(l,e){const{duration:o,numberOfChannels:n,sampleRate:r}=l,d=Math.ceil(o*e);if(!window.OfflineAudioContext)throw new Error("OfflineAudioContext not supported");const s=new OfflineAudioContext(1,d,e),p=s.createBufferSource();if(p.buffer=l,n>1){const h=s.createChannelSplitter(n),m=s.createChannelMerger(1);p.connect(h);for(let c=0;c<n;c++){const u=s.createGain();u.gain.value=1/n,h.connect(u,c),u.connect(m,0,0)}m.connect(s.destination)}else p.connect(s.destination);p.start(0);try{return await s.startRendering()}catch(h){throw new Error(`Failed to resample audio from ${r}Hz to ${e}Hz: ${h instanceof Error?h.message:String(h)}`)}}function K(l,e){const n=l.length,r=n*2+44,d=new ArrayBuffer(r),s=new DataView(d),p=l.getChannelData(0),h=(c,u)=>{for(let y=0;y<u.length;y++)s.setUint8(c+y,u.charCodeAt(y))};h(0,"RIFF"),s.setUint32(4,r-8,!0),h(8,"WAVE"),h(12,"fmt "),s.setUint32(16,16,!0),s.setUint16(20,1,!0),s.setUint16(22,1,!0),s.setUint32(24,e,!0),s.setUint32(28,e*2,!0),s.setUint16(32,2,!0),s.setUint16(34,16,!0),h(36,"data"),s.setUint32(40,n*2,!0);let m=44;for(let c=0;c<n;c++){const u=Math.max(-1,Math.min(1,p[c]));s.setInt16(m,u*32767,!0),m+=2}return new Blob([d],{type:"audio/wav"})}class W{constructor(){this.wavesurfer=null,this.currentBlobUrl=null,this.events={},this.isPlaying=!1}initialize(e){this.wavesurfer=e,this.setupEventListeners()}setupEventListeners(){this.wavesurfer&&(this.teardownEventListeners(),this.handleTimeUpdate=e=>{this.events.onTimeUpdate?.(e*1e3)},this.handlePause=()=>{this.isPlaying=!1,this.events.onPause?.()},this.handlePlay=()=>{this.isPlaying=!0,this.events.onPlay?.()},this.handleFinish=()=>{this.isPlaying=!1,this.events.onFinish?.()},this.handleReady=()=>{this.events.onReady?.()},this.handleError=e=>{const o=e instanceof Error?e:new Error(String(e));this.events.onError?.(o)},this.wavesurfer.on("timeupdate",this.handleTimeUpdate),this.wavesurfer.on("pause",this.handlePause),this.wavesurfer.on("play",this.handlePlay),this.wavesurfer.on("finish",this.handleFinish),this.wavesurfer.on("ready",this.handleReady),this.wavesurfer.on("error",this.handleError))}setEventHandlers(e){this.events=e}async load(e){if(!this.wavesurfer)throw new Error("WaveSurfer not initialized");this.cleanupPreviousUrl();let o,n=null;try{if(e instanceof Blob)n=URL.createObjectURL(e),o=n;else if(e instanceof ArrayBuffer){const r=new Blob([e]);n=URL.createObjectURL(r),o=n}else o=e;this.currentBlobUrl=n,await this.wavesurfer.load(o)}catch(r){throw this.cleanupPreviousUrl(),r}}async play(){if(!this.wavesurfer)throw new Error("WaveSurfer not initialized");await this.wavesurfer.play()}pause(){this.wavesurfer&&this.wavesurfer.pause()}getDuration(){return this.wavesurfer?this.wavesurfer.getDuration()*1e3:0}getCurrentTime(){return this.wavesurfer?this.wavesurfer.getCurrentTime()*1e3:0}getIsPlaying(){return this.isPlaying}seekToStart(){this.wavesurfer&&this.wavesurfer.seekTo(0)}cleanupPreviousUrl(){this.currentBlobUrl&&(URL.revokeObjectURL(this.currentBlobUrl),this.currentBlobUrl=null)}destroy(){this.pause(),this.cleanupPreviousUrl(),this.wavesurfer&&(this.teardownEventListeners(),this.wavesurfer.empty(),this.wavesurfer=null),this.events={},this.isPlaying=!1,this.handleTimeUpdate=void 0,this.handlePause=void 0,this.handlePlay=void 0,this.handleFinish=void 0,this.handleReady=void 0,this.handleError=void 0}teardownEventListeners(){this.wavesurfer&&(this.handleTimeUpdate&&(this.wavesurfer.un("timeupdate",this.handleTimeUpdate),this.handleTimeUpdate=void 0),this.handlePause&&(this.wavesurfer.un("pause",this.handlePause),this.handlePause=void 0),this.handlePlay&&(this.wavesurfer.un("play",this.handlePlay),this.handlePlay=void 0),this.handleFinish&&(this.wavesurfer.un("finish",this.handleFinish),this.handleFinish=void 0),this.handleReady&&(this.wavesurfer.un("ready",this.handleReady),this.handleReady=void 0),this.handleError&&(this.wavesurfer.un("error",this.handleError),this.handleError=void 0))}}function I(l){return l.name==="NotAllowedError"||l.name==="PermissionDeniedError"||l.message?.toLowerCase().includes("permission denied")}class Q{constructor(e={}){this.wavesurfer=null,this.recordPlugin=null,this.isRecording=!1,this.recordEndResolve=null,this.recordEndReject=null,this.events={},this.options=e}initialize(e,o){this.wavesurfer=e;try{const n={renderRecordedAudio:!1,mimeType:"audio/webm"};this.recordPlugin=e.registerPlugin(o.create(n)),this.setupEventListeners()}catch(n){const r=n instanceof Error?n:new Error(String(n));throw I(r)?(this.events.onPermissionDenied?.(),new Error("Microphone permission denied")):(this.events.onError?.(r),r)}}setupEventListeners(){this.recordPlugin&&(this.recordPlugin.on("record-start",()=>{this.isRecording=!0,this.events.onRecordStart?.()}),this.recordPlugin.on("record-end",e=>{this.isRecording=!1,this.events.onRecordEnd?.(e),this.recordEndResolve&&e&&e.size>0?(this.recordEndResolve(e),this.recordEndResolve=null,this.recordEndReject=null):this.recordEndReject?(this.recordEndReject(new Error("Invalid or empty recording")),this.recordEndResolve=null,this.recordEndReject=null):(this.recordEndResolve=null,this.recordEndReject=null)}),this.recordPlugin.on("record-progress",e=>{this.events.onRecordProgress?.(e)}))}setEventHandlers(e){this.events=e}async startRecording(){if(!this.recordPlugin)throw new Error("Record plugin not initialized");if(this.isRecording)return;const e=typeof this.options.sampleRate=="number"?this.options.sampleRate:void 0,o={};e!==void 0&&(o.sampleRate={ideal:e}),await this.startRecordingWithConstraints(o,e!==void 0)}async startRecordingWithConstraints(e,o){if(!this.recordPlugin)throw new Error("Record plugin not initialized");try{const n=Object.keys(e).length?e:void 0;await this.recordPlugin.startRecording(n)}catch(n){const r=n instanceof Error?n:new Error(String(n));if(I(r))throw this.events.onPermissionDenied?.(),new Error("Microphone permission denied");if(o&&(r.name==="OverconstrainedError"||r.name==="NotReadableError")){this.options.sampleRate=void 0,await this.startRecordingWithConstraints({},!1);return}throw this.events.onError?.(r),r}}async stopRecording(){if(!this.recordPlugin||!this.isRecording)throw new Error("Not currently recording");try{return await new Promise((e,o)=>{this.recordEndResolve=e,this.recordEndReject=o,this.recordPlugin?.stopRecording()})}catch(e){const o=e instanceof Error?e:new Error(String(e));throw this.events.onError?.(o),o}}cancelRecording(){this.recordPlugin&&this.isRecording&&(this.recordPlugin.stopRecording(),this.isRecording=!1,this.recordEndResolve=null,this.recordEndReject=null)}destroy(){this.cancelRecording(),this.recordPlugin&&(this.recordPlugin.destroy(),this.recordPlugin=null),this.wavesurfer=null,this.events={}}}const X=4,Y=4,ee=8,re=0,te=16e3;function se({containerRef:l,sampleRate:e,events:o,waveformPadding:n=0}){const r=Z(),[d,s]=i.useState("idle"),[p,h]=i.useState(null),[m,c]=i.useState(!1),u=i.useRef(null),y=i.useRef(null),a=i.useRef(null),f=i.useRef(o),U=i.useRef(!1),D=i.useRef(!1),E=i.useRef(new Set),P=i.useRef(!1),b=e===void 0?te:e,A=i.useCallback(()=>{E.current.clear(),c(!1),y.current&&(y.current.destroy(),y.current=null),a.current&&(a.current.destroy(),a.current=null),u.current&&(u.current.destroy(),u.current=null),U.current=!1,P.current=!1,s("idle"),h(null)},[]),x=i.useCallback(()=>{const t=Array.from(E.current);E.current.clear(),t.forEach(w=>{w.resolve()})},[]),_=i.useCallback(t=>{c(!1);const w=Array.from(E.current);E.current.clear(),w.forEach(v=>{v.reject(t)})},[]),T=i.useCallback(t=>{const w={onPlay:()=>{c(!0),f.current.onPlaybackPlay?.()},onPause:()=>{c(!1),f.current.onPlaybackPause?.()},onFinish:()=>{c(!1),f.current.onPlaybackFinish?.()},onReady:()=>{x()},onError:v=>{c(!1),_(v),f.current.onError?.(v)}};t.setEventHandlers(w)},[x,_]);i.useEffect(()=>{f.current=o,a.current&&T(a.current)},[o,T]);const S=i.useCallback(async()=>{if(!(U.current||D.current||!l.current)){D.current=!0;try{const[t,w]=await Promise.all([M(()=>import("./wavesurfer.esm.D1Sty35j.js"),[],import.meta.url),M(()=>import("./record.DytFsBUt.js"),[],import.meta.url)]),v=t.default,B=w.default,k=v.create({container:l.current,waveColor:r.colors.primary,progressColor:r.colors.bodyText,height:n>0?$(r.sizes.largestElementHeight)-2*n:"auto",barWidth:X,barGap:Y,barRadius:ee,cursorWidth:re,interact:!0});u.current=k,P.current=!1;const C=new Q({sampleRate:b});C.initialize(k,B),C.setEventHandlers({onRecordProgress:R=>{f.current.onProgressMs?.(R)},onPermissionDenied:()=>{f.current.onPermissionDenied(),s("idle")},onError:R=>{f.current.onError(R),s("idle")}}),y.current=C;const g=new W;g.initialize(k),a.current=g,T(g),U.current=!0}catch(t){const w=t instanceof Error?t:new Error(String(t));f.current.onError?.(w)}finally{D.current=!1}}},[l,r,b,T,n]);i.useEffect(()=>(S(),()=>{A()}),[A,S]),i.useEffect(()=>{const t=u.current;if(t){if(d==="recording"){t.setOptions({waveColor:r.colors.primary,progressColor:r.colors.primary});return}if(P.current){t.setOptions({interact:!0,waveColor:O(r.colors.fadedText40,r.colors.secondaryBg),progressColor:r.colors.bodyText});return}t.setOptions({waveColor:r.colors.primary,progressColor:r.colors.bodyText})}},[d,r.colors.bodyText,r.colors.fadedText40,r.colors.primary,r.colors.secondaryBg]);const F=i.useCallback(async()=>{if(d!=="recording"){if(U.current||await S(),!y.current)throw new Error("Record backend not initialized");u.current&&u.current.setOptions({waveColor:r.colors.primary,progressColor:r.colors.primary}),P.current=!1,await y.current.startRecording(),s("recording"),h(null),c(!1),f.current.onRecordStart?.()}},[d,S,r.colors.primary]),L=i.useCallback(()=>{a.current&&u.current&&(a.current.destroy(),a.current=new W,a.current.initialize(u.current),E.current.clear(),c(!1),T(a.current)),P.current=!1},[T]),z=i.useCallback(()=>{a.current?.seekToStart(),c(!1),P.current=!0,u.current&&u.current.setOptions({interact:!0,waveColor:O(r.colors.fadedText40,r.colors.secondaryBg),progressColor:r.colors.bodyText})},[r.colors.bodyText,r.colors.fadedText40,r.colors.secondaryBg]),H=i.useCallback(async()=>{if(d!=="recording")throw new Error("Not currently recording");if(!y.current||!a.current)throw new Error("Backends not initialized");try{const t=await y.current.stopRecording();h(t),await new Promise((k,C)=>{if(!a.current){C(new Error("Player not initialized"));return}const g={resolve:()=>{E.current.delete(g),k()},reject:R=>{E.current.delete(g),C(R)}};E.current.add(g),a.current.load(t).catch(R=>{E.current.delete(g),C(R instanceof Error?R:new Error(String(R)))})}),s("idle"),c(!1),z();const v={durationMs:a.current?.getDuration()??0,sampleRate:typeof b=="number"?b:null,mimeType:t.type||"audio/webm",size:t.size},B={blob:t,meta:v};return f.current.onRecordReady?.(t),B}catch(t){const w=t instanceof Error?t:new Error(String(t));return c(!1),s("idle"),f.current.onError(w),{blob:new Blob,meta:{durationMs:0,sampleRate:null,mimeType:"audio/webm",size:0}}}},[d,z,b]),j=i.useCallback(async t=>{const w=t??p;if(!w){const v=new Error("No recorded audio to approve");f.current.onError(v);return}try{const v=await q(w,b);await f.current.onApprove?.(v),h(null),s("idle")}catch(v){const B=v instanceof Error?v:new Error(String(v));f.current.onError(B)}},[p,b]),N=i.useCallback(()=>{d==="recording"&&y.current?.cancelRecording(),L(),h(null),s("idle"),c(!1),P.current=!1,f.current.onCancel?.()},[d,L]),V=i.useMemo(()=>({isPlaying:()=>a.current?.getIsPlaying()??!1,play:async()=>{if(!a.current)throw new Error("Player not initialized");await a.current.play()},pause:()=>{a.current?.pause()},load:async t=>{if(U.current||await S(),!a.current)throw new Error("Player not initialized");await a.current.load(t),z()},getCurrentTimeMs:()=>a.current?.getCurrentTime()??0,getDurationMs:()=>a.current?.getDuration()??0}),[z,S]),G=i.useCallback(t=>{f.current=t},[]);return i.useEffect(()=>()=>{A()},[A]),{state:d,isPlaybackPlaying:m,mountRef:l,start:F,stop:H,approve:j,cancel:N,destroy:A,playback:V,setEventHandlers:G}}export{se as u};
1
+ import{l as Z,r as i,aR as M,ab as $,aS as O}from"./index.BRfGUOQ-.js";async function q(l,e=16e3){if(!l||l.size===0)throw new Error("Invalid or empty blob provided");if(!window.AudioContext)throw new Error("AudioContext not supported in this browser");const o=new AudioContext;try{const n=await l.arrayBuffer(),r=await o.decodeAudioData(n),d=e??r.sampleRate,s=await J(r,d);return K(s,d)}finally{o.close()}}async function J(l,e){const{duration:o,numberOfChannels:n,sampleRate:r}=l,d=Math.ceil(o*e);if(!window.OfflineAudioContext)throw new Error("OfflineAudioContext not supported");const s=new OfflineAudioContext(1,d,e),p=s.createBufferSource();if(p.buffer=l,n>1){const h=s.createChannelSplitter(n),m=s.createChannelMerger(1);p.connect(h);for(let c=0;c<n;c++){const u=s.createGain();u.gain.value=1/n,h.connect(u,c),u.connect(m,0,0)}m.connect(s.destination)}else p.connect(s.destination);p.start(0);try{return await s.startRendering()}catch(h){throw new Error(`Failed to resample audio from ${r}Hz to ${e}Hz: ${h instanceof Error?h.message:String(h)}`)}}function K(l,e){const n=l.length,r=n*2+44,d=new ArrayBuffer(r),s=new DataView(d),p=l.getChannelData(0),h=(c,u)=>{for(let y=0;y<u.length;y++)s.setUint8(c+y,u.charCodeAt(y))};h(0,"RIFF"),s.setUint32(4,r-8,!0),h(8,"WAVE"),h(12,"fmt "),s.setUint32(16,16,!0),s.setUint16(20,1,!0),s.setUint16(22,1,!0),s.setUint32(24,e,!0),s.setUint32(28,e*2,!0),s.setUint16(32,2,!0),s.setUint16(34,16,!0),h(36,"data"),s.setUint32(40,n*2,!0);let m=44;for(let c=0;c<n;c++){const u=Math.max(-1,Math.min(1,p[c]));s.setInt16(m,u*32767,!0),m+=2}return new Blob([d],{type:"audio/wav"})}class W{constructor(){this.wavesurfer=null,this.currentBlobUrl=null,this.events={},this.isPlaying=!1}initialize(e){this.wavesurfer=e,this.setupEventListeners()}setupEventListeners(){this.wavesurfer&&(this.teardownEventListeners(),this.handleTimeUpdate=e=>{this.events.onTimeUpdate?.(e*1e3)},this.handlePause=()=>{this.isPlaying=!1,this.events.onPause?.()},this.handlePlay=()=>{this.isPlaying=!0,this.events.onPlay?.()},this.handleFinish=()=>{this.isPlaying=!1,this.events.onFinish?.()},this.handleReady=()=>{this.events.onReady?.()},this.handleError=e=>{const o=e instanceof Error?e:new Error(String(e));this.events.onError?.(o)},this.wavesurfer.on("timeupdate",this.handleTimeUpdate),this.wavesurfer.on("pause",this.handlePause),this.wavesurfer.on("play",this.handlePlay),this.wavesurfer.on("finish",this.handleFinish),this.wavesurfer.on("ready",this.handleReady),this.wavesurfer.on("error",this.handleError))}setEventHandlers(e){this.events=e}async load(e){if(!this.wavesurfer)throw new Error("WaveSurfer not initialized");this.cleanupPreviousUrl();let o,n=null;try{if(e instanceof Blob)n=URL.createObjectURL(e),o=n;else if(e instanceof ArrayBuffer){const r=new Blob([e]);n=URL.createObjectURL(r),o=n}else o=e;this.currentBlobUrl=n,await this.wavesurfer.load(o)}catch(r){throw this.cleanupPreviousUrl(),r}}async play(){if(!this.wavesurfer)throw new Error("WaveSurfer not initialized");await this.wavesurfer.play()}pause(){this.wavesurfer&&this.wavesurfer.pause()}getDuration(){return this.wavesurfer?this.wavesurfer.getDuration()*1e3:0}getCurrentTime(){return this.wavesurfer?this.wavesurfer.getCurrentTime()*1e3:0}getIsPlaying(){return this.isPlaying}seekToStart(){this.wavesurfer&&this.wavesurfer.seekTo(0)}cleanupPreviousUrl(){this.currentBlobUrl&&(URL.revokeObjectURL(this.currentBlobUrl),this.currentBlobUrl=null)}destroy(){this.pause(),this.cleanupPreviousUrl(),this.wavesurfer&&(this.teardownEventListeners(),this.wavesurfer.empty(),this.wavesurfer=null),this.events={},this.isPlaying=!1,this.handleTimeUpdate=void 0,this.handlePause=void 0,this.handlePlay=void 0,this.handleFinish=void 0,this.handleReady=void 0,this.handleError=void 0}teardownEventListeners(){this.wavesurfer&&(this.handleTimeUpdate&&(this.wavesurfer.un("timeupdate",this.handleTimeUpdate),this.handleTimeUpdate=void 0),this.handlePause&&(this.wavesurfer.un("pause",this.handlePause),this.handlePause=void 0),this.handlePlay&&(this.wavesurfer.un("play",this.handlePlay),this.handlePlay=void 0),this.handleFinish&&(this.wavesurfer.un("finish",this.handleFinish),this.handleFinish=void 0),this.handleReady&&(this.wavesurfer.un("ready",this.handleReady),this.handleReady=void 0),this.handleError&&(this.wavesurfer.un("error",this.handleError),this.handleError=void 0))}}function I(l){return l.name==="NotAllowedError"||l.name==="PermissionDeniedError"||l.message?.toLowerCase().includes("permission denied")}class Q{constructor(e={}){this.wavesurfer=null,this.recordPlugin=null,this.isRecording=!1,this.recordEndResolve=null,this.recordEndReject=null,this.events={},this.options=e}initialize(e,o){this.wavesurfer=e;try{const n={renderRecordedAudio:!1,mimeType:"audio/webm"};this.recordPlugin=e.registerPlugin(o.create(n)),this.setupEventListeners()}catch(n){const r=n instanceof Error?n:new Error(String(n));throw I(r)?(this.events.onPermissionDenied?.(),new Error("Microphone permission denied")):(this.events.onError?.(r),r)}}setupEventListeners(){this.recordPlugin&&(this.recordPlugin.on("record-start",()=>{this.isRecording=!0,this.events.onRecordStart?.()}),this.recordPlugin.on("record-end",e=>{this.isRecording=!1,this.events.onRecordEnd?.(e),this.recordEndResolve&&e&&e.size>0?(this.recordEndResolve(e),this.recordEndResolve=null,this.recordEndReject=null):this.recordEndReject?(this.recordEndReject(new Error("Invalid or empty recording")),this.recordEndResolve=null,this.recordEndReject=null):(this.recordEndResolve=null,this.recordEndReject=null)}),this.recordPlugin.on("record-progress",e=>{this.events.onRecordProgress?.(e)}))}setEventHandlers(e){this.events=e}async startRecording(){if(!this.recordPlugin)throw new Error("Record plugin not initialized");if(this.isRecording)return;const e=typeof this.options.sampleRate=="number"?this.options.sampleRate:void 0,o={};e!==void 0&&(o.sampleRate={ideal:e}),await this.startRecordingWithConstraints(o,e!==void 0)}async startRecordingWithConstraints(e,o){if(!this.recordPlugin)throw new Error("Record plugin not initialized");try{const n=Object.keys(e).length?e:void 0;await this.recordPlugin.startRecording(n)}catch(n){const r=n instanceof Error?n:new Error(String(n));if(I(r))throw this.events.onPermissionDenied?.(),new Error("Microphone permission denied");if(o&&(r.name==="OverconstrainedError"||r.name==="NotReadableError")){this.options.sampleRate=void 0,await this.startRecordingWithConstraints({},!1);return}throw this.events.onError?.(r),r}}async stopRecording(){if(!this.recordPlugin||!this.isRecording)throw new Error("Not currently recording");try{return await new Promise((e,o)=>{this.recordEndResolve=e,this.recordEndReject=o,this.recordPlugin?.stopRecording()})}catch(e){const o=e instanceof Error?e:new Error(String(e));throw this.events.onError?.(o),o}}cancelRecording(){this.recordPlugin&&this.isRecording&&(this.recordPlugin.stopRecording(),this.isRecording=!1,this.recordEndResolve=null,this.recordEndReject=null)}destroy(){this.cancelRecording(),this.recordPlugin&&(this.recordPlugin.destroy(),this.recordPlugin=null),this.wavesurfer=null,this.events={}}}const X=4,Y=4,ee=8,re=0,te=16e3;function se({containerRef:l,sampleRate:e,events:o,waveformPadding:n=0}){const r=Z(),[d,s]=i.useState("idle"),[p,h]=i.useState(null),[m,c]=i.useState(!1),u=i.useRef(null),y=i.useRef(null),a=i.useRef(null),f=i.useRef(o),U=i.useRef(!1),D=i.useRef(!1),E=i.useRef(new Set),P=i.useRef(!1),b=e===void 0?te:e,A=i.useCallback(()=>{E.current.clear(),c(!1),y.current&&(y.current.destroy(),y.current=null),a.current&&(a.current.destroy(),a.current=null),u.current&&(u.current.destroy(),u.current=null),U.current=!1,P.current=!1,s("idle"),h(null)},[]),x=i.useCallback(()=>{const t=Array.from(E.current);E.current.clear(),t.forEach(w=>{w.resolve()})},[]),_=i.useCallback(t=>{c(!1);const w=Array.from(E.current);E.current.clear(),w.forEach(v=>{v.reject(t)})},[]),T=i.useCallback(t=>{const w={onPlay:()=>{c(!0),f.current.onPlaybackPlay?.()},onPause:()=>{c(!1),f.current.onPlaybackPause?.()},onFinish:()=>{c(!1),f.current.onPlaybackFinish?.()},onReady:()=>{x()},onError:v=>{c(!1),_(v),f.current.onError?.(v)}};t.setEventHandlers(w)},[x,_]);i.useEffect(()=>{f.current=o,a.current&&T(a.current)},[o,T]);const S=i.useCallback(async()=>{if(!(U.current||D.current||!l.current)){D.current=!0;try{const[t,w]=await Promise.all([M(()=>import("./wavesurfer.esm.D1Sty35j.js"),[],import.meta.url),M(()=>import("./record.DytFsBUt.js"),[],import.meta.url)]),v=t.default,B=w.default,k=v.create({container:l.current,waveColor:r.colors.primary,progressColor:r.colors.bodyText,height:n>0?$(r.sizes.largestElementHeight)-2*n:"auto",barWidth:X,barGap:Y,barRadius:ee,cursorWidth:re,interact:!0});u.current=k,P.current=!1;const C=new Q({sampleRate:b});C.initialize(k,B),C.setEventHandlers({onRecordProgress:R=>{f.current.onProgressMs?.(R)},onPermissionDenied:()=>{f.current.onPermissionDenied(),s("idle")},onError:R=>{f.current.onError(R),s("idle")}}),y.current=C;const g=new W;g.initialize(k),a.current=g,T(g),U.current=!0}catch(t){const w=t instanceof Error?t:new Error(String(t));f.current.onError?.(w)}finally{D.current=!1}}},[l,r,b,T,n]);i.useEffect(()=>(S(),()=>{A()}),[A,S]),i.useEffect(()=>{const t=u.current;if(t){if(d==="recording"){t.setOptions({waveColor:r.colors.primary,progressColor:r.colors.primary});return}if(P.current){t.setOptions({interact:!0,waveColor:O(r.colors.fadedText40,r.colors.secondaryBg),progressColor:r.colors.bodyText});return}t.setOptions({waveColor:r.colors.primary,progressColor:r.colors.bodyText})}},[d,r.colors.bodyText,r.colors.fadedText40,r.colors.primary,r.colors.secondaryBg]);const F=i.useCallback(async()=>{if(d!=="recording"){if(U.current||await S(),!y.current)throw new Error("Record backend not initialized");u.current&&u.current.setOptions({waveColor:r.colors.primary,progressColor:r.colors.primary}),P.current=!1,await y.current.startRecording(),s("recording"),h(null),c(!1),f.current.onRecordStart?.()}},[d,S,r.colors.primary]),L=i.useCallback(()=>{a.current&&u.current&&(a.current.destroy(),a.current=new W,a.current.initialize(u.current),E.current.clear(),c(!1),T(a.current)),P.current=!1},[T]),z=i.useCallback(()=>{a.current?.seekToStart(),c(!1),P.current=!0,u.current&&u.current.setOptions({interact:!0,waveColor:O(r.colors.fadedText40,r.colors.secondaryBg),progressColor:r.colors.bodyText})},[r.colors.bodyText,r.colors.fadedText40,r.colors.secondaryBg]),H=i.useCallback(async()=>{if(d!=="recording")throw new Error("Not currently recording");if(!y.current||!a.current)throw new Error("Backends not initialized");try{const t=await y.current.stopRecording();h(t),await new Promise((k,C)=>{if(!a.current){C(new Error("Player not initialized"));return}const g={resolve:()=>{E.current.delete(g),k()},reject:R=>{E.current.delete(g),C(R)}};E.current.add(g),a.current.load(t).catch(R=>{E.current.delete(g),C(R instanceof Error?R:new Error(String(R)))})}),s("idle"),c(!1),z();const v={durationMs:a.current?.getDuration()??0,sampleRate:typeof b=="number"?b:null,mimeType:t.type||"audio/webm",size:t.size},B={blob:t,meta:v};return f.current.onRecordReady?.(t),B}catch(t){const w=t instanceof Error?t:new Error(String(t));return c(!1),s("idle"),f.current.onError(w),{blob:new Blob,meta:{durationMs:0,sampleRate:null,mimeType:"audio/webm",size:0}}}},[d,z,b]),j=i.useCallback(async t=>{const w=t??p;if(!w){const v=new Error("No recorded audio to approve");f.current.onError(v);return}try{const v=await q(w,b);await f.current.onApprove?.(v),h(null),s("idle")}catch(v){const B=v instanceof Error?v:new Error(String(v));f.current.onError(B)}},[p,b]),N=i.useCallback(()=>{d==="recording"&&y.current?.cancelRecording(),L(),h(null),s("idle"),c(!1),P.current=!1,f.current.onCancel?.()},[d,L]),V=i.useMemo(()=>({isPlaying:()=>a.current?.getIsPlaying()??!1,play:async()=>{if(!a.current)throw new Error("Player not initialized");await a.current.play()},pause:()=>{a.current?.pause()},load:async t=>{if(U.current||await S(),!a.current)throw new Error("Player not initialized");await a.current.load(t),z()},getCurrentTimeMs:()=>a.current?.getCurrentTime()??0,getDurationMs:()=>a.current?.getDuration()??0}),[z,S]),G=i.useCallback(t=>{f.current=t},[]);return i.useEffect(()=>()=>{A()},[A]),{state:d,isPlaybackPlaying:m,mountRef:l,start:F,stop:H,approve:j,cancel:N,destroy:A,playback:V,setEventHandlers:G}}export{se as u};
@@ -1 +1 @@
1
- import{h as l,k as h,j as s,d as n}from"./index.01VsD2h1.js";const o=t=>{const a=e=>{const{width:i,elementRef:c}=h();return s(n,{ref:c,children:s(t,{...e,width:i})})};return a.displayName=`withCalculatedWidth(${t.displayName||t.name})`,l(a,t)};export{o as w};
1
+ import{h as l,k as h,j as s,d as n}from"./index.BRfGUOQ-.js";const o=t=>{const a=e=>{const{width:i,elementRef:c}=h();return s(n,{ref:c,children:s(t,{...e,width:i})})};return a.displayName=`withCalculatedWidth(${t.displayName||t.name})`,l(a,t)};export{o as w};
@@ -1 +1 @@
1
- import{r as n,F as f,b7 as p,b8 as h,l as x,k as y,j as i,h as g}from"./index.01VsD2h1.js";const m=n.createContext(null);m.displayName="ElementFullscreenContext";const w=f("div",{target:"e5bcvgj0"})(({theme:e,isExpanded:t})=>({width:"100%",height:"100%",...t?{position:"fixed",top:0,left:0,bottom:0,right:0,background:e.colors.bgColor,zIndex:e.zIndices.fullscreenWrapper,padding:e.spacing.md,paddingTop:e.sizes.fullScreenHeaderHeight,overflow:"auto",display:"flex",alignItems:"center",justifyContent:"center"}:{}})),C=()=>{const{setFullScreen:e}=n.useContext(p),[t,s]=n.useState(!1),{fullHeight:a,fullWidth:c}=h(),l=n.useCallback(r=>{s(r),e(r)},[e]),u=n.useCallback(()=>{document.body.style.overflow="hidden",l(!0)},[l]),o=n.useCallback(()=>{document.body.style.overflow="unset",l(!1)},[l]),d=n.useCallback(r=>{r.keyCode===27&&t&&o()},[o,t]);return n.useEffect(()=>(document.addEventListener("keydown",d,!1),()=>{document.removeEventListener("keydown",d,!1)}),[d]),n.useMemo(()=>({expanded:t,zoomIn:u,zoomOut:o,fullHeight:a,fullWidth:c}),[t,u,o,a,c])},F=({children:e})=>{const t=x(),{expanded:s,fullHeight:a,fullWidth:c,zoomIn:l,zoomOut:u}=C(),{width:o,elementRef:d}=y(),r=n.useMemo(()=>({width:s?c:o,height:s?a:void 0,expanded:s,expand:l,collapse:u}),[s,a,c,o,l,u]);return i(m.Provider,{value:r,children:i(w,{ref:d,isExpanded:s,"data-testid":"stFullScreenFrame",theme:t,children:e})})};function S(e){const t=s=>i(F,{children:i(e,{...s})});return t.displayName=`withFullScreenWrapper(${e.displayName||e.name})`,g(t,e)}export{m as E,S as w};
1
+ import{r as n,F as f,b7 as p,b8 as h,l as x,k as y,j as i,h as g}from"./index.BRfGUOQ-.js";const m=n.createContext(null);m.displayName="ElementFullscreenContext";const w=f("div",{target:"e5bcvgj0"})(({theme:e,isExpanded:t})=>({width:"100%",height:"100%",...t?{position:"fixed",top:0,left:0,bottom:0,right:0,background:e.colors.bgColor,zIndex:e.zIndices.fullscreenWrapper,padding:e.spacing.md,paddingTop:e.sizes.fullScreenHeaderHeight,overflow:"auto",display:"flex",alignItems:"center",justifyContent:"center"}:{}})),C=()=>{const{setFullScreen:e}=n.useContext(p),[t,s]=n.useState(!1),{fullHeight:a,fullWidth:c}=h(),l=n.useCallback(r=>{s(r),e(r)},[e]),u=n.useCallback(()=>{document.body.style.overflow="hidden",l(!0)},[l]),o=n.useCallback(()=>{document.body.style.overflow="unset",l(!1)},[l]),d=n.useCallback(r=>{r.keyCode===27&&t&&o()},[o,t]);return n.useEffect(()=>(document.addEventListener("keydown",d,!1),()=>{document.removeEventListener("keydown",d,!1)}),[d]),n.useMemo(()=>({expanded:t,zoomIn:u,zoomOut:o,fullHeight:a,fullWidth:c}),[t,u,o,a,c])},F=({children:e})=>{const t=x(),{expanded:s,fullHeight:a,fullWidth:c,zoomIn:l,zoomOut:u}=C(),{width:o,elementRef:d}=y(),r=n.useMemo(()=>({width:s?c:o,height:s?a:void 0,expanded:s,expand:l,collapse:u}),[s,a,c,o,l,u]);return i(m.Provider,{value:r,children:i(w,{ref:d,isExpanded:s,"data-testid":"stFullScreenFrame",theme:t,children:e})})};function S(e){const t=s=>i(F,{children:i(e,{...s})});return t.displayName=`withFullScreenWrapper(${e.displayName||e.name})`,g(t,e)}export{m as E,S as w};
streamlit/user_info.py CHANGED
@@ -301,8 +301,9 @@ def logout() -> None:
301
301
  """Logout the current user.
302
302
 
303
303
  This command removes the user's information from ``st.user``,
304
- deletes their identity cookie, and redirects them back to your app's home
305
- page. This creates a new session.
304
+ deletes their identity cookie, and redirects them to perform a proper
305
+ logout from the OAuth provider (if available) before returning to your
306
+ app's home page. This creates a new session.
306
307
 
307
308
  If the user has multiple sessions open in the same browser,
308
309
  ``st.user`` will not be cleared in any other session.
@@ -311,8 +312,9 @@ def logout() -> None:
311
312
  ``st.logout()`` within that session to update ``st.user``.
312
313
 
313
314
  .. Note::
314
- This does not log the user out of their underlying account from the
315
- identity provider.
315
+ If the OAuth provider supports OIDC end_session_endpoint in their
316
+ server metadata, the user will be logged out from the identity provider
317
+ as well. If not available, only local logout is performed.
316
318
 
317
319
  Example
318
320
  -------
@@ -247,9 +247,9 @@ class BrowserWebSocketHandler(WebSocketHandler, SessionClient):
247
247
  # See the NOTE in the docstring of the `select_subprotocol` method above
248
248
  # for a detailed explanation of why this is done.
249
249
  existing_session_id = ws_protocols[2]
250
- except KeyError:
250
+ except (KeyError, json.JSONDecodeError):
251
251
  # Just let existing_session_id=None if we run into any error while trying to
252
- # extract it from the Sec-Websocket-Protocol header.
252
+ # extract it from the Sec-Websocket-Protocol header or parsing cookie JSON.
253
253
  pass
254
254
 
255
255
  # Map in any user-configured headers. Note that these override anything coming
@@ -13,8 +13,9 @@
13
13
  # limitations under the License.
14
14
  from __future__ import annotations
15
15
 
16
+ import json
16
17
  from typing import Any, Final, cast
17
- from urllib.parse import urlparse
18
+ from urllib.parse import urlencode, urlparse
18
19
 
19
20
  import tornado.web
20
21
 
@@ -23,6 +24,8 @@ from streamlit.auth_util import (
23
24
  clear_cookie_and_chunks,
24
25
  decode_provider_token,
25
26
  generate_default_provider_section,
27
+ get_cookie_with_chunks,
28
+ get_redirect_uri,
26
29
  get_secrets_auth_section,
27
30
  set_cookie_with_chunks,
28
31
  )
@@ -41,7 +44,7 @@ def create_oauth_client(provider: str) -> tuple[TornadoOAuth2App, str]:
41
44
  """Create an OAuth client for the given provider based on secrets.toml configuration."""
42
45
  auth_section = get_secrets_auth_section()
43
46
  if auth_section:
44
- redirect_uri = auth_section.get("redirect_uri", None)
47
+ redirect_uri = get_redirect_uri(auth_section) or "/"
45
48
  config = auth_section.to_dict()
46
49
  else:
47
50
  config = {}
@@ -169,16 +172,99 @@ class AuthLoginHandler(AuthHandlerMixin, tornado.web.RequestHandler):
169
172
  class AuthLogoutHandler(AuthHandlerMixin, tornado.web.RequestHandler):
170
173
  def get(self) -> None:
171
174
  self.clear_auth_cookie()
172
- self.redirect_to_base()
175
+
176
+ provider_logout_url = self._get_provider_logout_url()
177
+ if provider_logout_url:
178
+ self.redirect(provider_logout_url)
179
+ else:
180
+ self.redirect_to_base()
181
+
182
+ def _get_redirect_uri(self) -> str | None:
183
+ auth_section = get_secrets_auth_section()
184
+ if not auth_section:
185
+ return None
186
+
187
+ redirect_uri = get_redirect_uri(auth_section)
188
+ if not redirect_uri:
189
+ return None
190
+
191
+ if not redirect_uri.endswith("/oauth2callback"):
192
+ _LOGGER.warning("Redirect URI does not end with /oauth2callback")
193
+ return None
194
+
195
+ return redirect_uri
196
+
197
+ def _get_provider_logout_url(self) -> str | None:
198
+ """Get the OAuth provider's logout URL from OIDC metadata."""
199
+ cookie_value = get_cookie_with_chunks(self._get_signed_cookie, AUTH_COOKIE_NAME)
200
+
201
+ if not cookie_value:
202
+ return None
203
+
204
+ try:
205
+ user_info = json.loads(cookie_value)
206
+ provider = user_info.get("provider")
207
+ if not provider:
208
+ return None
209
+
210
+ client, _ = create_oauth_client(provider)
211
+
212
+ metadata = client.load_server_metadata()
213
+ end_session_endpoint = metadata.get("end_session_endpoint")
214
+
215
+ if not end_session_endpoint:
216
+ _LOGGER.info("No end_session_endpoint found for provider %s", provider)
217
+ return None
218
+
219
+ # Use redirect_uri (i.e. /oauth2callback) for post_logout_redirect_uri
220
+ # This is safer than redirecting to root as some providers seem to
221
+ # require url to be in a whitelist /oauth2callback should be whitelisted
222
+ redirect_uri = self._get_redirect_uri()
223
+ if redirect_uri is None:
224
+ _LOGGER.info("Redirect url could not be determined")
225
+ return None
226
+
227
+ logout_params = {
228
+ "client_id": client.client_id,
229
+ "post_logout_redirect_uri": redirect_uri,
230
+ }
231
+
232
+ # Add id_token_hint to logout params if it is available
233
+ tokens_cookie_value = get_cookie_with_chunks(
234
+ self._get_signed_cookie, TOKENS_COOKIE_NAME
235
+ )
236
+ if tokens_cookie_value:
237
+ try:
238
+ tokens = json.loads(tokens_cookie_value)
239
+ id_token = tokens.get("id_token")
240
+ if id_token:
241
+ logout_params["id_token_hint"] = id_token
242
+ except (json.JSONDecodeError, TypeError):
243
+ _LOGGER.exception(
244
+ "Error, invalid tokens cookie value.",
245
+ )
246
+ return None
247
+
248
+ return f"{end_session_endpoint}?{urlencode(logout_params)}"
249
+
250
+ except Exception as e:
251
+ _LOGGER.warning("Failed to get provider logout URL: %s", e)
252
+ return None
173
253
 
174
254
 
175
255
  class AuthCallbackHandler(AuthHandlerMixin, tornado.web.RequestHandler):
176
256
  async def get(self) -> None:
177
257
  provider = self._get_provider_by_state()
258
+ if provider is None:
259
+ # This could be a logout redirect (no state parameter) or invalid state
260
+ # In both cases, redirect to base
261
+ self.redirect_to_base()
262
+ return
263
+
178
264
  origin = self._get_origin_from_secrets()
179
265
  if origin is None:
180
266
  _LOGGER.error(
181
- "Error, misconfigured origin for `redirect_uri` in secrets. ",
267
+ "Error, misconfigured origin for `redirect_uri` in secrets.",
182
268
  )
183
269
  self.redirect_to_base()
184
270
  return
@@ -200,34 +286,25 @@ class AuthCallbackHandler(AuthHandlerMixin, tornado.web.RequestHandler):
200
286
  self.redirect_to_base()
201
287
  return
202
288
 
203
- if provider is None:
204
- # See https://github.com/streamlit/streamlit/issues/13101
205
- _LOGGER.warning(
206
- "Missing provider for OAuth callback; this often indicates a stale "
207
- "or replayed callback (for example, from browser back/forward "
208
- "navigation).",
209
- )
210
- self.redirect_to_base()
211
- return
212
-
213
289
  client, _ = create_oauth_client(provider)
214
290
  token = client.authorize_access_token(self)
215
291
  user = cast("dict[str, Any]", token.get("userinfo"))
216
292
 
217
- cookie_value = dict(user, origin=origin, is_logged_in=True)
293
+ cookie_value = dict(user, origin=origin, is_logged_in=True, provider=provider)
218
294
  tokens = {k: token[k] for k in ["id_token", "access_token"] if k in token}
219
295
 
220
296
  if user:
221
297
  self.set_auth_cookie(cookie_value, tokens)
222
298
  # Keep tokens in a separate cookie to avoid hitting the size limit
223
299
  else:
224
- _LOGGER.error(
225
- "Error, missing user info.",
226
- )
300
+ _LOGGER.error("Error, missing user info.")
227
301
  self.redirect_to_base()
228
302
 
229
303
  def _get_provider_by_state(self) -> str | None:
230
- state_code_from_url = self.get_argument("state")
304
+ state_code_from_url = self.get_argument("state", None)
305
+ if state_code_from_url is None:
306
+ return None
307
+
231
308
  current_cache_keys = list(auth_cache.get_dict().keys())
232
309
  state_provider_mapping = {}
233
310
  for key in current_cache_keys:
@@ -253,7 +330,7 @@ class AuthCallbackHandler(AuthHandlerMixin, tornado.web.RequestHandler):
253
330
  redirect_uri = None
254
331
  auth_section = get_secrets_auth_section()
255
332
  if auth_section:
256
- redirect_uri = auth_section.get("redirect_uri", None)
333
+ redirect_uri = get_redirect_uri(auth_section)
257
334
 
258
335
  if not redirect_uri:
259
336
  return None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: streamlit-nightly
3
- Version: 1.52.3.dev20260111
3
+ Version: 1.52.3.dev20260112
4
4
  Summary: A faster way to build and share data apps
5
5
  Home-page: https://streamlit.io
6
6
  Author: Snowflake Inc
@@ -1,6 +1,6 @@
1
1
  streamlit/__init__.py,sha256=L0AmWTfBy5bfEsfyLRJAOMVp3g2QzhAkWMe7VyQ1OlE,9796
2
2
  streamlit/__main__.py,sha256=4vltvfI348h2yIOUohsc2DtG-lclcjCAdR1mewGeMck,868
3
- streamlit/auth_util.py,sha256=rOqNOkTEJ8uj5tHPCOKwKWLKJMas_XZGhcCWCJZ0JhY,17485
3
+ streamlit/auth_util.py,sha256=Uq-GbOb-EUDADvLG54yoY388sIJvgCdVR9khAJ9gA4Q,18189
4
4
  streamlit/cli_util.py,sha256=ckW8XHbiCgepolHeBrg7GJ-gptkR_7tRMOoO9_1_dck,3466
5
5
  streamlit/column_config.py,sha256=JAiL6KDj9bcS-quoiWK8D2rKzG1LGWnY0b5xwY4lVfs,1497
6
6
  streamlit/config.py,sha256=AMJT96hCmFUvECkuJPNtU4ff5FguvPu0TlyvZm6V47o,89074
@@ -30,7 +30,7 @@ streamlit/temporary_directory.py,sha256=EWGVi2kkoIgiKK_GfU-A763c7QkpcHoAOJrKPyqW
30
30
  streamlit/time_util.py,sha256=vXszmS-05FXEydBSjDjTw4WZ9Q7n8J23tC77cWbTDeA,2493
31
31
  streamlit/type_util.py,sha256=zrTFAlNCT_zuNb3Ww32A1gqQUAw8gHaor5DddVwM9wk,13890
32
32
  streamlit/url_util.py,sha256=SW1DQvlU9m-I5JtGpPAY-En-PYr7lF_uy11iOjhsfpA,3433
33
- streamlit/user_info.py,sha256=14nWIQSCT4OiATCiohd4_y7ErYz4t2wnGpXtBay6QeQ,25051
33
+ streamlit/user_info.py,sha256=HqPJZcDzKTvKzfyz95ezrjbaXlKJZnehDMZf48UPprU,25251
34
34
  streamlit/util.py,sha256=z0iqF3_Nz6bd5pBkkEmavlQ3v-PVB5XMqd43JWVPw50,3625
35
35
  streamlit/version.py,sha256=Ume7B4nzDwHGX6gL-F-Xz9tdHMo0YSn96vyNdnHzvVg,763
36
36
  streamlit/commands/__init__.py,sha256=iZwXNLk8xCKTqIiR1dIs0i-phfx1ipLkhGasCEwkD2Q,616
@@ -400,116 +400,116 @@ streamlit/runtime/state/session_state.py,sha256=Ht_GRl_frv9SEBD8onC25J4Z4HAJsZfX
400
400
  streamlit/runtime/state/session_state_proxy.py,sha256=RI9QquUlMgK6XyUYF3PmpN1mfP6q-_SBju5pIFTrdRU,5585
401
401
  streamlit/runtime/state/widgets.py,sha256=CMFaIT-M-59TrskR1zt9eeoea2JJ8_YbG64fbSyd8VA,6057
402
402
  streamlit/static/favicon.png,sha256=if5cVgw7azxKOvV5FpGixga7JLn23rfnHcy1CdWI1-E,1019
403
- streamlit/static/index.html,sha256=Df5y7LklGSKuUrF8Fetqx6XunxmIkOUZXW8CdcPs-Cs,1522
404
- streamlit/static/manifest.json,sha256=k1x0U6P3O4uyWYlijvWKPAsTCf6qYLK91lZcVZ-d6tk,54244
403
+ streamlit/static/index.html,sha256=CLOtDxabW-EVAp9YYxVKJlI9TYfS_yN0SrBB62aKDsw,1522
404
+ streamlit/static/manifest.json,sha256=OQYi2nWhsWFQk0WuFX5QYTkUZDrtYWy7JaX6lBlPxEg,54244
405
405
  streamlit/static/static/css/index.BUP6fTcR.css,sha256=w3J3tj919duL4vtYdmJSXTglGUogRuPuwX9pZd4N9aU,30331
406
406
  streamlit/static/static/css/index.BuwrT-ty.css,sha256=Qw-234aemgZdlkzLcmPcc4L5g3WaneJBM0uTqd0L2So,35080
407
407
  streamlit/static/static/css/index.DgR7E2CV.css,sha256=XaAj_mKlhpcUTyfDwggG3Sd2DgaiU4U749jeLKb9FBI,12683
408
- streamlit/static/static/js/ErrorOutline.esm.D0HiUB0L.js,sha256=U0Zo5akzQbw06f_mJyYtyzDvDx7fzlUW_WF-9efOL9M,499
409
- streamlit/static/static/js/FileDownload.esm.BuUS-pfi.js,sha256=4nj0loSy-jRerAxtfc-jAYrClv2zuPCjJixqZ6AvJzU,918
410
- streamlit/static/static/js/FileHelper.Pf8URFng.js,sha256=0ckO67NANTcNgnAUJJh0D3ns_WDoVij7c-BUNMvkZxI,61226
411
- streamlit/static/static/js/FormClearHelper.By4vKj6A.js,sha256=LDE7yMwjHmO5PTVVhsc4As91LC5frZ6lGMj19khQTmE,611
408
+ streamlit/static/static/js/ErrorOutline.esm.BjVqd_6R.js,sha256=5-R3npf6MGc7VwemiIx-Tp6yY6Iu--ifhxp4Kfl7TyE,499
409
+ streamlit/static/static/js/FileDownload.esm.DJCSsghl.js,sha256=c7YxsZfdMdsAJcp_LvBB6E3K-fa4LYrPZ65TMaMHBr8,918
410
+ streamlit/static/static/js/FileHelper.C---TH7o.js,sha256=eo_Lmh6fG4hxfoUwsIkDtrgMN4TdB2mRb0odp9fuvkk,61226
411
+ streamlit/static/static/js/FormClearHelper.C-6BC487.js,sha256=HrK3VEzexOni7zY9etv59JZsg4dQniAkCmHnazm-p_k,611
412
412
  streamlit/static/static/js/IFrameUtil.DefezniK.js,sha256=vHcPNVM2AZouiO3NiM8fcBjO0JE9niGWSdld1T5AQeQ,564
413
- streamlit/static/static/js/InputInstructions.BiaGyIXk.js,sha256=zx96gHC6XnynJ598T17C47PXWoStq0ho3vWUAw2Yj5U,919
414
- streamlit/static/static/js/Particles.2-EdjYhR.js,sha256=msg17QxDLUYh9iWPad9DKriiS9V02wbnFDu4ifPUU10,615
415
- streamlit/static/static/js/ProgressBar.Dgbh0B0d.js,sha256=3323DWzfnmcFHC5Kvoox1hgoc8SQhJbxMBolusT-6Y0,13320
416
- streamlit/static/static/js/StreamlitSyntaxHighlighter.DSl8Wr3R.js,sha256=uFb6ZUJ75wfKd-ZbWKjCJ13mEQvMjawl3nh5qm1Dm58,1620541
417
- streamlit/static/static/js/TableChart.esm.MOwyTUPh.js,sha256=0m5H2gDWrz0hWg9TO9C5oje8z0YdF6x0-3QJItnpr5k,526
418
- streamlit/static/static/js/Toolbar.CowuXIFr.js,sha256=dXONwcS7_uZH8HcI5wbrxOEnPZresFO1e7XZrBexjVs,2916
413
+ streamlit/static/static/js/InputInstructions.sxc3InCI.js,sha256=jJk3A9wr2oycu-hpAL6ToiBastLIMrNJuZJ2tdzsywo,919
414
+ streamlit/static/static/js/Particles.S8yD7iW-.js,sha256=eo7S24dW3YMMuj-98wahceTom7QTBqvAeQyQRYtqwZg,615
415
+ streamlit/static/static/js/ProgressBar.BiYsyZCC.js,sha256=apBw9UWVM-7uMnsJ8bW2gBm4Hvo-y2uAKw5w9HE433Y,13320
416
+ streamlit/static/static/js/StreamlitSyntaxHighlighter.9jZF8jX1.js,sha256=JhHRXXRp1UNl25UkBzF0J4EyVNBZHWX5o7Phj79Dkvs,1620541
417
+ streamlit/static/static/js/TableChart.esm.BdA4Q1rZ.js,sha256=h7HW0vVXcdtPQ77LO_N5e8LEEdTms3r3dxGsMIDgFxc,526
418
+ streamlit/static/static/js/Toolbar.B9DaaDfN.js,sha256=e1OHz6kNDXMFRh40V1EfmhQkjO6meyspsRXhw0LlDag,2916
419
419
  streamlit/static/static/js/UploadFileInfo.Dr-zDST7.js,sha256=5a_iq85gVIuXJJ3oRHHpEtx73pm7QA2BwIcrkQUkpiI,175
420
- streamlit/static/static/js/WidgetLabelHelpIconInline.BdGIJQe4.js,sha256=G2cZ3pwe7ZdznCB-1fKby1Etu0NuwLbQrfKfxfMxbEs,348
420
+ streamlit/static/static/js/WidgetLabelHelpIconInline.DxODTLS2.js,sha256=D8i9Tp4i61xLJlhEhFrb7DXd5elT1OizasBXQBnGwPE,348
421
421
  streamlit/static/static/js/_arrayIncludes.B19Iyn2B.js,sha256=JP-DCSLwDMyVDLPMC1_99tqHMMNzTx8SwAT1rVKXIAA,127
422
422
  streamlit/static/static/js/_baseIndexOf.BTknn6Gb.js,sha256=qpBWPWZljEJmX5vLgn6Tup6ZhVl54fGKj7xVTKZ2Ep0,258
423
- streamlit/static/static/js/base-input.CHPo5oJ1.js,sha256=qvouqrjZB2MGmIlHm1zOf8IQPxpLLYwIe_uH-FhgeA8,21773
424
- streamlit/static/static/js/checkbox.Dkt2TQVS.js,sha256=3h1QL464h8wgEi0K6o_2d5uBP40OTkoCukKamVOoZfM,11245
425
- streamlit/static/static/js/createDownloadLinkElement.BaE-_v8I.js,sha256=IWFwS0SdXJoRVsJUObPjGj2mS-Ayowie3KuSUY1fUDo,388
426
- streamlit/static/static/js/data-grid-overlay-editor.C1ncL-Nr.js,sha256=zdhcGkFWuuSzkOes-qrNFrmMNo-6-ik0OoCIL-VxVic,4399
427
- streamlit/static/static/js/downloader.yaq2AzD9.js,sha256=CZyln3xQvqqNDlFubwY_HdJz5XHUUXtwKrDDvhbAQqM,2510
428
- streamlit/static/static/js/embed.DJJvCVz2.js,sha256=Rc306xtXf6lPadFMb_33-5C12M9MaZ3QoOeuM9PY2ak,831630
429
- streamlit/static/static/js/es6.D2jK98VU.js,sha256=0f815QAQHggEoGeCb6eWta2smuy0EBKBrJyEmD5EDxI,14634
423
+ streamlit/static/static/js/base-input.Gf1cKuQR.js,sha256=cfy3ljRxQaYFhgXA9p3fznBFPIB6UP6goCnrJ51zoR8,21773
424
+ streamlit/static/static/js/checkbox.CnoNruf3.js,sha256=5lIBmC7kF1FcWWKRy5q-mC3-JomA9dnbIyDXqDgmXec,11245
425
+ streamlit/static/static/js/createDownloadLinkElement.B48AepiL.js,sha256=ycbevSCL3N1_MtxoLJ1fGfNdegGfufkgw0lq8WBSXW8,388
426
+ streamlit/static/static/js/data-grid-overlay-editor.Cmdq9aqU.js,sha256=FMCio9bts2Qf0QhcddpLFsZUoHCVM9sJIEdVx1RRxD0,4399
427
+ streamlit/static/static/js/downloader.CQLoQdMX.js,sha256=JyDcdUlGVanRLn5rkvyl_5RpbI0Lsk57WlzWFDwf_Zo,2510
428
+ streamlit/static/static/js/embed.oKwocwU8.js,sha256=QVGyasa9DuBUNO5OzAiW33nOrCOT2O2VdLmD7kTE0Mk,831630
429
+ streamlit/static/static/js/es6.BRxlY_y5.js,sha256=zTG8o5V6qAgNP0UO1fhD26ZaOuS5udKbJY5nxBvNMwo,14634
430
430
  streamlit/static/static/js/formatMoment.C6Hwn6X5.js,sha256=lIQHfN3RbfShBuVFfO9t_az4TUNV678ZJJSQYqRuANY,575
431
- streamlit/static/static/js/formatNumber.Cxr2q_Sk.js,sha256=JIzSgx8DQ6wvWb3NrrC1JG8wHlwTENPKY40WYgbF7ng,1818
432
- streamlit/static/static/js/iconPosition.5dHEZYw2.js,sha256=8baDLRU4TwRv4f4wZMDQ2AEwDv10BHP462GyQWrePts,203
433
- streamlit/static/static/js/iframeResizer.contentWindow.Cedt4qbc.js,sha256=aDKD7fTMXVCZLl38st4DWHcYXM9Greu126bIIPmqVPE,14409
434
- streamlit/static/static/js/index.01VsD2h1.js,sha256=qQYPo1ZrNAMz3iaiBZOcn-YsAYOlCqFO9Zq-2mh5MG0,2295369
435
- streamlit/static/static/js/index.1djeb6e0.js,sha256=38bUN1U8vBezGDF9UoeeLBr8ior2SWh1OPp8BsC7uOw,2998
436
- streamlit/static/static/js/index.6_D2Y2jA.js,sha256=NK9frTKWuXbttGaMLo9nbmXkFV0e8FLi3Mqr8Mdl4QI,24096
431
+ streamlit/static/static/js/formatNumber.DaagZyZe.js,sha256=4kmXCN96egQtZ6xKj_rKnS_LtK3O09hXzxjP38FKEv4,1818
432
+ streamlit/static/static/js/iconPosition.Q3hNvmK4.js,sha256=-GaR3_Yvj_iaelgMM8B1wOcd3I8_uhfMndf5NAi5Cbo,203
433
+ streamlit/static/static/js/iframeResizer.contentWindow.B6EBvI9L.js,sha256=fqjU_Vw0XWYZZb40yiLc03vyOPks_UprkfOKWOBq4iM,14409
434
+ streamlit/static/static/js/index.19_qtO6t.js,sha256=xjPMV8sqZ4bTWY4QZQJ7ntXORBo4l_jV5HAHrRR_Ksk,271288
435
+ streamlit/static/static/js/index.43b777iP.js,sha256=P0-I6tYbq848TqKGOSXaFas0mhzg62oRECNmzS1SVlU,8305
437
436
  streamlit/static/static/js/index.8HslT92O.js,sha256=Ahu9KsYwa_TyEGNbQBWydVmpBAsTcDdi0zdwD-Wf8ME,27051
438
- streamlit/static/static/js/index.B0GsKOuI.js,sha256=sT1sQFRaG4J0NFX-GQPDtD-rLsGvbt-BBA3jJQxOPiI,4874479
439
- streamlit/static/static/js/index.B2TDaHdI.js,sha256=XS6BCIPQB4u8gm2cGpCoBmuHaCiu0s3eqgDr4h_r07k,878
440
- streamlit/static/static/js/index.B4x2O71H.js,sha256=FrDSowP3xMjLXCMQC56jf-hYXtItk6wqU9cgdpywdtg,3928
441
- streamlit/static/static/js/index.B6EliwN_.js,sha256=gxPuldpv73NSKFsODitsJptzrb17JQm1EECqelATnJs,1560
442
- streamlit/static/static/js/index.B6Uhb_NP.js,sha256=wnU_Yfl_Y4zOkdIQQUoGnXVzGI_AGYDVYkLfoElzIkg,100087
443
- streamlit/static/static/js/index.B7EzT2pL.js,sha256=wzbM8S2hLiGbfYrOm2XSK4flBlbA1b903fjkDab-GYg,13914
444
- streamlit/static/static/js/index.B9DrCSR6.js,sha256=jESkBmNuZxWcOgqFIOpixQkh5w0FKZsAnO70W0tQhsI,18346
437
+ streamlit/static/static/js/index.B03eQZoH.js,sha256=oXpE84PckeGABmwpLUOAqzGIa05rGBFEFUN8ru-H4oA,2671
438
+ streamlit/static/static/js/index.B9kZB0o1.js,sha256=43VzIw5RFTqb0z2AMRCyrQOweBk0BZJy1B5K-Tz6waQ,2219
439
+ streamlit/static/static/js/index.BAI9aHCq.js,sha256=ilFHVnutgWFJGJCJf0vNdt6GHUaqpBue6382-CiTv3E,442
445
440
  streamlit/static/static/js/index.BBTKOM0z.js,sha256=-L-kKO9s5qX0eLfjdpWq_CHhzPvtPGA1A0oRn-RB8HM,36545
446
- streamlit/static/static/js/index.BCCeRfnu.js,sha256=qml-8E9sW00g8RTBuAnV-vyMazqNlfBcMu-ac1lhONU,1398
447
- streamlit/static/static/js/index.BFopzcDu.js,sha256=ofTud3je-NiCZaq2XbKc2WRR-v50N7gUpz8Qac2ianA,13695
448
- streamlit/static/static/js/index.BHMoYAbd.js,sha256=qrdfjSmPFr3DCT6et16SE_A0DZ7vtmWMW01w94wmgG0,7264
449
- streamlit/static/static/js/index.BMPclSge.js,sha256=9wv61MeefQs5Z1ODtrMDcoUxucUj2ib7VGj2WyqT4cs,443995
450
- streamlit/static/static/js/index.BVit6ClT.js,sha256=01bt9FaC3dBrCuedlYvlWAoGhBLSWLPvmrHhEPIQ3iA,828422
451
- streamlit/static/static/js/index.BXCQzqUL.js,sha256=6INfYQM25vnhd3cVdjfK3Qii6LLJ-c2NMsTq5dBdQzw,35980
452
- streamlit/static/static/js/index.Ba6hzYdl.js,sha256=autXAoDuaedCNWZviKLUP0aW1xWlCAMw5rv7boovxRo,2824
453
- streamlit/static/static/js/index.Bb9kjc_v.js,sha256=YtRs3GCTwSagqGqvxXHKvsRxy7iVqgICUJPkc-XpZzw,9184
454
- streamlit/static/static/js/index.BgVtKHgk.js,sha256=NxinI7wiRi7QhdD-5yNyv04uCOwoF1XAAmu2mLhfipE,24369
455
- streamlit/static/static/js/index.BkDplL5I.js,sha256=0v-XoW-tjRv4bYS_oVmJmnCI8SIFWK04SZRd-bWx_8Q,442
456
- streamlit/static/static/js/index.C8PH2B2k.js,sha256=79vfz-V5yliIUH7N91exqV5rIKTYqwR5KB5oB_574_g,2967
457
- streamlit/static/static/js/index.CAobVzMK.js,sha256=vrL1SEz9ig8DvFeLIdArnliZ30NosxTfxCs4v64QZJA,2604887
458
- streamlit/static/static/js/index.CD8IIWcc.js,sha256=ImWtcQKyA5lYnlxs2adePVlXLyrsu4xh2P5dyizbRJQ,750
459
- streamlit/static/static/js/index.CIlqaESj.js,sha256=W4__pkyWsJksmvUiw_mncNlc7SoVwpuSnEn1B_czrTY,226891
460
- streamlit/static/static/js/index.CT9jvPcD.js,sha256=7sMBEABpZDXizshX_ObwmPgnl0Wo5V2Buzy_iS9MvRk,3252
461
- streamlit/static/static/js/index.CcHnYd9w.js,sha256=WUtWqhbwyQz3_GffMaOKpQH0NUw--OtWiNaPm9UKMHM,13388
462
- streamlit/static/static/js/index.CcJEaOpw.js,sha256=x22QPj_pQbzSBAw6G0uAjYQ4cphtYJfITs_X1nm6z28,13944
463
- streamlit/static/static/js/index.CjQo7CUO.js,sha256=CoP89SMqwi_q_ja7g201oyVfhfixoOnB_sRrKSFNe-U,6906
464
- streamlit/static/static/js/index.D2EVLt1U.js,sha256=USwkYrAa74y_wr8yFj7EIo4WhaiBtfs3K7_SuTLTZLo,2219
465
- streamlit/static/static/js/index.D2v1x0i_.js,sha256=P7TdHyPXqKTbkjrsGLEi6sPI7Ap3P545HHivnuPGO1Y,1834
466
- streamlit/static/static/js/index.D6ea3OJl.js,sha256=b1ge-LEBMeCgGqOGTAThJr49SEAaVRyUn3ktXr3Hi5I,1605
467
- streamlit/static/static/js/index.DKUtJ1wC.js,sha256=zJdPN1h7kLM2sVFmCVDgvBKxpyhJhVbYrRgnSa1IILA,5820
468
- streamlit/static/static/js/index.DLB_Wwth.js,sha256=YNdTtJI3082s6ILeR9z75IvippdxWV9rpYn05Oqu2eg,190412
469
- streamlit/static/static/js/index.DaITTdfQ.js,sha256=ZdIw6MODD9APkM0_WIjDxZC0VE0NjG3t5pokrGuAVVw,271288
470
- streamlit/static/static/js/index.DbTMA1_Q.js,sha256=sNTKVk0TGKWLPuG6QMeeoclc4vJH-jkWod_9YQBtGc0,19038
471
- streamlit/static/static/js/index.DcKOiCiE.js,sha256=imcRlmPJZ-ppU5Ws-86rqfkvBZ0PPdiW0VFN59TDUds,4165
472
- streamlit/static/static/js/index.DeGjj5Xy.js,sha256=uaqCwSkUTQeA7xGKie305DjGkgR0BXW-YHZM7v1fQIo,4863
473
- streamlit/static/static/js/index.Dewn3Ni9.js,sha256=c0c5YWB4mRWfgzMQAPzNwljG5oiWjZ5lsiAfl-5GXfg,18040
474
- streamlit/static/static/js/index.DozBVd6-.js,sha256=H4pGsupQmNdOMo8eSGsFS8GjgxtzXH3lbrY2G76kKjY,1193
475
- streamlit/static/static/js/index.DredtYc0.js,sha256=4IDVkbiZjzjhbdhfBeHGE0tyfkN2dSCDl79VgGUuXNo,3807
476
- streamlit/static/static/js/index.Dt0Psatx.js,sha256=nog-0QzH-ROneBjguW8xZoyQmyCa4ob8u6tqjjCGEwM,8012
477
- streamlit/static/static/js/index.DtGneC7j.js,sha256=23zDMfbdjozTRcIA6onPO6ZrO1wqiOGZzH8ejUub7Bs,679
478
- streamlit/static/static/js/index.P-CMMGUY.js,sha256=z_5ygxehIb7IyaByI-ExONLvwXbBX61JeD8H-o8hxUM,2671
479
- streamlit/static/static/js/index.TO9vodwr.js,sha256=9KErMUdOqWmaAL1UYCCrFxW25MiitutdUys2FjOHFkc,1345
480
- streamlit/static/static/js/index._nL4Yjdr.js,sha256=RwseQUW7rKmr4B4KGVw2hqZzqnHgjoHZaXVLPWHlXNw,8305
441
+ streamlit/static/static/js/index.BF23fbfs.js,sha256=nGyyZlHDT-llv8iPE_3QjKf6KU4NMq-TOONgxO53KnM,3252
442
+ streamlit/static/static/js/index.BGBTkulf.js,sha256=WeJxqwMyc6bgaYFk4hOyMXTFUr4OryQS6RdbdMKDRoA,1345
443
+ streamlit/static/static/js/index.BRfGUOQ-.js,sha256=7oTo_m4I_3iIreCVvmD9G7hkahC8L0kGJZx81u6em5E,2295364
444
+ streamlit/static/static/js/index.BVT89mQw.js,sha256=iFUxiMrB3nYdvdoKSpe0r1X3Y8anPHEPXUGgRhRhXzQ,1605
445
+ streamlit/static/static/js/index.BXEC4cf3.js,sha256=yHGk-D81Klp_WVjzinHNhWX0FmoydumBP1ORWBNLHUI,7264
446
+ streamlit/static/static/js/index.BbSFVZ3p.js,sha256=c3h0myJBShVq53RvkMw2v-d1spuhWlZmhq9yFgXQDgY,1560
447
+ streamlit/static/static/js/index.BkSwGJoh.js,sha256=YP6uJLk0hWqmYfJdoTnmzZsHE2-3ij-gzjUym4KJaow,13914
448
+ streamlit/static/static/js/index.BnfTPrHb.js,sha256=obLE7k_siJst99pwDb8abdzVVAfhkhLDJFZRGmF8mIA,100087
449
+ streamlit/static/static/js/index.BoX8d5rK.js,sha256=x_7lSD9M6vcgfjvQKtYJOwffgv0mF9s94as-wHfgxM0,2539
450
+ streamlit/static/static/js/index.Boa0Egng.js,sha256=87slzb9bmqA0kTMBnsPNw84Rq1jklYN6Gom57MBj0Tg,9184
451
+ streamlit/static/static/js/index.BzwlrgZO.js,sha256=nHsYCCRzs-54ULrUnCz_gP8kOi3KX8Mnnjtej0JFyX8,6906
452
+ streamlit/static/static/js/index.C0fSEz-3.js,sha256=3cbPFYAa1qIXXKRSt71y4pL0dPZDm2qwzHRoZ3bxues,2824
453
+ streamlit/static/static/js/index.CCFwVy90.js,sha256=kUpyHdKXZYtodwJ98U7sD9S61zkvBp9LzyJ5_EUfgww,878
454
+ streamlit/static/static/js/index.CCQ5p_WC.js,sha256=2XuVZ7yCarxZD2JoqvGBzbeGLlz9zkUpRK__o63VIKc,8012
455
+ streamlit/static/static/js/index.CFCBhOfx.js,sha256=YlWwWYYARi0ygq53QX3p8hGEM2OT99tW6GuH0CpiO6c,4863
456
+ streamlit/static/static/js/index.CIbgt5wY.js,sha256=7XXGzLlLXc6ojf0kmHycSnp8l91uVqH9hBq4ZvenZ-4,3807
457
+ streamlit/static/static/js/index.CJ4oJe0V.js,sha256=AgPHzGVH0YUYD4U1j_pSG7PXje6cBe99_T7ywsq27Gk,750
458
+ streamlit/static/static/js/index.CP-hoxJM.js,sha256=qUixBeHHKqbNIH31R9Vi4t1RQ6A0ywThwXO83mgfjwc,24096
459
+ streamlit/static/static/js/index.CSfsEKCF.js,sha256=SO277h7L_ecnS5XHHluGZVCnW1vHSNUS7jqdRoyVk88,35980
460
+ streamlit/static/static/js/index.CVlg41MB.js,sha256=5W504g45ODAkuwBehiqueziqN45bSUQZGwKDCg9SnJ4,2967
461
+ streamlit/static/static/js/index.CYE7b5Du.js,sha256=3v0Ahv2moyPQLyg1r5m1F46_rHOoQWMaG1cgeumaE4k,828422
462
+ streamlit/static/static/js/index.Ca7MUNWJ.js,sha256=XrNpCsyJQEl6KM6PtaElkaCh56XCF4aMr0pdOaZ876Q,5820
463
+ streamlit/static/static/js/index.CrPjcPY1.js,sha256=qVkU60hT10uQhV1D5vATpWbmHtSIi3WzPmN7w8odAGY,28214
464
+ streamlit/static/static/js/index.CvB9JBqS.js,sha256=C4yLyHh2vWoesUjwPhVeCy4VXUZLKZvLSoRcJbbxHDc,443995
465
+ streamlit/static/static/js/index.CvIqsWy1.js,sha256=jsg1xWGOHCHeV49dZeD9Am5OGfZ7QtMzvUQP47O2-4c,1398
466
+ streamlit/static/static/js/index.D1pK_Vw2.js,sha256=ABbrU2FKqubSqS-h0YWeg_jQ5SWSBW0uPuc2Oux-CL8,2958
467
+ streamlit/static/static/js/index.D6X2coHR.js,sha256=rjEH9szZjC2ADuicH2r3UC1n3jYBB5SYwaeTmuXjZso,4874479
468
+ streamlit/static/static/js/index.DGYHxruh.js,sha256=rhnLQnii_-cKtSyhOHFLX0HeMbkrFS3QGD04AJ_zUmE,3928
469
+ streamlit/static/static/js/index.DJ7P09eb.js,sha256=uKSh_K-kVGfnMbbiAcvPFHJlaAGvwTEGjgcdRPNrXfE,4165
470
+ streamlit/static/static/js/index.Dh5SAThV.js,sha256=b1Su8zzTaixo8jQ8myntU412dEz4oJLqir3kJBvTqNs,13388
471
+ streamlit/static/static/js/index.Fu73QtkD.js,sha256=dertRfHRPbXf2HpOF9FRqxG2XhGUl6GRGx9PA4V4DGM,13695
472
+ streamlit/static/static/js/index.KN1VmyYN.js,sha256=Q6E1U8XHxfL2yR6WcGVTzJAPv_WfiGmQZypPZRuoX90,226891
473
+ streamlit/static/static/js/index.KtjGDGY5.js,sha256=88E5B5lFj8xSvUU2PfNHwyE_8brdUiKGGdF3W6cD0E0,18346
474
+ streamlit/static/static/js/index.OpATzEaW.js,sha256=wZNQkum8htCLZ77ly6FezshwK9Yc5NWyWU_55yuvJ6o,190412
475
+ streamlit/static/static/js/index.QHnxuesF.js,sha256=aLzM9xH-13KYqP3sCV7r68y3CyJOXlpsXalIy0mmMz8,13944
476
+ streamlit/static/static/js/index.QTaWooav.js,sha256=sbPcu-u4CLajtNisGBkBwHKZqBOQGZe40mzSj05Zcv0,2998
477
+ streamlit/static/static/js/index.WXybx2Xq.js,sha256=yJyKvWFoJNkn8LExfgHeztACZc9v_Z87qCtYgeR-N_A,24369
478
+ streamlit/static/static/js/index.Xg-Qttib.js,sha256=FVcf_SEM44uG1P5YLh51fCWPMIwlvf2fI436AsPRG8c,679
481
479
  streamlit/static/static/js/index.bsVAaBS1.js,sha256=iWnuL74SwTYzvoX2fcuvoTFm5zB-8g4oiMdjHAZiH0g,252
482
- streamlit/static/static/js/index.i_eQw7NS.js,sha256=uDaSEnbyeDT0AqvxZaRYeeF3LN2u0vbBEuP9-DnxLRE,27225
483
- streamlit/static/static/js/index.qzz9PjCO.js,sha256=Qz7OUu3O1NCsTqCjV8s2ls916iQL-aitM0Vh8kvNLjk,2539
484
- streamlit/static/static/js/index.wLJVkoPD.js,sha256=K1FiTVeT5ayRMxVAbz866wEsRsfeZDAN4eU1xwswQl0,2958
485
- streamlit/static/static/js/input.27t-DftI.js,sha256=FeDyTufj-QaU6V5qrK4lir2MzNWFzbn6B1itDgJPEBA,5242
480
+ streamlit/static/static/js/index.j4fnjyHo.js,sha256=3ryimQLmAr3Y3kMmDkGKFDjrZz1R5WqxWQiqcg9IlA0,18040
481
+ streamlit/static/static/js/index.na9UBuse.js,sha256=YjLgiF_jcPWSwkWXU8XlqJBWG7Mf9stiu0hw6FeDd4M,2604887
482
+ streamlit/static/static/js/index.pU9mQeVC.js,sha256=TzD1Mv4NHwhoekS2G6ESpKoNxBlR3Iocmziz9G83ZYk,1834
483
+ streamlit/static/static/js/index.slgxPafU.js,sha256=r47TYvxhcQ9Wp15uUvd6vTBtVxLnWqOQBniQtIr5z20,19038
484
+ streamlit/static/static/js/index.whRT3Vm3.js,sha256=_PWk6EIcd6QWMhBrIhSF7RGgY2uFAkLUolfCCbHA6n4,1193
485
+ streamlit/static/static/js/input.CPzINTl-.js,sha256=EH1Odug7XrRo7SXHc_s5JyN2FL1NefcM6Te2nxyTcKE,5242
486
486
  streamlit/static/static/js/inputUtils.CptNuJwn.js,sha256=v9SUbdkM8OJ6aT_EfTucTRNZh059kZ9Mut2oyTmv_98,124
487
- streamlit/static/static/js/main.BEfv2Y8-.js,sha256=WlOxsPvnCZwbrVm1T02REQqlXS5NQ5IKogW38DAFfXc,117541
488
- streamlit/static/static/js/memory.CaZBVQ_1.js,sha256=rfxXx4zkJJ4McxekimKZ3prPoST_NBhhpR-iYUdiSfo,3041
487
+ streamlit/static/static/js/main.DSPn8dUe.js,sha256=AehZeBxBKUcNjAo7GpprWPz9ptRbO7vgZe_1ZMpQxYc,117541
488
+ streamlit/static/static/js/memory.CfD8IGoU.js,sha256=-CGVQaM9Oj8737iNmpoa29wq-zHAly2y-LE-9hvRlaI,3041
489
489
  streamlit/static/static/js/moment.C7qA8nIE.js,sha256=WGJqjUq9SPn-dCBlrSpQZOywPJ4xVg2eYZN-CP7-3X0,60773
490
- streamlit/static/static/js/number-overlay-editor.CAIp-3oo.js,sha256=fXkojGxA1E6lXR_WKCzkiAfKlbhTuWRuEICeqBSwxsk,16652
490
+ streamlit/static/static/js/number-overlay-editor.4Ae0qegV.js,sha256=wNaLH9rcOT1Wl_DAdEtqCR5VYayZiuPUwGlSsVEsBLQ,16652
491
491
  streamlit/static/static/js/numbro.B9_PXfzp.js,sha256=JcWnIUWk7g3KL9hw0uuI--Tp_c_VOTPXqigpxrpjzeo,39660
492
- streamlit/static/static/js/pandasStylerUtils.BY9qaz81.js,sha256=_1yPXC4CBCD_YRRL1kz-f3Xeek-3aDEbykuGvIUsF5E,739437
492
+ streamlit/static/static/js/pandasStylerUtils.D2EjZ7k6.js,sha256=pu1DDtwud2Gljho-j00QS2NkbH743RcJ_FrMsBXagXo,739437
493
493
  streamlit/static/static/js/record.DytFsBUt.js,sha256=1w_An_VyZRJTSv6lYzs_Sz9SOgdyfRSOG846ygJS4MY,8028
494
- streamlit/static/static/js/sandbox.BJUaaWFJ.js,sha256=nbjAeooCIt8-iIwS83sZk4UlkMGIANO36-G3CRvRgpY,2960
494
+ streamlit/static/static/js/sandbox.C6vcPIm0.js,sha256=MLp0wY_pgzQESYWfG2FHC_ONgck0VY7BAAPum4xJ1VU,2960
495
495
  streamlit/static/static/js/sprintf.DpPCfzXw.js,sha256=SggQTlOztni2KsY0aRfgxAjYLCwS7NSUUSCbzZtYpr8,3436
496
- streamlit/static/static/js/styled-components.DQsMkvXn.js,sha256=5titHEJjnLLa0dx-aRE4cIQ3IyzCK7M62BuLMyD0y18,468
496
+ streamlit/static/static/js/styled-components.BBmp8buj.js,sha256=Q89aCHAMT_TBvrCP6Gaj1VGFWPyh4EI-WUocwQgVRS0,468
497
497
  streamlit/static/static/js/threshold.CUNQbqMA.js,sha256=Q3du4LR3IorexmjW-Ab8y_y_9cO_8M_ddTX6YKht2p8,5698
498
- streamlit/static/static/js/throttle.DSR3q89S.js,sha256=bc0_1EsZ8oZZsd3CbK63T50HqPlokeRh2dAkshyNEAU,1262
499
- streamlit/static/static/js/timepicker.gie5YwtP.js,sha256=ew0gx2Q4ttFNJqJ_c5yxOYleSop_aExyv_HADprWmR0,89207
498
+ streamlit/static/static/js/throttle.BPcPpy-S.js,sha256=pZqkRabQxl8Lf-A1PTxRTnXEKQKuKPHpbJOT6UB17xg,1262
499
+ streamlit/static/static/js/timepicker.ryzkTs2C.js,sha256=yWB6miwAuP5rBrxJ6UKznfUDCenOk9jyPrONGmzc_a8,89207
500
500
  streamlit/static/static/js/timer.BZio6gjG.js,sha256=vRTmDI39QE6fIvFrIvCwyjsG8MNme68-qu_yYiNUaqQ,7410
501
- streamlit/static/static/js/toConsumableArray.C9lVwnAo.js,sha256=T_l2cliiB0QFFAVn7pjaXQ6MPqYuXNJIvp0nXCbBRic,877
502
- streamlit/static/static/js/uniqueId.BdEQNrWF.js,sha256=6Kbk2yLruP4qUVBdO46eTMHfE-QTXyTeCu8ZuDhSxOM,97
501
+ streamlit/static/static/js/toConsumableArray.Dg1nDaB_.js,sha256=Qx9snp_UypSxfIw_lCe_Eperivt0JmC5eUa7BFezBMM,877
502
+ streamlit/static/static/js/uniqueId.BFHzT5KQ.js,sha256=mhTBFYfBqXHxGvriJQWwP-zqpm9m9ti8ByQMtquNAiU,97
503
503
  streamlit/static/static/js/urls.BwSlolu9.js,sha256=oj7KbEdZXmm91zYfQyVjZY6MYvu7aKe2nX2Uzq_T5c4,275
504
- streamlit/static/static/js/useBasicWidgetState.DrTKs46R.js,sha256=4602Bt2xi-kipRzq9TY8aa7-h55RHypHkhy2v_ks6gM,953
505
- streamlit/static/static/js/useIntlLocale.CmSionuT.js,sha256=8ABkBH68LDMne_Fh-2udnw6c-mibr7YSIUQuOmfl-ag,109692
506
- streamlit/static/static/js/useTextInputAutoExpand.D7lViJSu.js,sha256=-TqN8gTvB-Vt_eennd1I8MWWcwN0GprpBjL1y-IcmVs,6643
507
- streamlit/static/static/js/useUpdateUiValue.Ct3CJQBQ.js,sha256=QUg6bav8wKpkxfEP8EG3dO34sgEP2cvN0vlVQUfp9FE,615
508
- streamlit/static/static/js/useWaveformController.D-KQLpLI.js,sha256=16QUgNkwaEuxHRo5UXVoMlqcORvVZF1kmdHYnzLxirU,12364
504
+ streamlit/static/static/js/useBasicWidgetState.A4U5lzAm.js,sha256=bAyg8YA7NaIHifgqzTYfQlDntaEfkA5HccLxEqELilo,953
505
+ streamlit/static/static/js/useIntlLocale.DWJgLlNz.js,sha256=AOb7Ff5PdxB76dVgekAUZpiZ6JMOH0eUPLxHMvCoHHs,109692
506
+ streamlit/static/static/js/useTextInputAutoExpand.BrBonw8t.js,sha256=_ZrnywQ4l7g3TDle3T2Le2CGYHNfn53rkQ_3KYcCtnw,6643
507
+ streamlit/static/static/js/useUpdateUiValue.BkOWyNVX.js,sha256=aWXNhBYvKzGtaCV42KdsHdCE0ec00JDxi0QBnEaUf5o,615
508
+ streamlit/static/static/js/useWaveformController.CBlvXlgZ.js,sha256=1jNnwW64Yo0dJePsem46Qd9EEk0IzhnFRgC7YIrX3Bg,12364
509
509
  streamlit/static/static/js/value.DaKxGC7O.js,sha256=bicc2v81rJzY9PmrISkaY1Z9A3aJmsRRK5aMj5nGmrc,15044
510
510
  streamlit/static/static/js/wavesurfer.esm.D1Sty35j.js,sha256=GYinzhehnkxBppDnKJLH3b87dUJ7gBJxN8F1D3_Hn6E,39578
511
- streamlit/static/static/js/withCalculatedWidth.CD0pPoZr.js,sha256=hBLQ7w3GywvgSs3u9VdLND3gsl-osrWBdOrjBp-URwg,260
512
- streamlit/static/static/js/withFullScreenWrapper.Ch22PgdD.js,sha256=-5_6VELCnWyHHn3JnqhW0uyC40ByoROvDOxKAIeDPHg,1541
511
+ streamlit/static/static/js/withCalculatedWidth.D4cpOyNe.js,sha256=t1y-gnO6N5SRcItyXqtX3--Swd6nJ5MaQ9woohRZKW4,260
512
+ streamlit/static/static/js/withFullScreenWrapper.BMim3w94.js,sha256=nuVH6bsu_lgj1bEYNQRzyHXjteRSsUTpzAPq-IwUi_c,1541
513
513
  streamlit/static/static/media/KaTeX_AMS-Regular.BQhdFMY1.woff2,sha256=DN04fJWQoan5eUVgAi27WWVKfYbxh6oMgUla1C06cwg,28076
514
514
  streamlit/static/static/media/KaTeX_AMS-Regular.DMm9YOAa.woff,sha256=MNqR6EyJP4deJSaJ-uvcWQsocRReitx_mp1NvYzgslE,33516
515
515
  streamlit/static/static/media/KaTeX_AMS-Regular.DRggAlZN.ttf,sha256=aFNIQLz90r_7bw6N60hoTdAefwTqKBMmdXevuQbeHRM,63632
@@ -612,11 +612,11 @@ streamlit/web/server/app_discovery.py,sha256=gDQPfiSmnz4DANLOkjOSNJZHDpYTkhpFYW6
612
612
  streamlit/web/server/app_static_file_handler.py,sha256=fp-iK3cuCSVW8U6rg1klRCR2q3yZMV4u0mnnlfY_iNY,3224
613
613
  streamlit/web/server/authlib_tornado_integration.py,sha256=0uIRIjPA9EmRUI65OW5Am4uKFok0fbSMZ52U5YmCK7o,4432
614
614
  streamlit/web/server/bidi_component_request_handler.py,sha256=fAfm5vTGD5gA3VRq6NmMtt9EkjalGmPTvT77pTKZUg8,6932
615
- streamlit/web/server/browser_websocket_handler.py,sha256=sKvOKssZM95YnA8jSr7IYHFYLXr1HmAeqpHmwcs9zaw,13933
615
+ streamlit/web/server/browser_websocket_handler.py,sha256=UcyCPjYaNlyhCyFdv1JkTSVPh9XIQpmKG4Ag_9NkYCc,13980
616
616
  streamlit/web/server/component_file_utils.py,sha256=3sA9Ius2mkGtec59ijuEn80YJ_DGCpiy2inbz8NfLHs,3568
617
617
  streamlit/web/server/component_request_handler.py,sha256=2vNGa8H9_AoykQQfUNmezg1-a0bvULboI3HvIEhI76k,3718
618
618
  streamlit/web/server/media_file_handler.py,sha256=DQqTSVfn1VCormeddtDTKN3tb49z2zCCN-8UBLb6zLo,5562
619
- streamlit/web/server/oauth_authlib_routes.py,sha256=UlEf-HLew9AipsBO4WH3knDYeVR_XceWxvbMFjIW4k0,9979
619
+ streamlit/web/server/oauth_authlib_routes.py,sha256=2TTifiPBlAnf0UsjqMOQ_QlCCfpst7LySfFhVVvMV24,12776
620
620
  streamlit/web/server/oidc_mixin.py,sha256=cC9oFJv2lbIP3F--4isZ-F8s441x9lzcUPR21u9dDZA,5247
621
621
  streamlit/web/server/routes.py,sha256=0Rthy3Q-Ac7Tkfu0z_DA5U0ADo8fu03od333xXA7uWA,9799
622
622
  streamlit/web/server/server.py,sha256=AcUa82xq2rW2njqNlRprFi3b34sBJ9I01IRG8Thaevo,20319
@@ -634,9 +634,9 @@ streamlit/web/server/starlette/starlette_server.py,sha256=pBmwN6nFEruMonhajjd-ID
634
634
  streamlit/web/server/starlette/starlette_server_config.py,sha256=_cgub_NiTO-52etLfEMIoe5bWgA3TVianT2mYCVQmqo,2508
635
635
  streamlit/web/server/starlette/starlette_static_routes.py,sha256=sDLGRlIvFCBQieXOf0BmueYVP3KJTfvGy-ux3Tk4D6E,7547
636
636
  streamlit/web/server/starlette/starlette_websocket.py,sha256=f64fojwihK7XXIfYT4HGNLd1TPZJMT7JEK43h4ScDAg,21338
637
- streamlit_nightly-1.52.3.dev20260111.data/scripts/streamlit.cmd,sha256=es_jE8w9dt6l9DA40xFlQjGJeVq1Of8rDJQNibPUlEA,676
638
- streamlit_nightly-1.52.3.dev20260111.dist-info/METADATA,sha256=PRI2BO5mQYgsvpNdtbUt6RQxMaSGEkPVA-1gnbTj7DE,10214
639
- streamlit_nightly-1.52.3.dev20260111.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
640
- streamlit_nightly-1.52.3.dev20260111.dist-info/entry_points.txt,sha256=uNJ4DwGNXEhOK0USwSNanjkYyR-Bk7eYQbJFDrWyOgY,53
641
- streamlit_nightly-1.52.3.dev20260111.dist-info/top_level.txt,sha256=V3FhKbm7G2LnR0s4SytavrjIPNIhvcsAGXfYHAwtQzw,10
642
- streamlit_nightly-1.52.3.dev20260111.dist-info/RECORD,,
637
+ streamlit_nightly-1.52.3.dev20260112.data/scripts/streamlit.cmd,sha256=es_jE8w9dt6l9DA40xFlQjGJeVq1Of8rDJQNibPUlEA,676
638
+ streamlit_nightly-1.52.3.dev20260112.dist-info/METADATA,sha256=d3QHrMnFWjGKo3AAGmY8msZwkBSanP3OfmY6V7wrsb4,10214
639
+ streamlit_nightly-1.52.3.dev20260112.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
640
+ streamlit_nightly-1.52.3.dev20260112.dist-info/entry_points.txt,sha256=uNJ4DwGNXEhOK0USwSNanjkYyR-Bk7eYQbJFDrWyOgY,53
641
+ streamlit_nightly-1.52.3.dev20260112.dist-info/top_level.txt,sha256=V3FhKbm7G2LnR0s4SytavrjIPNIhvcsAGXfYHAwtQzw,10
642
+ streamlit_nightly-1.52.3.dev20260112.dist-info/RECORD,,