Структура файлов
Для удобства редактирования тем, была создана отдельная базовая тема BaseTheme, содержащая стандартные стили и настройки общие для всех тем и могут быть переопределены в каждой. В данной статье будет рассматриваться пример реализации одного контрола и не будут затронуты формы.
Структура файлов в общем виде выглядит так:
- BaseTheme
    
- Controls
        
- SomeControl
            
- Images
 - _Variables.less
 - Lookup.less
 
 
 - SomeControl
            
 
 - Controls
        
 - Theme
    
- Controls
        
- SomeControl
            
- Images
 - _Settings.less
 - _Variables.less
 - Lookup.less
 
 
 - SomeControl
            
 - Base.less
 - Base.css
 
 - Controls
        
 
В данной структуре в качестве примера используется только одна тема Theme, которая содержит в себе один единственный контрол SomeControl. Что означает каждый файл будет рассмотрена ниже.
Уровень BaseTheme
Внутри базовой темы хранится папка Controls, которая содержит в себе какие-либо контролы. В данном случае это один единственный контрол SomeControl. Внутри этой папки содержаться папка Images, в которой хранятся картинки для контрола и два .less файла.
_Variables.less - содержит в себе набор переменных для использования в стилях. К переменным относятся: названия классов и идентификаторов, цвета и отступы.
SomeControl.less - содержит в себе стандартные стили для контрола. К ним относятся расположение элементов на странице, стандартные цвета и отступы.
Уровень Theme
Theme соответствует одной из существующих тем.  Внутри темы, как и в случае с BaseTheme, хранится папка Controls, в которой содержится SomeControl. Внутри данной папке есть папка Images, которая содержит картинки конкретно для этого контрола и три .less файла.
Назначение _Variables.less и SomeControl.less остается неизменным. Файл _Settings.less используется для переопределения существующих стилей и для доработок в прикладных проектах
Реализация на примере контрола Lookup
В качестве примера будет рассмотрен простой лукап, состоящий из input типа text и двух кнопок.
Файловая структура будет выглядеть следующим образом:
- BaseTheme
    
- Controls
        
- Lookup
            
- Images
 - _Variables.less
 - SomeControl.less
 
 
 - Lookup
            
 
 - Controls
        
 - Theme
    
- Controls
        
- Lookup
            
- Images
 - _Settings.less
 - _Variables.less
 - SomeControl.less
 
 
 - Lookup
            
 - Base.less
 - Base.css
 
 - Controls
        
 
Разметка лукапа
<body>
    <div class="control">
        <div>Тестовы лукап</div>
        <div class=txtInput>
            <input type="text">
        </div>
        <div class="viewBtn">
            <span></span>
        </div>
        <div class="deleteBtn">
            <span></span>
        </div>
    </div>
