RITE0400YHSMK0000IREP0400 [gihigihiggggig ihig ig ig i g i gi gi gi gigi\/\233' 3 \\\\  \ ^b4\\%=v "Funicular Chat App initializing...pinkusersessionchannelpostcomment FUNICULAR_ENV development Component FunicularDatePickerComponentImageUploaderComponentModelChannelCommentPostSessionUserBlogIndexComponentBlogPostComponent ChatComponentChannelListComponentMessageComponentMessageInputComponentMessageListComponentLoginComponentSettingsComponentputs debug_color= FileUploadmountserver? DraftStoreinit! load_schemasENV~ \\\\\\\R\\\ \ \ \ \ \\ \ \ \ R kkkkkkkk k 0 k k k k k kkkkk=SunMonTueWedThuFriSatJanuaryFebruaryMarchAprilMayJuneJulyAugust SeptemberOctoberNovemberDecemberWEEKDAYS MONTH_NAMESinitialize_state open_calendarclose_calendar prev_month next_monthclear handle_input select_dayrenderprivate button_classrender_calendar emit_change parse_date today_parts days_in_month leap_year? first_weekday date_stringpad N90#/WWY0WW '    '  ^=propsvalue parse_date today_parts calendar_open view_year view_month J90#/WWY'03  ' 0 3 /0=propsvalue parse_date calendar_open view_yearstate view_monthpatch;9/= calendar_openpatchz=903M(03H / &03H/=state view_month view_yearpatchz=903 M(03F/ &03F/=state view_month view_yearpatchT9\//= emit_change calendar_openpatchR93#3/=targetvalueto_s emit_change ,90303///=state view_year view_month date_string emit_change calendar_openpatchN9\b1=funicular-date-pickerclassdiv%9\b103(0&= funicular-date-picker__input_rowclassdivstate calendar_openrender_calendarJg9\0#30 #'\ 0  # ' \    a/ `\0  ab 1 0=text YYYY-MM-DDfunicular-date-picker__inputbuttontypevaluepropsto_s placeholderclass input_classoninput handle_inputonfocusinput button_classonclickbutton- 90= open_calendar- 90= open_calendar) 9\=Calendara90#'\=funicular-date-picker__buttonprops button_classU9\b1=funicular-date-picker__panelclassdiv-9\b1\b1\b1=funicular-date-picker__headerfunicular-date-picker__gridfunicular-date-picker__footerclassdiv E9\\ab 10\b1\\ab 10=buttonfunicular-date-picker__navfunicular-date-picker__monthtypeclassonclickbuttondiv* 90= prev_month" 9\=<r&9\03H#]\]03]=  MONTH_NAMESstate view_month view_year* 90= next_month" 9\=> Z9b40303/b40#/ WWW0303/ db4= WEEKDAYSeachstate view_year view_month first_weekdaytimespropsvalue parse_date days_in_monthW9\b1=funicular-date-picker__weekdayclassdiv 9!=U9\b1=funicular-date-picker__emptyclassdiv! 9\= X9!03M( !03M( !M\(\&\ a b 10=button?funicular-date-picker__day funicular-date-picker__day--selectedfunicular-date-picker__daystate view_year view_monthtypeclassonclickbutton/9!/= select_day( 9!3=to_s 89\\ab 10\\ab 10=button$funicular-date-picker__footer_buttontypeclassonclickbutton% 90=clear& 9\=Clear. 90=close_calendar& 9\=CloseV'90#( 2&=props on_changecall 9)&  R=3\23 M'  R=$3#3#3N'N' P(  R=N'  /P(  R= R=-to_ssplitsizeto_i days_in_month>9333R&+,'& R&-=Timenowyearmonth StandardErrorw92'&/(&&G 2', 2' 2' 2'&&&==== leap_year?W:9 2M(d22'2M=%!=s9      S  N( H& LEdLGLEH#EF 2=%W 49 \ /]\]/]\]/]=-padV-933N(\]&=0to_slength( hi=Plugins+ hi= DatePicker>=DatePickerComponent Component/kkkkkk0k k k k k k k k kkkkkkkkkkkkkkk= selected_file attr_readerinitialize_statehandle_file_changeclearuploadhandle_upload_resultrenderprivate render_image render_error image_srcinput_id file_field upload_fieldsresponse_url_key clearable? emit_select emit_upload emit_errorcontainer_classpreview_container_class image_class input_classcontrols_classclear_button_classupload_button_classplaceholder_class error_class upload_labeluploading_labelalt_text )9   3 3 ^= preview_url uploaded_url uploadingerror cache_busterTimenowto_iq9 &&0b4= FileUpload Funicularinput_idselect_file_with_preview ]9((3/ /0#(0&&//=@selected_file preview_urlerrorpatch emit_selectprops auto_uploadupload &9/0/=@selected_file preview_url uploaded_urlerrorpatch emit_select9:'&<:'&<;'0#'\/\/@'\/\/@  /    ' 0  0   b41=upload_url is requiredNo file selectedfieldsurlprops upload_urlerrorpatch emit_error@selected_file uploading FileUpload Funicular upload_fields file_fieldfileupload_with_formdata8 9/=handle_upload_result9)&\ / \/@\#'\#(8\#'\#\2 / /@0#'0#         3 3/P/=Failed to parse responseerrorerrors,  uploadingerrorpatch emit_errorjoin@selected_fileresponse_url_keypropssrc preview_url uploaded_url cache_busterTimenowto_i emit_uploadG90b1=classcontainer_classdivj9000b1= render_image render_errorclasscontrols_classdiv9\00 #'\   0 / P0 (\0  ab 1 00#(/\003'3 a b 1 @&=fileimage/*buttontypeidinput_idacceptpropsonchangehandle_file_changeclass input_classinput clearable?clear_button_classonclickbuttonshow_upload_buttonupload_button_classdisabledstate uploading@selected_filenil?% 90=clearH90#'\=Clearprops clear_label& 90=uploadb903(0&0=state uploadinguploading_label upload_labelA90(0b1&0#(0b1&= image_srcclasspreview_container_classdivprops placeholderplaceholder_classd 9!00/0=srcaltalt_textclass image_classimg890#=props placeholder0903(0#2'@0b1=stateerrorprops show_error!=class error_classdiv0 903=stateerrorJ903'03'0#3' 3\M(@3\\2(=0#'=3\2 (\&\\]]\]03 ]=blob:data:?&t= state preview_url uploaded_urlpropssrcnil?to_s start_with? cache_bustinclude? cache_buster^90#'\=funicular-image-uploader-inputpropsinput_idG90#'\=imageprops file_fieldk190#2(3='^=propsfieldscall respond_to?Q90#'\= image_urlpropsresponse_url_key.90#(03'03'0#=props clearablestate preview_url uploaded_urlsrcY *90#(2&=props on_selectcallV'90#( 2&=props on_uploadcall` 29 &&0#(2&=propson_errorcall_90#'\=funicular-image-uploaderpropscontainer_classp90#'\=!funicular-image-uploader__previewpropspreview_container_classb90#'\=funicular-image-uploader__imageprops image_classb90#'\=funicular-image-uploader__inputprops input_classh90#'\="funicular-image-uploader__controlspropscontrols_classi90#'\=funicular-image-uploader__clearpropsclear_button_classk90#'\= funicular-image-uploader__uploadpropsupload_button_classn90#'\=%funicular-image-uploader__placeholderpropsplaceholder_classb90#'\=funicular-image-uploader__errorprops error_classJ90#'\=Uploadprops upload_labelS90#'\= Uploading...propsuploading_labelI90#'\=Selected imagepropsalt( hi=Plugins. hi= ImageUploaderA=ImageUploaderComponent ComponentHlll=loginlogout current_userm %9 ^ 1=usernamepassword model_classUsercreate.91=destroyg 9\b1 =current endpoint_name model_classUserfind<!9!(!2&=call$f\2\^/=^[^@]+$cannot contain @ display_nameformatwithRegexpcompilemessage validates+ hi= DraftStore6lllllll= @kvs @disabledinit!getsetdelete clear_all!enable! disabled?e9'\2=funicular_drafts@kvsKVS IndexedDBopeni,9(3('@\]#=draft:channel:@kvs @disabled! O9(3('@\]33( 2& %=draft:channel:@kvs @disabled!to_sempty?deleteZ$9('@\]2=draft:channel:@kvsdeleteD9)3=@kvsclear @disabled+ 9= @disabled) 9= @disabled b1kkk0kk=stylesinitialize_statecomponent_mountedrenderprivate post_to_h format_dateEZ9\/\/\/\/\/\/\/\/\/\ / \ / \ / = min-h-screen bg-gray-50 py-10max-w-2xl mx-auto px-4 mb-6 text-smtext-blue-600 hover:underline%text-3xl font-bold text-gray-800 mb-2text-gray-600 mb-8 space-y-4?block bg-white rounded-lg shadow p-5 hover:shadow-md transition#text-xl font-semibold text-blue-700text-gray-400 text-xs mt-1text-gray-600 text-sm mt-3 text-gray-500 containerinnernavnav_linktitleleadlistcard post_titlemetaexcerptempty+9R^=postsX9033'@b4=statepostsempty?PostallM#9(&b4/=postsmappatch- 9/= post_to_hH903b1=classs containerdivD903b1=classsinnerdivf903b103b103b103 3 (03 b1&03 b1= classsnavdivtitleh1leadpstatepostsempty?emptylistg 9\03b1!=/chatnavigateclasssnav_linklink_to( 9b1=span- 9\= Back to chat/ 9\=Funicular Blog9\\]=9Notes on building a chat app with Ruby on the front end. @Each post is rendered on the server and hydrated in the browser.. 9\= No posts yet.>903b4=statepostseach 39\\#]03  \ # b 11=/blog/idnavigateclassscardkeylink_toz6903b103b103b1=classs post_titledivmetaexcerpt,9!\#=titlet(9\!\#]\]!\#/]= author_name - published_at format_date.9!\#=excerpt69\3\3\3\  3 \  3 ^=idtitle author_name published_atexcerptidtitle author_name published_atexcerptF93\23=Tto_ssplitfirst 4b1kkkkkk0kk k k = styles initializeinitialize_statecomponent_mounted handle_submitreload_post_commentsrenderprivate post_to_h comment_to_h user_to_h format_date@9\/\/\/\/\/\/\/\/\/\ / \ / \ / \ / \ / \/\/\/\/\/\/\/\/\/=min-h-screen bg-gray-50 py-10max-w-2xl mx-auto px-4mb-6 text-sm flex gap-4text-blue-600 hover:underlinebg-white rounded-lg shadow p-6 text-3xl font-bold text-gray-800text-gray-400 text-sm mt-2 mb-61text-gray-800 leading-relaxed whitespace-pre-linemt-10(text-xl font-semibold text-gray-800 mb-4 space-y-3!bg-white rounded-lg shadow-sm p-4text-gray-400 text-xs mb-1text-gray-700 text-smtext-gray-500 text-sm#mt-6 bg-white rounded-lg shadow p-4(text-sm font-semibold 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-500Pmt-2 px-5 py-2 rounded-md bg-blue-600 text-white font-semibold hover:bg-blue-700\mt-2 px-5 py-2 rounded-md bg-blue-600 text-white font-semibold opacity-50 cursor-not-allowedmt-6 text-sm text-gray-600 text-gray-500 containerinnerback back_link article_boxtitlemetabodycomments_sectioncomments_title comments_listcomment comment_meta comment_body no_commentsform_box form_titletextareasubmitsubmit_disabled login_prompt login_linkmissingE!9 &&^87#=id@post_id59R \ ^  ^   ^=postcomments current_usercommentbodyerrors interactive submitting89\//03)@b4b4 =0BlogPostComponent mounted: comment form is ready puts interactivepatchstatepostPost@post_idfindSession current_userj 09(&/3'R/ =post post_to_hcommentspatchW 9(&//= current_user user_to_hpatch; ~93#(#33&03#333 (@  ^ /  03\# ^b4=idpreventDefault@refs comment_bodyvalueto_sstripstatecommentbodyempty? submittingerrorspatchCommentpost_idpostcreate U9(^ / &0!#(3!( !\%0=errorsbody submittingpatchtargetresetvaluereload_post_commentsR903\#b4=idPoststatepostfindZ9(^/ &5/3'R  \ ^  ^  /P=errorsbody submittingpatchpost post_to_hcommentscommentH903b1=classs containerdivD903b1=classsinnerdivV903b103)&03b1& 03b1 03 b1 = classsbackdivstatepostmissingp article_boxarticlecomments_sectionsection 69\03b1!\03b1!=/blog/chatnavigateclasss back_linklink_to( 9b1=span* 9\= All posts( 9b1=span- 9\= Back to chat0 9\=Loading post...w6903b103b103b1=classstitleh1metadivbody=903\#=titlestatepost,9\03\#]\]03\#/]= author_name - published_atstatepost format_date<903\#=bodystateposts903b1033(03b1&03 b1 03 (03 b1 &03 b1=classscomments_titleh2statecommentsempty? no_commentsp comments_listdiv current_userform_box login_promptZ9\033]\]= Comments ()statecommentssize1 9\=No comments yet.A903b4=statecommentseach] !903\#b1 =idclassscommentkeydivj&903b103b1=classs comment_metadiv comment_bodyr(9\!\#]\]!\#/]= author_name - created_at format_date+9!\#=bodyC903b103(ab1 &  b1= classs form_titledivstate interactiveonsubmitkeycomment_form_readyformcomment_form_pending`9\03\#]= Comment as display_namestate current_user1 9/= handle_submit#_903  \  0 3 /P \03 ( 03 &03 03 b 1 0=Share your thoughts...submitref comment_bodyclassstextarearows placeholderdisabledstate submittingtypesubmit_disabledsubmitbutton( 9b1=span`903(\&\= Posting... Post commentstate submitting >903 \  /@\03b 10=Share your thoughts...button classstextarearows placeholderdisabledtypesubmit_disabledbutton( 9b1=span- 9\= Post commentj 9\03b1!=/loginnavigateclasss login_linklink_to( 9b1=span2 9\=Log in to comment69\3\3\3\  3 \  3 ^=idtitlebody author_name published_atidtitlebody author_name published_at -9\3\3\3\  3 ^=idbody author_name created_atidbody author_name created_atY9\3\3^=id display_nameid display_nameF93\23=Tto_ssplitfirst 1b1kkkkkkkkk k = styles initializeinitialize_statecomponent_mountedcomponent_will_unmount load_channelsselect_channelhandle_send_message handle_logouthandle_message_deleterenderl9\/\/=flex h-screen bg-gray-100 flex-1 flexlayout main_contentk+9 &&^87#)3= channel_idto_i@requested_channel_id59RR     33 ^= channelscurrent_channelmessages current_userloading skip_scrollavatar_cache_busterTimenowto_ii93b4= DraftStore Funicularenable!Session current_user*9(3\2& /0=/login Funicularrouternavigate current_userpatch load_channelsJ9( 3&= @subscription unsubscribe49b4=Channelall y9( /&` / 3P( 033(4(#b4( / &&$/ &= loadingpatchchannelssizestatecurrent_channel!@requested_channel_idfindselect_channelB93M=id@requested_channel_id 9R   /0\3]332(  3 3   ^2 \2(3\23\ 3 ^b4=/chat//cable ChatChannelcurrent_channelmessagesloadingpatchid Funicularroutercurrent_location_path!=JSglobalhistoryBridgeto_js replaceState @subscription unsubscribeCablecreate_consumer subscriptionschannel channel_idcreateX 9\#\2'&\# / &[\2'&(03\#RE / &"\2'&\#/&=typeinitial_messagesmessages new_messagemessagedelete_message message_id===messagesloadingpatchstate skip_scrollhandle_message_delete29333(@'@\^2= send_messageto_sstripempty? @subscriptioncontentperformf93b4= DraftStore Funicular clear_all!SessionlogoutQ93\2=/login Funicularrouternavigate "9\]\\b 1=message-opacity-100 max-h-screenopacity-0 max-h-0duration remove_viak %903b4/ =statemessagesreject skip_scrollpatch.9\#!M=idE903b1=classslayoutdivL9030 3  0 3  a a^/ 0 3 b1 = ChannelListComponentpreservechannelsstatecurrent_channel current_useron_select_channel on_logout componentclasss main_contentdiv2 9/=select_channel1 9/= handle_logoutFj9030 3  ) 3  0 3  0 3 03 03  03  a a^ / =MessageListComponentpreservecurrent_channelstate channel_ididmessagesloading current_user skip_scrollavatar_cache_busteron_send_messageon_message_delete component7 9/=handle_send_message9 9/=handle_message_delete3 b1k=stylesrenderx9\/\/\/\/\/\\/ \/\/ \ / \ / \ / \ / \ /\/\/=)w-64 bg-gray-800 text-white flex flex-colp-4 bg-gray-900text-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-700&flex items-start justify-between gap-3min-w-0text-sm font-semiboldtext-xs text-gray-400Jmt-2 inline-block text-sm text-blue-400 hover:text-blue-300 cursor-pointer;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_infouser_row user_identity user_name user_handle blog_link logout_buttonF903b1=classssidebardivG903b103b10#(03b1&=classssidebar_headerdiv channels_listprops current_user user_infoK903b1=classs sidebar_titleh2) 9\=ChannelsC90#b4=propschannelseach K90#(0#33M30 2 a b 10= propscurrent_channelidkeyclasss channel_itemonclickdivM90#!2=propson_select_channelcallj&903b103b1=classs channel_namediv channel_desc39\!3]=# name/ 9!3= description8903b1b10#03b1 = classsuser_rowdivonclickprops on_logout logout_buttonbutton .903b1003b1!=classs user_identitydiv settings_pathnavigatesettings_buttonlink_tof&903b103b1=classs user_namediv user_handleK90#3=props current_user display_nameQ9\0#3]=@props current_userusername( 9b1=span' 9\=⚙️h 9\03b1!=/blognavigateclasss blog_linklink_to( 9b1=span. 9\= Read our blog( 9b1=span' 9\=Logoutfb1kkk=stylescomponent_mountedrenderhandle_link_responseE9\/\/\/\/\/\/\/\/\/= 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 )9\0#\#]\\,/=message-idopacity-0 scale-95opacity-100 scale-100propsmessagedurationadd_via 59\03]\]\0#\#]b1 = opacity-0 scale-95message-idclasssmessageidpropsdiv 90#\#\#(0#(0#30#\#\#M(0#()\0#\#\#]\]0#]&\0#\#\#]\]03/ &03 b1 03 b1 =user has_avatarid/users/ /avatar?t=/avatar propsmessage current_useridavatar_cache_bustersrcclasss avatar_imgimgavatar_placeholderdivmessage_content( 9b1=spanf90#\#\##3=user display_namepropsmessageupcasel&903b103b1=classsmessage_headerdiv message_text7 903b103b10#(0#30#\#\#M(*0#\#/   03 b1 !&=useridclasssmessage_authorspan message_timeprops current_useridmessage message_pathmethoddelete delete_buttonlink_toV90#\#\#=user display_namepropsmessageG90#\#= created_atpropsmessage( 9b1=span' 9\=DeleteD90#\#=contentpropsmessage B9 333M( 33(\23387=/ to_sdowncaseto_symdeleteerror?!splitlastto_i& 8b1kkkkkkk0k k k k = stylesinitialize_statecomponent_mountedcomponent_updatedcomponent_will_unmount handle_input handle_submitrenderprivate restore_draftsave_draft_nowschedule_save_draftcancel_save_timer 79\/\/\/\\\ ^/ =%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-allowed input_area input_form message_inputbasevariantsenableddisabled send_buttonQ9\^= message_inputcurrent_channel_idn90#/0=current_channel_idprops channel_idpatch restore_draft M90#03M(@032\/ 0 = props channel_idstatecurrent_channel_id DraftStore Funicular message_inputsetpatch restore_drafte93(&0= DraftStore Funicular disabled?save_draft_nown93#/0= message_inputtargetvaluepatchschedule_save_draftB l9303333(@#(3\/  0  #2 00 #2=preventDefaultstate message_inputto_sstripempty?targetresetpatch DraftStore Funicularprops channel_iddeletecancel_save_timeron_send_messagecallI903b1=classs input_areadiv[9a03b1 =onsubmitclasss input_formform1 9/= handle_submitKs9\0 3  a  \ 03/ `033 3 3 \0( &2  b 10=textType a message...submitref message_inputtypevaluestateoninput placeholderclasssinputto_sstripempty?disabledenabled send_buttonbutton0 9/= handle_input( 9b1=span% 9\=SendD90#2( 333(3/ &= DraftStore Funicularprops channel_idgetto_sempty?! message_inputpatch~90#032= DraftStore Funicularprops channel_idstate message_inputsetn903,b4=cancel_save_timerJSglobal setTimeout @save_timer. 90=save_draft_now_ 9'@32= @save_timerJSglobal clearTimeoutbb1kkk=stylescomponent_updatedscroll_to_bottomrender79\/\/\/\/\/\/\/=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-5005flex-1 flex items-center justify-center text-gray-500chat_container chat_header chat_title chat_subtitle messages_arealoading empty_state990#(@0#(0#33(0&=props skip_scrollmessagesempty?!scroll_to_bottom99d/#(##%&=sleep_ms@refsmessages_container scrollTop scrollHeightM903b1=classschat_containerdivE p90#(N03b103b1    0 # 0  # ^/ &03b1=propscurrent_channelclasss chat_headerdivrefmessages_container messages_areaMessageInputComponentpreserve channel_idon_send_message component empty_staten&903b103b1=classs chat_titleh3 chat_subtitledivQ9\0#3]=# propscurrent_channelnameM90#3=propscurrent_channel description~490#(03b1&0#b4=propsloadingclasssdivmessageseach4 9\=Loading messages...G9\#   0  #  0#0#^/ =id MessageComponentkeypreservemessage current_userpropsavatar_cache_buster on_deleteon_message_delete component( 9b1=spanC 9\="Select a channel to start chatting^b1kkk=stylesinitialize_state handle_submitrender a9\/\/\/\/\/\/\/\ \ \ ^/ \ / \ / = [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-600text-blue-600 hover:underline containercardtitle error_boxformlabelinputbasevariantsnormalloadingbuttonhint hint_linkn&9\\^^^=userusernamepassworderrorsloading d9#33'#33(\^/@^/ ##b4="Please enter username and password usernameto_sempty?passworderrorspatchloadingSessionlogin A9( ^/ &\3]/3\2=Login successful: /chatloadingerrorsusernamepatchputs FunicularrouternavigateH903b1=classs containerdivC903b1=classscarddiv ?903b103b1!03 b1 = classstitleh1user on_submit handle_submitformform_forhintdiv/ 9\=Funicular Chat K9b1b103(\&\003(&22= Logging in...Logindivstateloadingclasssnormalbuttonsubmit 09!2!03\ 21=Enter your usernameusernamelabelclasssinput placeholder autofocus text_field +9!2!03\2!=Enter your passwordpasswordlabelclasssinput placeholderpassword_fieldv %9b1\03b1!=/blogspannavigateclasss hint_linklink_to1 9\=Demo use only - ( 9b1=span. 9\= read our blog)aa/b1kkkk= current_user on_resolve use_suspensestylesinitialize_state handle_savesave_with_modelrender=9b4=Session current_userx39(3\2!2& !2=/login Funicularrouternavigatecalls +933  3 ^/=userusername display_namebirthdaypatch 9\/\/\/\/\/\\\ ^/ \/ \ / \/ \ / \ /\ /\ /\/\/\/\/\/\/\\\ ^/ =min-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-800mb-4 p-4 border rounded,bg-green-100 border-green-400 text-green-700&bg-red-100 border-red-400 text-red-700 space-y-6'space-y-3 pb-6 border-b border-gray-200,block text-sm font-medium text-gray-700 mb-2#text-lg font-semibold text-gray-800text-sm text-gray-500fw-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500w-full text-sm text-gray-700 cursor-pointer file:mr-4 file:py-2 file:px-4 file:rounded-md file:border-0 file:bg-blue-600 file:text-white file:font-semibold file:cursor-pointer hover:file:bg-blue-700Lw-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-cover%flex items-center justify-center py-8Oanimate-spin h-8 w-8 border-4 border-blue-500 border-t-transparent rounded-fullAw-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_buttonbasevariantssuccesserrormessageformsectionprofile_sectionlabel section_title section_hintinput file_inputinput_disabledavatar_containeravatarloading_containerloading_spinnernormalsaving submit_buttonB9\\\^^     3 3 ^= userusername display_namebirthdayerrorsmessageis_errorsavingavatar_cache_busterTimenowto_i 39  ^ /@##/=savingmessageis_errorerrorspatch display_namebirthdaysave_with_model-90302020b4= current_user has_avatar display_name= birthday=update9(0\\#20\\#2\#3(!( 0\2\    0 3 03 03 ^ / @&< 2 ( 3 / &\ ]  / 0= @display_name display_name @birthdaybirthday has_avatar @has_avatarSettings saved successfully!Error:  current_userinstance_variable_setnil?savingmessageis_erroruserusername display_namebirthdaypatchmessages respond_to?errorsH903b1=classs containerdivC903b1=classscarddivK903b103($003(&2b1b1= classsheaderdivstatemessageis_errorerrorsuccessz,903b1a03b1 =classstitleh1onclick back_buttonbutton) 9\=SettingsP93\2=/chat Funicularrouternavigate( 9b1=span0 9\=<- Back to Chat( 9b1=span2 903=statemessageK9aab1 =fallbackerrorsuspenseP903b1=classsloading_containerdivK903/=classsloading_spinnerdivR902b1=classserrormessagediv( 9b1=span9 9\=Failed to load user data /903b103b1!= classssectiondivuser on_submit handle_saveformform_for9b103(\03]\]0 3 ]& \03]\] \  \   030303aa/=/users/ /avatar?t=/avatar avatar-inputavatardiv Component ImageUploaderPlugins Funicularsrc current_user has_avataridstateavatar_cache_buster upload_urlinput_id file_field auto_uploadpreview_container_classsavatar_container image_classavatar input_class file_input on_uploadon_error componentn&903b103b1=classs section_titleh2 section_hintp' 9\=AvatarE 9\=$Image changes are saved immediately. -90\2\ 3 3 /0= @has_avatarAvatar updated successfully! current_userinstance_variable_setmessageis_erroravatar_cache_busterTimenowto_ipatchF 9/ =messageis_errorpatch Y9b1b1b1b103(\&\003(&22= Saving... Save Changesdivstatesavingclasssnormal submit_buttonsubmitK903b1=classs section_titleh2( 9\=Profile *9!2!032!=usernamelabeldisabledclasssinput_disabled text_field(9!\2!032= Display Name display_namelabelclasssinput text_field P9!\203#' 03\# 0 3  a / 1=Birthdaybirthdaybirthdaylabel Component DatePickerPlugins Funicularvaluestateuser input_classsinput on_change component[ 9032/=userstatebirthdaymergepatchQ9\b4=app Funicular containerstart9\\2!\\  f  \ 2 ^ 21\ \2!\ \  f  \ 2 ^ 21\  \ 2!\  \ 2!\  \  f  \ 2 ^ 21\2=/blogblog /blog/:id blog_post\d+/loginlogin/chat/:channel_id chat_channel/chatchat /settingssettings/messages/:message_idmessagetoBlogIndexComponentasgetBlogPostComponent constraintsidRegexpcompileLoginComponent ChatComponent channel_idSettingsComponentMessageComponent message_iddelete set_defaultDBG&g/rails/vendor/bundle/ruby/4.0.0/gems/funicular-datepicker-0.1.1/lib/components/date_picker_component.rbR/rails/vendor/bundle/ruby/4.0.0/gems/funicular-datepicker-0.1.1/lib/date_picker.rbn/rails/vendor/bundle/ruby/4.0.0/gems/funicular-image-uploader-0.1.1/lib/components/image_uploader_component.rbY/rails/vendor/bundle/ruby/4.0.0/gems/funicular-image-uploader-0.1.1/lib/image_uploader.rb&/rails/app/funicular/models/channel.rb&/rails/app/funicular/models/comment.rb#/rails/app/funicular/models/post.rb&/rails/app/funicular/models/session.rb#/rails/app/funicular/models/user.rb*/rails/app/funicular/stores/draft_store.rb7/rails/app/funicular/components/blog_index_component.rb6/rails/app/funicular/components/blog_post_component.rb1/rails/app/funicular/components/chat_component.rbI/rails/app/funicular/components/chat_components/channel_list_component.rbD/rails/app/funicular/components/chat_components/message_component.rbJ/rails/app/funicular/components/chat_components/message_input_component.rbI/rails/app/funicular/components/chat_components/message_list_component.rb2/rails/app/funicular/components/login_component.rb5/rails/app/funicular/components/settings_component.rb#/rails/app/funicular/initializer.rb'/rails/app/assets/builds/app.mrb.env.rb)$$,,99FFSSaao ow w      M?.  )       ( 059?@ !A HJJSWX  Y ZZ[^^ a bcfg!krsyzz{{ &   -)"  &7   O>     /   ?.##   8A0= WX3"[  ddmn#x {          #           #    +         !  " # $ ( ) / 1 2 3 4 5 6 C     M) T  A 0   ! %    - 0 5 , % >   K' L   [ \# ]  ^ _ ` b c h j k l m! p  " q t v w x y z   &                         '       !    !   ' +5 $-   5' ?"5 $P ] d  i n s t y# z      *          3 "        " ! ! " # )  * + , - / 0 3 4 5 8 9 $% ).)!&'+  ,--.237= +  !    !%%*    :;<)<  AJKSX\^a  ! !  )   !% '!)   =>- #"!&0123 56 ; FGHI!   $!     G6 9D I   =,O   mn o & p qsuv{| , *     "     #+++LVARyMyearmonth today_year today_montheventdayvalue selected_yearselected_month selected_dayselectedcallbackpartsnowoffsetsynumberwidthtextfile preview_url**fieldsurlendpointresultmessage uploaded_urlsource separatorusernamepasswordblockusererror channel_idkeypostspostisoparamstextareabodycommentformchannelsselected_channelchchannelnew_pathconsumerdatamessagescontentsuccess message_idupdated_messagesm is_activeis_current_user avatar_urlresponsepathmethodnew_channel_idold_channel_id is_disabledsaved containerfresolvereject display_namebirthday had_avatarerouter         !"##$#%"&&&'(&"!")*+",&"+&+!'(!"-"./0123456"7890570:;<=>?7@A5,BCD3!"EFG!"!3HIJ6KELEND