RITE0300€oHSMK0000IREPjO0300x à\\^\\^\^\^\ ^\ ^\ ^\ ^\ ^Q-Q//QQQSW 0QQ$8i"Funicular Chat App initializing...pinkusersessionchannel FUNICULAR_ENV developmentModel FunicularChannelSessionUser ComponentChartComponent ChatComponentChannelListComponentMessageComponentMessageListComponentStatsChartComponentLoginComponentSettingsComponentputs debug_color= FileUploadmount load_schemasENVT bX_bX_bX_8loginlogout current_userm %4 S .8usernamepassword model_classUsercreate.4.8destroyg 4QW. 8current endpoint_name model_classUserfind<!4!'!/%8call»9W.cX_cX_cX_cX_cX_cX_8styles initializeinitialize_statecomponent_mountedcomponent_will_unmount update_chartrendert04Q-Q-Q-Q-Q-Q-88w-80 bg-white border-l border-gray-200 p-4 flex flex-col$text-lg font-bold text-gray-800 mb-4'flex-1 flex items-center justify-centertext-center text-gray-500 w-full h-64&mt-4 text-xs text-gray-500 text-center containertitle chart_area empty_message chart_wrappercaptionR#4 %%S2#8 channel_id @channel_id+4GS8stats û4&8Q//Q  SW0  #&8 Q  G   Q  GQQS G S     SSSSSS S/ /!"#/#$8/cable StatsChannelbarMessages (24h)rgba(59, 130, 246, 0.5)rgb(59, 130, 246)% @channel_idCable Funicularcreate_consumer subscriptionschannel channel_idcreate@stats_subscription@refs chart_canvastypedatalabelsdatasetslabelbackgroundColor borderColor borderWidthoptions responsivemaintainAspectRatioscalesy beginAtZeroticksstepSizepluginslegenddisplayBridgeJSto_jsglobalChartnew@chart¦ C4Q#Q/&%"Q#-'-%%8type stats_updatestats===statspatch@chart update_chartr'4'/' /%8@stats_subscription unsubscribe@chartdestroyñ |4&8-/W0-/W0#/$# ##/$Q/ 8none @chartstatestatsmapdatalabelsBridgeJSto_jsdatasetsupdate.4Q#8username+4Q#8countJ4-/W.8classs containerdiv†<4-/W.-/W.-/W.8classstitleh3 chart_areadivcaption/ 4Q8Activity (24h)œ=4-//'-/W.%-/W.8statestatsempty?classs empty_messagediv chart_wrapper( 4W.8span0 4Q8No messages yetB4-8ref chart_canvascanvas( 4W.8spanG 4Q8&Messages per user in the last 24 hoursJ aW.cX_cX_cX_cX_cX_cX_cX_cX_cX _ cX _ cX _ 8 styles initializeinitialize_statecomponent_mountedcomponent_will_unmount load_channelsselect_channelhandle_message_inputhandle_send_message handle_logouthandle_message_deleterenderl4Q-Q-8flex h-screen bg-gray-100 flex-1 flexlayout main_contentl,4 %%S32#(/8 channel_idto_i@requested_channel_idìC4GGQ     G / / S 8 channelscurrent_channelmessages message_input current_userloadingstats skip_scrollavatar_cache_busterTimenowto_i=4W08Session current_user‘,4'/Q/%--8/login Funicularrouternavigate current_userpatch load_channelso'4'/' /%8 @subscription unsubscribe@stats_subscription44W08Channelall 4' -%h - /E' -//'8'#W0' - %% #- %8 loadingpatchchannelssizestatecurrent_channel!@requested_channel_idfindselect_channelC4/B8id@requested_channel_idKÜ4G    G -@Q/R/// '" / /   S/Q/'/'/Q//Q / SW0/Q / SW08/chat//cable ChatChannel StatsChannelcurrent_channelmessagesloadingstatspatchid Funicularroutercurrent_location_path!=JSglobalhistoryBridgeto_js replaceState @subscription unsubscribe@stats_subscriptionCablecreate_consumer subscriptionschannel channel_idcreateZ “4Q#Q/&%Q# - %]Q/&%*-/Q#G< - %"Q/&%Q#-%8typeinitial_messagesmessages new_messagemessagedelete_message message_id===messagesloadingpatchstate skip_scrollhandle_message_delete~ 34Q#Q/&%Q#-%8type stats_updatestats===statspatchV4/#-8 message_inputtargetvaluepatchù b4/-//'8-/#'/Q-QS/ 8 send_message preventDefaultstate message_inputempty?targetresetpatch @subscriptioncontentperform74W08SessionlogoutR4/Q/8/login Funicularrouternavigate‹ "4QRQQôW .8message-opacity-100 max-h-screenopacity-0 max-h-0duration remove_viam '4-/W0- 8statemessagesreject skip_scrollpatch.4Q#!B8idG4-/W.8classslayoutdiv T4-/- /  - /  V VS- - / W. 8 ChannelListComponentpreservechannelsstatecurrent_channel current_useron_select_channel on_logout componentclasss main_contentdiv2 4-8select_channel1 4-8 handle_logoutªŸ4-/- /  - /  - / -/-/ -/  V V VS - -/'-/S- %8MessageListComponentpreservecurrent_channelstatemessagesloading message_input current_user skip_scrollavatar_cache_busteron_message_inputon_send_messageon_message_delete componentStatsChartComponentstats8 4-8handle_message_input7 4-8handle_send_message9 4-8handle_message_delete7W.cX_8stylesrenderc4Q-Q-Q-Q-Q-QQ- Q-Q- Q - Q - Q - Q - 8 )w-64 bg-gray-800 text-white flex flex-col1p-4 bg-gray-900 flex justify-between items-centertext-xl font-bold-text-gray-400 hover:text-white cursor-pointerflex-1 overflow-y-auto$p-4 hover:bg-gray-700 cursor-pointer bg-gray-700 font-semiboldtext-sm text-gray-400 truncate(p-4 bg-gray-900 border-t border-gray-700text-sm font-semiboldtext-xs text-gray-400;mt-2 text-sm text-red-400 hover:text-red-300 cursor-pointersidebarsidebar_header sidebar_titlesettings_button channels_listbaseactive channel_item channel_name channel_desc user_info user_name user_handle logout_buttonH4-/W.8classssidebardiv¸N4-/W.-/W.-#'-/W.%8classssidebar_headerdiv channels_listprops current_user user_infoŸ 34-/W.--/W.!8classs sidebar_titleh2 settings_pathnavigatesettings_buttonlink_to) 4Q8Channels( 4W.8span' 4Q8âš™ï¸D4-#W08propschannelseachµ Q4-#'-#//B/- / V W .08 propscurrent_channelidkeyclasss channel_itemonclickdivN4-#!/8propson_select_channelcalln*4-/W.-/W.8classs channel_namediv channel_desc44Q!/R8# name04!/8 description¿H4-/W.-/W.-#-/W. 8 classs user_namediv user_handleonclickprops on_logout logout_buttonbuttonM4-#/8props current_user display_nameS4Q-#/R8@props current_userusername( 4W.8span' 4Q8Logoutr!W.cX_cX_cX_8stylescomponent_mountedrenderhandle_link_response¹E4Q-Q-Q-Q-Q-Q-Q-Q-Q-8 wflex items-start space-x-3 overflow-hidden transition-[opacity,max-height,transform] duration-500 ease-out max-h-screen1flex-shrink-0 w-10 h-10 rounded-full object-coverfflex-shrink-0 w-10 h-10 bg-blue-500 rounded-full flex items-center justify-center text-white font-boldflex-1flex items-baseline space-x-2font-semibold text-gray-900text-xs text-gray-500text-gray-800 mt-1;ml-2 text-xs text-red-500 hover:text-red-700 cursor-pointer message avatar_imgavatar_placeholdermessage_contentmessage_headermessage_author message_time message_text delete_button¦ *4Q-#Q#RQQ,-8message-idopacity-0 scale-95opacity-100 scale-100propsmessagedurationadd_via¢ 84Q-/RQRQ-#Q#RW. 8 opacity-0 scale-95message-idclasssmessageidpropsdivÌ ê4-#Q#Q#'©-#'"-#/-#Q#Q#B' -#'+Q-#Q#Q#RQR-#R%Q-#Q#Q#RQR-/- %-/ W. -/ W. 8user has_avatarid/users/ /avatar?t=/avatar propsmessage current_useridavatar_cache_bustersrcclasss avatar_imgimgavatar_placeholderdivmessage_content( 4W.8spanh!4-#Q#Q##/8user display_namepropsmessageupcasep*4-/W.-/W.8classsmessage_headerdiv message_textB Œ4-/W.-/W.-#'"-#/-#Q#Q#B'--#Q#-   -/ W. !%8useridclasssmessage_authorspan message_timeprops current_useridmessage message_pathmethoddelete delete_buttonlink_toW4-#Q#Q#8user display_namepropsmessageH4-#Q#8 created_atpropsmessage( 4W.8span' 4Q8DeleteE4-#Q#8contentpropsmessage© I4 ///B' //'Q///328/ to_sdowncaseto_symdeleteerror?!splitlastto_in!W.cX_cX_cX_8stylescomponent_updatedscroll_to_bottomrender| h4Q-Q-Q-Q-Q-Q-Q-Q-Q- Q   Q  Q S- Q -8 flex-1 flex flex-col%bg-white border-b border-gray-200 p-4text-xl font-bold text-gray-800text-sm text-gray-600$flex-1 overflow-y-auto p-4 space-y-4text-center text-gray-500%bg-white border-t border-gray-200 p-4flex space-x-2fflex-1 px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-5005px-6 py-2 rounded-lg font-semibold transition-opacity(bg-blue-600 text-white hover:bg-blue-7004bg-blue-600 text-white opacity-50 cursor-not-allowed5flex-1 flex items-center justify-center text-gray-500chat_container chat_header chat_title chat_subtitle messages_arealoading input_area input_form message_inputbasevariantsenableddisabled send_button empty_state—B4-#'8-#'-#//'-%8props skip_scrollmessagesempty?!scroll_to_bottom94d-#'##$%8sleep_ms@refsmessages_container scrollTop scrollHeightO4-/W.8classschat_containerdivød4-#'?-/W.-/W. -/ W.%-/ W.8 propscurrent_channelclasss chat_headerdivrefmessages_container messages_area input_area empty_stater*4-/W.-/W.8classs chat_titleh3 chat_subtitledivS4Q-#/R8# propscurrent_channelnameO4-#/8propscurrent_channel description‚84-#'-/W.%-#W08propsloadingclasssdivmessageseach4 4Q8Loading messages...ÛE4Q# -  #  -  #  -#S-8id MessageComponentkeymessage current_userpropsavatar_cache_buster on_deleteon_message_delete component}$4-#-/W. 8onsubmitpropson_send_messageclasss input_formformd4Q-  #  -  #  Q - /- `-#/ / Q- ' %/  W .08textType a message...submitref message_inputtypevaluepropsoninputon_message_input placeholderclasssinputto_sempty?disabledenabled send_buttonbutton( 4W.8span% 4Q8Send( 4W.8spanC 4Q8"Select a channel to start chattingÌ9W.cX_cX_cX_cX_cX_cX_8stylescomponent_mountedcomponent_updatedcomponent_will_unmountinitialize_chart_if_needed update_chartrenderx04Q-Q-Q-Q-Q-Q-88w-80 bg-white border-l border-gray-200 p-4 flex flex-col$text-lg font-bold text-gray-800 mb-4'flex-1 flex items-center justify-centertext-center text-gray-500 w-full h-64&mt-4 text-xs text-gray-500 text-center containertitle chart_wrapper empty_messagechart_containerfooter; 4-8initialize_chart_if_needed84' -#'-#//'-%8@chartpropsstatsempty?! update_chart@4' /%8@chartdestroy¦ú4'8#&8-#/& -#/'8#Q G   Q  G Q QS G S     SSSSSS S//#/- 8barMessages (1 year)rgba(59, 130, 246, 0.5)rgb(59, 130, 246)!@chart@refs chart_canvaspropsstatsnil?empty?typedatalabelsdatasetslabelbackgroundColor borderColor borderWidthoptions responsivemaintainAspectRatioscalesy beginAtZeroticksstepSizepluginslegenddisplayBridgeJSto_jsglobalChartnew update_chart 4&8-#&8-#W0-#W0#/$# ##/$Q/ 8none @chartpropsstatsmapdatalabelsBridgeJSto_jsdatasetsupdate.4Q#8username+4Q#8countJ4-/W.8classs containerdivˆ<4-/W.-/W.-/W.8classstitleh3 chart_wrapperdivfooter2 4Q8Activity (1 year)·O4-#/& -#/'-/W.%-/W.8 propsstatsnil?empty?classs empty_messagedivchart_container( 4W.8span0 4Q8No messages yetB4-8ref chart_canvascanvas( 4W.8spanC 4Q8"Messages per user in the last yearj!W.cX_cX_cX_8stylesinitialize_state handle_submitrendert Z4Q-Q-Q-Q-Q-Q-Q-Q Q Q S- Q - 8 [min-h-screen flex items-center justify-center bg-gradient-to-br from-blue-500 to-purple-600'bg-white p-8 rounded-lg shadow-2xl w-961text-3xl font-bold text-center mb-8 text-gray-800Dbg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded mb-4 space-y-4,block text-sm font-medium text-gray-700 mb-2fw-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500Aw-full py-2 px-4 rounded-md transition duration-200 font-semibold(bg-blue-600 text-white hover:bg-blue-700Fbg-blue-600 text-white hover:bg-blue-700 opacity-50 cursor-not-allowed&mt-6 text-center text-sm text-gray-600 containercardtitle error_boxformlabelinputbasevariantsnormalloadingbuttonhintn&4QQSSS8userusernamepassworderrorsloadingø k4#//&#//'QS-8S- ##W08"Please enter username and password usernameto_sempty?passworderrorspatchloadingSessionloginà C4' S- %Q/R-/Q/8Login successful: /chatloadingerrorsusernamepatchputs FunicularrouternavigateJ4-/W.8classs containerdivE4-/W.8classscarddiv´ E4-/W.-/W.!-/ W. 8 classstitleh1user on_submit handle_submitformform_forhintdiv/ 4Q8Funicular Chat½ P4W.W.-/'Q%Q--/'%//8 Logging in...Logindivstateloadingclasssnormalbuttonsubmit« 24!/!-/Q /18Enter your usernameusernamelabelclasssinput placeholder autofocus text_fieldž -4!/!-/Q/!8Enter your passwordpasswordlabelclasssinput placeholderpassword_field( 4W.8spanU 4Q84Demo users: alice, bob, charlie (password: password)ý IW.cX_cX_cX_cX_cX_cX_cX_cX_8 stylesinitialize_statecomponent_mountedhandle_avatar_change handle_savesave_with_modelsave_with_formdatahandle_formdata_responserender2 v4Q-Q-Q-Q-Q-Q-Q-Q-Q-Q - Q - Q -  Q  Q Q S- 8min-h-screen bg-gray-100 py-83max-w-2xl mx-auto bg-white rounded-lg shadow-md p-8&flex items-center justify-between mb-6 text-2xl font-bold text-gray-800!text-blue-600 hover:text-blue-800Dmb-4 p-4 border rounded bg-green-100 border-green-400 text-green-700 space-y-6,block text-sm font-medium text-gray-700 mb-2fw-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500Lw-full px-3 py-2 border border-gray-300 rounded-md bg-gray-100 text-gray-600mb-2#w-24 h-24 rounded-full object-coverAw-full py-2 px-4 rounded-md transition duration-200 font-semibold(bg-blue-600 text-white hover:bg-blue-700Fbg-blue-600 text-white hover:bg-blue-700 opacity-50 cursor-not-allowed containercardheadertitle back_buttonmessageformlabelinputinput_disabledavatar_containeravatarbasevariantsnormalsaving submit_buttonáC4QQSS      / / S8 userusername display_name user_objecterrorsmessageavatar_previewsavingavatar_cache_busterTimenowto_i=4W08Session current_user· B4'/Q/%$ /   / S- 8/login Funicularrouternavigate user_objectuserusername display_namepatchn4QW08 avatar-input FileUpload Funicularselect_file_with_previeww24''-%-8@selected_avatar_fileavatar_previewpatch <4S -0'#-% #-8savingmessageerrorspatch@selected_avatar_file display_namesave_with_formdatasave_with_modelƒ34-//-//-/W08state user_object has_avatar display_name=updateV„4'c/Q#/'!' Q/Q     / / S - @%Q  R - 8 has_avatar @has_avatarSettings saved successfully!Error: Usernewnil?instance_variable_setsavingmessage user_objectuserusername display_namepatchH4Q-//RS Q   W 0 18/users/avatar state user_objectid display_name FileUpload Funicularfields file_fieldfile@selected_avatar_fileupload_with_formdataY4-8@selected_avatar_filehandle_formdata_response)Ä4(%Q- %¢Q#&Q#'Q- %x-/QQ#/Q#' Q/Q     / Q#S    / / -`8 Failed to parse responseerrorerrorsFailed to save settings @display_name display_nameavatar_updated @has_avatarSettings saved successfully!savingmessagepatchstate user_objectinstance_variable_setuserusername display_nameavatar_previewavatar_cache_busterTimenowto_iJ4-/W.8classs containerdivE4-/W.8classscarddivä b4-/W.-/'-/W.-/' -/ W. !%8 classsheaderdivstatemessage user_objectuser on_submit handle_saveformform_for~04-/W.V-/W. 8classstitleh1onclick back_buttonbutton) 4Q8SettingsQ4/Q/8/chat Funicularrouternavigate( 4W.8span1 4Q8↠Back to Chat( 4W.8span44-/8statemessageÍ W4W.W.W.-/'Q%Q--/'%//8 Saving... Save Changesdivstatesavingclasssnormal submit_buttonsubmitˆ ,4!/!-//!8usernamelabeldisabledclasssinput_disabled text_field†*4!Q/!-//8 Display Name display_namelabelclasssinput text_fielda ƒ4-/W.-/'-/W.%"-//'-/W.!  Q Q   - / /A8 avatar-inputimage/*classslabelstateavatar_previewavatar_containerdiv user_object has_avataravataridacceptonchangehandle_avatar_changeinput file_field' 4Q8Avatarn 4-/-/- 8srcstateavatar_previewclasssavatarimg·84Q-//RQR-/R-/- 8/users/ /avatar?t= srcstate user_objectidavatar_cache_busterclasssavatarimgQ4QW08app Funicular containerstart‡ ~4QQ/!QQ/!QQ/!QQ/!QQ /!Q/8 /loginlogin/chat/:channel_id chat_channel/chatchat /settingssettings/messages/:message_idmessage toLoginComponentasget ChatComponentSettingsComponentMessageComponentdelete set_defaultDBGaw/home/hasumi/work/R2P2/lib/picoruby/mrbgems/picoruby-funicular/demo/rails_chat/app/assets/builds/application.mrb.tmp.rb3"  s¼5I\eNË         6  )  .M<4   !;ÿÿÿÿjo #rsz{ |~€„Š‹*“ + “˜ &«"­ÿÿÿÿ ·¼6%¾ ùÿÿÿüÿÿÿÿÿÿÿ Æ2!Ð$   6%äüÿÿÿÿÿÿÿÿÿÿÿ óû$ÿ   ’” ™žŸ¤$¥    ¬­:)±         þÿÿÿ¼½¾Ï.Ï â ã äåæçëì&îîïð ö÷øùú „ $&„ ’›*œúÿÿÿ2+"¨©­  ®1¯°´µ¹ ¿% Í0Í â"ç ÿÿÿÿ ï$ð éÿÿÿóôõ ù û ý   Š*‹  ™šŸ  © + ©²¶ºJ9¾ & "é #íîõ ö ÷ ù ûüÿ…† Ž,Ž   $¨&ÿÿÿÿ"±ÿÿÿÿ»¼ ½¾ ÀÁ Æ ÑÒ$Ü   4#Ü"ñý&ÿýÿÿÿ Ž* ÿÿÿÿ ÿÿÿÿ š ¦0« ôÿÿÿ  $ Ë@/Ñíÿÿÿñÿÿÿ   ìí î   ï ðòôõúû € †&‹ ÿÿÿÿŒŽ’¯ ±LVAR£.usernamepasswordblockusererrorpropsconsumercanvasconfig js_configdatalabelssparamschannelsselected_channelchchannelnew_pathmessageseventcontentformsuccess message_idupdated_messagesm is_activeis_current_user avatar_urlresponsepathmethod containermessage is_disabledffile preview_url display_name had_avatarresultupdated_user_objecturlfieldsrouterÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿ!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"ÿÿÿÿÿÿ#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ%&ÿÿ ÿÿ'ÿÿ()ÿÿ*'ÿÿ+,)ÿÿ)ÿÿ*ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-ÿÿEND