     @displayNamePlural ?= @displayNameSingular
     check @displayNamePlural, String
     check @template, Match.Optional String
+    @draggable ?= false
+    check @draggable, Boolean
 
   render: (component) ->
     new Blaze.Template =>

        cursor = container.find type: @name
        count = cursor.count()
        if cursor.count() > @stackAfter
          Blaze.With (=> type: @, count: count), =>
            @getCounterTemplate count, container.rules.name
        else
          for i in [1..count]
            Blaze.With (=> type: @, i: i), =>
              @getCounterTemplate count, container.rules.name

class ui.Controller extends EventEmitter

    check @panel, ui.Panel


class ui.ComponentStack
  constructor: ({@type, @container, @stack, @count}) ->


class ui.ComponentType
  constructor: ({@name, @width, @height, @isCounter, @stackProperty, @stackAfter,
                 @displayNameSingular, @displayNamePlural,
                 @draggable, @template} = {}) ->
    check @name, String
    check @width, Match.Optional Number
    check @height, Match.Optional Number
