{"version":3,"sources":["../ts/modules/knockout.extensions.ts"],"names":["isTruthy","expr","ko","unwrap","indexOf","String","toLowerCase","SlideVisibleStrategy","toggle","element","options","value","$","stop","duration","FadeVisibleStrategy","ToggleBindingHandler","getOptions","update","valueAccessor","this","strategy","getToggleStrategy","Error","DialogToggleStrategy","shouldOpen","dialogClose","n","key","deferred","reject","Deferred","Dialogs","Init","dialogData","$div","Dialog","find","then","Close","empty","one","$element","title","data","dialog","append","clone","show","Open","resolve","AnimateVisibleBindingHandler","init","extend","animateVisibleDefaultOptions","super","animation","undefined","wrap","handler","retval","args","apply","bindingHandlers","hide","extenders","computed","initialValue","observable","let","currentDeferred","promise","result","err","input","cast","read","write","allBindings","viewModel","bindingContext","localization_1","translate","defer","i","hasOwnProperty","impl","attr","dictionaryKey","ajaxKey","itemResult","text","html","val","fetch","allBindingsAccessor","elem","unbind","swipe","swipeLeft","event","direction","distance","fingerCount","swipeRight","on","e","target","files","subscribe","v","length","Array","from","concat","preventDefault","typelessAutoComplete","autocomplete","autoFocus","delay","minLength","create","ui","addClass","source","request","response","term","schoolId","doComplete","setFields","select","item","_resizeMenu","_renderItem","ul","name","appendTo","schoolKey","AjaxTemplateLoader","loadTemplate","componentName","templateConfig","callback","ajax","components","defaultLoader","loaders","unshift","context","utils","unwrapObservable","url","nodes","Object","assign","template"],"mappings":"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","file":"knockout.extensions.js","sourcesContent":["import * as ko from 'knockout';\r\nimport { translate } from 'localization';\r\nimport * as $ from 'jquery';\r\n\r\nfunction isTruthy( expr: any ): boolean {\r\n\texpr = ko.unwrap( expr );\r\n\tif( [ 'no', 'off', '0', 'false' ].indexOf( String( expr ).toLowerCase() ) >= 0 ) return false;\r\n\telse return !!expr;\r\n}\r\n\r\ninterface ToggleOptions {\r\n\tvalue: KnockoutObservable<boolean>;\r\n}\r\n\r\ninterface DialogToggleOptions extends ToggleOptions {\r\n\ttitle?: string;\r\n}\r\n\r\ninterface AnimateVisibleOptions extends ToggleOptions {\r\n\tanimation?: string;\r\n\tduration?: number|string;\r\n}\r\n\r\ninterface ToggleStrategy<T> {\r\n\ttoggle( element: Element, options: T );\r\n}\r\n\r\nclass SlideVisibleStrategy implements ToggleStrategy<AnimateVisibleOptions> {\r\n\tpublic toggle( element: Element, options: AnimateVisibleOptions ) {\r\n\t\tconst value = isTruthy( options.value );\r\n\r\n\t\t$( element ).stop( false )[ value ? 'slideDown' : 'slideUp' ]( options.duration );\r\n\t}\r\n}\r\n\r\nclass FadeVisibleStrategy implements ToggleStrategy<AnimateVisibleOptions> {\r\n\tpublic toggle( element: Element, options: AnimateVisibleOptions ) {\r\n\t\tconst value = isTruthy( options.value );\r\n\r\n\t\t$( element ).stop( false )[ value ? 'fadeIn' : 'fadeOut' ]( options.duration );\r\n\t}\r\n}\r\n\r\nfunction notImplemented() { return new Error( 'Not implemented' ); }\r\n\r\nclass ToggleBindingHandler<T extends ToggleOptions> {\r\n\tprotected getOptions( value: KnockoutObservable<boolean>|T ): T {\r\n\t\tif( typeof ko.unwrap( <any>value ) === 'boolean' ) {\r\n\t\t\treturn <any>{ value: <KnockoutObservable<boolean>>value };\r\n\t\t} else {\r\n\t\t\treturn <any>value;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic update( element: Element, valueAccessor: () => any ) {\r\n\t\tconst options = this.getOptions( valueAccessor() ),\r\n\t\t\tstrategy = this.getToggleStrategy( options );\r\n\r\n\t\tif( strategy ) strategy.toggle( element, options );\r\n\t}\r\n\r\n\tprotected getToggleStrategy( options: T ): ToggleStrategy<T> {\r\n\t\tthrow notImplemented();\r\n\t}\r\n}\r\n\r\nclass DialogToggleStrategy implements ToggleStrategy<DialogToggleOptions> {\r\n\tpublic toggle( element: Element, options: DialogToggleOptions ) {\r\n\t\tfunction getDeferred( n: boolean ): JQueryDeferred<{}> {\r\n\t\t\tconst key = '__DialogToggleStrategy$Deferred',\r\n\t\t\t\tdeferred: JQueryDeferred<{}> = element[ key ];\r\n\t\t\tif( deferred ) {\r\n\t\t\t\tif( n ) deferred.reject();\r\n\t\t\t\telse return deferred;\r\n\t\t\t}\r\n\t\t\treturn element[ key ] = $.Deferred();\r\n\t\t}\r\n\r\n\t\tconst shouldOpen = isTruthy( options.value ),\r\n\t\t\tdialogClose = getDeferred( shouldOpen );\r\n\r\n\t\tif( shouldOpen ) {\r\n\t\t\tDialogs.Init( 'Notice', dialogData => {\r\n\t\t\t\tconst $div = dialogData.Dialog.find( '#dialog-notice' );\r\n\r\n\t\t\t\tdialogClose.then( () => {\r\n\t\t\t\t\tdialogData.Close();\r\n\t\t\t\t\t$div.empty();\r\n\t\t\t\t} );\r\n\r\n\t\t\t\tdialogData.Dialog.one( 'dialogclose', () => { dialogClose.reject(); } );\r\n\r\n\t\t\t\tdialogData.Dialog.one( 'setParams', () => {\r\n\t\t\t\t\tconst $element = $( element ),\r\n\t\t\t\t\t\ttitle = options.title || $element.data( 'title' ) || null;\r\n\t\t\t\t\tif( title ) {\r\n\t\t\t\t\t\tdialogData.Dialog.dialog( 'option', 'title', ko.unwrap( title ) );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$div.empty().append( $element.clone( false ).show() );\r\n\t\t\t\t} );\r\n\t\t\t\tdialogData.Open();\r\n\t\t\t} );\r\n\t\t} else {\r\n\t\t\tdialogClose.resolve();\r\n\t\t}\r\n\t}\r\n}\r\n\r\nclass DialogToggleBindingHandler extends ToggleBindingHandler<DialogToggleOptions> {\r\n\tpublic init( element: Element, valueAccessor: () => any ) {\r\n\t\t$( element ).hide();\r\n\t}\r\n\r\n\tprotected getToggleStrategy() {\r\n\t\treturn new DialogToggleStrategy;\r\n\t}\r\n}\r\n\r\nclass AnimateVisibleBindingHandler<T extends AnimateVisibleOptions> extends ToggleBindingHandler<T> {\r\n\tprivate static animateVisibleDefaultOptions: AnimateVisibleOptions = {\r\n\t\tanimation: 'slide',\r\n\t\tduration: 'slow',\r\n\t\tvalue: undefined\r\n\t};\r\n\r\n\tpublic init( element: Element, valueAccessor: () => any ) {\r\n\t\tconst options = this.getOptions( valueAccessor() ),\r\n\t\t\tvalue = isTruthy( options.value );\r\n\t\t\t\r\n\t\t$( element ).toggle( value );\r\n\t}\r\n\r\n\tprotected getOptions( value: KnockoutObservable<boolean>|T ): T {\r\n\t\treturn $.extend( {}, AnimateVisibleBindingHandler.animateVisibleDefaultOptions, super.getOptions( value ) );\r\n\t}\r\n\r\n\tprotected getToggleStrategy( options: AnimateVisibleOptions ): ToggleStrategy<AnimateVisibleOptions> {\r\n\t\tswitch( options.animation )  {\r\n\t\tdefault:\r\n\t\tcase 'slide':\r\n\t\t\treturn new SlideVisibleStrategy;\r\n\t\tcase 'fade':\r\n\t\t\treturn new FadeVisibleStrategy;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nclass SlideVisibleBindingHandler extends AnimateVisibleBindingHandler<AnimateVisibleOptions> {\r\n\tprotected getOptions( value: KnockoutObservable<boolean>|AnimateVisibleOptions ): AnimateVisibleOptions {\r\n\t\treturn $.extend( {}, super.getOptions( value ), { animation: 'slide' } );\r\n\t}\r\n}\r\n\r\nclass FadeVisibleBindingHandler extends AnimateVisibleBindingHandler<AnimateVisibleOptions> {\r\n\tprotected getOptions( value: KnockoutObservable<boolean>|AnimateVisibleOptions ): AnimateVisibleOptions {\r\n\t\treturn $.extend( {}, super.getOptions( value ), { animation: 'fade' } );\r\n\t}\r\n}\r\n\r\nfunction wrap( handler: KnockoutBindingHandler ): KnockoutBindingHandler {\r\n\tconst retval: KnockoutBindingHandler = {};\r\n\r\n\tif( typeof handler.init === 'function' ) {\r\n\t\tretval.init = ( ...args ) => handler.init.apply( handler, args );\r\n\t}\r\n\r\n\tif( typeof handler.update === 'function' ) {\r\n\t\tretval.update = ( ...args ) => handler.update.apply( handler, args );\r\n\t}\r\n\r\n\treturn retval;\r\n}\r\n\r\nko.bindingHandlers[ 'toggleDialog' ] = wrap( new DialogToggleBindingHandler );\r\nko.bindingHandlers[ 'animateVisible' ] = wrap( new AnimateVisibleBindingHandler );\r\nko.bindingHandlers[ 'slideVisible' ] = wrap( new SlideVisibleBindingHandler );\r\nko.bindingHandlers[ 'fadeVisible' ] = wrap( new FadeVisibleBindingHandler );\r\n\r\nko.extenders[ 'async' ] = <T>( computed: KnockoutComputed<PromiseLike<T>>, initialValue?: T ) => {\r\n\tconst observable = ko.observable<T>( initialValue );\r\n\tlet deferred = $.Deferred<T>();\r\n\r\n\tko.computed( () => {\r\n\t\tdeferred.reject();\r\n\t\tconst currentDeferred = deferred = $.Deferred<T>();\r\n\r\n\t\tcurrentDeferred.promise().then(\r\n\t\t\t( data: T ) => { observable( data ); },\r\n\t\t\t() => {}\r\n\t\t);\r\n\r\n\t\tconst result = computed();\r\n\t\tif( result ) {\r\n\t\t\tresult.then(\r\n\t\t\t\tdata => { currentDeferred.resolve( data ); },\r\n\t\t\t\terr => { currentDeferred.reject( err ); }\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\tcurrentDeferred.reject();\r\n\t\t}\r\n\t} );\r\n\r\n\treturn observable;\r\n};\r\n\r\nko.extenders[ 'cast' ] = ( input: KnockoutObservable<any>, cast: ( value: any ) => any ) => {\r\n\treturn ko.computed<any>( {\r\n\t\tread() { return cast( input() ); },\r\n\t\twrite( value ) {\r\n\t\t\tinput( value );\r\n\t\t}\r\n\t} );\r\n};\r\n\r\nko.bindingHandlers[ 'translate' ] = {\r\n\tupdate( element: Element, valueAccessor: () => any, allBindings: KnockoutAllBindingsAccessor, viewModel: any, bindingContext: KnockoutBindingContext ) {\r\n\t\tconst $element = $( element ),\r\n\t\t\tvalue = ko.unwrap( valueAccessor() );\r\n\t\tlet deferred: JQueryDeferred<string>;\r\n\t\t\t\r\n\t\ttranslate.defer();\r\n\t\tif( typeof value === 'string' || !value ) {\r\n\t\t\timpl( 'text', value || '' );\r\n\t\t} else {\r\n\t\t\tfor( let i in value ) if( value.hasOwnProperty( i ) ) impl( i, value[ i ] );\r\n\t\t}\r\n\t\ttranslate.fetch();\r\n\r\n\t\tfunction impl( attr: string, dictionaryKey: string ) {\r\n\t\t\tconst ajaxKey = `translate-${attr}-deferred`;\r\n\t\t\tdeferred = $element.data( ajaxKey );\r\n\t\t\tif( deferred ) deferred.reject();\r\n\r\n\t\t\tif( !dictionaryKey ) return;\r\n\t\t\t\r\n\t\t\t$element.data( ajaxKey, deferred = $.Deferred<string>() );\r\n\r\n\t\t\ttranslate( dictionaryKey ).then(\r\n\t\t\t\titemResult => { deferred.resolve( itemResult.text || '' ); },\r\n\t\t\t\t() => { deferred.reject(); }\r\n\t\t\t);\r\n\r\n\t\t\tswitch( attr ) {\r\n\t\t\tcase 'html':\r\n\t\t\t\tdeferred.then( text => { $element.html( text ); } );\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'text':\r\n\t\t\t\tdeferred.then( text => { $element.text( text ); } );\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'val':\r\n\t\t\tcase 'value':\r\n\t\t\t\tdeferred.then( text => { $element.val( text ); } );\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tdeferred.then( text => { $element.attr( attr, text ); } );\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\ninterface ISwipeHandler {\r\n\tswipeLeft(): void;\r\n\tswipeRight(): void;\r\n} \r\n\r\nfunction swipe(element, valueAccessor: () => ISwipeHandler, allBindingsAccessor, viewModel, bindingContext) {\r\n\tvar elem = $(element);\r\n\telem.unbind('swipe');\r\n\tvar val = valueAccessor();\r\n\r\n\r\n\telem.swipe({\r\n\t\tswipeLeft: function (event, direction, distance, duration, fingerCount) {\r\n\t\t\tif (fingerCount < 2) {\r\n\t\t\t\tval.swipeLeft();\r\n\t\t\t}\r\n\t\t},\r\n\t\tswipeRight: function (event, direction, distance, duration, fingerCount) {\r\n\t\t\tif (fingerCount < 2) {\r\n\t\t\t\tval.swipeRight();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n}\r\n\r\nko.bindingHandlers['swipe'] = {\r\n\tinit: swipe\r\n};\r\n\r\ninterface IZipCodeValue {\r\n\tzip: KnockoutObservable<string>;\r\n\tcity(cityName: string): void;\r\n\tstate(stateAbbreviation: string): void;\r\n\terror?(success: boolean): void;\t\t\r\n}\r\n\r\n// TODO: support changing binding\r\nko.bindingHandlers['file'] = {\r\n\tinit(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\r\n\t\tconst value = valueAccessor();\r\n\t\t$( element ).on( 'change', e => {\r\n\t\t\tconst target = e.target as HTMLInputElement;\r\n\t\t\tvalue( target.files[ 0 ] );\r\n\t\t} );\r\n\t\tvalue.subscribe( v => {\r\n\t\t\tif( v.length === 0 && element.files.length > 0 ) {\r\n\t\t\t\telement.value = '';\r\n\t\t\t}\r\n\t\t} );\r\n\t}\r\n};\r\n\r\n\r\n// TODO: support changing binding\r\nko.bindingHandlers['files'] = {\r\n\tinit(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\r\n\t\tconst value = valueAccessor();\r\n\t\t$( element ).on( 'change', e => {\r\n\t\t\tconst target = e.target as HTMLInputElement;\r\n\t\t\tvalue( Array.from( target.files ) );\r\n\t\t} );\r\n\t\tvalue.subscribe( v => {\r\n\t\t\tif( v.length === 0 && element.files.length > 0 ) {\r\n\t\t\t\telement.value = '';\r\n\t\t\t}\r\n\t\t} );\r\n\t}\r\n};\r\n\r\nko.bindingHandlers['appendFiles'] = {\r\n\tinit(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\r\n\t\tconst value = valueAccessor();\r\n\t\t$( element ).on( 'change', e => {\r\n\t\t\tconst target = e.target as HTMLInputElement;\r\n\t\t\tvalue( value().concat( Array.from( target.files ) ) );\r\n\t\t\te.preventDefault();\r\n\t\t\ttarget.value = '';\r\n\t\t} );\r\n\t}\r\n};\r\n\r\nko.bindingHandlers['rneLookup'] = {\r\n\tinit(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\r\n\t\tvar autocomplete = $(element).autocomplete({\r\n\t\t\tautoFocus: false,\r\n\t\t\tdelay: 30,\r\n\t\t\tminLength: 0,\r\n\t\t\tcreate: function (event, ui) {\r\n\t\t\t\t$(this).autocomplete('widget').addClass('etfrenchseedform-autocomplete');\r\n\t\t\t},\r\n\t\t\tsource: function (request, response) {\r\n\t\t\t\tif (!request.term) {\r\n\t\t\t\t\tviewModel.setFields(null);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (viewModel.schoolId() !== request.term)\r\n\t\t\t\t\tviewModel.schoolId(request.term);\r\n\t\t\t\tviewModel.doComplete(request.term).then(function (data) {\r\n\t\t\t\t\tresponse(data);\r\n\t\t\t\t}, function () {\r\n\t\t\t\t\tresponse(null);\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\tselect: function (e, ui) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tif (ui.item) {\r\n\t\t\t\t\tviewModel.setFields(ui.item);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}).autocomplete('instance');\r\n\r\n\t\t//_resizeMenu and _renderItem are not part of the d.ts file for this apparently\r\n\t\t//to preserve existing functionality coerced to any. \r\n\t\tvar typelessAutoComplete: any = autocomplete; \r\n\t\ttypelessAutoComplete._resizeMenu = function () { return undefined; };\r\n\t\ttypelessAutoComplete._renderItem = function (ul, item) {\r\n\t\t\treturn $('<li/>').append($('<div/>').addClass('school-id').text(item.schoolId)).append($('<div/>').addClass('school-name').text(item.name)).appendTo(ul);\r\n\t\t};\r\n\t}\r\n};\r\n\r\nko.bindingHandlers['schoolLookup'] = {\r\n\tinit(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\r\n\t\tvar autocomplete = $(element).autocomplete({\r\n\t\t\tautoFocus: false,\r\n\t\t\tdelay: 30,\r\n\t\t\tminLength: 0,\r\n\t\t\tcreate: function (event, ui) {\r\n\t\t\t\t$(this).autocomplete('widget').addClass('etfrenchseedform-autocomplete');\r\n\t\t\t},\r\n\t\t\tsource: function (request, response) {\r\n\t\t\t\tif (!request.term) {\r\n\t\t\t\t\tviewModel.setFields(null);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (viewModel.schoolKey() !== request.term)\r\n\t\t\t\t\tviewModel.schoolKey(request.term);\r\n\t\t\t\tviewModel.doComplete(request.term).then(function (data) {\r\n\t\t\t\t\tresponse(data);\r\n\t\t\t\t}, function () {\r\n\t\t\t\t\tresponse(null);\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\tselect: function (e, ui) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tif (ui.item) {\r\n\t\t\t\t\tviewModel.setFields(ui.item);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}).autocomplete('instance');\r\n\r\n\t\t//_resizeMenu and _renderItem are not part of the d.ts file for this apparently\r\n\t\t//to preserve existing functionality coerced to any. \r\n\t\tvar typelessAutoComplete: any = autocomplete; \r\n\t\ttypelessAutoComplete._resizeMenu = function () { return undefined; };\r\n\t\ttypelessAutoComplete._renderItem = function (ul, item) {\r\n\t\t\t//return $('<li/>').append($('<div/>').addClass('school-name').text(item.schoolKey)).appendTo(ul);\r\n\t\t\treturn $('<li/>').append($('<div/>').addClass('school-id').text(item.schoolKey)).append($('<div/>').addClass('school-name').text(item.name)).appendTo(ul);\r\n\t\t};\r\n\t}\r\n};\r\n\r\n\r\n/*\r\nko.bindingHandlers[ 'jQueryValidate' ] = {\r\n\tinit( element, valueAccessor, allBindingsAccessor, viewModel, bindingContext ) {\r\n\t\tconst $element = $( element ),\r\n\t\t\t$form = $element.closest( 'form' ),\r\n\t\t\tname = $element.attr( 'name' ),\r\n\t\t\t{ validCallback = null } = ko.unwrap( valueAccessor() );\r\n\r\n\t\tif( $form.length < 1 ) throw new Error( 'jQueryValidate requires a form element' );\r\n\t\t$form.validate( {} );\r\n\r\n\t\tif( validCallback ) {\r\n\t\t\t$element.on( 'change keydown keyup blur', e => {\r\n\t\t\t\tvalidCallback( $element.valid() );\r\n\t\t\t} );\r\n\t\t}\r\n\t},\r\n\tupdate( element, valueAccessor, allBindingsAccessor, viewModel, bindingContext ) {\r\n\t\tconst $element = $( element ),\r\n\t\t\t$form = $element.closest( 'form' ),\r\n\t\t\tname = $element.attr( 'name' ),\r\n\t\t\t{ rules, triggerValidation } = ko.unwrap( valueAccessor() );\r\n\r\n\t\tif( !name ) throw new Error( 'jQueryValidate binding handler requires that element have a name' );\r\n\r\n\t\t$element.rules( 'remove' );\r\n\t\t$element.rules( 'add', rules );\r\n\t\tif( ko.unwrap( triggerValidation ) === true ) {\r\n\t\t\t$element.valid();\r\n\t\t}\r\n\t}\r\n\r\n};\r\n*/\r\n\r\nclass AjaxTemplateLoader implements KnockoutComponentTypes.Loader {\r\n\tpublic loadTemplate( componentName: string, templateConfig: any, callback: (result: Node[]) => void ) {\r\n\t\tif( !templateConfig || typeof templateConfig.ajax !== 'object' ) {\r\n\t\t\tcallback( null );\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t$.ajax( templateConfig.ajax )\r\n\t\t.then( html => {\r\n\t\t\tko.components.defaultLoader.loadTemplate( componentName, html, callback );\r\n\t\t}, () => {\r\n\t\t\tthrow new Error( `Failed to load template for component: ${componentName}` );\r\n\t\t} );\r\n\t}\r\n}\r\n\r\nko.components.loaders.unshift( new AjaxTemplateLoader );\r\n\r\nko.bindingHandlers[ 'ajaxTemplate' ] = {\r\n\tinit( element, valueAccessor, allBindingsAccessor, viewModel, context ) {\r\n\t\tlet options = ko.utils.unwrapObservable( valueAccessor() );\r\n\t\tif( typeof options === 'string' ) options = { url: options };\r\n\t\t( new AjaxTemplateLoader ).loadTemplate( 'ajaxTemplate', { ajax: options }, nodes => {\r\n\t\t\tlet valueAccessor = ko.observable( Object.assign( {}, options, { nodes } ) );\r\n\t\t\tko.bindingHandlers.template.init( element, valueAccessor, allBindingsAccessor, viewModel, context );\r\n\t\t\tko.bindingHandlers.template.update( element, valueAccessor, allBindingsAccessor, viewModel, context );\r\n\t\t} );\r\n\t},\r\n\tupdate( element, valueAccessor, allBindingsAccessor, viewModel, context ) {}\r\n};\r\n\r\nexport = ko;"]}