</body>
Для начала будет рассмотрена реализация на уровне базовой темы. Все названия классов необходимо вынести в переменные и добавить в _Variables.less. Этот файл необходимо импортировать в Lookup.less в самом начале - до определения стилей - с ключевым словом (reference) - позволяет импортировать содержимое файла, при этом не добавлять его физически. Это позволяет не импортировать одни и те же записи по нескольку раз.
@parentControlClass: control;
@textInputClass: txtInput;
@viewBtnClass: viewBtn;
@deleteBtnClass: deleteBtn;
@inputBorderColor: #B9B9B9;
@btnHoveredBackgroundColor: #f0f0f0;
Далее, в Lookup.less надо прописать стандартные стили для контрола, а именно: базовые цвета, расположение элементов на странице. В итоге получится нечто такое:
.@import (reference) '_Variables.less';
@{parentControlClass} {
    text-align: center;
    margin-top: 10%;
    .@{viewBtnClass},
    .@{deleteBtnClass} {
        display: inline-block;
        margin-right: -6px;
        margin-left: -7px;
        padding: 4px;
        width: 24px;
        height: 24px;
        border: 1px solid #9B9B9B;
        -moz-border-radius: 0;
        -webkit-border-radius: 0;
        background-image: -moz-linear-gradient(top, #ffffff, #cecece);
        background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#cecece));
        background-image: -webkit-linear-gradient(top, #ffffff, #cecece);
        background-image: -o-linear-gradient(top, #ffffff, #cecece);
        background-image: linear-gradient(to bottom, #ffffff, #cecece);
        -moz-box-shadow: inset 0 0 1px 1px #fff;
        -webkit-box-shadow: inset 0 0 1px 1px #fff;
        box-shadow: inset 0 0 1px 1px #fff;
        vertical-align: top;
        cursor: pointer;
        span {
            display: inline-block;
            margin-top: -1px;
            padding: 0;
            width: 16px;
            height: 16px;
            vertical-align: middle;
            line-height: 0;
            filter: none;
        }
    }
    .@{deleteBtnClass} {
        margin: 0;
    }
    .@{textInputClass} {
        display: inline-block;
        input {
            padding-left: 8px;
            height: 28px;
            &:focus {
                outline: none;
            }
        }
    }
}
Также необходимо в _Variables.less добавить переменные, содержащие в себе основные цвета лукапа. В данном примере рассмотрена одна переменная, отвечающая за цвет границы input`a.
@inputBorderColor: #B9B9B9;
В результате всех действий получится стандартный контрол. Далее его можно изменять и расширять в зависимости от темы, в которой он находится.
Пример на уровне темы Theme.
В Lookup.less до определения стилей необходимо импортировать Lookup.less из BaseTheme. Далее можно добавлять новые стили. Все новые отступы, цвета, классы, идентификаторы необходимо вынести в _Variables.less, который находится в Theme. Также в этот же файл выносятся цвета, использующиеся в контроле. _Variables.less необходимо подключить в самом конце - после стилей - для того, чтобы перегружать существующие переменные. Кроме того в Lookup - также в самом конце - нужно подключить _Settings.less. Этот файл используется для прикладных проектов. Чтобы в нем срабатывали переменные, использующиеся в теме, необходимо импортировать _Variables.less как из Theme так и из BaseTheme.
В результате:
_Variables.less
@textColor: red;
@inputFocusedBackgroundColor: yellow;
@inputBorderColor: #000;
@inputTextColor: blue;
Lookup.less
@import '../../../BaseTheme/Controls/Lookup/Lookup.less';
.@{parentControlClass} {
    div:first-child {
        color: @textColor;
        font-weight: bold;
        font-style: italic;
        font-size: 25px;
    }
    .@{viewBtnClass},
    .@{deleteBtnClass} {
        span {
            background-image: url("lookup-icons.png");
            background-position: 0 0;
            background-repeat: no-repeat;
        }
    }
    .@{deleteBtnClass} {
        border-top-right-radius: 6px;
        border-bottom-right-radius: 6px;
        span {
            background-position: 20% 0;
        }
    }
    .@{textInputClass} {
        input {
            height: 30px;
            border: 1px solid @inputBorderColor;
            border-top-left-radius: 6px;
            border-bottom-left-radius: 6px;
            color: @inputTextColor;
            &:focus {
                background: @inputFocusedBackgroundColor;
            }
        }
    }
}
@import (reference) '_Variables.less';
@import '_Settings.less';
Пример _Settings.less выглядит следующим образом:
@import (reference) '../../../BaseTheme/Controls/Lookup/_Variables.less';
@import (reference) '_Variables.less';
.@{parentControlClass} {
    .@{deleteBtnClass} {
        span {
            background-position: -65px 100%;
        }
    }
}
В результате иконка кнопки удаления будет отображаться иначе.
После полной настройки лукапа, файл Lookup.less (в Theme) необходимо импортировать в Base.less. После компиляции будет получен Base.css. При этом будут учтены как правила в базовой теме, так и в отдельной. Кроме того, будут подгруженs все настройки для прикладных проектов и общие настройки для тем.