   render: ->
     React.createElement @props.plugin.settingsClass
 
+CollapsiblePanel = React.createClass
+  getInitialState: ->
+    expanded: @props.expanded
+    hide: !@props.expanded
+  
+  componentWillReceiveProps: (nextProps) ->
+    transitionTime = @props.transitionTime || 400
+    if @props.expanded && !nextProps.expanded
+      @setState {expanded: false}
+      _.delay (=> @setState {hide: true}), transitionTime
+    else if !@props.expanded && nextProps.expanded
+      @setState {hide: false}
+      _.defer (=> @setState {expanded: true})
+
+  render: ->
+    style = Object.assign {}, @props.style, 
+      if @state.hide then {display: 'none'} else {}
+    <Panel {...@props} style={style} />
+
 InstalledPlugin = React.createClass
+  getInitialState: ->
+    settingOpen: false
+
+  toggleSettingPop: ->
+    @setState
+      settingOpen: !@state.settingOpen
+
   render: ->
     plugin = @props.plugin
     index = @props.index

            plugin={plugin}
            handleClickAuthorLink={@handleClickAuthorLink}
            handleUpdate={@handleUpdate}
            toggleSettingPop={@toggleSettingPop}
            handleEnable={@handleEnable}
            handleRemove={@handleRemove}
            settingPopOpen={@state.settingPopOpen[plugin.name]}
            />
      }
      {

    config = yield PluginManager.selectConfig(state ,null, null)
    @setState
      config: config
  handleAdvancedShow: ->
    advanced = !@state.advanced
    @setState {advanced}
