feat: VivesPOS landing on Winter CMS 1.2 — theme + plugin + Dockerfile
Some checks are pending
Module sub-split / Sub-split (push) Waiting to run

- Base: wintercms/winter branch 1.2 (full framework)
- Theme vivespos: Canvas 7 + Bootstrap 5 CDN, custom CSS
- Layout: deferred GTM/GA4 tracking, JSON-LD SoftwareApplication
- Partials: hero (offline-first), features, modes (offline/nube toggle),
  screenshots, pricing (3 planes), comparison, FAQ, CTA
- Plugin VivesPOS.Site with ContactForm
- Dockerfile: PHP 8.2 Apache, port 80, healthcheck
- Added winter/wn-pages, blog, sitemap, seo plugins
- Active theme set to vivespos
This commit is contained in:
2026-08-21 19:29:00 -06:00
commit 1f72193a64
3266 changed files with 531480 additions and 0 deletions

View File

@@ -0,0 +1,233 @@
<?php namespace Backend\FormWidgets;
use Backend\Classes\FormWidgetBase;
use Backend\Models\Preference as BackendPreference;
/**
* Code Editor
* Renders a code editor field.
*
* @package winter\wn-backend-module
* @author Alexey Bobkov, Samuel Georges
*/
class CodeEditor extends FormWidgetBase
{
//
// Configurable properties
//
/**
* @var string Code language to display (php, twig)
*/
public $language = 'php';
/**
* @var boolean Determines whether the gutter is visible.
*/
public $showGutter = true;
/**
* @var boolean Indicates whether the the word wrapping is enabled.
*/
public $wordWrap = true;
/**
* @var bool Enables code folding.
*/
public $codeFolding = true;
/**
* @var boolean Automatically close tags and special characters,
* like quotation marks, parenthesis, or brackets.
*/
public $autoClosing = true;
/**
* @var boolean Indicates whether the the editor uses spaces for indentation.
*/
public $useSoftTabs = true;
/**
* @var boolean Sets the size of the indentation.
*/
public $tabSize = 4;
/**
* @var integer Sets the font size.
*/
public $fontSize = 12;
/**
* @var integer Sets the editor margin size.
*/
public $margin = 0;
/**
* @var float Number of screen heights to allow scrolling past the end of the document
*/
public $scrollPastEnd = 0;
/**
* @var string Editor theme to use.
*/
public $theme = 'twilight';
/**
* @var bool Show invisible characters.
*/
public $showInvisibles = false;
/**
* @var bool Highlight the active line.
*/
public $highlightActiveLine = true;
/**
* @var boolean If true, the editor is set to read-only mode
*/
public $readOnly = false;
/**
* @var boolean If true, the editor show Indent Guides
*/
public $displayIndentGuides = true;
/**
* @var boolean If true, the editor show Print Margin
*/
public $showPrintMargin = false;
/**
* @var boolean Show minimap (code preview) on the right of the editor
*/
public $showMinimap = true;
/**
* @var boolean Colorize brackets
*/
public $bracketColors = false;
/**
* @var boolean Show inline color previews and color picker
*/
public $showColors = true;
//
// Object properties
//
/**
* @inheritDoc
*/
protected $defaultAlias = 'codeeditor';
/**
* @inheritDoc
*/
public function init()
{
$this->applyEditorPreferences();
if ($this->formField->disabled) {
$this->readOnly = true;
}
$this->fillFromConfig([
'language',
'showGutter',
'wordWrap',
'codeFolding',
'autoClosing',
'useSoftTabs',
'tabSize',
'fontSize',
'margin',
'scrollPastEnd',
'theme',
'showInvisibles',
'highlightActiveLine',
'readOnly',
'displayIndentGuides',
'showPrintMargin',
'showMinimap',
'bracketColors',
'showColors',
]);
}
/**
* @inheritDoc
*/
public function render()
{
$this->prepareVars();
return $this->makePartial('codeeditor');
}
/**
* Prepares the widget data
*/
public function prepareVars()
{
$this->vars['fontSize'] = $this->fontSize;
$this->vars['wordWrap'] = $this->wordWrap;
$this->vars['codeFolding'] = $this->codeFolding;
$this->vars['autoClosing'] = $this->autoClosing;
$this->vars['tabSize'] = $this->tabSize;
$this->vars['theme'] = $this->theme;
$this->vars['showInvisibles'] = $this->showInvisibles;
$this->vars['highlightActiveLine'] = $this->highlightActiveLine;
$this->vars['useSoftTabs'] = $this->useSoftTabs;
$this->vars['showGutter'] = $this->showGutter;
$this->vars['language'] = $this->language;
$this->vars['margin'] = $this->margin;
$this->vars['scrollPastEnd'] = $this->scrollPastEnd;
$this->vars['stretch'] = $this->formField->stretch;
$this->vars['size'] = $this->formField->size;
$this->vars['readOnly'] = $this->readOnly;
$this->vars['displayIndentGuides'] = $this->displayIndentGuides;
$this->vars['showPrintMargin'] = $this->showPrintMargin;
$this->vars['showMinimap'] = $this->showMinimap;
$this->vars['bracketColors'] = $this->bracketColors;
$this->vars['showColors'] = $this->showColors;
// Double encode when escaping
$this->vars['value'] = htmlentities($this->getLoadValue(), ENT_QUOTES, 'UTF-8', true);
$this->vars['name'] = $this->getFieldName();
}
/**
* @inheritDoc
*/
protected function loadAssets()
{
$this->addCss('css/codeeditor.css', 'core');
$this->addJs('js/build/codeeditor.bundle.js', 'core');
}
/**
* Looks at the user preferences and overrides any set values.
* @return void
*/
protected function applyEditorPreferences()
{
// Load the editor system settings
$preferences = BackendPreference::instance();
$this->fontSize = $preferences->editor_font_size;
$this->wordWrap = $preferences->editor_word_wrap;
$this->codeFolding = $preferences->editor_enable_folding ?? ($preferences->editor_code_folding !== 'manual');
$this->autoClosing = $preferences->editor_auto_closing;
$this->tabSize = $preferences->editor_tab_size;
$this->theme = $preferences->editor_theme;
$this->showInvisibles = $preferences->editor_show_invisibles;
$this->highlightActiveLine = $preferences->editor_highlight_active_line;
$this->useSoftTabs = !$preferences->editor_use_hard_tabs;
$this->showGutter = $preferences->editor_show_gutter;
$this->displayIndentGuides = $preferences->editor_display_indent_guides;
$this->showPrintMargin = $preferences->editor_show_print_margin;
$this->showMinimap = $preferences->editor_show_minimap;
$this->bracketColors = $preferences->editor_bracket_colors;
$this->showColors = $preferences->editor_show_colors;
}
}

View File

@@ -0,0 +1,286 @@
<?php namespace Backend\FormWidgets;
use Lang;
use Backend\Classes\FormWidgetBase;
use ApplicationException;
use Backend\Models\BrandSetting;
/**
* Color picker
* Renders a color picker field.
*
* @package winter\wn-backend-module
* @author Alexey Bobkov, Samuel Georges
* @author Winter CMS
*/
class ColorPicker extends FormWidgetBase
{
// All color formats supported
const ALL_FORMATS = ['cmyk', 'hex', 'hsl', 'rgb'];
//
// Configurable properties
//
/**
* @var array Default available colors
*/
public $availableColors = null;
/**
* @var bool Allow empty value
*/
public $allowEmpty = false;
/**
* @var bool Allow a custom color
*/
public $allowCustom = true;
/**
* @var bool Show opacity slider
*/
public $showAlpha = false;
/**
* @var bool If true, the color picker is set to read-only mode
*/
public $readOnly = false;
/**
* @var bool If true, the color picker is set to disabled mode
*/
public $disabled = false;
/**
* @var string|array Color format(s) to allow for the resulting color value. Specify "all" as a string to allow all
* formats.
* Allowed values: 'cmyk', 'hex', 'hsl', 'rgb', 'all'
*/
public $formats = 'hex';
/**
* @var array|string[] Patterns to validate colour string on save
*/
protected array $validationPatterns = [
'cmyk' => '/^cmyk\((\d{1,2}\.?\d{0,2}%,? ?){4}\)$/',
'hex' => '/^#[\w\d]{6,8}$/',
'hsl' => '/^hsla\((\d{1,3}\.?\d{0,2}%?, ?){3}\d\.?\d{0,2}?\)$/',
'rgb' => '/^rgba\((\d{1,3}\.?\d{0,2}, ?){3}\d\.?\d{0,2}?\)$/',
];
//
// Object properties
//
/**
* @inheritDoc
*/
protected $defaultAlias = 'colorpicker';
/**
* @inheritDoc
*/
public function init()
{
$this->fillFromConfig([
'availableColors',
'formats',
'allowEmpty',
'allowCustom',
'showAlpha',
'readOnly',
'disabled',
]);
}
/**
* @inheritDoc
*/
public function render()
{
$this->prepareVars();
return $this->makePartial('colorpicker');
}
/**
* Prepares the list data
*/
public function prepareVars()
{
$this->vars['name'] = $this->getFieldName();
$this->vars['value'] = $this->getLoadValue();
$this->vars['availableColors'] = $this->getAvailableColors();
$this->vars['formats'] = $this->getFormats();
$this->vars['allowEmpty'] = (bool) $this->allowEmpty;
$this->vars['allowCustom'] = (bool) $this->allowCustom;
$this->vars['showAlpha'] = (bool) $this->showAlpha;
$this->vars['readOnly'] = (bool) $this->readOnly;
$this->vars['disabled'] = (bool) $this->disabled;
}
/**
* Gets the appropriate list of colors.
*
* @return array
*/
protected function getAvailableColors()
{
$availableColors = $this->availableColors;
if (is_array($availableColors)) {
return $availableColors;
} elseif (is_string($availableColors) && !empty($availableColors)) {
if ($this->model->methodExists($availableColors)) {
return $this->availableColors = $this->model->{$availableColors}(
$this->formField->fieldName,
$this->formField->value,
$this->formField->config
);
} else {
throw new ApplicationException(Lang::get('backend::lang.field.colors_method_not_exists', [
'model' => get_class($this->model),
'method' => $availableColors,
'field' => $this->formField->fieldName
]));
}
} else {
return $this->availableColors = array_map(function ($color) {
return $color['color'];
}, BrandSetting::get('default_colors', [
[
'color' => '#1abc9c',
],
[
'color' => '#16a085',
],
[
'color' => '#6cc551',
],
[
'color' => '#52a838',
],
[
'color' => '#b1dbef',
],
[
'color' => '#88c9e7',
],
[
'color' => '#2da7c7',
],
[
'color' => '#227f96',
],
[
'color' => '#b281c5',
],
[
'color' => '#7b4e8e',
],
[
'color' => '#103141',
],
[
'color' => '#081821',
],
[
'color' => '#f8e095',
],
[
'color' => '#dcb22d',
],
[
'color' => '#de8754',
],
[
'color' => '#d66829',
],
[
'color' => '#b33f32',
],
[
'color' => '#ab2a1c',
],
[
'color' => '#95a5a6',
],
[
'color' => '#7f8c8d',
],
]));
}
}
/**
* Returns the allowed color formats.
*
* If no valid formats are specified, the "hex" format will be used.
*
* @return array
*/
protected function getFormats()
{
if ($this->formats === 'all') {
return static::ALL_FORMATS;
}
$availableFormats = [];
$configFormats = (is_string($this->formats))
? [$this->formats]
: $this->formats;
foreach ($configFormats as $format) {
if (in_array($format, static::ALL_FORMATS)) {
$availableFormats[] = $format;
}
}
return (count($availableFormats))
? $availableFormats
: ['hex'];
}
/**
* @inheritDoc
*/
protected function loadAssets()
{
$this->addJs('js/dist/colorpicker.js', 'core');
}
/**
* @inheritDoc
*/
public function getSaveValue($value)
{
if (!strlen($value)) {
return null;
}
switch (is_array($this->formats) ? 'all' : $this->formats) {
case 'cmyk':
case 'hex':
case 'hsl':
case 'rgb':
if (!preg_match($this->validationPatterns[$this->formats], $value)) {
throw new ApplicationException(Lang::get('backend::lang.field.colors_invalid_input'));
}
break;
case 'all':
$valid = false;
foreach ($this->validationPatterns as $pattern) {
if (preg_match($pattern, $value)) {
$valid = true;
break;
}
}
if (!$valid) {
throw new ApplicationException(Lang::get('backend::lang.field.colors_invalid_input'));
}
break;
}
return $value;
}
}

View File

@@ -0,0 +1,205 @@
<?php namespace Backend\FormWidgets;
use Lang;
use Backend\Widgets\Table;
use Backend\Classes\FormWidgetBase;
use Winter\Storm\Html\Helper as HtmlHelper;
use ApplicationException;
/**
* Data Table
* Renders a table field.
*
* @package winter\wn-backend-module
* @author Alexey Bobkov, Samuel Georges
*/
class DataTable extends FormWidgetBase
{
//
// Configurable properties
//
/**
* @var string Table size
*/
public $size = 'large';
/**
* @var bool Allow rows to be sorted
* @todo Not implemented...
*/
public $rowSorting = false;
//
// Object properties
//
/**
* @inheritDoc
*/
protected $defaultAlias = 'datatable';
/**
* @var Backend\Widgets\Table Table widget
*/
protected $table;
/**
* @inheritDoc
*/
public function init()
{
$this->fillFromConfig([
'size',
'rowSorting',
]);
$this->table = $this->makeTableWidget();
$this->table->bindToController();
}
/**
* @return Backend\Widgets\Table The table to be displayed.
*/
public function getTable()
{
return $this->table;
}
/**
* @inheritDoc
*/
public function render()
{
$this->prepareVars();
return $this->makePartial('datatable');
}
/**
* Prepares the list data
*/
public function prepareVars()
{
$this->populateTableWidget();
$this->vars['table'] = $this->table;
$this->vars['size'] = $this->size;
$this->vars['rowSorting'] = $this->rowSorting;
}
/**
* @inheritDoc
*/
public function getLoadValue()
{
$value = (array) parent::getLoadValue();
// Sync the array keys as the ID to make the
// table widget happy!
foreach ($value as $key => $_value) {
$value[$key] = ['id' => $key] + (array) $_value;
}
return $value;
}
/**
* @inheritDoc
*/
public function getSaveValue($value)
{
// TODO: provide a streaming implementation of saving
// data to the model. The current implementation returns
// all records at once. -ab
$dataSource = $this->table->getDataSource();
$result = [];
while ($records = $dataSource->readRecords()) {
$result = array_merge($result, $records);
}
// We should be dealing with a simple array, so
// strip out the id columns in the final array.
foreach ($result as $key => $_result) {
unset($result[$key]['id']);
}
return $result;
}
/*
* Populate data
*/
protected function populateTableWidget()
{
$dataSource = $this->table->getDataSource();
// TODO: provide a streaming implementation of loading
// data from the model. The current implementation loads
// all records at once. -ab
$records = $this->getLoadValue() ?: [];
$dataSource->purge();
$dataSource->initRecords((array) $records);
}
protected function makeTableWidget()
{
$config = $this->makeConfig((array) $this->config);
$config->dataSource = 'client';
if (isset($this->getParentForm()->arrayName)) {
$config->alias = studly_case(HtmlHelper::nameToId($this->getParentForm()->arrayName . '[' . $this->fieldName . ']')) . 'datatable';
$config->fieldName = $this->getParentForm()->arrayName . '[' . $this->fieldName . ']';
} else {
$config->alias = studly_case(HtmlHelper::nameToId($this->fieldName)) . 'datatable';
$config->fieldName = $this->fieldName;
}
$table = new Table($this->controller, $config);
$table->bindEvent('table.getDropdownOptions', [$this, 'getDataTableOptions']);
return $table;
}
/**
* Dropdown/autocomplete option callback handler
*
* Looks at the model for getXXXDataTableOptions or getDataTableOptions methods
* to obtain values for autocomplete and dropdown column types.
*
* @param string $columnName The name of the column to pass through to the callback.
* @param array $rowData The data provided for the current row in the datatable.
* @return array The options to make available to the dropdown or autocomplete, in format ["value" => "label"]
*/
public function getDataTableOptions($columnName, $rowData)
{
$methodName = 'get' . studly_case($this->fieldName) . 'DataTableOptions';
if (!$this->model->methodExists($methodName) && !$this->model->methodExists('getDataTableOptions')) {
throw new ApplicationException(
Lang::get(
'backend::lang.model.missing_method',
[
'class' => get_class($this->model),
'method' => 'getDataTableOptions'
]
)
);
}
if ($this->model->methodExists($methodName)) {
$result = $this->model->$methodName($columnName, $rowData);
} else {
$result = $this->model->getDataTableOptions($this->fieldName, $columnName, $rowData);
}
if (!is_array($result)) {
$result = [];
}
return $result;
}
}

View File

@@ -0,0 +1,207 @@
<?php namespace Backend\FormWidgets;
use Config;
use Carbon\Carbon;
use Backend\Classes\FormField;
use Backend\Classes\FormWidgetBase;
use System\Helpers\DateTime as DateTimeHelper;
use Winter\Storm\Exception\ApplicationException;
/**
* Date picker
* Renders a date picker field.
*
* @package winter\wn-backend-module
* @author Alexey Bobkov, Samuel Georges
*/
class DatePicker extends FormWidgetBase
{
//
// Configurable properties
//
/**
* @var bool Display mode: datetime, date, time.
*/
public $mode = 'datetime';
/**
* @var string Provide an explicit date display format.
*/
public $format;
/**
* @var string the minimum/earliest date that can be selected.
* eg: 2000-01-01
*/
public $minDate;
/**
* @var string the maximum/latest date that can be selected.
* eg: 2020-12-31
*/
public $maxDate;
/**
* @var string number of years either side or array of upper/lower range
* eg: 10 or [1900,1999]
*/
public $yearRange;
/**
* @var int first day of the week
* eg: 0 (Sunday), 1 (Monday), 2 (Tuesday), etc.
*/
public $firstDay = 0;
/**
* @var bool show week numbers at head of row
*/
public $showWeekNumber = false;
/**
* @var bool change datetime exactly as is in database
*/
public $ignoreTimezone = false;
//
// Object properties
//
/**
* @inheritDoc
*/
protected $defaultAlias = 'datepicker';
/**
* @inheritDoc
*/
public function init()
{
$this->fillFromConfig([
'format',
'mode',
'minDate',
'maxDate',
'yearRange',
'firstDay',
'showWeekNumber',
'ignoreTimezone',
]);
$this->mode = strtolower($this->mode);
if ($this->minDate !== null) {
$this->minDate = is_int($this->minDate)
? Carbon::createFromTimestamp($this->minDate)
: Carbon::parse($this->minDate);
}
if ($this->maxDate !== null) {
$this->maxDate = is_int($this->maxDate)
? Carbon::createFromTimestamp($this->maxDate)
: Carbon::parse($this->maxDate);
}
}
/**
* @inheritDoc
*/
public function render()
{
try {
$this->prepareVars();
} catch (ApplicationException $ex) {
$this->vars['error'] = $ex->getMessage();
}
return $this->makePartial('datepicker');
}
/**
* Prepares the list data
*/
public function prepareVars()
{
if ($value = $this->getLoadValue()) {
$value = DateTimeHelper::makeCarbon($value, false);
if (!($value instanceof Carbon)) {
$this->vars['error'] = (sprintf('"%s" is not a valid date / time value.', $value));
} else {
if ($this->mode === 'date' && !$this->ignoreTimezone) {
$backendTimeZone = \Backend\Models\Preference::get('timezone');
$value->setTimezone($backendTimeZone);
$value->setTime(0, 0, 0);
$value->setTimezone(Config::get('app.timezone'));
}
$value = $value->toDateTimeString();
}
}
// Disable the datepicker visually when readOnly is enabled
if ($this->formField->readOnly) {
$this->formField->disabled = true;
}
$this->vars['name'] = $this->getFieldName();
$this->vars['value'] = $value ?: '';
$this->vars['field'] = $this->formField;
$this->vars['mode'] = $this->mode;
$this->vars['minDate'] = $this->minDate;
$this->vars['maxDate'] = $this->maxDate;
$this->vars['yearRange'] = $this->yearRange;
$this->vars['firstDay'] = $this->firstDay;
$this->vars['showWeekNumber'] = $this->showWeekNumber;
$this->vars['ignoreTimezone'] = $this->ignoreTimezone;
$this->vars['format'] = $this->format;
$this->vars['formatMoment'] = $this->getDateFormatMoment();
$this->vars['formatAlias'] = $this->getDateFormatAlias();
}
/**
* @inheritDoc
*/
public function getSaveValue($value)
{
if ($this->formField->disabled || $this->formField->hidden) {
return FormField::NO_SAVE_DATA;
}
if (!strlen($value)) {
return null;
}
return $value;
}
/**
* Convert PHP format to JS format
*/
protected function getDateFormatMoment()
{
if ($this->format) {
return DateTimeHelper::momentFormat($this->format);
}
}
/*
* Display alias, used by preview mode
*/
protected function getDateFormatAlias()
{
if ($this->format) {
return null;
}
if ($this->mode == 'time') {
return 'time';
}
elseif ($this->mode == 'date') {
return 'dateLong';
}
else {
return 'dateTimeLong';
}
}
}

View File

@@ -0,0 +1,102 @@
<?php
namespace Backend\FormWidgets;
use Backend\Classes\FormField;
use Backend\Classes\FormWidgetBase;
use Backend\Widgets\Form;
/**
* FieldSet
* Renders a fieldset from multiple form fields.
*
* @package winter\wn-backend-module
* @author Marc Jauvin <marc.jauvin@gmail.com>
*/
class FieldSet extends FormWidgetBase
{
/**
* @inheritDoc
*/
protected $defaultAlias = 'fieldset';
/**
* @var array Field configuration
*/
public $fields;
/**
* @var bool Determines if this form field should display comments and labels.
*/
public $showLabels = false;
/**
* @var Form form widget reference
*/
protected $formWidget;
/**
* @inheritDoc
*/
public function init()
{
$this->fillFromConfig([
'fields',
]);
if ($this->formField->disabled) {
$this->previewMode = true;
}
$config = $this->makeConfig(['fields' => $this->fields]);
$config->model = $this->model;
$config->data = $this->getLoadValue();
$config->alias = $this->alias . $this->defaultAlias;
// set arrayName from parent form to save fields to the model
$config->arrayName = $this->getParentForm()->arrayName;
$config->isNested = true;
$widget = $this->formWidget = $this->makeWidget(Form::class, $config);
$widget->previewMode = $this->previewMode;
$widget->bindToController();
}
protected function loadAssets()
{
$this->addCss('css/fieldset.css', 'core');
}
/**
* Returns the save data for the nested fields, to be merged into the parent
* form's data as if these fields were defined at that level. Reusing the nested
* form's getSaveData() ensures number casting, widget getSaveValue() handling,
* NO_SAVE_DATA exclusion and disabled/hidden skipping all behave identically to
* a regular field.
*/
public function getSaveData(): array
{
return $this->formWidget->getSaveData();
}
/**
* @inheritdoc
*/
public function render()
{
$this->prepareVars();
return $this->makePartial('fieldset');
}
public function prepareVars()
{
$this->formWidget->previewMode = $this->previewMode;
}
/**
* @inheritDoc
*/
public function getSaveValue($value)
{
return FormField::NO_SAVE_DATA;
}
}

View File

@@ -0,0 +1,561 @@
<?php
namespace Backend\FormWidgets;
use Backend\Classes\FormField;
use Backend\Classes\FormWidgetBase;
use Backend\Widgets\Form;
use Exception;
use Illuminate\Support\Facades\Response;
use System\Models\File;
use Winter\Storm\Exception\ApplicationException;
use Winter\Storm\Exception\ValidationException;
use Winter\Storm\Filesystem\Definitions as FileDefinitions;
use Winter\Storm\Support\Facades\DB;
use Winter\Storm\Support\Facades\Event;
use Winter\Storm\Support\Facades\Input;
use Winter\Storm\Support\Facades\Validator;
/**
* File upload field
* Renders a form file uploader field.
*
* Supported options:
* - mode: image-single, image-multi, file-single, file-multi
* - upload-label: Add file
* - empty-label: No file uploaded
*
* @package winter\wn-backend-module
* @author Alexey Bobkov, Samuel Georges
*/
class FileUpload extends FormWidgetBase
{
use \Backend\Traits\FormModelSaver;
use \Backend\Traits\FormModelWidget;
//
// Configurable properties
//
/**
* @var string Icon class to use for the upload button.
*/
public $iconClass;
/**
* @var string Prompt text to display for the upload button.
*/
public $prompt;
/**
* @var int Preview image width
*/
public $imageWidth;
/**
* @var int Preview image height
*/
public $imageHeight;
/**
* @var mixed Collection of acceptable file types.
*/
public $fileTypes = false;
/**
* @var mixed Collection of acceptable mime types.
*/
public $mimeTypes = false;
/**
* @var mixed Max file size.
*/
public $maxFilesize;
/**
* @var array Options used for generating thumbnails.
*/
public $thumbOptions = [
'mode' => 'crop',
'extension' => 'auto'
];
/**
* @var boolean Allow the user to set a caption.
*/
public $useCaption = true;
/**
* @var boolean Automatically attaches the uploaded file on upload if the parent record exists instead of using deferred binding to attach on save of the parent record. Defaults to false.
*/
public $attachOnUpload = false;
//
// Object properties
//
/**
* @inheritDoc
*/
protected $defaultAlias = 'fileupload';
/**
* @var Form The embedded form for modifying the properties of the selected file
*/
protected $configFormWidget;
/**
* @inheritDoc
*/
public function init()
{
$this->maxFilesize = $this->getUploadMaxFilesize();
$this->fillFromConfig([
'iconClass',
'prompt',
'imageWidth',
'imageHeight',
'fileTypes',
'maxFilesize',
'mimeTypes',
'thumbOptions',
'useCaption',
'attachOnUpload',
]);
$this->iconClass = $this->iconClass ?? 'icon-upload';
if ($this->formField->disabled) {
$this->previewMode = true;
}
$this->getConfigFormWidget();
}
/**
* @inheritDoc
*/
public function render()
{
$this->prepareVars();
return $this->makePartial('fileupload');
}
/**
* Prepares the view data
*/
protected function prepareVars()
{
if ($this->formField->disabled) {
$this->previewMode = true;
}
if ($this->previewMode) {
$this->useCaption = false;
}
if ($this->maxFilesize > $this->getUploadMaxFilesize()) {
throw new ApplicationException('Maximum allowed size for uploaded files: ' . $this->getUploadMaxFilesize());
}
$this->vars['fileList'] = $fileList = $this->getFileList();
$this->vars['singleFile'] = $fileList->first();
$this->vars['displayMode'] = $this->getDisplayMode();
$this->vars['emptyIcon'] = $this->getConfig('emptyIcon', 'icon-upload');
$this->vars['imageHeight'] = $this->imageHeight;
$this->vars['imageWidth'] = $this->imageWidth;
$this->vars['acceptedFileTypes'] = $this->getAcceptedFileTypes(true);
$this->vars['maxFilesize'] = $this->maxFilesize;
$this->vars['cssDimensions'] = $this->getCssDimensions();
$this->vars['cssBlockDimensions'] = $this->getCssDimensions('block');
$this->vars['useCaption'] = $this->useCaption;
$this->vars['iconClass'] = $this->iconClass;
$this->vars['prompt'] = $this->getPromptText();
}
/**
* Get the file record for this request, returns false if none available
*
* @return File|false
*/
protected function getFileRecord()
{
$record = false;
if (!empty(post('file_id'))) {
// Scope the lookup to this widget's own relation (including any files
// bound via the current deferred-binding session) so that an
// attacker-controlled file_id cannot reference an arbitrary
// System\Models\File record belonging to another model. See
// GHSA-3277-h8g9-qj5f.
$record = $this->getRelationObject()
->withDeferred($this->sessionKey)
->find(post('file_id')) ?: false;
}
return $record;
}
/**
* Get the instantiated config Form widget
*/
public function getConfigFormWidget(): Form
{
if ($this->configFormWidget) {
return $this->configFormWidget;
}
$config = $this->makeConfig('~/modules/system/models/file/fields.yaml');
$config->model = $this->getFileRecord() ?: $this->getRelationModel();
$config->alias = $this->alias . $this->defaultAlias;
$config->arrayName = $this->getFieldName();
$widget = $this->makeWidget(Form::class, $config);
$widget->bindToController();
return $this->configFormWidget = $widget;
}
protected function getFileList()
{
$list = $this
->getRelationObject()
->withDeferred($this->sessionKey)
->orderBy('sort_order')
->get()
;
/*
* Decorate each file with thumb and custom download path
*/
$list->each(function ($file) {
$this->decorateFileAttributes($file);
});
return $list;
}
/**
* Returns the display mode for the file upload. Eg: file-multi, image-single, etc.
*/
protected function getDisplayMode(): string
{
$mode = $this->getConfig('mode', 'image');
if (str_contains($mode, '-')) {
return $mode;
}
$relationType = $this->getRelationType();
$mode .= ($relationType === 'attachMany' || $relationType === 'morphMany') ? '-multi' : '-single';
return $mode;
}
/**
* Returns the escaped and translated prompt text to display according to the type.
*/
protected function getPromptText(): string
{
if ($this->prompt === null) {
$isMulti = ends_with($this->getDisplayMode(), 'multi');
$this->prompt = $isMulti
? 'backend::lang.fileupload.upload_file'
: 'backend::lang.fileupload.default_prompt';
}
$uploadIconStr = sprintf('<i class="%s"></i>', $this->iconClass);
return str_replace('%s', $uploadIconStr, e(trans($this->prompt)));
}
/**
* Returns the CSS dimensions for the uploaded image,
* uses auto where no dimension is provided.
*/
protected function getCssDimensions(?string $mode = null): string
{
if (!$this->imageWidth && !$this->imageHeight) {
return '';
}
$cssDimensions = '';
if ($mode == 'block') {
$cssDimensions .= $this->imageWidth
? 'width: ' . $this->imageWidth . 'px;'
: 'width: ' . $this->imageHeight . 'px;';
$cssDimensions .= ($this->imageHeight)
? 'max-height: ' . $this->imageHeight . 'px;'
: 'height: auto;';
} else {
$cssDimensions .= $this->imageWidth
? 'width: ' . $this->imageWidth . 'px;'
: 'width: auto;';
$cssDimensions .= ($this->imageHeight)
? 'max-height: ' . $this->imageHeight . 'px;'
: 'height: auto;';
}
return $cssDimensions;
}
/**
* Returns the specified accepted file types, or the default
* based on the mode. Image mode will return:
* - jpg,jpeg,bmp,png,gif,svg
* @return string
*/
public function getAcceptedFileTypes($includeDot = false)
{
$types = $this->fileTypes;
if ($types === false) {
$isImage = starts_with($this->getDisplayMode(), 'image');
$types = implode(',', FileDefinitions::get($isImage ? 'imageExtensions' : 'defaultExtensions'));
}
if (!$types || $types == '*') {
return null;
}
if (!is_array($types)) {
$types = explode(',', $types);
}
$types = array_map(function ($value) use ($includeDot) {
$value = trim($value);
if (substr($value, 0, 1) == '.') {
$value = substr($value, 1);
}
if ($includeDot) {
$value = '.'.$value;
}
return $value;
}, $types);
return implode(',', $types);
}
/**
* Removes a file attachment.
*/
public function onRemoveAttachment(): void
{
if ($file = $this->getFileRecord()) {
$this->getRelationObject()->remove($file, $this->sessionKey);
}
}
/**
* Sorts file attachments.
*
* Expects (array) sortOrder [$fileId => $fileOrder] in the POST data.
*/
public function onSortAttachments(): void
{
if ($sortData = post('sortOrder')) {
// Only reorder files that actually belong to this widget's relation
// (including the current deferred-binding session), never arbitrary
// System\Models\File rows referenced by a posted id. See
// GHSA-3277-h8g9-qj5f.
$keyName = $this->getRelationModel()->getKeyName();
$validIds = $this->getRelationObject()
->withDeferred($this->sessionKey)
->pluck($keyName)
->all();
$sortData = array_intersect_key($sortData, array_flip($validIds));
if (empty($sortData)) {
return;
}
$ids = array_keys($sortData);
$orders = array_values($sortData);
$this->getRelationModel()->setSortableOrder($ids, $orders);
}
}
/**
* Loads the configuration form for an attachment, allowing title and description to be set.
*
* @throws ApplicationException if unable to find the file record
*/
public function onLoadAttachmentConfig(): string
{
if ($file = $this->getFileRecord()) {
$file = $this->decorateFileAttributes($file);
$this->vars['file'] = $file;
$this->vars['displayMode'] = $this->getDisplayMode();
$this->vars['cssDimensions'] = $this->getCssDimensions();
$this->vars['parentElementId'] = $this->getId();
return $this->makePartial('config_form');
}
throw new ApplicationException('Unable to find file, it may no longer exist');
}
/**
* Commit the changes of the attachment configuration form.
*/
public function onSaveAttachmentConfig()
{
try {
$formWidget = $this->getConfigFormWidget();
if ($file = $formWidget->model) {
$modelsToSave = $this->prepareModelsToSave($file, $formWidget->getSaveData());
Db::transaction(function () use ($modelsToSave, $formWidget) {
foreach ($modelsToSave as $modelToSave) {
$modelToSave->save(null, $formWidget->getSessionKey());
}
});
return ['displayName' => $file->title ?: $file->file_name];
}
throw new ApplicationException('Unable to find file, it may no longer exist');
}
catch (Exception $ex) {
return json_encode(['error' => $ex->getMessage()]);
}
}
/**
* @inheritDoc
*/
protected function loadAssets()
{
$this->addCss('css/fileupload.css', 'core');
$this->addJs('js/fileupload.js', 'core');
}
/**
* @inheritDoc
*/
public function getSaveValue($value)
{
return FormField::NO_SAVE_DATA;
}
/**
* Upload handler for the server-side processing of uploaded files
*/
public function onUpload()
{
try {
$file = $this->getRelationModel();
$fileRelation = $this->getRelationObject();
$file->is_public = $fileRelation->isPublic();
/**
* @event backend.formwidgets.fileupload.onUpload
* Provides an opportunity to process the file upload using custom logic.
*
* Example usage ()
*/
if (!($data = Event::fire('backend.formwidgets.fileupload.onUpload', [$this, $file], true))) {
if (!Input::hasFile('file_data')) {
throw new ApplicationException('File missing from request');
}
$validationRules = ['max:'.$file::getMaxFilesize()];
$data = Input::file('file_data');
if (!$data->isValid()) {
throw new ApplicationException('File is not valid');
}
if ($fileTypes = $this->getAcceptedFileTypes()) {
$validationRules[] = 'extensions:'.$fileTypes;
}
if ($this->mimeTypes) {
$validationRules[] = 'mimes:'.$this->mimeTypes;
}
$validation = Validator::make(
['file_data' => $data],
['file_data' => $validationRules]
);
if ($validation->fails()) {
throw new ValidationException($validation);
}
}
$file->data = $data;
$file->save();
/**
* Attach directly to the parent model if it exists and attachOnUpload has been set to true
* else attach via deferred binding
*/
$parent = $fileRelation->getParent();
if ($this->attachOnUpload && $parent && $parent->exists) {
$fileRelation->add($file);
}
else {
$fileRelation->add($file, $this->sessionKey);
}
$file = $this->decorateFileAttributes($file);
$result = [
'id' => $file->id,
'thumb' => $file->thumbUrl,
'path' => $file->pathUrl
];
$response = Response::make($result, 200);
}
catch (Exception $ex) {
$response = Response::make($ex->getMessage(), 400);
}
return $response;
}
/**
* Adds the bespoke attributes used internally by this widget.
* - thumbUrl
* - pathUrl
* @return System\Models\File
*/
protected function decorateFileAttributes($file)
{
$path = $thumb = $file->getPath();
if ($this->imageWidth || $this->imageHeight) {
$thumb = $file->getThumb($this->imageWidth, $this->imageHeight, $this->thumbOptions);
}
$file->pathUrl = $path;
$file->thumbUrl = $thumb;
return $file;
}
/**
* Return max upload filesize in Mb
* @return integer
*/
protected function getUploadMaxFilesize()
{
$size = ini_get('upload_max_filesize');
if (preg_match('/^([\d\.]+)([KMG])$/i', $size, $match)) {
$pos = array_search(strtoupper($match[2]), ['K', 'M', 'G']);
if ($pos !== false) {
$size = $match[1] * pow(1024, $pos + 1);
}
}
return floor($size / 1024 / 1024);
}
}

View File

@@ -0,0 +1,59 @@
<?php namespace Backend\FormWidgets;
use Backend\Classes\FormWidgetBase;
use File;
use Url;
use Yaml;
/**
* Icon picker
* Renders an icon picker field.
*
* @package winter\wn-backend-module
* @author Robert Alexa, Jack Wilkinson
*/
class IconPicker extends FormWidgetBase
{
public const DEFAULT_LIBRARIES = '~/modules/backend/formwidgets/iconpicker/meta/libraries.yaml';
/**
* @inheritDoc
*/
protected $defaultAlias = 'iconpicker';
/**
* @inheritDoc
*/
public function render()
{
$this->prepareVars();
return $this->makePartial('iconpicker');
}
/**
* Prepares the list data
*/
public function prepareVars()
{
$this->vars['field'] = $this;
}
/**
* @inheritDoc
*/
public function loadAssets(): void
{
$this->addJs('js/dist/iconpicker.js', 'core');
}
public function onLoadIconLibrary()
{
$libraries = $this->config->libraries ?? static::DEFAULT_LIBRARIES;
if (is_string($libraries)) {
$libraries = Yaml::parseFile(File::symbolizePath($libraries));
}
return json_encode($libraries);
}
}

View File

@@ -0,0 +1,142 @@
<?php
namespace Backend\FormWidgets;
use Backend\Classes\FormWidgetBase;
use Backend\Facades\BackendAuth;
use Winter\Storm\Support\Facades\Html;
use Winter\Storm\Support\Facades\Markdown;
/**
* Code Editor
* Renders a code editor field.
*
* @package winter\wn-backend-module
* @author Alexey Bobkov, Samuel Georges
*/
class MarkdownEditor extends FormWidgetBase
{
//
// Configurable properties
//
/**
* @var string Display mode: split, tab.
*/
public $mode = 'tab';
/**
* @var bool Render preview with safe markdown.
*/
public $safe = false;
/**
* @var bool If true, the editor is set to read-only mode
*/
public $readOnly = false;
/**
* @var bool If true, the editor is set to read-only mode
*/
public $disabled = false;
//
// Object properties
//
/**
* {@inheritDoc}
*/
protected $defaultAlias = 'markdown';
/**
* {@inheritDoc}
*/
public function init()
{
$this->fillFromConfig([
'mode',
'safe',
'readOnly',
'disabled',
]);
}
/**
* {@inheritDoc}
*/
public function render()
{
$this->prepareVars();
return $this->makePartial('markdowneditor');
}
/**
* Prepares the widget data
*/
public function prepareVars()
{
$this->vars['mode'] = $this->mode;
$this->vars['stretch'] = $this->formField->stretch;
$this->vars['size'] = $this->formField->size;
$this->vars['name'] = $this->getFieldName();
$this->vars['value'] = $this->getLoadValue();
$this->vars['readOnly'] = $this->readOnly;
$this->vars['disabled'] = $this->disabled;
$this->vars['useMediaManager'] = BackendAuth::getUser()->hasAccess('media.manage_media');
}
/**
* {@inheritDoc}
*/
protected function loadAssets()
{
$this->addCss('css/markdowneditor.css', 'core');
$this->addJs('js/markdowneditor.js', 'core');
$this->addJs('/modules/backend/assets/vendor/ace-codeeditor/build-min.js', 'core');
}
/**
* Check to see if the generated HTML should be cleaned to remove any potential XSS
*
* @return boolean
*/
protected function shouldCleanHtml()
{
$user = BackendAuth::getUser();
return !$user || !$user->hasAccess('backend.allow_unsafe_markdown');
}
/**
* {@inheritDoc}
*/
public function getSaveValue($value)
{
if ($this->shouldCleanHtml()) {
$value = Html::clean($value);
}
return $value;
}
/**
* AJAX handler to render the markdown as HTML
*
* @return array ['preview' => $generatedHTML]
*/
public function onRefresh()
{
$value = post($this->getFieldName());
$previewHtml = $this->safe
? Markdown::parseSafe($value)
: Markdown::parse($value);
if ($this->shouldCleanHtml()) {
$previewHtml = Html::clean($previewHtml);
}
return [
'preview' => $previewHtml
];
}
}

View File

@@ -0,0 +1,126 @@
<?php namespace Backend\FormWidgets;
use BackendAuth;
use Backend\Classes\FormField;
use System\Classes\MediaLibrary;
use Backend\Classes\FormWidgetBase;
/**
* Media Finder
* Renders a record finder field.
*
* image:
* label: Some image
* type: media
* prompt: Click the %s button to find a user
*
* @package winter\wn-backend-module
* @author Alexey Bobkov, Samuel Georges
*/
class MediaFinder extends FormWidgetBase
{
//
// Configurable properties
//
/**
* @var string Prompt to display if no record is selected.
*/
public $prompt = 'backend::lang.mediafinder.default_prompt';
/**
* @var string Display mode for the selection. Values: file, image.
*/
public $mode = 'file';
/**
* @var int Preview image width
*/
public $imageWidth;
/**
* @var int Preview image height
*/
public $imageHeight;
//
// Object properties
//
/**
* @inheritDoc
*/
protected $defaultAlias = 'media';
/**
* @inheritDoc
*/
public function init()
{
$this->fillFromConfig([
'mode',
'prompt',
'imageWidth',
'imageHeight'
]);
$user = BackendAuth::getUser();
if ($this->formField->disabled
|| $this->formField->readOnly
|| !$user
|| !$user->hasAccess('media.manage_media')
) {
$this->previewMode = true;
}
}
/**
* @inheritDoc
*/
public function render()
{
$this->prepareVars();
return $this->makePartial('mediafinder');
}
/**
* Prepares the list data
*/
public function prepareVars()
{
$value = $this->getLoadValue();
$isImage = $this->mode === 'image';
$this->vars['value'] = $value;
$this->vars['imageUrl'] = $isImage && $value ? MediaLibrary::url($value) : '';
$this->vars['imageExists'] = $isImage && $value ? MediaLibrary::instance()->exists($value) : '';
$this->vars['field'] = $this->formField;
$this->vars['prompt'] = str_replace('%s', '<i class="icon-folder"></i>', trans($this->prompt));
$this->vars['mode'] = $this->mode;
$this->vars['imageWidth'] = $this->imageWidth;
$this->vars['imageHeight'] = $this->imageHeight;
}
/**
* @inheritDoc
*/
public function getSaveValue($value)
{
if ($this->formField->disabled || $this->formField->hidden) {
return FormField::NO_SAVE_DATA;
}
return $value;
}
/**
* @inheritDoc
*/
protected function loadAssets()
{
$this->addJs('js/mediafinder.js', 'core');
$this->addCss('css/mediafinder.css', 'core');
}
}

View File

@@ -0,0 +1,85 @@
<?php namespace Backend\FormWidgets;
use Backend\Classes\FormWidgetBase;
use Backend\Widgets\Form;
/**
* Nested Form
* Renders a nested form bound to a jsonable field of a model.
*
* @package winter\wn-backend-module
* @author Sascha Aeppli
*/
class NestedForm extends FormWidgetBase
{
/**
* @inheritDoc
*/
protected $defaultAlias = 'nestedform';
/**
* @var array Form configuration
*/
public $form;
/**
* @var bool defines if the nested form is styled like a panel (default true).
*/
public $usePanelStyles = true;
/**
* @var Form form widget reference
*/
protected $formWidget;
/**
* @inheritDoc
*/
public function init()
{
$this->fillFromConfig([
'form',
'usePanelStyles',
]);
if ($this->formField->disabled) {
$this->previewMode = true;
}
$config = $this->makeConfig($this->form);
$config->model = $this->model;
$config->data = $this->getLoadValue();
$config->alias = $this->alias . $this->defaultAlias;
$config->arrayName = $this->getFieldName();
$config->isNested = true;
if (object_get($this->getParentForm()->config, 'enableDefaults') === true) {
$config->enableDefaults = true;
}
$widget = $this->makeWidget(Form::class, $config);
$widget->previewMode = $this->previewMode;
$widget->bindToController();
$this->formWidget = $widget;
}
protected function loadAssets()
{
$this->addCss('css/nestedform.css', 'core');
}
/**
* @inheritdoc
*/
public function render()
{
$this->prepareVars();
return $this->makePartial('nestedform');
}
public function prepareVars()
{
$this->formWidget->previewMode = $this->previewMode;
}
}

View File

@@ -0,0 +1,171 @@
<?php namespace Backend\FormWidgets;
use Backend\Classes\FormWidgetBase;
use BackendAuth;
/**
* User/group permission editor
* This widget is used by the system internally on the System / Administrators pages.
*
* Available Modes:
* - radio: Default mode, used by user-level permissions.
* Provides three-state control over each available permission. States are
* -1: Explicitly deny the permission
* 0: Inherit the permission's value from a parent source (User inherits from Role)
* 1: Explicitly grant the permission
* - checkbox: Used to define permissions for roles. Intended to define a base of what permissions are available
* Provides two state control over each available permission. States are
* 1: Explicitly allow the permission
* null: If the checkbox is not ticked, the permission will not be sent to the server and will not be stored.
* This is interpreted as the permission not being present and thus not allowed
* - switch: Used to define overriding permissions in a simpler UX than the radio.
* Provides two state control over each available permission. States are
* 1: Explicitly allow the permission
* -1: Explicitly deny the permission
*
* Available permissions can be defined in the form of an array of permission codes to allow:
* NOTE: Users are still not allowed to modify permissions that they themselves do not have access to
* availablePermissions: ['some.author.permission', 'some.other.permission', 'etc.some.system.permission']
*
* @package winter\wn-backend-module
* @author Alexey Bobkov, Samuel Georges
*/
class PermissionEditor extends FormWidgetBase
{
protected $user;
/**
* @var string Mode to display the permission editor with. Available options: radio, checkbox, switch
*/
public $mode = 'radio';
/**
* @var array Permission codes to allow to be interacted with through this widget
*/
public $availablePermissions;
/**
* @inheritDoc
*/
public function init()
{
$this->fillFromConfig([
'mode',
'availablePermissions',
]);
$this->user = BackendAuth::getUser();
}
/**
* @inheritDoc
*/
public function render()
{
$this->prepareVars();
return $this->makePartial('permissioneditor');
}
/**
* Prepares the list data
*/
public function prepareVars()
{
if ($this->formField->disabled) {
$this->previewMode = true;
}
$permissionsData = $this->formField->getValueFromData($this->model);
if (!is_array($permissionsData)) {
$permissionsData = [];
}
$this->vars['mode'] = $this->mode;
$this->vars['permissions'] = $this->getFilteredPermissions();
$this->vars['baseFieldName'] = $this->getFieldName();
$this->vars['permissionsData'] = $permissionsData;
$this->vars['field'] = $this->formField;
}
/**
* @inheritDoc
*/
public function getSaveValue($value)
{
if ($this->user->isSuperUser()) {
return is_array($value) ? $value : [];
}
return $this->getSaveValueSecure($value);
}
/**
* @inheritDoc
*/
protected function loadAssets()
{
$this->addCss('css/permissioneditor.css', 'core');
$this->addJs('js/permissioneditor.js', 'core');
}
/**
* Returns a safely parsed set of permissions, ensuring the user cannot elevate
* their own permissions or permissions of another user above their own.
*
* @param string $value
* @return array
*/
protected function getSaveValueSecure($value)
{
$newPermissions = is_array($value) ? array_map('intval', $value) : [];
if (!empty($newPermissions)) {
$existingPermissions = $this->model->permissions ?: [];
$allowedPermissions = array_map(function ($permissionObject) {
return $permissionObject->code;
}, array_flatten($this->getFilteredPermissions()));
foreach ($newPermissions as $permission => $code) {
if (in_array($permission, $allowedPermissions)) {
$existingPermissions[$permission] = $code;
}
}
$newPermissions = $existingPermissions;
}
return $newPermissions;
}
/**
* Returns the available permissions; removing those that the logged-in user does not have access to
*
* @return array The permissions that the logged-in user does have access to ['permission-tab' => $arrayOfAllowedPermissionObjects]
*/
protected function getFilteredPermissions()
{
$permissions = BackendAuth::listTabbedPermissions();
foreach ($permissions as $tab => $permissionsArray) {
foreach ($permissionsArray as $index => $permission) {
if (!$this->user->hasAccess($permission->code) ||
(
is_array($this->availablePermissions) &&
!in_array($permission->code, $this->availablePermissions)
)) {
unset($permissionsArray[$index]);
}
}
if (empty($permissionsArray)) {
unset($permissions[$tab]);
}
else {
$permissions[$tab] = $permissionsArray;
}
}
return $permissions;
}
}

View File

@@ -0,0 +1,380 @@
<?php namespace Backend\FormWidgets;
use Lang;
use ApplicationException;
use Backend\Classes\FormWidgetBase;
use Winter\Storm\Database\Model;
/**
* Record Finder
* Renders a record finder field.
*
* user:
* label: User
* type: recordfinder
* list: ~/plugins/winter/user/models/user/columns.yaml
* recordsPerPage: 10
* title: Find Record
* prompt: Click the Find button to find a user
* keyFrom: id
* nameFrom: name
* descriptionFrom: email
* conditions: email = "bob@example.com"
* scope: whereActive
* searchMode: all
* searchScope: searchUsers
* useRelation: false
* modelClass: Winter\User\Models\User
*
* @package winter\wn-backend-module
* @author Alexey Bobkov, Samuel Georges
*/
class RecordFinder extends FormWidgetBase
{
use \Backend\Traits\FormModelWidget;
//
// Configurable properties
//
/**
* @var string Field name to use for key.
*/
public $keyFrom = 'id';
/**
* @var string Relation column to display for the name
*/
public $nameFrom = 'name';
/**
* @var string Relation column to display for the description
*/
public $descriptionFrom;
/**
* @var string Text to display for the title of the popup list form
*/
public $title = 'backend::lang.recordfinder.find_record';
/**
* @var string Prompt to display if no record is selected.
*/
public $prompt = null;
/**
* @var int Maximum rows to display for each page.
*/
public $recordsPerPage = 10;
/**
* @var string Use a custom scope method for the list query.
*/
public $scope;
/**
* @var string Filters the relation using a raw where query statement.
*/
public $conditions;
/**
* @var string If searching the records, specifies a policy to use.
* - all: result must contain all words
* - any: result can contain any word
* - exact: result must contain the exact phrase
*/
public $searchMode;
/**
* @var string Use a custom scope method for performing searches.
*/
public $searchScope;
/**
* @var boolean Flag for using the name of the field as a relation name to interact with directly on the parent model. Default: true. Disable to return just the selected model's ID
*/
public $useRelation = true;
/**
* @var string Class of the model to use for listing records when useRelation = false
*/
public $modelClass;
//
// Object properties
//
/**
* @inheritDoc
*/
protected $defaultAlias = 'recordfinder';
/**
* @var Model Relationship model
*/
public $relationModel;
/**
* @var \Backend\Classes\WidgetBase Reference to the widget used for viewing (list or form).
*/
protected $listWidget;
/**
* @var \Backend\Classes\WidgetBase Reference to the widget used for searching.
*/
protected $searchWidget;
/**
* @inheritDoc
*/
public function init()
{
$this->fillFromConfig([
'title',
'prompt',
'keyFrom',
'nameFrom',
'descriptionFrom',
'scope',
'conditions',
'searchMode',
'searchScope',
'recordsPerPage',
'useRelation',
'modelClass',
]);
if (!isset($this->prompt)) {
$this->prompt = Lang::get('backend::lang.recordfinder.default_prompt');
}
if (!$this->useRelation && !class_exists($this->modelClass)) {
throw new ApplicationException(Lang::get('backend::lang.recordfinder.invalid_model_class', ['modelClass' => $this->modelClass]));
}
$modelKey = $this->getRecordModel()->getKeyName();
if ($this->keyFrom === 'id' && $modelKey !== 'id') {
$this->keyFrom = $modelKey;
}
if (post('recordfinder_flag')) {
$this->listWidget = $this->makeListWidget();
$this->listWidget->bindToController();
$this->searchWidget = $this->makeSearchWidget();
$this->searchWidget->bindToController();
$this->listWidget->setSearchTerm($this->searchWidget->getActiveTerm());
/*
* Link the Search Widget to the List Widget
*/
$this->searchWidget->bindEvent('search.submit', function () {
$this->listWidget->setSearchTerm($this->searchWidget->getActiveTerm());
return $this->listWidget->onRefresh();
});
}
}
/**
* @inheritDoc
*/
public function render()
{
$this->prepareVars();
return $this->makePartial('container');
}
public function onRefresh()
{
$value = post($this->getFieldName());
if ($this->useRelation) {
list($model, $attribute) = $this->resolveModelAttribute($this->valueFrom);
$model->{$attribute} = $value;
} else {
$this->formField->value = $value;
}
$this->prepareVars();
return ['#'.$this->getId('container') => $this->makePartial('recordfinder')];
}
public function onClearRecord()
{
if ($this->useRelation) {
list($model, $attribute) = $this->resolveModelAttribute($this->valueFrom);
$model->{$attribute} = null;
} else {
$this->formField->value = null;
}
$this->prepareVars();
return ['#'.$this->getId('container') => $this->makePartial('recordfinder')];
}
/**
* Prepares the list data
*/
public function prepareVars()
{
$this->relationModel = $this->getLoadValue();
if ($this->formField->disabled) {
$this->previewMode = true;
}
$this->vars['value'] = $this->getKeyValue();
$this->vars['field'] = $this->formField;
$this->vars['nameValue'] = $this->getNameValue();
$this->vars['descriptionValue'] = $this->getDescriptionValue();
$this->vars['listWidget'] = $this->listWidget;
$this->vars['searchWidget'] = $this->searchWidget;
$this->vars['title'] = $this->title;
$this->vars['prompt'] = str_replace('%s', '<i class="icon-th-list"></i>', e(trans($this->prompt)));
}
/**
* @inheritDoc
*/
protected function loadAssets()
{
$this->addJs('js/recordfinder.js', 'core');
}
/**
* @inheritDoc
*/
public function getSaveValue($value)
{
return strlen($value) ? $value : null;
}
/**
* @inheritDoc
*/
public function getLoadValue()
{
$value = null;
if ($this->useRelation) {
list($model, $attribute) = $this->resolveModelAttribute($this->valueFrom);
if ($model !== null) {
$value = $model->{$attribute};
}
} else {
$value = $this->modelClass::where($this->keyFrom, parent::getLoadValue())->first();
}
return $value;
}
public function getKeyValue()
{
if (!$this->relationModel) {
return null;
}
return $this->useRelation ?
$this->relationModel->{$this->keyFrom} :
$this->formField->value;
}
public function getNameValue()
{
if (!$this->relationModel || !$this->nameFrom) {
return null;
}
return $this->relationModel->{$this->nameFrom};
}
public function getDescriptionValue()
{
if (!$this->relationModel || !$this->descriptionFrom) {
return null;
}
return $this->relationModel->{$this->descriptionFrom};
}
public function onFindRecord()
{
$this->prepareVars();
// Attach the parent element ID to the popup
$this->vars['parentElementId'] = $this->getId('popupTrigger');
/*
* Purge the search term stored in session
*/
if ($this->searchWidget) {
$this->listWidget->setSearchTerm(null);
$this->searchWidget->setActiveTerm(null);
}
return $this->makePartial('recordfinder_form');
}
/**
* Gets the base model instance used by this field
*/
protected function getRecordModel(): Model
{
$model = null;
if ($this->useRelation) {
$model = $this->getRelationModel();
} else {
$model = new $this->modelClass;
}
return $model;
}
protected function makeListWidget()
{
$config = $this->makeConfig($this->getConfig('list'));
$config->model = $this->getRecordModel();
$config->alias = $this->alias . 'List';
$config->showSetup = false;
$config->showCheckboxes = false;
$config->recordsPerPage = $this->recordsPerPage;
$config->recordOnClick = sprintf("$('#%s').recordFinder('updateRecord', this, ':" . $this->keyFrom . "')", $this->getId());
$widget = $this->makeWidget('Backend\Widgets\Lists', $config);
$widget->setSearchOptions([
'mode' => $this->searchMode,
'scope' => $this->searchScope,
]);
if ($sqlConditions = $this->conditions) {
$widget->bindEvent('list.extendQueryBefore', function ($query) use ($sqlConditions) {
$query->whereRaw($sqlConditions);
});
}
elseif ($scopeMethod = $this->scope) {
$widget->bindEvent('list.extendQueryBefore', function ($query) use ($scopeMethod) {
$query->$scopeMethod($this->model);
});
}
else {
if ($this->useRelation) {
$widget->bindEvent('list.extendQueryBefore', function ($query) {
$this->getRelationObject()->addDefinedConstraintsToQuery($query);
});
}
}
return $widget;
}
protected function makeSearchWidget()
{
$config = $this->makeConfig();
$config->alias = $this->alias . 'Search';
$config->growable = false;
$config->prompt = 'backend::lang.list.search_prompt';
$widget = $this->makeWidget('Backend\Widgets\Search', $config);
$widget->cssClasses[] = 'recordfinder-search';
return $widget;
}
}

View File

@@ -0,0 +1,198 @@
<?php
namespace Backend\FormWidgets;
use Db;
use Lang;
use Backend\Classes\FormField;
use Backend\Classes\FormWidgetBase;
use Illuminate\Database\Eloquent\Relations\Relation as RelationBase;
use Winter\Storm\Exception\SystemException;
/**
* Form Relationship
* Renders a field prepopulated with a belongsTo and belongsToHasMany relation.
*
* @package winter\wn-backend-module
* @author Alexey Bobkov, Samuel Georges
*/
class Relation extends FormWidgetBase
{
use \Backend\Traits\FormModelWidget;
//
// Configurable properties
//
/**
* @var string Model column to use for the name reference
*/
public $nameFrom = 'name';
/**
* @var string Custom SQL column selection to use for the name reference
*/
public $sqlSelect;
/**
* @var string Empty value to use if the relation is singluar (belongsTo)
*/
public $emptyOption;
/**
* @var string Use a custom scope method for the list query.
*/
public $scope;
/**
* @var string Define the order of the list query.
*/
public $order;
//
// Object properties
//
/**
* @inheritDoc
*/
protected $defaultAlias = 'relation';
/**
* @var FormField Object used for rendering a simple field type
*/
public $renderFormField;
/**
* @inheritDoc
*/
public function init()
{
$this->fillFromConfig([
'nameFrom',
'emptyOption',
'scope',
'order',
]);
if (isset($this->config->select)) {
$this->sqlSelect = $this->config->select;
}
}
/**
* @inheritDoc
*/
public function render()
{
$this->prepareVars();
return $this->makePartial('relation');
}
/**
* Prepares the view data
*/
public function prepareVars()
{
$this->vars['field'] = $this->makeRenderFormField();
}
/**
* Makes the form object used for rendering a simple field type
* @throws SystemException if an unsupported relation type is used.
*/
protected function makeRenderFormField()
{
return $this->renderFormField = RelationBase::noConstraints(function () {
$field = clone $this->formField;
$relationObject = $this->getRelationObject();
$query = $relationObject->newQuery();
list($model, $attribute) = $this->resolveModelAttribute($this->valueFrom);
$relationType = $model->getRelationType($attribute);
$relationModel = $model->makeRelation($attribute);
if (in_array($relationType, ['belongsToMany', 'morphToMany', 'morphedByMany', 'hasMany'])) {
$field->type = 'checkboxlist';
} elseif (in_array($relationType, ['belongsTo', 'hasOne'])) {
$field->type = 'dropdown';
} else {
throw new SystemException(
Lang::get('backend::lang.relation.relationwidget_unsupported_type', [
'type' => $relationType
])
);
}
// Order query by the configured option.
if ($this->order) {
// Using "raw" to allow authors to use a string to define the order clause.
$query->orderByRaw($this->order);
}
// It is safe to assume that if the model and related model are of
// the exact same class, then it cannot be related to itself
if ($model->exists && (get_class($model) == get_class($relationModel))) {
$query->where($relationModel->getKeyName(), '<>', $model->getKey());
}
// Even though "no constraints" is applied, belongsToMany constrains the query
// by joining its pivot table. Remove all joins from the query.
$query->getQuery()->getQuery()->joins = [];
if ($scopeMethod = $this->scope) {
$query->$scopeMethod($model);
}
// Determine if the model uses a tree trait
$treeTraits = ['Winter\Storm\Database\Traits\NestedTree', 'Winter\Storm\Database\Traits\SimpleTree'];
$usesTree = count(array_intersect($treeTraits, class_uses($relationModel))) > 0;
// The "sqlSelect" config takes precedence over "nameFrom".
// A virtual column called "selection" will contain the result.
// Tree models must select all columns to return parent columns, etc.
if ($this->sqlSelect) {
$nameFrom = 'selection';
$selectColumn = $usesTree ? '*' : $relationModel->getKeyName();
$result = $query->select($selectColumn, Db::raw($this->sqlSelect . ' AS ' . $nameFrom));
}
else {
$nameFrom = $this->nameFrom;
$result = $query->getQuery()->get();
}
// Some simpler relations can specify a custom local or foreign "other" key,
// which can be detected and implemented here automagically.
$primaryKeyName = in_array($relationType, ['hasMany', 'belongsTo', 'hasOne'])
? $relationObject->getOtherKey()
: $relationModel->getKeyName();
$field->options = $usesTree
? $result->listsNested($nameFrom, $primaryKeyName)
: $result->lists($nameFrom, $primaryKeyName);
return $field;
});
}
/**
* @inheritDoc
*/
public function getSaveValue($value)
{
if ($this->formField->disabled || $this->formField->hidden) {
return FormField::NO_SAVE_DATA;
}
if (is_string($value) && !strlen($value)) {
return null;
}
if (is_array($value) && !count($value)) {
return null;
}
return $value;
}
}

View File

@@ -0,0 +1,84 @@
<?php
namespace Backend\FormWidgets;
use Backend\Classes\FormField;
use Backend\Classes\FormWidgetBase;
use Illuminate\Support\Facades\Lang;
use Winter\Storm\Exception\SystemException;
class RelationManager extends FormWidgetBase
{
/**
* @inheritDoc
*/
protected $defaultAlias = 'relationmanager';
/**
* Disables the ability to add, update, delete or create relations.
*/
protected ?bool $readOnly = null;
/**
* Path to controller action to open a record.
*/
protected ?string $recordUrl = null;
/**
* Custom JavaScript code to execute when clicking on a record.
*/
protected ?string $recordOnClick = null;
/**
* Relation name if different from the field name.
*/
protected string $relation = '';
public function init(): void
{
$this->fillFromConfig([
'readOnly',
'recordUrl',
'recordOnClick',
'relation',
]);
if (!isset($this->readOnly) && $this->config->previewMode) {
$this->readOnly = $this->config->previewMode;
}
}
public function render()
{
if (!$this->controller->isClassExtendedWith(\Backend\Behaviors\RelationController::class)) {
$error = Lang::get('backend::lang.relation.missing_behavior', [
'field' => $this->formField->fieldName,
'controller' => get_class($this->controller),
]);
throw new SystemException($error);
}
$options = [];
if (!is_null($this->readOnly)) {
$options['readOnly'] = $this->readOnly;
}
if (!is_null($this->recordUrl)) {
$options['recordUrl'] = $this->recordUrl;
}
if (!is_null($this->recordOnClick)) {
$options['recordOnClick'] = $this->recordOnClick;
}
$relation = $this->relation ?: $this->formField->fieldName;
return $this->controller->relationRender($relation, $options);
}
public function getSaveValue($value)
{
return FormField::NO_SAVE_DATA;
}
}

View File

@@ -0,0 +1,535 @@
<?php namespace Backend\FormWidgets;
use Lang;
use ApplicationException;
use Backend\Classes\FormWidgetBase;
/**
* Repeater Form Widget
*/
class Repeater extends FormWidgetBase
{
//
// Configurable properties
//
/**
* Form field configuration
*/
public array|string|object $form = [];
/**
* Repeater mode. Can be either `list` (default) to display items in a vertical list, or `grid` to
* display items in a grid.
*/
public string $mode = 'list';
/**
* Prompt text for adding new items.
*/
public string $prompt = 'backend::lang.repeater.add_new_item';
/**
* If `true`, items can be sorted.
*/
public bool $sortable = true;
/**
* Field name to use for the title of collapsed items
*/
public ?string $titleFrom = null;
/**
* Minimum items required. Pre-displays those items when not using groups. Set to `0` to not enforce a minimum.
*/
public int $minItems = 0;
/**
* Maximum items permitted. Set to `0` to not enforce a limit.
*/
public int $maxItems = 0;
/**
* Number of columns in a grid mode repeater. Can be between 2 and 6. Defaults to `4`.
*/
public int $columns = 4;
/**
* The row height, in pixels, of a grid mode repeater. Defaults to `120`. Note that if items are larger than this
* value, the row will scale accordingly.
*/
public int $rowHeight = 120;
/**
* The style of the repeater. Can be one of three values:
* - "default": Shows all repeater items expanded on load.
* - "collapsed": Shows all repeater items collapsed on load.
* - "accordion": Shows only the first repeater item expanded on load. When another item is clicked, all other open
* items are collapsed.
*
* Ignored when using `grid` mode.
*/
public string $style = 'default';
//
// Object properties
//
/**
* {@inheritDoc}
*/
protected $defaultAlias = 'repeater';
/**
* Meta data associated to each field, organised by index
*/
protected array $indexMeta = [];
/**
* Collection of form widgets.
*/
protected array $formWidgets = [];
/**
* Stops nested repeaters populating from previous sibling.
*/
protected static bool $onAddItemCalled = false;
/**
* Determines if a child repeater has made an AJAX request to add an item
*/
protected bool $childAddItemCalled = false;
/**
* Determines which child index has made the AJAX request to add an item
*/
protected ?int $childIndexCalled = null;
/**
* If `true`, sets the repeater to use "grouped" items. Grouped items are selectable form configurations that can
* be different for each item in the repeater.
*/
protected bool $useGroups = false;
/**
* Defines the group item form definitions available for the repeater.
*/
protected array $groupDefinitions = [];
/**
* Determines if repeater has been initialised previously
*/
protected bool $loaded = false;
/**
* {@inheritDoc}
*/
public function init()
{
$this->fillFromConfig([
'form',
'mode',
'style',
'prompt',
'sortable',
'titleFrom',
'minItems',
'maxItems',
'columns',
'rowHeight',
]);
if ($this->formField->disabled) {
$this->previewMode = true;
}
if ($this->columns < 2 || $this->columns > 6) {
$this->columns = 4;
}
// Check for loaded flag in POST
if ((bool) post($this->alias . '_loaded') === true) {
$this->loaded = true;
}
$this->checkAddItemRequest();
$this->processGroupMode();
if (!self::$onAddItemCalled) {
$this->processItems();
}
}
/**
* {@inheritDoc}
*/
public function render()
{
$this->prepareVars();
return $this->makePartial('repeater');
}
/**
* Prepares the form widget view data
*/
public function prepareVars()
{
// Refresh the loaded data to support being modified by filterFields
// @see https://github.com/octobercms/october/issues/2613
if (!self::$onAddItemCalled) {
$this->processItems();
}
if ($this->previewMode) {
foreach ($this->formWidgets as $widget) {
$widget->previewMode = true;
}
}
$this->vars['prompt'] = $this->prompt;
$this->vars['mode'] = in_array($this->mode, ['list', 'grid']) ? $this->mode : 'list';
$this->vars['formWidgets'] = $this->formWidgets;
$this->vars['titleFrom'] = $this->titleFrom;
$this->vars['minItems'] = (int) $this->minItems;
$this->vars['maxItems'] = (int) $this->maxItems;
$this->vars['sortable'] = (bool) $this->sortable;
$this->vars['style'] = in_array($this->style, ['default', 'collapsed', 'accordion']) ? $this->style : 'default';
$this->vars['columns'] = (int) $this->columns;
$this->vars['rowHeight'] = (int) $this->rowHeight;
$this->vars['useGroups'] = $this->useGroups;
$this->vars['groupDefinitions'] = $this->groupDefinitions;
}
/**
* @inheritDoc
*/
protected function loadAssets()
{
$this->addCss('css/repeater.css', 'core');
$this->addJs('js/repeater.js', 'core');
}
/**
* @inheritDoc
*/
public function getSaveValue($value)
{
return $this->processSaveValue($value);
}
/**
* Splices in some meta data (group and index values) to the dataset.
* @param array $value
* @return array|null
*/
protected function processSaveValue($value)
{
if (!is_array($value) || !$value) {
return null;
}
if ($this->minItems && count($value) < $this->minItems) {
throw new ApplicationException(Lang::get('backend::lang.repeater.min_items_failed', ['name' => $this->fieldName, 'min' => $this->minItems, 'items' => count($value)]));
}
if ($this->maxItems && count($value) > $this->maxItems) {
throw new ApplicationException(Lang::get('backend::lang.repeater.max_items_failed', ['name' => $this->fieldName, 'max' => $this->maxItems, 'items' => count($value)]));
}
/*
* Give repeated form field widgets an opportunity to process the data.
*/
foreach ($value as $index => $data) {
if (isset($this->formWidgets[$index])) {
if ($this->useGroups) {
$value[$index] = array_merge($this->formWidgets[$index]->getSaveData(), ['_group' => $data['_group']]);
} else {
$value[$index] = $this->formWidgets[$index]->getSaveData();
}
}
}
return array_values($value);
}
/**
* Processes form data and applies it to the form widgets.
* @return void
*/
protected function processItems()
{
$currentValue = ($this->loaded === true)
? post($this->formField->getName())
: $this->getLoadValue();
// Detect when a child widget is trying to run an AJAX handler
// outside of the form element that contains all the repeater
// fields that would normally be used to identify that case
$handler = $this->controller->getAjaxHandler();
if (!$this->loaded && starts_with($handler, $this->alias . 'Form')) {
// Attempt to get the index of the repeater
$handler = str_after($handler, $this->alias . 'Form');
preg_match("~^(\d+)~", $handler, $matches);
if (isset($matches[1])) {
$index = $matches[1];
$this->makeItemFormWidget($index);
}
}
// Ensure that the minimum number of items are preinitialized
// ONLY DONE WHEN NOT IN GROUP MODE
if (!$this->useGroups && $this->minItems > 0) {
if (!is_array($currentValue)) {
$currentValue = [];
for ($i = 0; $i < $this->minItems; $i++) {
$currentValue[$i] = [];
}
} elseif (count($currentValue) < $this->minItems) {
for ($i = 0; $i < ($this->minItems - count($currentValue)); $i++) {
$currentValue[] = [];
}
}
}
if (!$this->childAddItemCalled && $currentValue === null) {
$this->formWidgets = [];
return;
}
if ($this->childAddItemCalled && !isset($currentValue[$this->childIndexCalled])) {
// If no value is available but a child repeater has added an item, add a "stub" repeater item
$this->makeItemFormWidget($this->childIndexCalled);
}
if (!is_array($currentValue)) {
return;
}
collect($currentValue)->each(function ($value, $index) {
$this->makeItemFormWidget($index, array_get($value, '_group', null));
});
}
/**
* Creates a form widget based on a field index and optional group code.
* @param int $index
* @param string $index
* @return \Backend\Widgets\Form
*/
protected function makeItemFormWidget($index = 0, $groupCode = null)
{
$configDefinition = $this->useGroups
? $this->getGroupFormFieldConfig($groupCode)
: $this->form;
$config = $this->makeConfig($configDefinition);
$config->model = $this->model;
$config->data = $this->getValueFromIndex($index);
$config->alias = $this->alias . 'Form' . $index;
$config->arrayName = $this->getFieldName().'['.$index.']';
$config->isNested = true;
if (self::$onAddItemCalled || $this->minItems > 0) {
$config->enableDefaults = true;
}
$widget = $this->makeWidget('Backend\Widgets\Form', $config);
$widget->previewMode = $this->previewMode;
$widget->bindToController();
$this->indexMeta[$index] = [
'groupCode' => $groupCode
];
return $this->formWidgets[$index] = $widget;
}
/**
* Returns the data at a given index.
* @param int $index
*/
protected function getValueFromIndex($index)
{
$value = ($this->loaded === true)
? post($this->formField->getName())
: $this->getLoadValue();
if (!is_array($value)) {
$value = [];
}
return array_get($value, $index, []);
}
//
// AJAX handlers
//
public function onAddItem()
{
$groupCode = post('_repeater_group');
$index = $this->getNextIndex();
$this->prepareVars();
$this->vars['widget'] = $this->makeItemFormWidget($index, $groupCode);
$this->vars['indexValue'] = $index;
$itemContainer = '@#' . $this->getId('items');
$addItemContainer = '#' . $this->getId('add-item');
return [
$addItemContainer => '',
$itemContainer => $this->makePartial('repeater_item') . $this->makePartial('repeater_add_item')
];
}
public function onRemoveItem()
{
// Useful for deleting relations
}
public function onRefresh()
{
$index = post('_repeater_index');
$group = post('_repeater_group');
$widget = $this->makeItemFormWidget($index, $group);
return $widget->onRefresh();
}
/**
* Determines the next available index number for assigning to a new repeater item.
*
* @return int
*/
protected function getNextIndex()
{
if ($this->loaded === true) {
$data = post($this->formField->getName());
if (is_array($data) && count($data)) {
return (max(array_keys($data)) + 1);
}
} else {
$data = $this->getLoadValue();
if (is_array($data)) {
return count($data);
}
}
return 0;
}
/**
* Determines the repeater that has triggered an AJAX request to add an item.
*
* @return void
*/
protected function checkAddItemRequest()
{
$handler = $this->getParentForm()
->getController()
->getAjaxHandler();
if ($handler === null || strpos($handler, '::') === false) {
return;
}
list($widgetName, $handlerName) = explode('::', $handler);
if ($handlerName !== 'onAddItem') {
return;
}
if ($this->alias === $widgetName) {
// This repeater has made the AJAX request
self::$onAddItemCalled = true;
} else if (strpos($widgetName, $this->alias . 'Form') === 0) {
// A child repeater has made the AJAX request
// Get index from AJAX handler
$handlerSuffix = str_replace($this->alias . 'Form', '', $widgetName);
if (preg_match('/^[0-9]+/', $handlerSuffix, $matches)) {
$this->childAddItemCalled = true;
$this->childIndexCalled = (int) $matches[0];
}
}
}
//
// Group mode
//
/**
* Returns the form field configuration for a group, identified by code.
* @param string $code
* @return array|null
*/
protected function getGroupFormFieldConfig($code)
{
if (!$code) {
return null;
}
$fields = array_get($this->groupDefinitions, $code.'.fields');
if (!$fields) {
return null;
}
return ['fields' => $fields, 'enableDefaults' => object_get($this->config, 'enableDefaults')];
}
/**
* Process features related to group mode.
* @return void
*/
protected function processGroupMode()
{
$palette = [];
if (!$group = $this->getConfig('groups', [])) {
$this->useGroups = false;
return;
}
if (is_string($group)) {
$group = $this->makeConfig($group);
}
foreach ($group as $code => $config) {
$palette[$code] = [
'code' => $code,
'name' => array_get($config, 'name'),
'icon' => array_get($config, 'icon', 'icon-square-o'),
'description' => array_get($config, 'description'),
'fields' => array_get($config, 'fields')
];
}
$this->groupDefinitions = $palette;
$this->useGroups = true;
}
/**
* Returns a field group code from its index.
* @param $index int
* @return string
*/
public function getGroupCodeFromIndex($index)
{
return array_get($this->indexMeta, $index.'.groupCode');
}
/**
* Returns the group title from its unique code.
* @param $groupCode string
* @return string
*/
public function getGroupTitle($groupCode)
{
return array_get($this->groupDefinitions, $groupCode.'.name');
}
}

View File

@@ -0,0 +1,315 @@
<?php
namespace Backend\FormWidgets;
use Backend\Classes\FormWidgetBase;
use Backend\Facades\Backend;
use Backend\Facades\BackendAuth;
use Backend\Models\EditorSetting;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Lang;
use Illuminate\Support\Facades\Request;
use Winter\Storm\Support\Facades\Config;
use Winter\Storm\Support\Facades\Event;
use Winter\Storm\Support\Facades\File;
/**
* Rich Editor
* Renders a rich content editor field.
*
* @package winter\wn-backend-module
* @author Alexey Bobkov, Samuel Georges
*/
class RichEditor extends FormWidgetBase
{
use \Backend\Traits\UploadableWidget;
//
// Configurable properties
//
/**
* @var boolean Determines whether content has HEAD and HTML tags.
*/
public $fullPage = false;
/**
* @var boolean Determines whether content has HEAD and HTML tags.
*/
public $toolbarButtons;
/**
* @var boolean If true, the editor is set to read-only mode
*/
public $readOnly = false;
/**
* @var string|null Path in the Media Library where uploaded files should be stored. If null it will be pulled from Request::input('path');
*/
public $uploadPath = '/uploaded-files';
//
// Object properties
//
/**
* @inheritDoc
*/
protected $defaultAlias = 'richeditor';
/**
* @inheritDoc
*/
public function init()
{
if ($this->formField->disabled) {
$this->readOnly = true;
}
$this->fillFromConfig([
'fullPage',
'readOnly',
'toolbarButtons',
]);
}
/**
* @inheritDoc
*/
public function render()
{
$this->prepareVars();
return $this->makePartial('richeditor');
}
/**
* Prepares the list data
*/
public function prepareVars()
{
$this->vars['field'] = $this->formField;
$this->vars['editorLang'] = $this->getValidEditorLang();
$this->vars['fullPage'] = $this->fullPage;
$this->vars['stretch'] = $this->formField->stretch;
$this->vars['size'] = $this->formField->size;
$this->vars['readOnly'] = $this->readOnly;
$this->vars['name'] = $this->getFieldName();
$this->vars['value'] = $this->getLoadValue();
$this->vars['toolbarButtons'] = $this->evalToolbarButtons();
$this->vars['useMediaManager'] = BackendAuth::getUser()->hasAccess('media.manage_media');
$this->vars['globalToolbarButtons'] = EditorSetting::getConfigured('html_toolbar_buttons');
$this->vars['allowEmptyTags'] = EditorSetting::getConfigured('html_allow_empty_tags');
$this->vars['allowTags'] = EditorSetting::getConfigured('html_allow_tags');
$this->vars['allowAttributes'] = EditorSetting::getConfigured('html_allow_attributes');
$this->vars['noWrapTags'] = EditorSetting::getConfigured('html_no_wrap_tags');
$this->vars['removeTags'] = EditorSetting::getConfigured('html_remove_tags');
$this->vars['lineBreakerTags'] = EditorSetting::getConfigured('html_line_breaker_tags');
$this->vars['imageStyles'] = EditorSetting::getConfiguredStyles('html_style_image');
$this->vars['linkStyles'] = EditorSetting::getConfiguredStyles('html_style_link');
$this->vars['paragraphStyles'] = EditorSetting::getConfiguredStyles('html_style_paragraph');
$this->vars['paragraphFormats'] = EditorSetting::getConfiguredFormats('html_paragraph_formats');
$this->vars['tableStyles'] = EditorSetting::getConfiguredStyles('html_style_table');
$this->vars['tableCellStyles'] = EditorSetting::getConfiguredStyles('html_style_table_cell');
}
/**
* Determine the toolbar buttons to use based on config.
* @return string
*/
protected function evalToolbarButtons()
{
$buttons = $this->toolbarButtons;
if (is_string($buttons)) {
$buttons = array_map(function ($button) {
return strlen($button) ? $button : '|';
}, explode('|', $buttons));
}
return $buttons;
}
public function onLoadPageLinksForm()
{
$this->vars['links'] = $this->getPageLinksArray();
return $this->makePartial('page_links_form');
}
/**
* @inheritDoc
*/
protected function loadAssets()
{
$this->addCss('css/richeditor.css', 'core');
$this->addJs('js/build-min.js', 'core');
if (Config::get('develop.decompileBackendAssets', false)) {
$scripts = Backend::decompileAsset($this->getAssetPath('js/build-plugins.js'));
foreach ($scripts as $script) {
$this->addJs($script, 'core');
}
} else {
$this->addJs('js/build-plugins-min.js', 'core');
}
$this->addJs('/modules/backend/assets/vendor/ace-codeeditor/build-min.js', 'core');
if ($lang = $this->getValidEditorLang()) {
$this->addJs('vendor/froala/js/languages/'.$lang.'.js', 'core');
}
}
/**
* Returns a valid language code for Redactor.
* @return string|mixed
*/
protected function getValidEditorLang()
{
$locale = App::getLocale();
// English is baked in
if ($locale == 'en') {
return null;
}
$locale = str_replace('-', '_', strtolower($locale));
$path = base_path('modules/backend/formwidgets/richeditor/assets/vendor/froala/js/languages/'.$locale.'.js');
return File::exists($path) ? $locale : false;
}
/**
* Returns a list of registered page link types.
* This is reserved functionality for separating the links by type.
* @return array Returns an array of registered page link types
*/
protected function getPageLinkTypes()
{
$result = [];
/**
* @event backend.richeditor.listTypes
* Register additional "page link types" to the RichEditor FormWidget
*
* Example usage:
*
* Event::listen('backend.richeditor.listTypes', function () {
* return [
* 'my-identifier' => 'author.plugin::lang.richeditor.link_types.my_identifier',
* ];
* });
*
*/
$apiResult = Event::fire('backend.richeditor.listTypes');
if (is_array($apiResult)) {
foreach ($apiResult as $typeList) {
if (!is_array($typeList)) {
continue;
}
foreach ($typeList as $typeCode => $typeName) {
$result[$typeCode] = $typeName;
}
}
}
return $result;
}
protected function getPageLinks($type)
{
$result = [];
/**
* @event backend.richeditor.getTypeInfo
* Register additional "page link types" to the RichEditor FormWidget
*
* Example usage:
*
* Event::listen('backend.richeditor.getTypeInfo', function ($type) {
* if ($type === 'my-identifier') {
* return [
* 'https://example.com/page1' => 'Page 1',
* 'https://example.com/parent-page' => [
* 'title' => 'Parent Page',
* 'links' => [
* 'https://example.com/child-page' => 'Child Page',
* ],
* ],
* ];
* }
* });
*
*/
$apiResult = Event::fire('backend.richeditor.getTypeInfo', [$type]);
if (is_array($apiResult)) {
foreach ($apiResult as $typeInfo) {
if (!is_array($typeInfo)) {
continue;
}
foreach ($typeInfo as $name => $value) {
$result[$name] = $value;
}
}
}
return $result;
}
/**
* Returns a single collection of available page links.
* This implementation has room to place links under
* different groups based on the link type.
* @return array
*/
protected function getPageLinksArray()
{
$links = [];
$types = $this->getPageLinkTypes();
$links[] = ['name' => Lang::get('backend::lang.pagelist.select_page'), 'url' => false];
$iterator = function ($links, $level = 0) use (&$iterator) {
$result = [];
foreach ($links as $linkUrl => $link) {
/*
* Remove scheme and host from URL
*/
$baseUrl = Request::getSchemeAndHttpHost();
if (strpos($linkUrl, $baseUrl) === 0) {
$linkUrl = substr($linkUrl, strlen($baseUrl));
}
/*
* Root page fallback.
*/
if (strlen($linkUrl) === 0) {
$linkUrl = '/';
}
$linkName = str_repeat('&nbsp;', $level * 4);
$linkName .= is_array($link) ? array_get($link, 'title', '') : $link;
$result[] = ['name' => $linkName, 'url' => $linkUrl];
if (is_array($link)) {
$result = array_merge(
$result,
$iterator(array_get($link, 'links', []), $level + 1)
);
}
}
return $result;
};
foreach ($types as $typeCode => $typeName) {
$links = array_merge($links, $iterator($this->getPageLinks($typeCode)));
}
return $links;
}
}

View File

@@ -0,0 +1,116 @@
<?php namespace Backend\FormWidgets;
use Backend\Classes\FormWidgetBase;
/**
* Sensitive widget.
*
* Renders a password field that can be optionally made visible
*
* @package winter\wn-backend-module
*/
class Sensitive extends FormWidgetBase
{
/**
* @var bool If true, the sensitive field cannot be edited, but can be toggled.
*/
public $readOnly = false;
/**
* @var bool If true, the sensitive field is disabled.
*/
public $disabled = false;
/**
* @var bool If true, a button will be available to copy the value.
*/
public $allowCopy = false;
/**
* @var string The string that will be used as a placeholder for an unrevealed sensitive value.
*/
public $hiddenPlaceholder = '__hidden__';
/**
* @var bool If true, the sensitive input will be hidden if the user changes to another tab in their browser.
*/
public $hideOnTabChange = true;
/**
* @inheritDoc
*/
protected $defaultAlias = 'sensitive';
/**
* @inheritDoc
*/
public function init()
{
$this->fillFromConfig([
'readOnly',
'disabled',
'allowCopy',
'hiddenPlaceholder',
'hideOnTabChange',
]);
if ($this->formField->disabled || $this->formField->readOnly) {
$this->previewMode = true;
}
}
/**
* @inheritDoc
*/
public function render()
{
$this->prepareVars();
return $this->makePartial('sensitive');
}
/**
* Prepares the view data for the widget partial.
*/
public function prepareVars()
{
$this->vars['readOnly'] = $this->readOnly;
$this->vars['disabled'] = $this->disabled;
$this->vars['hasValue'] = !empty($this->getLoadValue());
$this->vars['allowCopy'] = $this->allowCopy;
$this->vars['hiddenPlaceholder'] = $this->hiddenPlaceholder;
$this->vars['hideOnTabChange'] = $this->hideOnTabChange;
}
/**
* Reveals the value of a hidden, unmodified sensitive field.
*
* @return array
*/
public function onShowValue()
{
return [
'value' => $this->getLoadValue()
];
}
/**
* @inheritDoc
*/
public function getSaveValue($value)
{
if ($value === $this->hiddenPlaceholder) {
$value = $this->getLoadValue();
}
return $value;
}
/**
* @inheritDoc
*/
protected function loadAssets()
{
$this->addJs('js/dist/sensitive.js', 'core');
}
}

View File

@@ -0,0 +1,242 @@
<?php
namespace Backend\FormWidgets;
use Backend\Classes\FormWidgetBase;
use Illuminate\Database\Eloquent\Relations\Relation as RelationBase;
use Winter\Storm\Database\Relations\BelongsToMany;
use Winter\Storm\Database\Relations\MorphToMany;
/**
* Tag List Form Widget
*/
class TagList extends FormWidgetBase
{
use \Backend\Traits\FormModelWidget;
const MODE_ARRAY = 'array';
const MODE_STRING = 'string';
const MODE_RELATION = 'relation';
//
// Configurable properties
//
/**
* @var string Tag separator: space, comma.
*/
public $separator = 'comma';
/**
* @var bool Allows custom tags to be entered manually by the user.
*/
public $customTags = true;
/**
* @var mixed Predefined options settings. Set to true to get from model.
*/
public $options;
/**
* @var string Mode for the return value. Values: string, array, relation.
*/
public $mode = 'string';
/**
* @var string If mode is relation, model column to use for the name reference.
*/
public $nameFrom = 'name';
/**
* @var bool Use the key instead of value for saving and reading data.
*/
public $useKey = false;
/**
* @var string Placeholder for empty TagList widget
*/
public $placeholder = '';
//
// Object properties
//
/**
* @inheritDoc
*/
protected $defaultAlias = 'taglist';
/**
* @inheritDoc
*/
public function init()
{
$this->fillFromConfig([
'separator',
'customTags',
'options',
'mode',
'nameFrom',
'useKey',
'placeholder'
]);
}
/**
* @inheritDoc
*/
public function render()
{
$this->prepareVars();
return $this->makePartial('taglist');
}
/**
* Prepares the form widget view data
*/
public function prepareVars()
{
$this->vars['placeholder'] = $this->placeholder;
$this->vars['useKey'] = $this->useKey;
$this->vars['field'] = $this->formField;
$this->vars['fieldOptions'] = $this->getFieldOptions();
$this->vars['selectedValues'] = $this->getLoadValue();
$this->vars['customSeparators'] = $this->getCustomSeparators();
}
/**
* @inheritDoc
*/
public function getSaveValue($value)
{
if (!is_array($value)) {
$value = [$value];
}
$value = array_values(array_filter($value));
if ($this->mode === static::MODE_RELATION) {
return $this->hydrateRelationSaveValue($value);
}
if ($this->mode === static::MODE_STRING) {
return implode($this->getSeparatorCharacter(), $value);
}
return $value;
}
/**
* Returns an array suitable for saving against a relation (array of keys).
* This method also creates non-existent tags.
*/
protected function hydrateRelationSaveValue(array $names): ?array
{
$relation = $this->getRelationObject();
$relationModel = $this->getRelationModel();
$keyName = $relationModel->getKeyName();
$pivot = in_array(get_class($relation), [BelongsToMany::class, MorphToMany::class]);
if ($pivot) {
$existingTags = $relationModel->whereIn($this->nameFrom, $names)->lists($this->nameFrom, $keyName);
} else {
$existingTags = $relation->lists($this->nameFrom, $keyName);
}
$newTags = $this->customTags ? array_diff($names, $existingTags) : [];
$deletedTags = $this->customTags ? array_diff($existingTags, $names) : [];
foreach ($newTags as $newTag) {
if ($pivot) {
$newModel = new $relationModel;
$newModel->{$this->nameFrom} = $newTag;
$newModel->save();
} else {
$newModel = $relation->create([$this->nameFrom => $newTag]);
}
$existingTags[$newModel->getKey()] = $newTag;
}
if (!$pivot && $deletedTags) {
$deletedKeys = array_keys($deletedTags);
$relation->whereIn($keyName, $deletedKeys)->delete();
foreach ($deletedTags as $id) {
unset($existingTags[$id]);
}
}
return array_keys($existingTags);
}
/**
* @inheritDoc
*/
public function getLoadValue()
{
$value = parent::getLoadValue();
if ($this->mode === static::MODE_RELATION) {
return $this->getRelationObject()->lists($this->nameFrom);
}
return $this->mode === static::MODE_STRING
? explode($this->getSeparatorCharacter(), $value)
: $value;
}
/**
* Returns defined field options, or from the relation if available.
* @return array
*/
public function getFieldOptions()
{
$options = $this->formField->options();
if (!$options && $this->mode === static::MODE_RELATION) {
$options = RelationBase::noConstraints(function () {
$query = $this->getRelationObject()->newQuery();
// Even though "no constraints" is applied, belongsToMany constrains the query
// by joining its pivot table. Remove all joins from the query.
$query->getQuery()->getQuery()->joins = [];
return $query->lists($this->nameFrom);
});
}
return $options;
}
/**
* Returns character(s) to use for separating keywords.
* @return mixed
*/
protected function getCustomSeparators()
{
if (!$this->customTags) {
return false;
}
$separators = [];
$separators[] = $this->getSeparatorCharacter();
return implode('|', $separators);
}
/**
* Convert the character word to the singular character.
* @return string
*/
protected function getSeparatorCharacter()
{
switch (strtolower($this->separator)) {
case 'comma':
return ',';
case 'space':
return ' ';
}
}
}

View File

@@ -0,0 +1,586 @@
# Monaco Code Editor for Winter CMS
This is the Monaco Editor integration for Winter CMS Backend, replacing the legacy Ace Editor with Microsoft's Monaco Editor (the same editor that powers VS Code).
## Overview
**Monaco Editor** provides a rich, modern code editing experience with:
- IntelliSense (code completion)
- Syntax highlighting for 15+ languages
- Advanced find/replace with regex support
- Multi-cursor editing
- Code folding
- Bracket matching and colorization
- Minimap overview
- Color picker for CSS colors
- And many more VS Code features
## Features
### Supported Languages (15)
1. **TypeScript** - Full TypeScript support with type checking
2. **JavaScript** - Modern ES6+ support
3. **CSS** - Including CSS3 properties
4. **JSON** - With schema validation
5. **HTML** - HTML5 support
6. **INI** - Configuration files
7. **LESS** - CSS preprocessor
8. **Markdown** - Rich markdown editing
9. **MySQL** - SQL syntax highlighting
10. **PHP** - Full PHP support
11. **SCSS** - Sass CSS preprocessor
12. **Twig** - Template engine syntax
13. **XML** - Markup language support
14. **YAML** - Configuration file support
### Monaco Features (20+)
Enabled features include:
- Anchor select
- Bracket matching
- Caret operations
- Clipboard operations
- Code lens
- Color picker
- Comment toggling
- Context menu
- Cursor undo/redo
- Find and replace
- Code folding
- Go to symbol
- Hover information
- In-place replace
- Indentation
- Inline hints
- Links
- Multi-cursor editing
- Parameter hints
- Rename symbol
- Smart select
- Snippets
- Suggest (autocomplete)
- Word highlighter
- Word operations
### Themes (35+)
Includes legacy tmTheme themes plus modern JSON themes
### User Preferences
All editor preferences are configurable from **Backend → Preferences → Code editor**:
**Appearance:**
- Font size (default: 12px)
- Theme selection
- Show/hide line numbers (gutter)
- Show/hide invisibles (whitespace)
- Highlight active line
- Show minimap
- Bracket colorization
- Color picker for CSS
**Behavior:**
- Tab size (default: 4 spaces)
- Use soft tabs (spaces) vs hard tabs
- Word wrap
- Auto-closing brackets/quotes
- Code folding
- Indent guides
- Print margin
All preferences persist across sessions and are stored per-user.
## Editor Architecture
Winter CMS uses a **dual-editor architecture** to optimize for different use cases:
### Monaco Editor (this FormWidget)
**Used by:** CodeEditor FormWidget
**Location:** `/modules/backend/formwidgets/codeeditor/`
**Purpose:** Advanced code editing with IntelliSense, syntax highlighting, and modern IDE features
**Bundle Size:** ~15 MB gzipped (main bundle + workers)
**Best for:** Writing PHP, JavaScript, CSS, YAML, and other code files
### Ace Editor (preserved)
**Used by:** RichEditor and MarkdownEditor FormWidgets
**Location:** `/modules/backend/assets/vendor/ace-codeeditor/`
**Purpose:** HTML source code editing within WYSIWYG editors
**Bundle Size:** ~500 KB (significantly lighter)
**Best for:** Viewing/editing raw HTML in rich text contexts
### Why Both?
**Monaco for CodeEditor:**
- Full IntelliSense and code completion
- Advanced refactoring tools
- Multi-cursor editing
- Rich language support
- Worth the bundle size for dedicated code editing
**Ace for RichEditor/MarkdownEditor:**
- Users rarely need advanced IDE features for HTML source view
- Lighter bundle improves page load performance
- Sufficient for basic HTML editing needs
- Reduces total application bundle by keeping WYSIWYG tools lean
This architecture balances modern features where they matter most (code editing) with performance optimization for general-purpose rich text editing.
## Technical Details
### Architecture
```text
modules/backend/formwidgets/codeeditor/
├── assets/
│ ├── css/
│ │ └── codeeditor.css - Compiled styles
│ ├── fonts/
│ │ └── codicon.ttf - Monaco icons font
│ ├── js/
│ │ ├── codeeditor.js - Main Monaco integration
│ │ └── build/
│ │ ├── codeeditor.bundle.js - Main bundle (19 MB)
│ │ ├── css.worker.js - CSS language worker
│ │ ├── editor.worker.js - Base editor worker
│ │ ├── html.worker.js - HTML language worker
│ │ ├── json.worker.js - JSON language worker
│ │ ├── ts.worker.js - TypeScript worker
│ │ └── [language-chunks] - 15 language modules
│ ├── less/
│ │ └── codeeditor.less - Source styles
│ ├── themes/
│ │ ├── [34 .tmTheme files] - Legacy TextMate themes
│ │ ├── one-dark-pro.json - Modern JSON theme
│ │ └── winter.json - Modern JSON theme
│ ├── winter.mix.js - Laravel Mix build configuration
│ └── package.json - NPM dependencies (in parent)
├── partials/
│ └── codeeditor.htm - Widget template
└── CodeEditor.php - FormWidget class
```
### Build System
**Current:** Laravel Mix 6 with Webpack 5
#### Build Command
```bash
php artisan mix:compile --package=module-backend.formwidgets.codeeditor -f
```
#### Build Configuration
See `assets/winter.mix.js`:
- Uses `monaco-editor-webpack-plugin` for proper worker splitting
- Polyfills for browser compatibility (> 0.5%, last 2 versions, Firefox ESR)
- Removes inline codicon font CSS (post-build hook)
- Minification and terser optimization
### Web Workers
Monaco Editor uses Web Workers for language services:
| Worker | Size | Purpose |
|--------|------|---------|
| editor.worker.js | 1.6 MB | Base editor operations |
| ts.worker.js | 22 MB | TypeScript/JavaScript IntelliSense |
| css.worker.js | 4.7 MB | CSS validation and completion |
| html.worker.js | 3.3 MB | HTML validation |
| json.worker.js | 2.2 MB | JSON schema validation |
Workers are loaded asynchronously and run in separate threads for better performance.
### Theme System
Themes are loaded directly as static assets via HTTP fetch (no PHP handler required). Theme preference values include the file extension (e.g., `twilight.tmTheme`, `one-dark-pro.json`).
#### Supported Formats
**1. TextMate Themes (.tmTheme)**
Legacy XML-based themes. Converted to Monaco format at runtime using `fast-plist` library.
**2. JSON Themes (.json)**
Modern VS Code theme format. Parsed and mapped to Monaco's theme structure.
```javascript
// codeeditor.js - Themes loaded via static fetch
async fetchTheme(themeName) {
// Theme name includes extension (e.g., "twilight.tmTheme", "one-dark-pro.json")
// Legacy values without extension default to .tmTheme
const basePath = window.Snowboard.url().asset('/modules/backend/formwidgets/codeeditor/assets/themes/');
const response = await fetch(`${basePath}${themeName}`);
// Format determined from file extension
}
```
## Usage
### Basic Usage
```yaml
# fields.yaml
code:
type: codeeditor
size: giant
language: php
```
### Available Options
```yaml
code:
type: codeeditor
# Editor size
size: tiny|small|large|huge|giant # Default: large
# Programming language
language: php|javascript|css|html|twig|yaml|etc # Default: php
# Theme (overrides user preference)
theme: twilight|monokai|github|one-dark-pro|etc
# Line numbers
showGutter: true|false # Default: true
# Word wrapping
wordWrap: true|false # Default: true
# Code folding
codeFolding: true|false # Default: true
# Auto-closing brackets
autoClosing: true|false # Default: true
# Soft tabs (spaces)
useSoftTabs: true|false # Default: true
tabSize: 2|4|8 # Default: 4
# Font size (px)
fontSize: 10|12|14|16|18 # Default: 12
# Read-only mode
readOnly: true|false # Default: false
disabled: true|false # Sets readOnly
# Display options
showInvisibles: true|false # Default: false
highlightActiveLine: true|false # Default: true
displayIndentGuides: true|false # Default: true
showPrintMargin: true|false # Default: false
showMinimap: true|false # Default: true
bracketColors: true|false # Default: false
showColors: true|false # Default: true (CSS color picker)
```
### JavaScript API
```javascript
// Get editor instance
const $editor = $('#my-editor');
const wrapper = $editor.data('oc.codeeditor');
// Access Monaco instance directly
const monacoEditor = wrapper.editor;
// Get/set content (via wrapper)
const code = wrapper.getValue();
wrapper.setValue('function test() {}');
// Get/set language
wrapper.setLanguage('javascript');
// Change theme
wrapper.setTheme('one-dark-pro');
// Insert at cursor
wrapper.insert('code here');
// Get cursor position
const position = wrapper.getPosition(); // { lineNumber: 1, column: 1 }
// Fullscreen
wrapper.enterFullscreen();
wrapper.exitFullscreen();
```
### Migrating from ACE to Monaco API
Winter CMS has migrated from ACE Editor to Monaco Editor. While backward compatibility is maintained for accessing the editor instance via jQuery `.data('oc.codeEditor')`, direct ACE API calls need to be updated.
#### Breaking Changes
**ACE's Session API is Removed:**
- `editor.getSession()` → No longer available
- ACE used a separate "session" object for document operations
- Monaco combines session and model into a single API
**Position Indexing Changed:**
- ACE uses **0-indexed** positions (rows and columns start at 0)
- Monaco uses **1-indexed** positions (lines and columns start at 1)
- Example: ACE row 5 = Monaco line 6, ACE column 0 = Monaco column 1
**Annotations Replaced with Markers:**
- ACE's `setAnnotations()` → Monaco's `monaco.editor.setModelMarkers()`
- Different data structure and API
#### Quick Migration Guide
**Getting/Setting Editor Value:**
```javascript
// ❌ OLD (ACE API - Deprecated)
const editor = $('[data-control=codeeditor]').data('oc.codeEditor').editor;
const value = editor.getSession().getValue();
editor.getSession().setValue('new value');
// ✅ NEW (Recommended - Use Wrapper)
const wrapper = $('[data-control=codeeditor]').data('oc.codeEditor');
const value = wrapper.getValue();
wrapper.setValue('new value');
// ✅ ALTERNATIVE (Direct Monaco API)
const monacoEditor = wrapper.editor;
const value = monacoEditor.getModel().getValue();
monacoEditor.getModel().setValue('new value');
```
**Inserting Text at Cursor:**
```javascript
// ❌ OLD (ACE API)
editor.insert('text');
// ✅ NEW (Wrapper provides this method)
wrapper.insert('text');
```
**Working with Annotations/Markers:**
```javascript
// ❌ OLD (ACE Annotations)
editor.getSession().setAnnotations([
{ row: 5, column: 0, text: 'Warning message', type: 'warning' }
]);
// Clear annotations
editor.getSession().setAnnotations([]);
// ✅ NEW (Monaco Wrapper Method - Recommended)
wrapper.setMarkers('sourceId', [
{
startLineNumber: 6, // ACE row 5 = Monaco line 6 (1-indexed!)
startColumn: 1, // ACE column 0 = Monaco column 1
endLineNumber: 6,
endColumn: Number.MAX_VALUE, // End of line
message: 'Warning message',
severity: wrapper.monaco.MarkerSeverity.Warning // Info, Warning, or Error
}
]);
// Clear markers
wrapper.setMarkers('sourceId', []);
```
**Getting Cursor Position:**
```javascript
// ❌ OLD (ACE API)
const cursor = editor.getCursorPosition(); // { row: 5, column: 10 } (0-indexed)
// ✅ NEW (Wrapper)
const position = wrapper.getPosition(); // { lineNumber: 6, column: 11 } (1-indexed)
// ✅ ALTERNATIVE (Direct Monaco)
const position = wrapper.editor.getPosition();
```
**Getting Selection:**
```javascript
// ❌ OLD (ACE API)
const range = editor.getSelection().getRange();
// ✅ NEW (Wrapper)
const selection = wrapper.getSelection();
// ✅ ALTERNATIVE (Direct Monaco)
const selection = wrapper.editor.getSelection();
```
#### API Comparison Table
| Operation | ACE API (Deprecated) | Monaco Wrapper (Recommended) | Direct Monaco API |
|-----------|---------------------|------------------------------|-------------------|
| Get value | `editor.getSession().getValue()` | `wrapper.getValue()` | `editor.getModel().getValue()` |
| Set value | `editor.getSession().setValue(v)` | `wrapper.setValue(v)` | `editor.getModel().setValue(v)` |
| Insert text | `editor.insert(text)` | `wrapper.insert(text)` | Complex - use wrapper |
| Get position | `editor.getCursorPosition()` | `wrapper.getPosition()` | `editor.getPosition()` |
| Get selection | `editor.getSelection()` | `wrapper.getSelection()` | `editor.getSelection()` |
| Set annotations | `editor.getSession().setAnnotations()` | `wrapper.setMarkers(id, markers)` | `monaco.editor.setModelMarkers()` |
| Focus editor | `editor.focus()` | `wrapper.focus()` | `editor.focus()` |
| Set language | N/A | `wrapper.setLanguage(lang)` | Complex - use wrapper |
#### Migration Checklist for Plugin Developers
If your plugin interacts with the CodeEditor widget, follow these steps:
1. **Update Editor Instance Access:**
- ✅ Keep: `.data('oc.codeEditor')` - Returns the wrapper
- ⚠️ Avoid: `.data('oc.codeEditor').editor` - Returns raw Monaco (advanced use only)
2. **Replace ACE Session Methods:**
- ❌ Remove all: `getSession().getValue()` → ✅ Use: `getValue()`
- ❌ Remove all: `getSession().setValue()` → ✅ Use: `setValue()`
3. **Update Annotations:**
- ❌ Remove: `getSession().setAnnotations(annotations)`
- ✅ Add: `wrapper.setMarkers(sourceId, markers)`
- ⚠️ Remember: Convert 0-indexed row/column to 1-indexed line/column
- Use `wrapper.monaco.MarkerSeverity` for severity constants
4. **Test Thoroughly:**
- Verify all editor interactions work
- Check that cursor operations use correct indexing
- Ensure markers/warnings display correctly
#### Available Wrapper Methods
The Monaco Snowboard editor wrapper provides these convenience methods:
```javascript
const wrapper = $('[data-control=codeeditor]').data('oc.codeEditor');
// Content
wrapper.getValue() // Get editor content
wrapper.setValue(value) // Set editor content
wrapper.insert(text) // Insert at cursor position
// Position & Selection
wrapper.getPosition() // Get cursor position (1-indexed)
wrapper.getSelection() // Get selection range
// Markers (Errors/Warnings/Info with squiggly underlines)
wrapper.setMarkers(sourceId, markers) // Set error/warning markers in editor
// Example: wrapper.setMarkers('myPlugin', [{ startLineNumber: 5, startColumn: 1,
// endLineNumber: 5, endColumn: Number.MAX_VALUE, message: 'Warning',
// severity: wrapper.monaco.MarkerSeverity.Warning }])
// Decorations (Visual highlights WITHOUT error semantics)
wrapper.setDecorations(sourceId, decorations) // Set visual highlights (no squiggles)
// Example: wrapper.setDecorations('myHighlight', [{ range: new monaco.Range(5, 1, 5, Number.MAX_VALUE),
// options: { isWholeLine: true, className: 'myHighlightClass',
// linesDecorationsClassName: 'myGutterClass' } }])
// Configuration
wrapper.setLanguage(lang) // Change syntax highlighting language
wrapper.setTheme(theme) // Change color theme
wrapper.focus() // Focus the editor
// View
wrapper.enterFullscreen() // Enter fullscreen mode
wrapper.exitFullscreen() // Exit fullscreen mode
wrapper.refresh() // Refresh editor (re-create instance)
// Direct Access (Advanced)
wrapper.editor // Access Monaco editor instance
wrapper.getEditor() // Same as wrapper.editor
wrapper.getModel() // Get Monaco model
wrapper.monaco // Access Monaco namespace (for constants like MarkerSeverity)
```
#### Example: Winter.Builder Plugin Migration
The Winter.Builder plugin was migrated to use Monaco API. Here's a real example:
**Before (ACE):**
```javascript
Localization.prototype.copyStringsFromDone = function(data) {
var codeEditor = this.getCodeEditor($masterTabPane);
// Set value using ACE Session API
codeEditor.getSession().setValue(responseData.strings);
// Set annotations using ACE
var annotations = [];
for (var i = 0; i < updatedLines.length; i++) {
annotations.push({
row: updatedLines[i], // 0-indexed
column: 0,
text: 'New String',
type: 'warning'
});
}
codeEditor.getSession().setAnnotations(annotations);
}
```
**After (Monaco):**
```javascript
Localization.prototype.copyStringsFromDone = function(data) {
var wrapper = this.getCodeEditor($masterTabPane);
// Set value using wrapper method
wrapper.setValue(responseData.strings);
// Convert to Monaco decorations (visual highlights without error semantics)
var decorations = [];
for (var i = 0; i < updatedLines.length; i++) {
decorations.push({
range: new wrapper.monaco.Range(
updatedLines[i] + 1, // Convert to 1-indexed!
1, // Start column
updatedLines[i] + 1, // End line (same line)
Number.MAX_VALUE // End column (end of line)
),
options: {
isWholeLine: true,
className: 'builder-new-translation-line', // Background highlight
linesDecorationsClassName: 'builder-new-translation-gutter', // Gutter indicator
hoverMessage: { value: 'New string or section' } // Tooltip on hover
}
});
}
wrapper.setDecorations('builderLocalization', decorations);
}
```
## Testing
### Playwright E2E Tests
Comprehensive test suite with 55+ tests:
```bash
# Run all tests
npm run test:e2e
# Run with UI
npm run test:e2e:ui
# Run specific test file
npx playwright test fullscreen.spec.js
# Debug tests
npm run test:e2e:debug
```
### Test Coverage
- **Fullscreen functionality** (6 tests)
- **Theme loading and switching** (9 tests)
- **Language support** (14 tests for all 15 languages)
- **Monaco features** (14 tests: find, replace, folding, multi-cursor, etc.)
- **Preferences persistence** (12 tests)
See `tests/e2e/README-TESTING.md` for full testing documentation.
## Resources
- **Monaco Editor Documentation:** https://microsoft.github.io/monaco-editor/
- **Monaco Editor GitHub:** https://github.com/microsoft/monaco-editor
- **VS Code Themes:** https://marketplace.visualstudio.com/search?target=VSCode&category=Themes
- **Winter CMS Docs:** https://wintercms.com/docs
- **PR #801:** https://github.com/wintercms/winter/pull/801
- **Issue #431:** https://github.com/wintercms/winter/issues/431

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,7 @@
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[114],{8114:function(e,t,n){n.r(t),n.d(t,{conf:function(){return u},language:function(){return b}});var r,i,o=n(9201),a=Object.defineProperty,s=Object.getOwnPropertyDescriptor,d=Object.getOwnPropertyNames,p=Object.prototype.hasOwnProperty,m=(e,t,n,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let i of d(t))p.call(e,i)||i===n||a(e,i,{get:()=>t[i],enumerable:!(r=s(t,i))||r.enumerable});return e},l={};
/*!-----------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.34.1(547870b6881302c5b4ff32173c16d06009e3588f)
* Released under the MIT license
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
*-----------------------------------------------------------------------------*/m(l,r=o,"default"),i&&m(i,r,"default");var c=["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"],u={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,comments:{blockComment:["\x3c!--","--\x3e"]},brackets:[["\x3c!--","--\x3e"],["<",">"],["{","}"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:'"',close:'"'},{open:"'",close:"'"},{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"}],onEnterRules:[{beforeText:new RegExp(`<(?!(?:${c.join("|")}))([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),afterText:/^<\/([_:\w][_:\w-.\d]*)\s*>$/i,action:{indentAction:l.languages.IndentAction.IndentOutdent}},{beforeText:new RegExp(`<(?!(?:${c.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),action:{indentAction:l.languages.IndentAction.Indent}}],folding:{markers:{start:new RegExp("^\\s*\x3c!--\\s*#region\\b.*--\x3e"),end:new RegExp("^\\s*\x3c!--\\s*#endregion\\b.*--\x3e")}}},b={defaultToken:"",tokenPostfix:".html",ignoreCase:!0,tokenizer:{root:[[/<!DOCTYPE/,"metatag","@doctype"],[/<!--/,"comment","@comment"],[/(<)((?:[\w\-]+:)?[\w\-]+)(\s*)(\/>)/,["delimiter","tag","","delimiter"]],[/(<)(script)/,["delimiter",{token:"tag",next:"@script"}]],[/(<)(style)/,["delimiter",{token:"tag",next:"@style"}]],[/(<)((?:[\w\-]+:)?[\w\-]+)/,["delimiter",{token:"tag",next:"@otherTag"}]],[/(<\/)((?:[\w\-]+:)?[\w\-]+)/,["delimiter",{token:"tag",next:"@otherTag"}]],[/</,"delimiter"],[/[^<]+/]],doctype:[[/[^>]+/,"metatag.content"],[/>/,"metatag","@pop"]],comment:[[/-->/,"comment","@pop"],[/[^-]+/,"comment.content"],[/./,"comment.content"]],otherTag:[[/\/?>/,"delimiter","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],script:[[/type/,"attribute.name","@scriptAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter","tag",{token:"delimiter",next:"@pop"}]]],scriptAfterType:[[/=/,"delimiter","@scriptAfterTypeEquals"],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/"module"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.text/javascript"}],[/'module'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.text/javascript"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/>/,{token:"delimiter",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]],style:[[/type/,"attribute.name","@styleAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter","tag",{token:"delimiter",next:"@pop"}]]],styleAfterType:[[/=/,"delimiter","@styleAfterTypeEquals"],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/"([^"]*)"/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/>/,{token:"delimiter",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]]}}}}]);

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,7 @@
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[134],{7134:function(e,t,n){n.r(t),n.d(t,{conf:function(){return s},language:function(){return p}});var o,a,i=n(9201),r=Object.defineProperty,c=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,m=Object.prototype.hasOwnProperty,u=(e,t,n,o)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let a of l(t))m.call(e,a)||a===n||r(e,a,{get:()=>t[a],enumerable:!(o=c(t,a))||o.enumerable});return e},d={};
/*!-----------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.34.1(547870b6881302c5b4ff32173c16d06009e3588f)
* Released under the MIT license
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
*-----------------------------------------------------------------------------*/u(d,o=i,"default"),a&&u(a,o,"default");var s={comments:{blockComment:["\x3c!--","--\x3e"]},brackets:[["<",">"]],autoClosingPairs:[{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}],surroundingPairs:[{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}],onEnterRules:[{beforeText:new RegExp("<([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$","i"),afterText:/^<\/([_:\w][_:\w-.\d]*)\s*>$/i,action:{indentAction:d.languages.IndentAction.IndentOutdent}},{beforeText:new RegExp("<(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$","i"),action:{indentAction:d.languages.IndentAction.Indent}}]},p={defaultToken:"",tokenPostfix:".xml",ignoreCase:!0,qualifiedName:/(?:[\w\.\-]+:)?[\w\.\-]+/,tokenizer:{root:[[/[^<&]+/,""],{include:"@whitespace"},[/(<)(@qualifiedName)/,[{token:"delimiter"},{token:"tag",next:"@tag"}]],[/(<\/)(@qualifiedName)(\s*)(>)/,[{token:"delimiter"},{token:"tag"},"",{token:"delimiter"}]],[/(<\?)(@qualifiedName)/,[{token:"delimiter"},{token:"metatag",next:"@tag"}]],[/(<\!)(@qualifiedName)/,[{token:"delimiter"},{token:"metatag",next:"@tag"}]],[/<\!\[CDATA\[/,{token:"delimiter.cdata",next:"@cdata"}],[/&\w+;/,"string.escape"]],cdata:[[/[^\]]+/,""],[/\]\]>/,{token:"delimiter.cdata",next:"@pop"}],[/\]/,""]],tag:[[/[ \t\r\n]+/,""],[/(@qualifiedName)(\s*=\s*)("[^"]*"|'[^']*')/,["attribute.name","","attribute.value"]],[/(@qualifiedName)(\s*=\s*)("[^">?\/]*|'[^'>?\/]*)(?=[\?\/]\>)/,["attribute.name","","attribute.value"]],[/(@qualifiedName)(\s*=\s*)("[^">]*|'[^'>]*)/,["attribute.name","","attribute.value"]],[/@qualifiedName/,"attribute.name"],[/\?>/,{token:"delimiter",next:"@pop"}],[/(\/)(>)/,[{token:"tag"},{token:"delimiter",next:"@pop"}]],[/>/,{token:"delimiter",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,""],[/<!--/,{token:"comment",next:"@comment"}]],comment:[[/[^<\-]+/,"comment.content"],[/-->/,{token:"comment",next:"@pop"}],[/<!--/,"comment.content.invalid"],[/[<\-]/,"comment.content"]]}}}}]);

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,8 @@
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[202],{5202:function(e,t,n){n.r(t),n.d(t,{conf:function(){return i},language:function(){return r}});
/*!-----------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.34.1(547870b6881302c5b4ff32173c16d06009e3588f)
* Released under the MIT license
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
*-----------------------------------------------------------------------------*/
var i={wordPattern:/(#?-?\d*\.\d\w*%?)|([@#!.:]?[\w-?]+%?)|[@#!.]/g,comments:{blockComment:["/*","*/"],lineComment:"//"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]},{open:"'",close:"'",notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*\\/\\*\\s*#region\\b\\s*(.*?)\\s*\\*\\/"),end:new RegExp("^\\s*\\/\\*\\s*#endregion\\b.*\\*\\/")}}},r={defaultToken:"",tokenPostfix:".less",identifier:"-?-?([a-zA-Z]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))([\\w\\-]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))*",identifierPlus:"-?-?([a-zA-Z:.]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))([\\w\\-:.]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))*",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.bracket"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],tokenizer:{root:[{include:"@nestedJSBegin"},["[ \\t\\r\\n]+",""],{include:"@comments"},{include:"@keyword"},{include:"@strings"},{include:"@numbers"},["[*_]?[a-zA-Z\\-\\s]+(?=:.*(;|(\\\\$)))","attribute.name","@attribute"],["url(\\-prefix)?\\(",{token:"tag",next:"@urldeclaration"}],["[{}()\\[\\]]","@brackets"],["[,:;]","delimiter"],["#@identifierPlus","tag.id"],["&","tag"],["\\.@identifierPlus(?=\\()","tag.class","@attribute"],["\\.@identifierPlus","tag.class"],["@identifierPlus","tag"],{include:"@operators"},["@(@identifier(?=[:,\\)]))","variable","@attribute"],["@(@identifier)","variable"],["@","key","@atRules"]],nestedJSBegin:[["``","delimiter.backtick"],["`",{token:"delimiter.backtick",next:"@nestedJSEnd",nextEmbedded:"text/javascript"}]],nestedJSEnd:[["`",{token:"delimiter.backtick",next:"@pop",nextEmbedded:"@pop"}]],operators:[["[<>=\\+\\-\\*\\/\\^\\|\\~]","operator"]],keyword:[["(@[\\s]*import|![\\s]*important|true|false|when|iscolor|isnumber|isstring|iskeyword|isurl|ispixel|ispercentage|isem|hue|saturation|lightness|alpha|lighten|darken|saturate|desaturate|fadein|fadeout|fade|spin|mix|round|ceil|floor|percentage)\\b","keyword"]],urldeclaration:[{include:"@strings"},["[^)\r\n]+","string"],["\\)",{token:"tag",next:"@pop"}]],attribute:[{include:"@nestedJSBegin"},{include:"@comments"},{include:"@strings"},{include:"@numbers"},{include:"@keyword"},["[a-zA-Z\\-]+(?=\\()","attribute.value","@attribute"],[">","operator","@pop"],["@identifier","attribute.value"],{include:"@operators"},["@(@identifier)","variable"],["[)\\}]","@brackets","@pop"],["[{}()\\[\\]>]","@brackets"],["[;]","delimiter","@pop"],["[,=:]","delimiter"],["\\s",""],[".","attribute.value"]],comments:[["\\/\\*","comment","@comment"],["\\/\\/+.*","comment"]],comment:[["\\*\\/","comment","@pop"],[".","comment"]],numbers:[["(\\d*\\.)?\\d+([eE][\\-+]?\\d+)?",{token:"attribute.value.number",next:"@units"}],["#[0-9a-fA-F_]+(?!\\w)","attribute.value.hex"]],units:[["(em|ex|ch|rem|fr|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?","attribute.value.unit","@pop"]],strings:[['~?"',{token:"string.delimiter",next:"@stringsEndDoubleQuote"}],["~?'",{token:"string.delimiter",next:"@stringsEndQuote"}]],stringsEndDoubleQuote:[['\\\\"',"string"],['"',{token:"string.delimiter",next:"@popall"}],[".","string"]],stringsEndQuote:[["\\\\'","string"],["'",{token:"string.delimiter",next:"@popall"}],[".","string"]],atRules:[{include:"@comments"},{include:"@strings"},["[()]","delimiter"],["[\\{;]","delimiter","@pop"],[".","key"]]}}}}]);

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,7 @@
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[294],{3294:function(e,t,n){n.r(t),n.d(t,{conf:function(){return d},language:function(){return m}});var o,r,i=n(9201),s=Object.defineProperty,c=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,p=Object.prototype.hasOwnProperty,g=(e,t,n,o)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let r of a(t))p.call(e,r)||r===n||s(e,r,{get:()=>t[r],enumerable:!(o=c(t,r))||o.enumerable});return e},l={};
/*!-----------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.34.1(547870b6881302c5b4ff32173c16d06009e3588f)
* Released under the MIT license
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
*-----------------------------------------------------------------------------*/g(l,o=i,"default"),r&&g(r,o,"default");var d={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],onEnterRules:[{beforeText:/^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,afterText:/^\s*\*\/$/,action:{indentAction:l.languages.IndentAction.IndentOutdent,appendText:" * "}},{beforeText:/^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,action:{indentAction:l.languages.IndentAction.None,appendText:" * "}},{beforeText:/^(\t|(\ \ ))*\ \*(\ ([^\*]|\*(?!\/))*)?$/,action:{indentAction:l.languages.IndentAction.None,appendText:"* "}},{beforeText:/^(\t|(\ \ ))*\ \*\/\s*$/,action:{indentAction:l.languages.IndentAction.None,removeText:1}}],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string","comment"]},{open:"`",close:"`",notIn:["string","comment"]},{open:"/**",close:" */",notIn:["string"]}],folding:{markers:{start:new RegExp("^\\s*//\\s*#?region\\b"),end:new RegExp("^\\s*//\\s*#?endregion\\b")}}},m={defaultToken:"invalid",tokenPostfix:".ts",keywords:["abstract","any","as","asserts","bigint","boolean","break","case","catch","class","continue","const","constructor","debugger","declare","default","delete","do","else","enum","export","extends","false","finally","for","from","function","get","if","implements","import","in","infer","instanceof","interface","is","keyof","let","module","namespace","never","new","null","number","object","out","package","private","protected","public","override","readonly","require","global","return","set","static","string","super","switch","symbol","this","throw","true","try","type","typeof","undefined","unique","unknown","var","void","while","with","yield","async","await","of"],operators:["<=",">=","==","!=","===","!==","=>","+","-","**","*","/","%","++","--","<<","</",">>",">>>","&","|","^","!","~","&&","||","??","?",":","=","+=","-=","*=","**=","/=","%=","<<=",">>=",">>>=","&=","|=","^=","@"],symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,digits:/\d+(_+\d+)*/,octaldigits:/[0-7]+(_+[0-7]+)*/,binarydigits:/[0-1]+(_+[0-1]+)*/,hexdigits:/[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,regexpctl:/[(){}\[\]\$\^|\-*+?\.]/,regexpesc:/\\(?:[bBdDfnrstvwWn0\\\/]|@regexpctl|c[A-Z]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})/,tokenizer:{root:[[/[{}]/,"delimiter.bracket"],{include:"common"}],common:[[/[a-z_$][\w$]*/,{cases:{"@keywords":"keyword","@default":"identifier"}}],[/[A-Z][\w\$]*/,"type.identifier"],{include:"@whitespace"},[/\/(?=([^\\\/]|\\.)+\/([dgimsuy]*)(\s*)(\.|;|,|\)|\]|\}|$))/,{token:"regexp",bracket:"@open",next:"@regexp"}],[/[()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/!(?=([^=]|$))/,"delimiter"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/(@digits)[eE]([\-+]?(@digits))?/,"number.float"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?/,"number.float"],[/0[xX](@hexdigits)n?/,"number.hex"],[/0[oO]?(@octaldigits)n?/,"number.octal"],[/0[bB](@binarydigits)n?/,"number.binary"],[/(@digits)n?/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string_double"],[/'/,"string","@string_single"],[/`/,"string","@string_backtick"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@jsdoc"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],jsdoc:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],regexp:[[/(\{)(\d+(?:,\d*)?)(\})/,["regexp.escape.control","regexp.escape.control","regexp.escape.control"]],[/(\[)(\^?)(?=(?:[^\]\\\/]|\\.)+)/,["regexp.escape.control",{token:"regexp.escape.control",next:"@regexrange"}]],[/(\()(\?:|\?=|\?!)/,["regexp.escape.control","regexp.escape.control"]],[/[()]/,"regexp.escape.control"],[/@regexpctl/,"regexp.escape.control"],[/[^\\\/]/,"regexp"],[/@regexpesc/,"regexp.escape"],[/\\\./,"regexp.invalid"],[/(\/)([dgimsuy]*)/,[{token:"regexp",bracket:"@close",next:"@pop"},"keyword.other"]]],regexrange:[[/-/,"regexp.escape.control"],[/\^/,"regexp.invalid"],[/@regexpesc/,"regexp.escape"],[/[^\]]/,"regexp"],[/\]/,{token:"regexp.escape.control",next:"@pop",bracket:"@close"}]],string_double:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],string_single:[[/[^\\']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/'/,"string","@pop"]],string_backtick:[[/\$\{/,{token:"delimiter.bracket",next:"@bracketCounting"}],[/[^\\`$]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/`/,"string","@pop"]],bracketCounting:[[/\{/,"delimiter.bracket","@bracketCounting"],[/\}/,"delimiter.bracket","@pop"],{include:"common"}]}}}}]);

View File

@@ -0,0 +1,8 @@
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[326],{1326:function(e,t,n){n.r(t),n.d(t,{conf:function(){return r},language:function(){return i}});
/*!-----------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.34.1(547870b6881302c5b4ff32173c16d06009e3588f)
* Released under the MIT license
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
*-----------------------------------------------------------------------------*/
var r={wordPattern:/(#?-?\d*\.\d\w*%?)|((::|[@#.!:])?[\w-?]+%?)|::|[@#.!:]/g,comments:{blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]},{open:"'",close:"'",notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*\\/\\*\\s*#region\\b\\s*(.*?)\\s*\\*\\/"),end:new RegExp("^\\s*\\/\\*\\s*#endregion\\b.*\\*\\/")}}},i={defaultToken:"",tokenPostfix:".css",ws:"[ \t\n\r\f]*",identifier:"-?-?([a-zA-Z]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))([\\w\\-]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))*",brackets:[{open:"{",close:"}",token:"delimiter.bracket"},{open:"[",close:"]",token:"delimiter.bracket"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],tokenizer:{root:[{include:"@selector"}],selector:[{include:"@comments"},{include:"@import"},{include:"@strings"},["[@](keyframes|-webkit-keyframes|-moz-keyframes|-o-keyframes)",{token:"keyword",next:"@keyframedeclaration"}],["[@](page|content|font-face|-moz-document)",{token:"keyword"}],["[@](charset|namespace)",{token:"keyword",next:"@declarationbody"}],["(url-prefix)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],["(url)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],{include:"@selectorname"},["[\\*]","tag"],["[>\\+,]","delimiter"],["\\[",{token:"delimiter.bracket",next:"@selectorattribute"}],["{",{token:"delimiter.bracket",next:"@selectorbody"}]],selectorbody:[{include:"@comments"},["[*_]?@identifier@ws:(?=(\\s|\\d|[^{;}]*[;}]))","attribute.name","@rulevalue"],["}",{token:"delimiter.bracket",next:"@pop"}]],selectorname:[["(\\.|#(?=[^{])|%|(@identifier)|:)+","tag"]],selectorattribute:[{include:"@term"},["]",{token:"delimiter.bracket",next:"@pop"}]],term:[{include:"@comments"},["(url-prefix)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],["(url)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],{include:"@functioninvocation"},{include:"@numbers"},{include:"@name"},{include:"@strings"},["([<>=\\+\\-\\*\\/\\^\\|\\~,])","delimiter"],[",","delimiter"]],rulevalue:[{include:"@comments"},{include:"@strings"},{include:"@term"},["!important","keyword"],[";","delimiter","@pop"],["(?=})",{token:"",next:"@pop"}]],warndebug:[["[@](warn|debug)",{token:"keyword",next:"@declarationbody"}]],import:[["[@](import)",{token:"keyword",next:"@declarationbody"}]],urldeclaration:[{include:"@strings"},["[^)\r\n]+","string"],["\\)",{token:"delimiter.parenthesis",next:"@pop"}]],parenthizedterm:[{include:"@term"},["\\)",{token:"delimiter.parenthesis",next:"@pop"}]],declarationbody:[{include:"@term"},[";","delimiter","@pop"],["(?=})",{token:"",next:"@pop"}]],comments:[["\\/\\*","comment","@comment"],["\\/\\/+.*","comment"]],comment:[["\\*\\/","comment","@pop"],[/[^*/]+/,"comment"],[/./,"comment"]],name:[["@identifier","attribute.value"]],numbers:[["-?(\\d*\\.)?\\d+([eE][\\-+]?\\d+)?",{token:"attribute.value.number",next:"@units"}],["#[0-9a-fA-F_]+(?!\\w)","attribute.value.hex"]],units:[["(em|ex|ch|rem|fr|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?","attribute.value.unit","@pop"]],keyframedeclaration:[["@identifier","attribute.value"],["{",{token:"delimiter.bracket",switchTo:"@keyframebody"}]],keyframebody:[{include:"@term"},["{",{token:"delimiter.bracket",next:"@selectorbody"}],["}",{token:"delimiter.bracket",next:"@pop"}]],functioninvocation:[["@identifier\\(",{token:"attribute.value",next:"@functionarguments"}]],functionarguments:[["\\$@identifier@ws:","attribute.name"],["[,]","delimiter"],{include:"@term"},["\\)",{token:"attribute.value",next:"@pop"}]],strings:[['~?"',{token:"string",next:"@stringenddoublequote"}],["~?'",{token:"string",next:"@stringendquote"}]],stringenddoublequote:[["\\\\.","string"],['"',{token:"string",next:"@pop"}],[/[^\\"]+/,"string"],[".","string"]],stringendquote:[["\\\\.","string"],["'",{token:"string",next:"@pop"}],[/[^\\']+/,"string"],[".","string"]]}}}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,13 @@
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[54,294],{9054:function(e,t,n){n.r(t),n.d(t,{conf:function(){return r},language:function(){return i}});var o=n(3294),r=o.conf,i={defaultToken:"invalid",tokenPostfix:".js",keywords:["break","case","catch","class","continue","const","constructor","debugger","default","delete","do","else","export","extends","false","finally","for","from","function","get","if","import","in","instanceof","let","new","null","return","set","super","switch","symbol","this","throw","true","try","typeof","undefined","var","void","while","with","yield","async","await","of"],typeKeywords:[],operators:o.language.operators,symbols:o.language.symbols,escapes:o.language.escapes,digits:o.language.digits,octaldigits:o.language.octaldigits,binarydigits:o.language.binarydigits,hexdigits:o.language.hexdigits,regexpctl:o.language.regexpctl,regexpesc:o.language.regexpesc,tokenizer:o.language.tokenizer};
/*!-----------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.34.1(547870b6881302c5b4ff32173c16d06009e3588f)
* Released under the MIT license
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
*-----------------------------------------------------------------------------*/},3294:function(e,t,n){n.r(t),n.d(t,{conf:function(){return d},language:function(){return u}});var o,r,i=n(9201),s=Object.defineProperty,a=Object.getOwnPropertyDescriptor,c=Object.getOwnPropertyNames,g=Object.prototype.hasOwnProperty,l=(e,t,n,o)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let r of c(t))g.call(e,r)||r===n||s(e,r,{get:()=>t[r],enumerable:!(o=a(t,r))||o.enumerable});return e},p={};
/*!-----------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.34.1(547870b6881302c5b4ff32173c16d06009e3588f)
* Released under the MIT license
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
*-----------------------------------------------------------------------------*/l(p,o=i,"default"),r&&l(r,o,"default");var d={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],onEnterRules:[{beforeText:/^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,afterText:/^\s*\*\/$/,action:{indentAction:p.languages.IndentAction.IndentOutdent,appendText:" * "}},{beforeText:/^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,action:{indentAction:p.languages.IndentAction.None,appendText:" * "}},{beforeText:/^(\t|(\ \ ))*\ \*(\ ([^\*]|\*(?!\/))*)?$/,action:{indentAction:p.languages.IndentAction.None,appendText:"* "}},{beforeText:/^(\t|(\ \ ))*\ \*\/\s*$/,action:{indentAction:p.languages.IndentAction.None,removeText:1}}],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string","comment"]},{open:"`",close:"`",notIn:["string","comment"]},{open:"/**",close:" */",notIn:["string"]}],folding:{markers:{start:new RegExp("^\\s*//\\s*#?region\\b"),end:new RegExp("^\\s*//\\s*#?endregion\\b")}}},u={defaultToken:"invalid",tokenPostfix:".ts",keywords:["abstract","any","as","asserts","bigint","boolean","break","case","catch","class","continue","const","constructor","debugger","declare","default","delete","do","else","enum","export","extends","false","finally","for","from","function","get","if","implements","import","in","infer","instanceof","interface","is","keyof","let","module","namespace","never","new","null","number","object","out","package","private","protected","public","override","readonly","require","global","return","set","static","string","super","switch","symbol","this","throw","true","try","type","typeof","undefined","unique","unknown","var","void","while","with","yield","async","await","of"],operators:["<=",">=","==","!=","===","!==","=>","+","-","**","*","/","%","++","--","<<","</",">>",">>>","&","|","^","!","~","&&","||","??","?",":","=","+=","-=","*=","**=","/=","%=","<<=",">>=",">>>=","&=","|=","^=","@"],symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,digits:/\d+(_+\d+)*/,octaldigits:/[0-7]+(_+[0-7]+)*/,binarydigits:/[0-1]+(_+[0-1]+)*/,hexdigits:/[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,regexpctl:/[(){}\[\]\$\^|\-*+?\.]/,regexpesc:/\\(?:[bBdDfnrstvwWn0\\\/]|@regexpctl|c[A-Z]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})/,tokenizer:{root:[[/[{}]/,"delimiter.bracket"],{include:"common"}],common:[[/[a-z_$][\w$]*/,{cases:{"@keywords":"keyword","@default":"identifier"}}],[/[A-Z][\w\$]*/,"type.identifier"],{include:"@whitespace"},[/\/(?=([^\\\/]|\\.)+\/([dgimsuy]*)(\s*)(\.|;|,|\)|\]|\}|$))/,{token:"regexp",bracket:"@open",next:"@regexp"}],[/[()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/!(?=([^=]|$))/,"delimiter"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/(@digits)[eE]([\-+]?(@digits))?/,"number.float"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?/,"number.float"],[/0[xX](@hexdigits)n?/,"number.hex"],[/0[oO]?(@octaldigits)n?/,"number.octal"],[/0[bB](@binarydigits)n?/,"number.binary"],[/(@digits)n?/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string_double"],[/'/,"string","@string_single"],[/`/,"string","@string_backtick"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@jsdoc"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],jsdoc:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],regexp:[[/(\{)(\d+(?:,\d*)?)(\})/,["regexp.escape.control","regexp.escape.control","regexp.escape.control"]],[/(\[)(\^?)(?=(?:[^\]\\\/]|\\.)+)/,["regexp.escape.control",{token:"regexp.escape.control",next:"@regexrange"}]],[/(\()(\?:|\?=|\?!)/,["regexp.escape.control","regexp.escape.control"]],[/[()]/,"regexp.escape.control"],[/@regexpctl/,"regexp.escape.control"],[/[^\\\/]/,"regexp"],[/@regexpesc/,"regexp.escape"],[/\\\./,"regexp.invalid"],[/(\/)([dgimsuy]*)/,[{token:"regexp",bracket:"@close",next:"@pop"},"keyword.other"]]],regexrange:[[/-/,"regexp.escape.control"],[/\^/,"regexp.invalid"],[/@regexpesc/,"regexp.escape"],[/[^\]]/,"regexp"],[/\]/,{token:"regexp.escape.control",next:"@pop",bracket:"@close"}]],string_double:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],string_single:[[/[^\\']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/'/,"string","@pop"]],string_backtick:[[/\$\{/,{token:"delimiter.bracket",next:"@bracketCounting"}],[/[^\\`$]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/`/,"string","@pop"]],bracketCounting:[[/\{/,"delimiter.bracket","@bracketCounting"],[/\}/,"delimiter.bracket","@pop"],{include:"common"}]}}}}]);

View File

@@ -0,0 +1,8 @@
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[70],{3070:function(e,t,n){n.r(t),n.d(t,{conf:function(){return s},language:function(){return o}});
/*!-----------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.34.1(547870b6881302c5b4ff32173c16d06009e3588f)
* Released under the MIT license
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
*-----------------------------------------------------------------------------*/
var s={comments:{blockComment:["\x3c!--","--\x3e"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">",notIn:["string"]}],surroundingPairs:[{open:"(",close:")"},{open:"[",close:"]"},{open:"`",close:"`"}],folding:{markers:{start:new RegExp("^\\s*\x3c!--\\s*#?region\\b.*--\x3e"),end:new RegExp("^\\s*\x3c!--\\s*#?endregion\\b.*--\x3e")}}},o={defaultToken:"",tokenPostfix:".md",control:/[\\`*_\[\]{}()#+\-\.!]/,noncontrol:/[^\\`*_\[\]{}()#+\-\.!]/,escapes:/\\(?:@control)/,jsescapes:/\\(?:[btnfr\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,empty:["area","base","basefont","br","col","frame","hr","img","input","isindex","link","meta","param"],tokenizer:{root:[[/^\s*\|/,"@rematch","@table_header"],[/^(\s{0,3})(#+)((?:[^\\#]|@escapes)+)((?:#+)?)/,["white","keyword","keyword","keyword"]],[/^\s*(=+|\-+)\s*$/,"keyword"],[/^\s*((\*[ ]?)+)\s*$/,"meta.separator"],[/^\s*>+/,"comment"],[/^\s*([\*\-+:]|\d+\.)\s/,"keyword"],[/^(\t|[ ]{4})[^ ].*$/,"string"],[/^\s*~~~\s*((?:\w|[\/\-#])+)?\s*$/,{token:"string",next:"@codeblock"}],[/^\s*```\s*((?:\w|[\/\-#])+).*$/,{token:"string",next:"@codeblockgh",nextEmbedded:"$1"}],[/^\s*```\s*$/,{token:"string",next:"@codeblock"}],{include:"@linecontent"}],table_header:[{include:"@table_common"},[/[^\|]+/,"keyword.table.header"]],table_body:[{include:"@table_common"},{include:"@linecontent"}],table_common:[[/\s*[\-:]+\s*/,{token:"keyword",switchTo:"table_body"}],[/^\s*\|/,"keyword.table.left"],[/^\s*[^\|]/,"@rematch","@pop"],[/^\s*$/,"@rematch","@pop"],[/\|/,{cases:{"@eos":"keyword.table.right","@default":"keyword.table.middle"}}]],codeblock:[[/^\s*~~~\s*$/,{token:"string",next:"@pop"}],[/^\s*```\s*$/,{token:"string",next:"@pop"}],[/.*$/,"variable.source"]],codeblockgh:[[/```\s*$/,{token:"string",next:"@pop",nextEmbedded:"@pop"}],[/[^`]+/,"variable.source"]],linecontent:[[/&\w+;/,"string.escape"],[/@escapes/,"escape"],[/\b__([^\\_]|@escapes|_(?!_))+__\b/,"strong"],[/\*\*([^\\*]|@escapes|\*(?!\*))+\*\*/,"strong"],[/\b_[^_]+_\b/,"emphasis"],[/\*([^\\*]|@escapes)+\*/,"emphasis"],[/`([^\\`]|@escapes)+`/,"variable"],[/\{+[^}]+\}+/,"string.target"],[/(!?\[)((?:[^\]\\]|@escapes)*)(\]\([^\)]+\))/,["string.link","","string.link"]],[/(!?\[)((?:[^\]\\]|@escapes)*)(\])/,"string.link"],{include:"html"}],html:[[/<(\w+)\/>/,"tag"],[/<(\w+)(\-|\w)*/,{cases:{"@empty":{token:"tag",next:"@tag.$1"},"@default":{token:"tag",next:"@tag.$1"}}}],[/<\/(\w+)(\-|\w)*\s*>/,{token:"tag"}],[/<!--/,"comment","@comment"]],comment:[[/[^<\-]+/,"comment.content"],[/-->/,"comment","@pop"],[/<!--/,"comment.content.invalid"],[/[<\-]/,"comment.content"]],tag:[[/[ \t\r\n]+/,"white"],[/(type)(\s*=\s*)(")([^"]+)(")/,["attribute.name.html","delimiter.html","string.html",{token:"string.html",switchTo:"@tag.$S2.$4"},"string.html"]],[/(type)(\s*=\s*)(')([^']+)(')/,["attribute.name.html","delimiter.html","string.html",{token:"string.html",switchTo:"@tag.$S2.$4"},"string.html"]],[/(\w+)(\s*=\s*)("[^"]*"|'[^']*')/,["attribute.name.html","delimiter.html","string.html"]],[/\w+/,"attribute.name.html"],[/\/>/,"tag","@pop"],[/>/,{cases:{"$S2==style":{token:"tag",switchTo:"embeddedStyle",nextEmbedded:"text/css"},"$S2==script":{cases:{$S3:{token:"tag",switchTo:"embeddedScript",nextEmbedded:"$S3"},"@default":{token:"tag",switchTo:"embeddedScript",nextEmbedded:"text/javascript"}}},"@default":{token:"tag",next:"@pop"}}}]],embeddedStyle:[[/[^<]+/,""],[/<\/style\s*>/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/</,""]],embeddedScript:[[/[^<]+/,""],[/<\/script\s*>/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/</,""]]}}}}]);

View File

@@ -0,0 +1,8 @@
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[726],{9726:function(e,n,s){s.r(n),s.d(n,{conf:function(){return t},language:function(){return o}});
/*!-----------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.34.1(547870b6881302c5b4ff32173c16d06009e3588f)
* Released under the MIT license
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
*-----------------------------------------------------------------------------*/
var t={comments:{lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},o={defaultToken:"",tokenPostfix:".ini",escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/^\[[^\]]*\]/,"metatag"],[/(^\w+)(\s*)(\=)/,["key","","delimiter"]],{include:"@whitespace"},[/\d+/,"number"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string",'@string."'],[/'/,"string","@string.'"]],whitespace:[[/[ \t\r\n]+/,""],[/^\s*[#;].*$/,"comment"]],string:[[/[^\\"']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/["']/,{cases:{"$#==$S2":{token:"string",next:"@pop"},"@default":"string"}}]]}}}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,7 @@
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[910],{4910:function(e,n,t){t.r(n),t.d(n,{conf:function(){return m},language:function(){return b}});var r,o,l=t(9201),a=Object.defineProperty,i=Object.getOwnPropertyDescriptor,c=Object.getOwnPropertyNames,u=Object.prototype.hasOwnProperty,s=(e,n,t,r)=>{if(n&&"object"==typeof n||"function"==typeof n)for(let o of c(n))u.call(e,o)||o===t||a(e,o,{get:()=>n[o],enumerable:!(r=i(n,o))||r.enumerable});return e},d={};
/*!-----------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Version: 0.34.1(547870b6881302c5b4ff32173c16d06009e3588f)
* Released under the MIT license
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
*-----------------------------------------------------------------------------*/s(d,r=l,"default"),o&&s(o,r,"default");var m={comments:{lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{offSide:!0},onEnterRules:[{beforeText:/:\s*$/,action:{indentAction:d.languages.IndentAction.Indent}}]},b={tokenPostfix:".yaml",brackets:[{token:"delimiter.bracket",open:"{",close:"}"},{token:"delimiter.square",open:"[",close:"]"}],keywords:["true","True","TRUE","false","False","FALSE","null","Null","Null","~"],numberInteger:/(?:0|[+-]?[0-9]+)/,numberFloat:/(?:0|[+-]?[0-9]+)(?:\.[0-9]+)?(?:e[-+][1-9][0-9]*)?/,numberOctal:/0o[0-7]+/,numberHex:/0x[0-9a-fA-F]+/,numberInfinity:/[+-]?\.(?:inf|Inf|INF)/,numberNaN:/\.(?:nan|Nan|NAN)/,numberDate:/\d{4}-\d\d-\d\d([Tt ]\d\d:\d\d:\d\d(\.\d+)?(( ?[+-]\d\d?(:\d\d)?)|Z)?)?/,escapes:/\\(?:[btnfr\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,tokenizer:{root:[{include:"@whitespace"},{include:"@comment"},[/%[^ ]+.*$/,"meta.directive"],[/---/,"operators.directivesEnd"],[/\.{3}/,"operators.documentEnd"],[/[-?:](?= )/,"operators"],{include:"@anchor"},{include:"@tagHandle"},{include:"@flowCollections"},{include:"@blockStyle"},[/@numberInteger(?![ \t]*\S+)/,"number"],[/@numberFloat(?![ \t]*\S+)/,"number.float"],[/@numberOctal(?![ \t]*\S+)/,"number.octal"],[/@numberHex(?![ \t]*\S+)/,"number.hex"],[/@numberInfinity(?![ \t]*\S+)/,"number.infinity"],[/@numberNaN(?![ \t]*\S+)/,"number.nan"],[/@numberDate(?![ \t]*\S+)/,"number.date"],[/(".*?"|'.*?'|.*?)([ \t]*)(:)( |$)/,["type","white","operators","white"]],{include:"@flowScalars"},[/[^#]+/,{cases:{"@keywords":"keyword","@default":"string"}}]],object:[{include:"@whitespace"},{include:"@comment"},[/\}/,"@brackets","@pop"],[/,/,"delimiter.comma"],[/:(?= )/,"operators"],[/(?:".*?"|'.*?'|[^,\{\[]+?)(?=: )/,"type"],{include:"@flowCollections"},{include:"@flowScalars"},{include:"@tagHandle"},{include:"@anchor"},{include:"@flowNumber"},[/[^\},]+/,{cases:{"@keywords":"keyword","@default":"string"}}]],array:[{include:"@whitespace"},{include:"@comment"},[/\]/,"@brackets","@pop"],[/,/,"delimiter.comma"],{include:"@flowCollections"},{include:"@flowScalars"},{include:"@tagHandle"},{include:"@anchor"},{include:"@flowNumber"},[/[^\],]+/,{cases:{"@keywords":"keyword","@default":"string"}}]],multiString:[[/^( +).+$/,"string","@multiStringContinued.$1"]],multiStringContinued:[[/^( *).+$/,{cases:{"$1==$S2":"string","@default":{token:"@rematch",next:"@popall"}}}]],whitespace:[[/[ \t\r\n]+/,"white"]],comment:[[/#.*$/,"comment"]],flowCollections:[[/\[/,"@brackets","@array"],[/\{/,"@brackets","@object"]],flowScalars:[[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/'[^']*'/,"string"],[/"/,"string","@doubleQuotedString"]],doubleQuotedString:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],blockStyle:[[/[>|][0-9]*[+-]?$/,"operators","@multiString"]],flowNumber:[[/@numberInteger(?=[ \t]*[,\]\}])/,"number"],[/@numberFloat(?=[ \t]*[,\]\}])/,"number.float"],[/@numberOctal(?=[ \t]*[,\]\}])/,"number.octal"],[/@numberHex(?=[ \t]*[,\]\}])/,"number.hex"],[/@numberInfinity(?=[ \t]*[,\]\}])/,"number.infinity"],[/@numberNaN(?=[ \t]*[,\]\}])/,"number.nan"],[/@numberDate(?=[ \t]*[,\]\}])/,"number.date"]],tagHandle:[[/\![^ ]*/,"tag"]],anchor:[[/[&*][^ ]+/,"namespace"]]}}}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,665 @@
@import "../../../../assets/less/core/boot.less";
.field-codeeditor {
display: flex;
flex-direction: column;
width: 100%;
position: relative;
border: 2px solid @color-form-field-border;
.border-radius(@border-radius-base);
&.editor-focus { border: 2px solid @color-form-field-border-focus; }
.editor-code {
.border-radius(@border-radius-base);
}
&.size-tiny { height: @size-tiny; }
&.size-small { height: @size-small; }
&.size-large { height: @size-large; }
&.size-huge { height: @size-huge; }
&.size-giant { height: @size-giant; }
.editor-container {
flex-grow: 1;
flex-shrink: 1;
height: 100%;
width: 100%;
}
.editor-toolbar {
display: flex;
flex-direction: row;
align-items: center;
gap: 20px;
height: 24px;
font-size: 11px;
position: relative;
flex-grow: 0;
flex-shrink: 0;
padding: 2px 8px;
z-index: @zindex-form;
background: rgba(0,0,0,.8);
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 9;
background: rgba(0, 0, 0, 0.08);
}
&.is-dark::before {
background: rgba(255, 255, 255, 0.08);
}
> div {
z-index: 11;
}
.position {
flex-grow: 1;
}
.actions {
.action {
margin: -2px 0;
padding: 0 5px;
font-size: 1.1rem;
color: inherit;
opacity: 0.4;
&:hover {
opacity: 0.8;
}
&.active {
opacity: 1;
}
}
}
}
}
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
@font-face {
font-family: "codicon";
font-display: block;
src: url("../fonts/codicon.ttf?9d44d5a6cc2c9ad0152755e704fa37ba") format("truetype");
}
.codicon[class*='codicon-'] {
font: normal normal normal 16px/1 codicon;
display: inline-block;
text-decoration: none;
text-rendering: auto;
text-align: center;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
}
/*---------------------
* Modifiers
*-------------------*/
@keyframes codicon-spin {
100% {
transform:rotate(360deg);
}
}
.codicon-sync.codicon-modifier-spin,
.codicon-loading.codicon-modifier-spin,
.codicon-gear.codicon-modifier-spin {
/* Use steps to throttle FPS to reduce CPU usage */
animation: codicon-spin 1.5s steps(30) infinite;
}
.codicon-modifier-disabled {
opacity: 0.5;
}
.codicon-modifier-hidden {
opacity: 0;
}
/* custom speed & easing for loading icon */
.codicon-loading {
animation-duration: 1s !important;
animation-timing-function: cubic-bezier(0.53, 0.21, 0.29, 0.67) !important;
}
/*---------------------
* Icons
*-------------------*/
.codicon-add:before { content: "\ea60" }
.codicon-plus:before { content: "\ea60" }
.codicon-gist-new:before { content: "\ea60" }
.codicon-repo-create:before { content: "\ea60" }
.codicon-lightbulb:before { content: "\ea61" }
.codicon-light-bulb:before { content: "\ea61" }
.codicon-repo:before { content: "\ea62" }
.codicon-repo-delete:before { content: "\ea62" }
.codicon-gist-fork:before { content: "\ea63" }
.codicon-repo-forked:before { content: "\ea63" }
.codicon-git-pull-request:before { content: "\ea64" }
.codicon-git-pull-request-abandoned:before { content: "\ea64" }
.codicon-record-keys:before { content: "\ea65" }
.codicon-keyboard:before { content: "\ea65" }
.codicon-tag:before { content: "\ea66" }
.codicon-tag-add:before { content: "\ea66" }
.codicon-tag-remove:before { content: "\ea66" }
.codicon-person:before { content: "\ea67" }
.codicon-person-follow:before { content: "\ea67" }
.codicon-person-outline:before { content: "\ea67" }
.codicon-person-filled:before { content: "\ea67" }
.codicon-git-branch:before { content: "\ea68" }
.codicon-git-branch-create:before { content: "\ea68" }
.codicon-git-branch-delete:before { content: "\ea68" }
.codicon-source-control:before { content: "\ea68" }
.codicon-mirror:before { content: "\ea69" }
.codicon-mirror-public:before { content: "\ea69" }
.codicon-star:before { content: "\ea6a" }
.codicon-star-add:before { content: "\ea6a" }
.codicon-star-delete:before { content: "\ea6a" }
.codicon-star-empty:before { content: "\ea6a" }
.codicon-comment:before { content: "\ea6b" }
.codicon-comment-add:before { content: "\ea6b" }
.codicon-alert:before { content: "\ea6c" }
.codicon-warning:before { content: "\ea6c" }
.codicon-search:before { content: "\ea6d" }
.codicon-search-save:before { content: "\ea6d" }
.codicon-log-out:before { content: "\ea6e" }
.codicon-sign-out:before { content: "\ea6e" }
.codicon-log-in:before { content: "\ea6f" }
.codicon-sign-in:before { content: "\ea6f" }
.codicon-eye:before { content: "\ea70" }
.codicon-eye-unwatch:before { content: "\ea70" }
.codicon-eye-watch:before { content: "\ea70" }
.codicon-circle-filled:before { content: "\ea71" }
.codicon-primitive-dot:before { content: "\ea71" }
.codicon-close-dirty:before { content: "\ea71" }
.codicon-debug-breakpoint:before { content: "\ea71" }
.codicon-debug-breakpoint-disabled:before { content: "\ea71" }
.codicon-debug-hint:before { content: "\ea71" }
.codicon-terminal-decoration-success:before { content: "\ea71" }
.codicon-primitive-square:before { content: "\ea72" }
.codicon-edit:before { content: "\ea73" }
.codicon-pencil:before { content: "\ea73" }
.codicon-info:before { content: "\ea74" }
.codicon-issue-opened:before { content: "\ea74" }
.codicon-gist-private:before { content: "\ea75" }
.codicon-git-fork-private:before { content: "\ea75" }
.codicon-lock:before { content: "\ea75" }
.codicon-mirror-private:before { content: "\ea75" }
.codicon-close:before { content: "\ea76" }
.codicon-remove-close:before { content: "\ea76" }
.codicon-x:before { content: "\ea76" }
.codicon-repo-sync:before { content: "\ea77" }
.codicon-sync:before { content: "\ea77" }
.codicon-clone:before { content: "\ea78" }
.codicon-desktop-download:before { content: "\ea78" }
.codicon-beaker:before { content: "\ea79" }
.codicon-microscope:before { content: "\ea79" }
.codicon-vm:before { content: "\ea7a" }
.codicon-device-desktop:before { content: "\ea7a" }
.codicon-file:before { content: "\ea7b" }
.codicon-file-text:before { content: "\ea7b" }
.codicon-more:before { content: "\ea7c" }
.codicon-ellipsis:before { content: "\ea7c" }
.codicon-kebab-horizontal:before { content: "\ea7c" }
.codicon-mail-reply:before { content: "\ea7d" }
.codicon-reply:before { content: "\ea7d" }
.codicon-organization:before { content: "\ea7e" }
.codicon-organization-filled:before { content: "\ea7e" }
.codicon-organization-outline:before { content: "\ea7e" }
.codicon-new-file:before { content: "\ea7f" }
.codicon-file-add:before { content: "\ea7f" }
.codicon-new-folder:before { content: "\ea80" }
.codicon-file-directory-create:before { content: "\ea80" }
.codicon-trash:before { content: "\ea81" }
.codicon-trashcan:before { content: "\ea81" }
.codicon-history:before { content: "\ea82" }
.codicon-clock:before { content: "\ea82" }
.codicon-folder:before { content: "\ea83" }
.codicon-file-directory:before { content: "\ea83" }
.codicon-symbol-folder:before { content: "\ea83" }
.codicon-logo-github:before { content: "\ea84" }
.codicon-mark-github:before { content: "\ea84" }
.codicon-github:before { content: "\ea84" }
.codicon-terminal:before { content: "\ea85" }
.codicon-console:before { content: "\ea85" }
.codicon-repl:before { content: "\ea85" }
.codicon-zap:before { content: "\ea86" }
.codicon-symbol-event:before { content: "\ea86" }
.codicon-error:before { content: "\ea87" }
.codicon-stop:before { content: "\ea87" }
.codicon-variable:before { content: "\ea88" }
.codicon-symbol-variable:before { content: "\ea88" }
.codicon-array:before { content: "\ea8a" }
.codicon-symbol-array:before { content: "\ea8a" }
.codicon-symbol-module:before { content: "\ea8b" }
.codicon-symbol-package:before { content: "\ea8b" }
.codicon-symbol-namespace:before { content: "\ea8b" }
.codicon-symbol-object:before { content: "\ea8b" }
.codicon-symbol-method:before { content: "\ea8c" }
.codicon-symbol-function:before { content: "\ea8c" }
.codicon-symbol-constructor:before { content: "\ea8c" }
.codicon-symbol-boolean:before { content: "\ea8f" }
.codicon-symbol-null:before { content: "\ea8f" }
.codicon-symbol-numeric:before { content: "\ea90" }
.codicon-symbol-number:before { content: "\ea90" }
.codicon-symbol-structure:before { content: "\ea91" }
.codicon-symbol-struct:before { content: "\ea91" }
.codicon-symbol-parameter:before { content: "\ea92" }
.codicon-symbol-type-parameter:before { content: "\ea92" }
.codicon-symbol-key:before { content: "\ea93" }
.codicon-symbol-text:before { content: "\ea93" }
.codicon-symbol-reference:before { content: "\ea94" }
.codicon-go-to-file:before { content: "\ea94" }
.codicon-symbol-enum:before { content: "\ea95" }
.codicon-symbol-value:before { content: "\ea95" }
.codicon-symbol-ruler:before { content: "\ea96" }
.codicon-symbol-unit:before { content: "\ea96" }
.codicon-activate-breakpoints:before { content: "\ea97" }
.codicon-archive:before { content: "\ea98" }
.codicon-arrow-both:before { content: "\ea99" }
.codicon-arrow-down:before { content: "\ea9a" }
.codicon-arrow-left:before { content: "\ea9b" }
.codicon-arrow-right:before { content: "\ea9c" }
.codicon-arrow-small-down:before { content: "\ea9d" }
.codicon-arrow-small-left:before { content: "\ea9e" }
.codicon-arrow-small-right:before { content: "\ea9f" }
.codicon-arrow-small-up:before { content: "\eaa0" }
.codicon-arrow-up:before { content: "\eaa1" }
.codicon-bell:before { content: "\eaa2" }
.codicon-bold:before { content: "\eaa3" }
.codicon-book:before { content: "\eaa4" }
.codicon-bookmark:before { content: "\eaa5" }
.codicon-debug-breakpoint-conditional-unverified:before { content: "\eaa6" }
.codicon-debug-breakpoint-conditional:before { content: "\eaa7" }
.codicon-debug-breakpoint-conditional-disabled:before { content: "\eaa7" }
.codicon-debug-breakpoint-data-unverified:before { content: "\eaa8" }
.codicon-debug-breakpoint-data:before { content: "\eaa9" }
.codicon-debug-breakpoint-data-disabled:before { content: "\eaa9" }
.codicon-debug-breakpoint-log-unverified:before { content: "\eaaa" }
.codicon-debug-breakpoint-log:before { content: "\eaab" }
.codicon-debug-breakpoint-log-disabled:before { content: "\eaab" }
.codicon-briefcase:before { content: "\eaac" }
.codicon-broadcast:before { content: "\eaad" }
.codicon-browser:before { content: "\eaae" }
.codicon-bug:before { content: "\eaaf" }
.codicon-calendar:before { content: "\eab0" }
.codicon-case-sensitive:before { content: "\eab1" }
.codicon-check:before { content: "\eab2" }
.codicon-checklist:before { content: "\eab3" }
.codicon-chevron-down:before { content: "\eab4" }
.codicon-chevron-left:before { content: "\eab5" }
.codicon-chevron-right:before { content: "\eab6" }
.codicon-chevron-up:before { content: "\eab7" }
.codicon-chrome-close:before { content: "\eab8" }
.codicon-chrome-maximize:before { content: "\eab9" }
.codicon-chrome-minimize:before { content: "\eaba" }
.codicon-chrome-restore:before { content: "\eabb" }
.codicon-circle-outline:before { content: "\eabc" }
.codicon-circle:before { content: "\eabc" }
.codicon-debug-breakpoint-unverified:before { content: "\eabc" }
.codicon-terminal-decoration-incomplete:before { content: "\eabc" }
.codicon-circle-slash:before { content: "\eabd" }
.codicon-circuit-board:before { content: "\eabe" }
.codicon-clear-all:before { content: "\eabf" }
.codicon-clippy:before { content: "\eac0" }
.codicon-close-all:before { content: "\eac1" }
.codicon-cloud-download:before { content: "\eac2" }
.codicon-cloud-upload:before { content: "\eac3" }
.codicon-code:before { content: "\eac4" }
.codicon-collapse-all:before { content: "\eac5" }
.codicon-color-mode:before { content: "\eac6" }
.codicon-comment-discussion:before { content: "\eac7" }
.codicon-credit-card:before { content: "\eac9" }
.codicon-dash:before { content: "\eacc" }
.codicon-dashboard:before { content: "\eacd" }
.codicon-database:before { content: "\eace" }
.codicon-debug-continue:before { content: "\eacf" }
.codicon-debug-disconnect:before { content: "\ead0" }
.codicon-debug-pause:before { content: "\ead1" }
.codicon-debug-restart:before { content: "\ead2" }
.codicon-debug-start:before { content: "\ead3" }
.codicon-debug-step-into:before { content: "\ead4" }
.codicon-debug-step-out:before { content: "\ead5" }
.codicon-debug-step-over:before { content: "\ead6" }
.codicon-debug-stop:before { content: "\ead7" }
.codicon-debug:before { content: "\ead8" }
.codicon-device-camera-video:before { content: "\ead9" }
.codicon-device-camera:before { content: "\eada" }
.codicon-device-mobile:before { content: "\eadb" }
.codicon-diff-added:before { content: "\eadc" }
.codicon-diff-ignored:before { content: "\eadd" }
.codicon-diff-modified:before { content: "\eade" }
.codicon-diff-removed:before { content: "\eadf" }
.codicon-diff-renamed:before { content: "\eae0" }
.codicon-diff:before { content: "\eae1" }
.codicon-discard:before { content: "\eae2" }
.codicon-editor-layout:before { content: "\eae3" }
.codicon-empty-window:before { content: "\eae4" }
.codicon-exclude:before { content: "\eae5" }
.codicon-extensions:before { content: "\eae6" }
.codicon-eye-closed:before { content: "\eae7" }
.codicon-file-binary:before { content: "\eae8" }
.codicon-file-code:before { content: "\eae9" }
.codicon-file-media:before { content: "\eaea" }
.codicon-file-pdf:before { content: "\eaeb" }
.codicon-file-submodule:before { content: "\eaec" }
.codicon-file-symlink-directory:before { content: "\eaed" }
.codicon-file-symlink-file:before { content: "\eaee" }
.codicon-file-zip:before { content: "\eaef" }
.codicon-files:before { content: "\eaf0" }
.codicon-filter:before { content: "\eaf1" }
.codicon-flame:before { content: "\eaf2" }
.codicon-fold-down:before { content: "\eaf3" }
.codicon-fold-up:before { content: "\eaf4" }
.codicon-fold:before { content: "\eaf5" }
.codicon-folder-active:before { content: "\eaf6" }
.codicon-folder-opened:before { content: "\eaf7" }
.codicon-gear:before { content: "\eaf8" }
.codicon-gift:before { content: "\eaf9" }
.codicon-gist-secret:before { content: "\eafa" }
.codicon-gist:before { content: "\eafb" }
.codicon-git-commit:before { content: "\eafc" }
.codicon-git-compare:before { content: "\eafd" }
.codicon-compare-changes:before { content: "\eafd" }
.codicon-git-merge:before { content: "\eafe" }
.codicon-github-action:before { content: "\eaff" }
.codicon-github-alt:before { content: "\eb00" }
.codicon-globe:before { content: "\eb01" }
.codicon-grabber:before { content: "\eb02" }
.codicon-graph:before { content: "\eb03" }
.codicon-gripper:before { content: "\eb04" }
.codicon-heart:before { content: "\eb05" }
.codicon-home:before { content: "\eb06" }
.codicon-horizontal-rule:before { content: "\eb07" }
.codicon-hubot:before { content: "\eb08" }
.codicon-inbox:before { content: "\eb09" }
.codicon-issue-reopened:before { content: "\eb0b" }
.codicon-issues:before { content: "\eb0c" }
.codicon-italic:before { content: "\eb0d" }
.codicon-jersey:before { content: "\eb0e" }
.codicon-json:before { content: "\eb0f" }
.codicon-kebab-vertical:before { content: "\eb10" }
.codicon-key:before { content: "\eb11" }
.codicon-law:before { content: "\eb12" }
.codicon-lightbulb-autofix:before { content: "\eb13" }
.codicon-link-external:before { content: "\eb14" }
.codicon-link:before { content: "\eb15" }
.codicon-list-ordered:before { content: "\eb16" }
.codicon-list-unordered:before { content: "\eb17" }
.codicon-live-share:before { content: "\eb18" }
.codicon-loading:before { content: "\eb19" }
.codicon-location:before { content: "\eb1a" }
.codicon-mail-read:before { content: "\eb1b" }
.codicon-mail:before { content: "\eb1c" }
.codicon-markdown:before { content: "\eb1d" }
.codicon-megaphone:before { content: "\eb1e" }
.codicon-mention:before { content: "\eb1f" }
.codicon-milestone:before { content: "\eb20" }
.codicon-mortar-board:before { content: "\eb21" }
.codicon-move:before { content: "\eb22" }
.codicon-multiple-windows:before { content: "\eb23" }
.codicon-mute:before { content: "\eb24" }
.codicon-no-newline:before { content: "\eb25" }
.codicon-note:before { content: "\eb26" }
.codicon-octoface:before { content: "\eb27" }
.codicon-open-preview:before { content: "\eb28" }
.codicon-package:before { content: "\eb29" }
.codicon-paintcan:before { content: "\eb2a" }
.codicon-pin:before { content: "\eb2b" }
.codicon-play:before { content: "\eb2c" }
.codicon-run:before { content: "\eb2c" }
.codicon-plug:before { content: "\eb2d" }
.codicon-preserve-case:before { content: "\eb2e" }
.codicon-preview:before { content: "\eb2f" }
.codicon-project:before { content: "\eb30" }
.codicon-pulse:before { content: "\eb31" }
.codicon-question:before { content: "\eb32" }
.codicon-quote:before { content: "\eb33" }
.codicon-radio-tower:before { content: "\eb34" }
.codicon-reactions:before { content: "\eb35" }
.codicon-references:before { content: "\eb36" }
.codicon-refresh:before { content: "\eb37" }
.codicon-regex:before { content: "\eb38" }
.codicon-remote-explorer:before { content: "\eb39" }
.codicon-remote:before { content: "\eb3a" }
.codicon-remove:before { content: "\eb3b" }
.codicon-replace-all:before { content: "\eb3c" }
.codicon-replace:before { content: "\eb3d" }
.codicon-repo-clone:before { content: "\eb3e" }
.codicon-repo-force-push:before { content: "\eb3f" }
.codicon-repo-pull:before { content: "\eb40" }
.codicon-repo-push:before { content: "\eb41" }
.codicon-report:before { content: "\eb42" }
.codicon-request-changes:before { content: "\eb43" }
.codicon-rocket:before { content: "\eb44" }
.codicon-root-folder-opened:before { content: "\eb45" }
.codicon-root-folder:before { content: "\eb46" }
.codicon-rss:before { content: "\eb47" }
.codicon-ruby:before { content: "\eb48" }
.codicon-save-all:before { content: "\eb49" }
.codicon-save-as:before { content: "\eb4a" }
.codicon-save:before { content: "\eb4b" }
.codicon-screen-full:before { content: "\eb4c" }
.codicon-screen-normal:before { content: "\eb4d" }
.codicon-search-stop:before { content: "\eb4e" }
.codicon-server:before { content: "\eb50" }
.codicon-settings-gear:before { content: "\eb51" }
.codicon-settings:before { content: "\eb52" }
.codicon-shield:before { content: "\eb53" }
.codicon-smiley:before { content: "\eb54" }
.codicon-sort-precedence:before { content: "\eb55" }
.codicon-split-horizontal:before { content: "\eb56" }
.codicon-split-vertical:before { content: "\eb57" }
.codicon-squirrel:before { content: "\eb58" }
.codicon-star-full:before { content: "\eb59" }
.codicon-star-half:before { content: "\eb5a" }
.codicon-symbol-class:before { content: "\eb5b" }
.codicon-symbol-color:before { content: "\eb5c" }
.codicon-symbol-constant:before { content: "\eb5d" }
.codicon-symbol-enum-member:before { content: "\eb5e" }
.codicon-symbol-field:before { content: "\eb5f" }
.codicon-symbol-file:before { content: "\eb60" }
.codicon-symbol-interface:before { content: "\eb61" }
.codicon-symbol-keyword:before { content: "\eb62" }
.codicon-symbol-misc:before { content: "\eb63" }
.codicon-symbol-operator:before { content: "\eb64" }
.codicon-symbol-property:before { content: "\eb65" }
.codicon-wrench:before { content: "\eb65" }
.codicon-wrench-subaction:before { content: "\eb65" }
.codicon-symbol-snippet:before { content: "\eb66" }
.codicon-tasklist:before { content: "\eb67" }
.codicon-telescope:before { content: "\eb68" }
.codicon-text-size:before { content: "\eb69" }
.codicon-three-bars:before { content: "\eb6a" }
.codicon-thumbsdown:before { content: "\eb6b" }
.codicon-thumbsup:before { content: "\eb6c" }
.codicon-tools:before { content: "\eb6d" }
.codicon-triangle-down:before { content: "\eb6e" }
.codicon-triangle-left:before { content: "\eb6f" }
.codicon-triangle-right:before { content: "\eb70" }
.codicon-triangle-up:before { content: "\eb71" }
.codicon-twitter:before { content: "\eb72" }
.codicon-unfold:before { content: "\eb73" }
.codicon-unlock:before { content: "\eb74" }
.codicon-unmute:before { content: "\eb75" }
.codicon-unverified:before { content: "\eb76" }
.codicon-verified:before { content: "\eb77" }
.codicon-versions:before { content: "\eb78" }
.codicon-vm-active:before { content: "\eb79" }
.codicon-vm-outline:before { content: "\eb7a" }
.codicon-vm-running:before { content: "\eb7b" }
.codicon-watch:before { content: "\eb7c" }
.codicon-whitespace:before { content: "\eb7d" }
.codicon-whole-word:before { content: "\eb7e" }
.codicon-window:before { content: "\eb7f" }
.codicon-word-wrap:before { content: "\eb80" }
.codicon-zoom-in:before { content: "\eb81" }
.codicon-zoom-out:before { content: "\eb82" }
.codicon-list-filter:before { content: "\eb83" }
.codicon-list-flat:before { content: "\eb84" }
.codicon-list-selection:before { content: "\eb85" }
.codicon-selection:before { content: "\eb85" }
.codicon-list-tree:before { content: "\eb86" }
.codicon-debug-breakpoint-function-unverified:before { content: "\eb87" }
.codicon-debug-breakpoint-function:before { content: "\eb88" }
.codicon-debug-breakpoint-function-disabled:before { content: "\eb88" }
.codicon-debug-stackframe-active:before { content: "\eb89" }
.codicon-circle-small-filled:before { content: "\eb8a" }
.codicon-debug-stackframe-dot:before { content: "\eb8a" }
.codicon-terminal-decoration-mark:before { content: "\eb8a" }
.codicon-debug-stackframe:before { content: "\eb8b" }
.codicon-debug-stackframe-focused:before { content: "\eb8b" }
.codicon-debug-breakpoint-unsupported:before { content: "\eb8c" }
.codicon-symbol-string:before { content: "\eb8d" }
.codicon-debug-reverse-continue:before { content: "\eb8e" }
.codicon-debug-step-back:before { content: "\eb8f" }
.codicon-debug-restart-frame:before { content: "\eb90" }
.codicon-debug-alt:before { content: "\eb91" }
.codicon-call-incoming:before { content: "\eb92" }
.codicon-call-outgoing:before { content: "\eb93" }
.codicon-menu:before { content: "\eb94" }
.codicon-expand-all:before { content: "\eb95" }
.codicon-feedback:before { content: "\eb96" }
.codicon-group-by-ref-type:before { content: "\eb97" }
.codicon-ungroup-by-ref-type:before { content: "\eb98" }
.codicon-account:before { content: "\eb99" }
.codicon-bell-dot:before { content: "\eb9a" }
.codicon-debug-console:before { content: "\eb9b" }
.codicon-library:before { content: "\eb9c" }
.codicon-output:before { content: "\eb9d" }
.codicon-run-all:before { content: "\eb9e" }
.codicon-sync-ignored:before { content: "\eb9f" }
.codicon-pinned:before { content: "\eba0" }
.codicon-github-inverted:before { content: "\eba1" }
.codicon-server-process:before { content: "\eba2" }
.codicon-server-environment:before { content: "\eba3" }
.codicon-pass:before { content: "\eba4" }
.codicon-issue-closed:before { content: "\eba4" }
.codicon-stop-circle:before { content: "\eba5" }
.codicon-play-circle:before { content: "\eba6" }
.codicon-record:before { content: "\eba7" }
.codicon-debug-alt-small:before { content: "\eba8" }
.codicon-vm-connect:before { content: "\eba9" }
.codicon-cloud:before { content: "\ebaa" }
.codicon-merge:before { content: "\ebab" }
.codicon-export:before { content: "\ebac" }
.codicon-graph-left:before { content: "\ebad" }
.codicon-magnet:before { content: "\ebae" }
.codicon-notebook:before { content: "\ebaf" }
.codicon-redo:before { content: "\ebb0" }
.codicon-check-all:before { content: "\ebb1" }
.codicon-pinned-dirty:before { content: "\ebb2" }
.codicon-pass-filled:before { content: "\ebb3" }
.codicon-circle-large-filled:before { content: "\ebb4" }
.codicon-circle-large:before { content: "\ebb5" }
.codicon-circle-large-outline:before { content: "\ebb5" }
.codicon-combine:before { content: "\ebb6" }
.codicon-gather:before { content: "\ebb6" }
.codicon-table:before { content: "\ebb7" }
.codicon-variable-group:before { content: "\ebb8" }
.codicon-type-hierarchy:before { content: "\ebb9" }
.codicon-type-hierarchy-sub:before { content: "\ebba" }
.codicon-type-hierarchy-super:before { content: "\ebbb" }
.codicon-git-pull-request-create:before { content: "\ebbc" }
.codicon-run-above:before { content: "\ebbd" }
.codicon-run-below:before { content: "\ebbe" }
.codicon-notebook-template:before { content: "\ebbf" }
.codicon-debug-rerun:before { content: "\ebc0" }
.codicon-workspace-trusted:before { content: "\ebc1" }
.codicon-workspace-untrusted:before { content: "\ebc2" }
.codicon-workspace-unknown:before { content: "\ebc3" }
.codicon-terminal-cmd:before { content: "\ebc4" }
.codicon-terminal-debian:before { content: "\ebc5" }
.codicon-terminal-linux:before { content: "\ebc6" }
.codicon-terminal-powershell:before { content: "\ebc7" }
.codicon-terminal-tmux:before { content: "\ebc8" }
.codicon-terminal-ubuntu:before { content: "\ebc9" }
.codicon-terminal-bash:before { content: "\ebca" }
.codicon-arrow-swap:before { content: "\ebcb" }
.codicon-copy:before { content: "\ebcc" }
.codicon-person-add:before { content: "\ebcd" }
.codicon-filter-filled:before { content: "\ebce" }
.codicon-wand:before { content: "\ebcf" }
.codicon-debug-line-by-line:before { content: "\ebd0" }
.codicon-inspect:before { content: "\ebd1" }
.codicon-layers:before { content: "\ebd2" }
.codicon-layers-dot:before { content: "\ebd3" }
.codicon-layers-active:before { content: "\ebd4" }
.codicon-compass:before { content: "\ebd5" }
.codicon-compass-dot:before { content: "\ebd6" }
.codicon-compass-active:before { content: "\ebd7" }
.codicon-azure:before { content: "\ebd8" }
.codicon-issue-draft:before { content: "\ebd9" }
.codicon-git-pull-request-closed:before { content: "\ebda" }
.codicon-git-pull-request-draft:before { content: "\ebdb" }
.codicon-debug-all:before { content: "\ebdc" }
.codicon-debug-coverage:before { content: "\ebdd" }
.codicon-run-errors:before { content: "\ebde" }
.codicon-folder-library:before { content: "\ebdf" }
.codicon-debug-continue-small:before { content: "\ebe0" }
.codicon-beaker-stop:before { content: "\ebe1" }
.codicon-graph-line:before { content: "\ebe2" }
.codicon-graph-scatter:before { content: "\ebe3" }
.codicon-pie-chart:before { content: "\ebe4" }
.codicon-bracket:before { content: "\eb0f" }
.codicon-bracket-dot:before { content: "\ebe5" }
.codicon-bracket-error:before { content: "\ebe6" }
.codicon-lock-small:before { content: "\ebe7" }
.codicon-azure-devops:before { content: "\ebe8" }
.codicon-verified-filled:before { content: "\ebe9" }
.codicon-newline:before { content: "\ebea" }
.codicon-layout:before { content: "\ebeb" }
.codicon-layout-activitybar-left:before { content: "\ebec" }
.codicon-layout-activitybar-right:before { content: "\ebed" }
.codicon-layout-panel-left:before { content: "\ebee" }
.codicon-layout-panel-center:before { content: "\ebef" }
.codicon-layout-panel-justify:before { content: "\ebf0" }
.codicon-layout-panel-right:before { content: "\ebf1" }
.codicon-layout-panel:before { content: "\ebf2" }
.codicon-layout-sidebar-left:before { content: "\ebf3" }
.codicon-layout-sidebar-right:before { content: "\ebf4" }
.codicon-layout-statusbar:before { content: "\ebf5" }
.codicon-layout-menubar:before { content: "\ebf6" }
.codicon-layout-centered:before { content: "\ebf7" }
.codicon-target:before { content: "\ebf8" }
.codicon-indent:before { content: "\ebf9" }
.codicon-record-small:before { content: "\ebfa" }
.codicon-error-small:before { content: "\ebfb" }
.codicon-terminal-decoration-error:before { content: "\ebfb" }
.codicon-arrow-circle-down:before { content: "\ebfc" }
.codicon-arrow-circle-left:before { content: "\ebfd" }
.codicon-arrow-circle-right:before { content: "\ebfe" }
.codicon-arrow-circle-up:before { content: "\ebff" }
.codicon-layout-sidebar-right-off:before { content: "\ec00" }
.codicon-layout-panel-off:before { content: "\ec01" }
.codicon-layout-sidebar-left-off:before { content: "\ec02" }
.codicon-blank:before { content: "\ec03" }
.codicon-heart-filled:before { content: "\ec04" }
.codicon-map:before { content: "\ec05" }
.codicon-map-filled:before { content: "\ec06" }
.codicon-circle-small:before { content: "\ec07" }
.codicon-bell-slash:before { content: "\ec08" }
.codicon-bell-slash-dot:before { content: "\ec09" }
.codicon-comment-unresolved:before { content: "\ec0a" }
.codicon-git-pull-request-go-to-changes:before { content: "\ec0b" }
.codicon-git-pull-request-new-changes:before { content: "\ec0c" }
.codicon-search-fuzzy:before { content: "\ec0d" }
.codicon-comment-draft:before { content: "\ec0e" }

View File

@@ -0,0 +1,557 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Amy</string>
<key>author</key>
<string>William D. Neumann</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#200020</string>
<key>caret</key>
<string>#7070FF</string>
<key>foreground</key>
<string>#D0D0FF</string>
<key>invisibles</key>
<string>#BFBFBF</string>
<key>lineHighlight</key>
<string>#80000040</string>
<key>selection</key>
<string>#80000080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment.block</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#200020</string>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#404080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#999999</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#707090</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Integer</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#7090B0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Int32 constant</string>
<key>scope</key>
<string>constant.numeric.integer.int32</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Int64 constant</string>
<key>scope</key>
<string>constant.numeric.integer.int64</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Nativeint constant</string>
<key>scope</key>
<string>constant.numeric.integer.nativeint</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Floating-point constant</string>
<key>scope</key>
<string>constant.numeric.floating-point.ocaml</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Character constant</string>
<key>scope</key>
<string>constant.character</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#666666</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Boolean constant</string>
<key>scope</key>
<string>constant.language.boolean</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8080A0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>User-defined constant</string>
<key>scope</key>
<string>constant.other</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable.language, variable.other</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#008080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A080FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword operator</string>
<key>scope</key>
<string>keyword.operator</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A0A0FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword decorator</string>
<key>scope</key>
<string>keyword.other.decorator</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D0D0FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Floating-point infix operator</string>
<key>scope</key>
<string>keyword.operator.infix.floating-point.ocaml</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Floating-point prefix operator</string>
<key>scope</key>
<string>keyword.operator.prefix.floating-point.ocaml</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Compiler directives</string>
<key>scope</key>
<string>keyword.other.directive</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#C080C0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Line-number directives</string>
<key>scope</key>
<string>keyword.other.directive.line-number</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
<key>foreground</key>
<string>#C080C0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Control keyword</string>
<key>scope</key>
<string>keyword.control</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#80A0FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B0FFF0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variants</string>
<key>scope</key>
<string>entity.name.type.variant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#60B0FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Polymorphic variants</string>
<key>scope</key>
<string>storage.type.variant.polymorphic, entity.name.type.variant.polymorphic</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#60B0FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Module definitions</string>
<key>scope</key>
<string>entity.name.type.module</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B000B0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Module type definitions</string>
<key>scope</key>
<string>entity.name.type.module-type.ocaml</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
<key>foreground</key>
<string>#B000B0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support modules</string>
<key>scope</key>
<string>support.other</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A00050</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class name</string>
<key>scope</key>
<string>entity.name.type.class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#70E080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class type</string>
<key>scope</key>
<string>entity.name.type.class-type</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#70E0A0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#50A0A0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#80B0B0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Token definition (ocamlyacc)</string>
<key>scope</key>
<string>entity.name.type.token</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#3080A0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Token reference (ocamlyacc)</string>
<key>scope</key>
<string>entity.name.type.token.reference</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#3CB0D0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Non-terminal definition (ocamlyacc)</string>
<key>scope</key>
<string>entity.name.function.non-terminal</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#90E0E0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Non-terminal reference (ocamlyacc)</string>
<key>scope</key>
<string>entity.name.function.non-terminal.reference</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#C0F0F0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag name</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#009090</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#200020</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#200020</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library class/type</string>
<key>scope</key>
<string>support.type, support.class</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Library variable</string>
<key>scope</key>
<string>support.other.variable</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Invalid - illegal</string>
<key>scope</key>
<string>invalid.illegal</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFFF00</string>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#400080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid - depricated</string>
<key>scope</key>
<string>invalid.deprecated</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#CC66FF</string>
<key>foreground</key>
<string>#200020</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Camlp4 code</string>
<key>scope</key>
<string>source.camlp4.embedded</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#40008054</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Camlp4 temp (parser)</string>
<key>scope</key>
<string>source.camlp4.embedded.parser.ocaml</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Punctuation</string>
<key>scope</key>
<string>punctuation</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#805080</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>3C01FADD-7592-49DD-B7A5-1B82CA4E57B5</string>
</dict>
</plist>

View File

@@ -0,0 +1,563 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>comment</key>
<string>http://cbp.io</string>
<key>name</key>
<string>Behave</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#2C333D</string>
<key>caret</key>
<string>#909FB5</string>
<key>foreground</key>
<string>#D2D8E1</string>
<key>invisibles</key>
<string>#434D5B</string>
<key>lineHighlight</key>
<string>#232932</string>
<key>selection</key>
<string>#434D5B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment, punctuation.definition.comment, string.quoted.double.block.python</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#808691</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Foreground</string>
<key>scope</key>
<string>keyword.operator.class, source.php.embedded.line, meta.method punctuation.definition, meta.method punctuation.separator</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#CED1CF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable, String Link, Regular Expression, Tag Name</string>
<key>scope</key>
<string>variable, support.other.variable, variable.parameter, string.other.link, string.regexp, declaration.tag, meta.expression.body.function, variable.parameter, string.unquoted.label</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#cab8a3</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number, Constant, Function Argument, Tag Attribute, Embedded</string>
<key>scope</key>
<string>constant.numeric, constant.language, constant.other, support.constant, variable.other.constant, keyword.other.unit, meta.property-value, punctuation.section.embedded</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#c9a9f9</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class, Support</string>
<key>scope</key>
<string>entity.name.class, entity.name.type.class, entity.name.type.instance, entity.name.instance, meta.instance.constructor, meta.property.class, variable.other.class, class.name, support.type, support.class, storage.type</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#f0d879</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String, Symbols, Inherited Class, Markup Heading</string>
<key>scope</key>
<string>string, constant.other.symbol, entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#ec9076</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Operator, Misc</string>
<key>scope</key>
<string>keyword.operator, keyword.control, entity.other.attribute-name, constant.other.color, constant.character</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#7dcbc4</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function, Special Method, Block Level</string>
<key>scope</key>
<string>entity.name.function, support.function, keyword.other.special-method, entity.name.method, meta.accessor, meta.block-level, function.name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#61d29d</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword, Storage</string>
<key>scope</key>
<string>keyword, storage, storage.type, entity.name.tag.css, meta.tag, entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#5ab8e5</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Java Methods</string>
<key>scope</key>
<string>meta.method.body.java, meta.method.return-type.java</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CED1CF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Java Strings</string>
<key>scope</key>
<string>punctuation.definition.string.begin.java, punctuation.definition.string.end.java</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#ec9076</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Java Classes, Storage Types</string>
<key>scope</key>
<string>storage.type.java</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f0d879</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>TypeScript Functions</string>
<key>scope</key>
<string>meta.expression.body.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#61d29d</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>TypeScript Class</string>
<key>scope</key>
<string>meta.expression.body.class.ts, meta.class.ts</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#f0d879</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>TypeScript Variables</string>
<key>scope</key>
<string>meta.toc-list.class.member.ts</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#cab8a3</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>TypeScript Strings</string>
<key>scope</key>
<string>punctuation.definition.string.ts</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#ec9076</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>TypeScript Misc., Braces, Periods, Delimiter etc.</string>
<key>scope</key>
<string>meta.brace.curly.ts, meta.brace.square.ts, meta.brace.round.ts, meta.delimiter.ts, punctuation.definition.parameters.ts, punctuation.terminator.statement.ts, punctuation.definition.parameters.begin.ts, punctuation.definition.parameters.end.ts, meta.delimiter.method.period.ts, meta.delimiter.object.comma.ts, keyword.operator.ts</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D2D8E1</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON Key</string>
<key>scope</key>
<string>string.quoted.double.json, meta.structure.dictionary.json string.quoted.double.json, meta.structure.dictionary.json meta.structure.dictionary.json string.quoted.double.json, meta.structure.dictionary.json meta.structure.dictionary.json meta.structure.dictionary.json string.quoted.double.json, meta.structure.dictionary.json meta.structure.dictionary.json meta.structure.dictionary.json meta.structure.dictionary.json string.quoted.double.json, meta.structure.dictionary.json meta.structure.dictionary.json meta.structure.dictionary.json meta.structure.dictionary.json meta.structure.dictionary.json string.quoted.double.json, meta.structure.dictionary.json meta.structure.dictionary.json meta.structure.dictionary.json meta.structure.dictionary.json meta.structure.dictionary.json meta.structure.dictionary.json string.quoted.double.json, meta.structure.dictionary.json meta.structure.dictionary.json meta.structure.dictionary.json meta.structure.dictionary.json meta.structure.dictionary.json meta.structure.dictionary.json meta.structure.dictionary.json string.quoted.double.json, meta.structure.dictionary.json meta.structure.dictionary.json meta.structure.dictionary.json meta.structure.dictionary.json meta.structure.dictionary.json meta.structure.dictionary.json meta.structure.dictionary.json meta.structure.dictionary.json string.quoted.double.json</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#cab8a3</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON String</string>
<key>scope</key>
<string>meta.structure.dictionary.value.json string.quoted.double.json, meta.structure.dictionary.value.json meta.structure.dictionary.value.json string.quoted.double.json, meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json string.quoted.double.json, meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json string.quoted.double.json, meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json string.quoted.double.json, meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json string.quoted.double.json, meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json string.quoted.double.json, meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json string.quoted.double.json, meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json string.quoted.double.json, meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json meta.structure.dictionary.value.json string.quoted.double.json</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#ec9076</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JavaScript Strings</string>
<key>scope</key>
<string>meta.parameter.optional punctuation.definition.string.begin, meta.parameter.optional punctuation.definition.string.end</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#ec9076</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markdown Titles</string>
<key>scope</key>
<string>markup.heading.markdown, markup.heading</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f0d879</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markdown lists</string>
<key>scope</key>
<string>markup.list.unnumbered.markdown, markup.list.numbered.markdown</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D2D8E1</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markdown bold/italic</string>
<key>scope</key>
<string>markup.bold.markdown, markup.italic.markdown</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markdown italic</string>
<key>scope</key>
<string>markup.italic.markdown</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markdown bold</string>
<key>scope</key>
<string>markup.bold.markdown</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markdown Raw/Pre</string>
<key>scope</key>
<string>markup.raw.inline.markdown, markup.raw.block.markdown</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#cab8a3</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markdown String Link</string>
<key>scope</key>
<string>string.other.link.title.markdown, string.other.link.description.title.markdown</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#61d29d</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markdown link</string>
<key>scope</key>
<string>markup.underline.link.markdown, markup.underline.link.image.markdown, meta.image.inline.markdown</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#c9a9f9</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markdown quote</string>
<key>scope</key>
<string>markup.quote.markdown</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#ec9076</string>
</dict>
</dict>
<dict>
<key>scope</key>
<string>constant.numeric.line-number.find-in-files - match</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#c9a9f9A0</string>
</dict>
</dict>
<dict>
<key>scope</key>
<string>entity.name.filename.find-in-files</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f0d879</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#EF4D44</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D2D8E1</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Separator</string>
<key>scope</key>
<string>meta.separator</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#7dcbc4</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Deprecated</string>
<key>scope</key>
<string>invalid.deprecated</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#B798BF</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#CED2CF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff foreground</string>
<key>scope</key>
<string>markup.inserted.diff, markup.deleted.diff, meta.diff.header.to-file, meta.diff.header.from-file</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D2D8E1</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff insertion</string>
<key>scope</key>
<string>markup.inserted.diff, meta.diff.header.to-file</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff deletion</string>
<key>scope</key>
<string>markup.deleted.diff, meta.diff.header.from-file</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#EF4D44</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff header</string>
<key>scope</key>
<string>meta.diff.header.from-file, meta.diff.header.to-file</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D2D8E1</string>
<key>background</key>
<string>#4271ae</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff range</string>
<key>scope</key>
<string>meta.diff.range</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#7dcbc4</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.deleted</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.inserted</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.changed</string>
<key>scope</key>
<string>markup.changed</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#967EFB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Error</string>
<key>scope</key>
<string>sublimelinter.mark.error</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#EF4D44</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Gutter Mark</string>
<key>scope</key>
<string>sublimelinter.gutter-mark</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D2D8E1</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Warning</string>
<key>scope</key>
<string>sublimelinter.mark.warning</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FACB68</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>F96223EB-1A60-4617-92F3-D24D4F13DB09</string>
<key>colorSpaceName</key>
<string>sRGB</string>
<key>semanticClass</key>
<string>theme.dark.behave</string>
</dict>
</plist>

View File

@@ -0,0 +1,387 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>[ Argonaut ]</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#151515</string>
<key>caret</key>
<string>#FF2200</string>
<key>foreground</key>
<string>#B2B2B2</string>
<key>invisibles</key>
<string>#000000</string>
<key>lineHighlight</key>
<string>#000C16</string>
<key>selection</key>
<string>#002F53</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#00A6FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword, storage, support.type</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#6497C5</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String interpolation</string>
<key>scope</key>
<string>constant.character.escaped, string source</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A0A3F9</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D70000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable.language, variable.other</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0068C5</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constant</string>
<key>scope</key>
<string>constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#A4ED2D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Preprocessor line</string>
<key>scope</key>
<string>other.preprocessor</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#7B9A00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Preprocessor directive</string>
<key>scope</key>
<string>entity.name.preprocessor</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#FFCE00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#FFCA00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class name</string>
<key>scope</key>
<string>entity.name.class</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#000000</string>
<key>fontStyle</key>
<string>underline</string>
<key>foreground</key>
<string>#DB001C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function parameter</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument and result types</string>
<key>scope</key>
<string>storage.type.method</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#70727E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#990000</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid trailing whitespace</string>
<key>scope</key>
<string>invalid.trailing-whitespace</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFD0D0</string>
<key>foreground</key>
<string>#333333</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Section</string>
<key>scope</key>
<string>declaration.section entity.name.section</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#3FAF30</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#815DB3</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library object</string>
<key>scope</key>
<string>support.class, support.type</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#7A88F6</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#06960E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library variable</string>
<key>scope</key>
<string>support.other.variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#F18F94</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JS: Operator</string>
<key>scope</key>
<string>keyword.operator.js</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#606E7E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Embedded source</string>
<key>scope</key>
<string>text source, string.unquoted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#00020559</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup XML declaration</string>
<key>scope</key>
<string>declaration.xml-processing</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#68685B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup DOCTYPE</string>
<key>scope</key>
<string>declaration.doctype</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#888888</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup DTD</string>
<key>scope</key>
<string>declaration.doctype.DTD</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup tag</string>
<key>scope</key>
<string>declaration.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#62A6FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup name of tag</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0065D3</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class name</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup tag attribute</string>
<key>scope</key>
<string>entity.parameter.attribute</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>E30AB985-2C10-4EB1-9C06-06CC4FF68D62</string>
</dict>
</plist>

View File

@@ -0,0 +1,203 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>CSSEdit</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFFFFF</string>
<key>caret</key>
<string>#000000</string>
<key>foreground</key>
<string>#474747</string>
<key>invisibles</key>
<string>#BFBFBF</string>
<key>lineHighlight</key>
<string>#00000012</string>
<key>selection</key>
<string>#A0CDFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A8A8A8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#5D9629</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#6D4496</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>User-defined constant</string>
<key>scope</key>
<string>constant.character, constant.other</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable.language, variable.other</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#4678BC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Class name</string>
<key>scope</key>
<string>entity.name.class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#4678BC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Function argument</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Tag name</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#4678BC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B84610</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Library class/type</string>
<key>scope</key>
<string>support.type, support.class</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Library variable</string>
<key>scope</key>
<string>support.other.variable</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict/>
</dict>
</array>
<key>uuid</key>
<string>E338A386-9C33-4E3E-BC5C-842F6825BEB0</string>
</dict>
</plist>

View File

@@ -0,0 +1,348 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Clouds</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFFFFF</string>
<key>caret</key>
<string>#000000</string>
<key>foreground</key>
<string>#000000</string>
<key>invisibles</key>
<string>#BFBFBF</string>
<key>lineHighlight</key>
<string>#FFFBD1</string>
<key>selection</key>
<string>#BDD5FC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#BCC8BA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#5D90CD</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#46A609</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#39946A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>User-defined constant</string>
<key>scope</key>
<string>constant.character, constant.other</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable.language, variable.other</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword, support.constant.property-value, constant.other.color</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#AF956F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword -&gt; Unit</string>
<key>scope</key>
<string>keyword.other.unit</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#96DC5F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword -&gt; Operator</string>
<key>scope</key>
<string>keyword.operator</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#484848</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#C52727</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class name</string>
<key>scope</key>
<string>entity.name.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#858585</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Tag name</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#606060</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>HTML Entity</string>
<key>scope</key>
<string>constant.character.entity</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#BF78CC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JS Support Class</string>
<key>scope</key>
<string>support.class.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#BF78CC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#606060</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS Selector</string>
<key>scope</key>
<string>meta.selector.css, entity.name.tag.css, entity.other.attribute-name.id.css, entity.other.attribute-name.class.css</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#C52727</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS Property</string>
<key>scope</key>
<string>meta.property-name.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#484848</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#C52727</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Library class/type</string>
<key>scope</key>
<string>support.type, support.class</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Library variable</string>
<key>scope</key>
<string>support.other.variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FF002A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Punctuation/Widgets</string>
<key>scope</key>
<string>punctuation.section.embedded</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#C52727</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Punctuation (Tags)</string>
<key>scope</key>
<string>punctuation.definition.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#606060</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword -&gt; CSS</string>
<key>scope</key>
<string>constant.other.color.rgb-value.css, support.constant.property-value.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#BF78CC</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>47536290-6FC1-4B09-A08F-B219909E1A69</string>
</dict>
</plist>

View File

@@ -0,0 +1,361 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Clouds Midnight</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#191919</string>
<key>caret</key>
<string>#7DA5DC</string>
<key>foreground</key>
<string>#929292</string>
<key>invisibles</key>
<string>#BFBFBF</string>
<key>lineHighlight</key>
<string>#D7D7D708</string>
<key>selection</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#3C403B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#5D90CD</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#46A609</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#39946A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>User-defined constant</string>
<key>scope</key>
<string>constant.character, constant.other</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable.language, variable.other</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword, support.constant.property-value, constant.other.color</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#927C5D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword -&gt; Unit</string>
<key>scope</key>
<string>keyword.other.unit</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#366F1A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>HTML Attribute</string>
<key>scope</key>
<string>entity.other.attribute-name.html</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A46763</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword -&gt; Operator</string>
<key>scope</key>
<string>keyword.operator</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#4B4B4B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#E92E2E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class name</string>
<key>scope</key>
<string>entity.name.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#858585</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Tag name</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#606060</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>HTML Entity</string>
<key>scope</key>
<string>constant.character.entity</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A165AC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JS Support Class</string>
<key>scope</key>
<string>support.class.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A165AC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#606060</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS Selector</string>
<key>scope</key>
<string>meta.selector.css, entity.name.tag.css, entity.other.attribute-name.id.css, entity.other.attribute-name.class.css</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#E92E2E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS Property</string>
<key>scope</key>
<string>meta.property-name.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#616161</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E92E2E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Library class/type</string>
<key>scope</key>
<string>support.type, support.class</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Library variable</string>
<key>scope</key>
<string>support.other.variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#E92E2E</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Punctuation/Widgets</string>
<key>scope</key>
<string>punctuation.section.embedded</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#E92E2E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Punctuation (Tags)</string>
<key>scope</key>
<string>punctuation.definition.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#606060</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword -&gt; CSS</string>
<key>scope</key>
<string>constant.other.color.rgb-value.css, support.constant.property-value.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A165AC</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>E5304455-0AC7-4082-8E62-5FD1B3313EEC</string>
</dict>
</plist>

View File

@@ -0,0 +1,574 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>author</key>
<string>Jacob Rus</string>
<key>comment</key>
<string>Created by Jacob Rus. Based on Slate by Wilson Miner</string>
<key>gutterSettings</key>
<dict>
<key>background</key>
<string>#00182c</string>
<key>divider</key>
<string>#00182c</string>
<key>foreground</key>
<string>#004581</string>
<key>selectionBackground</key>
<string>#003767</string>
<key>selectionForeground</key>
<string>#93a1a1</string>
</dict>
<key>name</key>
<string>Cobalt</string>
<key>semanticClass</key>
<string>theme.dark.cobalt</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#002240</string>
<key>caret</key>
<string>#FFFFFF</string>
<key>foreground</key>
<string>#FFFFFF</string>
<key>invisibles</key>
<string>#FFFFFF26</string>
<key>lineHighlight</key>
<string>#00000059</string>
<key>selection</key>
<string>#B36539BF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Punctuation</string>
<key>scope</key>
<string>punctuation - (punctuation.definition.string | punctuation.definition.comment)</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#E1EFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constant</string>
<key>scope</key>
<string>constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FF628C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Entity</string>
<key>scope</key>
<string>entity</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FFDD00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FF9D00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FFEE80</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string -string.unquoted.old-plist -string.unquoted.heredoc, string.unquoted.heredoc string</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#3AD900</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#0088FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support</string>
<key>scope</key>
<string>support</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#80FFBB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#CCCCCC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Lang Variable</string>
<key>scope</key>
<string>variable.language</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FF80E1</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function Call</string>
<key>scope</key>
<string>meta.function-call</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFEE80</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#800F00</string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Embedded Source</string>
<key>scope</key>
<string>text source, string.unquoted.heredoc, source source, meta.embedded</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#223545</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Entity inherited-class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#80FCFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String embedded-source</string>
<key>scope</key>
<string>string.quoted source</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#9EFF80</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String constant</string>
<key>scope</key>
<string>string constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#80FF82</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String.regexp</string>
<key>scope</key>
<string>string.regexp</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#80FFC2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String variable</string>
<key>scope</key>
<string>string variable</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#EDEF7D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support.function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FFB054</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support.constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#EB939A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Exception</string>
<key>scope</key>
<string>support.type.exception</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF1E00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>C/C++ Preprocessor Line</string>
<key>scope</key>
<string>meta.preprocessor.c</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8996A8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>C/C++ Preprocessor Directive</string>
<key>scope</key>
<string>meta.preprocessor.c keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AFC4DB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Doctype/XML Processing</string>
<key>scope</key>
<string>meta.tag.metadata.doctype entity, meta.tag.metadata.doctype string, meta.tag.metadata.processing.xml, meta.tag.metadata.processing.xml entity, meta.tag.metadata.processing.xml string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#73817D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Meta.tag.A</string>
<key>scope</key>
<string>meta.tag, meta.tag entity</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#9EFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css tag-name</string>
<key>scope</key>
<string>meta.selector.css entity.name.tag</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#9EFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css#id</string>
<key>scope</key>
<string>meta.selector.css entity.other.attribute-name.id</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFB454</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css.class</string>
<key>scope</key>
<string>meta.selector.css entity.other.attribute-name.class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#5FE461</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css property-name:</string>
<key>scope</key>
<string>support.type.property-name.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#9DF39F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css property-value;</string>
<key>scope</key>
<string>meta.property-group support.constant.property-value.css, meta.property-value support.constant.property-value.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F6F080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css @at-rule</string>
<key>scope</key>
<string>meta.preprocessor.at-rule keyword.control.at-rule</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F6AA11</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css additional-constants</string>
<key>scope</key>
<string>meta.property-value support.constant.named-color.css, meta.property-value constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#EDF080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css constructor.argument</string>
<key>scope</key>
<string>meta.constructor.argument.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#EB939A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.header</string>
<key>scope</key>
<string>meta.diff, meta.diff.header</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#000E1A</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.deleted</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#4C0900</string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.changed</string>
<key>scope</key>
<string>markup.changed</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#806F00</string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.inserted</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#154F00</string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Raw Markup</string>
<key>scope</key>
<string>markup.raw</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#8FDDF630</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Block Quote</string>
<key>scope</key>
<string>markup.quote</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#004480</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>List</string>
<key>scope</key>
<string>markup.list</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#130D26</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Bold Markup</string>
<key>scope</key>
<string>markup.bold</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#C1AFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Italic Markup</string>
<key>scope</key>
<string>markup.italic</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#B8FFD9</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Heading Markup</string>
<key>scope</key>
<string>markup.heading</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#001221</string>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#C8E4FD</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>06CD1FB2-A00A-4F8C-97B2-60E131980454</string>
</dict>
</plist>

View File

@@ -0,0 +1,437 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>author</key>
<string>David Powers</string>
<key>comment</key>
<string>Dawn</string>
<key>name</key>
<string>Dawn</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#F9F9F9</string>
<key>caret</key>
<string>#000000</string>
<key>foreground</key>
<string>#080808</string>
<key>invisibles</key>
<string>#4B4B7E80</string>
<key>lineHighlight</key>
<string>#2463B41F</string>
<key>selection</key>
<string>#275FFF4D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#5A525F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constant</string>
<key>scope</key>
<string>constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#811F24</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Entity</string>
<key>scope</key>
<string>entity</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#BF4F24</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#794938</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#A71D5D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string | punctuation.definition.string</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#0B6125</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support</string>
<key>scope</key>
<string>support</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#691C97</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#234A97</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Punctuation.separator</string>
<key>scope</key>
<string>punctuation.separator</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#794938</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid Deprecated</string>
<key>scope</key>
<string>invalid.deprecated</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold italic underline</string>
<key>foreground</key>
<string>#B52A1D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid Illegal</string>
<key>scope</key>
<string>invalid.illegal</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#B52A1D</string>
<key>fontStyle</key>
<string>italic underline</string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String embedded-source</string>
<key>scope</key>
<string>string source</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#6F8BBA26</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#080808</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String constant</string>
<key>scope</key>
<string>string constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#696969</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String variable</string>
<key>scope</key>
<string>string variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#234A97</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String.regexp</string>
<key>scope</key>
<string>string.regexp</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#CF5628</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String.regexp.«special»</string>
<key>scope</key>
<string>string.regexp.character-class, string.regexp constant.character.escaped, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold italic</string>
<key>foreground</key>
<string>#CF5628</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String.regexp constant.character.escape</string>
<key>scope</key>
<string>string.regexp constant.character.escape</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#811F24</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Embedded Source</string>
<key>scope</key>
<string>text source</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#6F8BBA26</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support.function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#693A17</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support.constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#B4371F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support.variable</string>
<key>scope</key>
<string>support.variable</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#234A97</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup.list</string>
<key>scope</key>
<string>markup.list</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#693A17</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup.heading</string>
<key>scope</key>
<string>markup.heading | markup.heading entity.name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#19356D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup.quote</string>
<key>scope</key>
<string>markup.quote</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#BBBBBB30</string>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#0B6125</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup.italic</string>
<key>scope</key>
<string>markup.italic</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#080808</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup.bold</string>
<key>scope</key>
<string>markup.bold</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#080808</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup.underline</string>
<key>scope</key>
<string>markup.underline</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
<key>foreground</key>
<string>#080808</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup.link</string>
<key>scope</key>
<string>markup.link</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic underline</string>
<key>foreground</key>
<string>#234A97</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup.raw</string>
<key>scope</key>
<string>markup.raw</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#BBBBBB30</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#234A97</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup.deleted</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#59140E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Meta.separator</string>
<key>scope</key>
<string>meta.separator</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#DCDCDC</string>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#19356D</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>E7E82498-F9EA-49A6-A0D8-12327EA46B01</string>
</dict>
</plist>

View File

@@ -0,0 +1,439 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Eiffel</string>
<key>author</key>
<string>Ian Joyner</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFFFFF</string>
<key>caret</key>
<string>#000000</string>
<key>foreground</key>
<string>#000000</string>
<key>invisibles</key>
<string>#BFBFBF</string>
<key>lineHighlight</key>
<string>#00000012</string>
<key>selection</key>
<string>#C3DCFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#00B418</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#0206FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#0100B6</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#CD0000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>User-defined constant</string>
<key>scope</key>
<string>constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#C5060B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#585CF6</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D80800</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String interpolation</string>
<key>scope</key>
<string>constant.character.escape, string source</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#26B31A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Preprocessor line</string>
<key>scope</key>
<string>meta.preprocessor</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#1A921C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Preprocessor directive</string>
<key>scope</key>
<string>keyword.control.import</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#0C450D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function, keyword.other.name-of-parameter.objc</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#0000A2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Type name</string>
<key>scope</key>
<string>entity.name.type</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class name</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function parameter</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument and result types</string>
<key>scope</key>
<string>storage.type.method</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#70727E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Section</string>
<key>scope</key>
<string>meta.section entity.name.section, declaration.section entity.name.section</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#3C4C72</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library object</string>
<key>scope</key>
<string>support.class, support.type</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#6D79DE</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#06960E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library variable</string>
<key>scope</key>
<string>support.variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#21439C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JS: Operator</string>
<key>scope</key>
<string>keyword.operator.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#687687</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#990000</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid trailing whitespace</string>
<key>scope</key>
<string>invalid.deprecated.trailing-whitespace</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFD0D0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Embedded source</string>
<key>scope</key>
<string>text source, string.unquoted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#427FF530</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup XML declaration</string>
<key>scope</key>
<string>meta.xml-processing, declaration.xml-processing</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#68685B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup DOCTYPE</string>
<key>scope</key>
<string>meta.doctype, declaration.doctype</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#888888</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup DTD</string>
<key>scope</key>
<string>meta.doctype.DTD, declaration.doctype.DTD</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup tag</string>
<key>scope</key>
<string>meta.tag, declaration.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#1C02FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup name of tag</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Heading</string>
<key>scope</key>
<string>markup.heading</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#0C07FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Quote</string>
<key>scope</key>
<string>markup.quote</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: List</string>
<key>scope</key>
<string>markup.list</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B90690</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>ADD7FDE7-C6BE-454B-A71A-7951ED54FB04</string>
</dict>
</plist>

View File

@@ -0,0 +1,313 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Coda</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFFFFF</string>
<key>caret</key>
<string>#000000</string>
<key>foreground</key>
<string>#000000</string>
<key>invisibles</key>
<string>#BFBFBF</string>
<key>lineHighlight</key>
<string>#EEF1F5</string>
<key>selection</key>
<string>#A7CAFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#3C802C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#ED7722</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0F20F6</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#916319</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>User-defined constant</string>
<key>scope</key>
<string>constant.character, constant.other</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#916319</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable.language, variable.other</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#916319</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#AA2063</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#AA2063</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class name</string>
<key>scope</key>
<string>entity.name.class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CC4C07</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CC4C07</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#053369</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#053369</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag name</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#881181</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#881181</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#7520AF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class Variable</string>
<key>scope</key>
<string>variable.other, variable.js, punctuation.separator.variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Language Constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Meta Brace</string>
<key>scope</key>
<string>punctuation.section.embedded -(source string source punctuation.section.embedded), meta.brace.erb.html</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F02A1D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#EB291C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Normal Variable</string>
<key>scope</key>
<string>variable.other.php, variable.other.normal</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#916305</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function Call</string>
<key>scope</key>
<string>meta.function-call</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#163369</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword Control</string>
<key>scope</key>
<string>keyword.control</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#AA2063</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>57E9F1F4-9556-47AF-A24D-61BFA4E53138</string>
</dict>
</plist>

View File

@@ -0,0 +1,653 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>GitHub</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#F8F8FF</string>
<key>caret</key>
<string>#000000</string>
<key>foreground</key>
<string>#000000</string>
<key>invisibles</key>
<string>#BFBFBF</string>
<key>lineHighlight</key>
<string>#00000012</string>
<key>selection</key>
<string>#BCD5FA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Source</string>
<key>scope</key>
<string>source</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#F8F8FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#999988</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword, storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword operator</string>
<key>scope</key>
<string>keyword.operator.assignment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>keyword like new</string>
<key>scope</key>
<string>keyword.other.special-method</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function (definition)</string>
<key>scope</key>
<string>entity.name.function, keyword.other.name-of-parameter.objc</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#990000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class (definition)</string>
<key>scope</key>
<string>entity.name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#445588</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#009999</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable.language, variable.other</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#108888</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable.other.constant.ruby</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0F8787</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#DD1144</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#0F8787</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class seperator</string>
<key>scope</key>
<string>punctuation.separator.inheritance</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>punctuation block</string>
<key>scope</key>
<string>punctuation.separator.variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>array brackets</string>
<key>scope</key>
<string>punctuation.section.array</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>hash separator</string>
<key>scope</key>
<string>punctuation.separator.key-value</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>() brackets</string>
<key>scope</key>
<string>punctuation.section.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>hash brackets</string>
<key>scope</key>
<string>punctuation.section.scope</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Special ruby method</string>
<key>scope</key>
<string>keyword.other.special-method.ruby</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>symbol</string>
<key>scope</key>
<string>constant.other.symbol</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#AA2C8C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support class</string>
<key>scope</key>
<string>support.class.ruby</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#008080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String.regexp</string>
<key>scope</key>
<string>string.regexp</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#009926</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String embedded source</string>
<key>scope</key>
<string>string.quoted source</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>doctype punctation</string>
<key>scope</key>
<string>meta.tag.sgml.html</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#999999</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>doctype declaration</string>
<key>scope</key>
<string>entity.name.tag.doctype</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#999999</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>doctype string</string>
<key>scope</key>
<string>string.quoted.double.doctype</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#999999</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>html tag punctuation</string>
<key>scope</key>
<string>punctuation.definition.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#121289</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>html tag punctuation</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#121289</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>html attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#0A8585</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>html attribute punctation</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#0A8585</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>erb tags</string>
<key>scope</key>
<string>punctuation.section.embedded.ruby</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#999999</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>ruby string interpolation</string>
<key>scope</key>
<string>source.ruby.embedded.source punctuation.section.embedded.ruby</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CF1040</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css brackets</string>
<key>scope</key>
<string>punctuation.section.property-list.css</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css property</string>
<key>scope</key>
<string>support.type.property-name.css</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css property punctuation</string>
<key>scope</key>
<string>punctuation.separator.key-value.css</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css property value</string>
<key>scope</key>
<string>meta.property-value, constant.other.color</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#009999</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css ending</string>
<key>scope</key>
<string>punctuation.terminator.rule.css</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css font</string>
<key>scope</key>
<string>support.constant.font-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css keyword</string>
<key>scope</key>
<string>keyword.other.unit</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#009999</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>pseudo class</string>
<key>scope</key>
<string>entity.other.attribute-name.pseudo-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css constant property value</string>
<key>scope</key>
<string>support.constant.property-value</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css attribute class</string>
<key>scope</key>
<string>entity.other.attribute-name.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#445588</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css attribute id</string>
<key>scope</key>
<string>entity.other.attribute-name.id</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#990000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff header from</string>
<key>scope</key>
<string>meta.diff.header.from-file</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFDDDD</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff header to</string>
<key>scope</key>
<string>meta.diff.header.to-file</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#DDFFDD</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff inserted</string>
<key>scope</key>
<string>markup.inserted.diff</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#DDFFDD</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff deleted</string>
<key>scope</key>
<string>markup.deleted.diff</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFDDDD</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>26786979-843B-4FE2-BCB6-4FCEC6F8FB58</string>
</dict>
</plist>

View File

@@ -0,0 +1,380 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>idleFingers</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#323232</string>
<key>caret</key>
<string>#91FF00</string>
<key>foreground</key>
<string>#FFFFFF</string>
<key>invisibles</key>
<string>#404040</string>
<key>lineHighlight</key>
<string>#353637</string>
<key>selection</key>
<string>#5A647EE0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>text</string>
<key>scope</key>
<string>text</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Source base</string>
<key>scope</key>
<string>source</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#282828</string>
<key>foreground</key>
<string>#CDCDCD</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#BC9458</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Html Tags</string>
<key>scope</key>
<string>meta.tag, declaration.tag, meta.doctype</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFE5BB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function Name</string>
<key>scope</key>
<string>entity.name</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFC66D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Ruby Function Name</string>
<key>scope</key>
<string>source.ruby entity.name</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFF980</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Other Variable</string>
<key>scope</key>
<string>variable.other</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B7DFF8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Ruby Class Name</string>
<key>scope</key>
<string>support.class.ruby</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CCCC33</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constant</string>
<key>scope</key>
<string>constant, support.constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#6C99BB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#CC7833</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Pre-processor Line</string>
<key>scope</key>
<string>other.preprocessor.c</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D0D0FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Pre-processor Directive</string>
<key>scope</key>
<string>entity.name.preprocessor</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Block comment</string>
<key>scope</key>
<string>source comment.block</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#575757</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A5C261</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String escapes</string>
<key>scope</key>
<string>string constant.character.escape</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AAAAAA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String (executed)</string>
<key>scope</key>
<string>string.interpolated</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#CCCC33</string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Regular expression</string>
<key>scope</key>
<string>string.regexp</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CCCC33</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String (literal)</string>
<key>scope</key>
<string>string.literal</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CCCC33</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String escapes (executed)</string>
<key>scope</key>
<string>string.interpolated constant.character.escape</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#787878</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class name</string>
<key>scope</key>
<string>entity.name.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class inheritance</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag name</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#B83426</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Textile List</string>
<key>scope</key>
<string>markup.list.unnumbered.textile</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#6EA533</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Textile Numbered list</string>
<key>scope</key>
<string>markup.list.numbered.textile</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#6EA533</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Textile Bold</string>
<key>scope</key>
<string>markup.bold.textile</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#C2C2C2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FF0000</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>95BEF169-A2E5-4041-A84A-AAFC1DD61558</string>
</dict>
</plist>

View File

@@ -0,0 +1,286 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>author</key>
<string>Jeroen van der Ham</string>
<key>name</key>
<string>iPlastic</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#EEEEEEEB</string>
<key>caret</key>
<string>#000000</string>
<key>foreground</key>
<string>#000000</string>
<key>invisibles</key>
<string>#B3B3B3F4</string>
<key>lineHighlight</key>
<string>#0000001A</string>
<key>selection</key>
<string>#BAD6FD</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#009933</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0066FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Regular expression</string>
<key>scope</key>
<string>string.regexp</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF0080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0000FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Identifier</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#9700CC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Exception</string>
<key>scope</key>
<string>support.class.exception</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#990000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF8000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Type name</string>
<key>scope</key>
<string>entity.name.type</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Arguments</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#0066FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#E71A114D</string>
<key>foreground</key>
<string>#FF0000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Trailing whitespace</string>
<key>scope</key>
<string>invalid.deprecated.trailing-whitespace</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#E71A1100</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Embedded source</string>
<key>scope</key>
<string>text source</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FAFAFAFC</string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag</string>
<key>scope</key>
<string>meta.tag, declaration.tag</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0033CC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constant</string>
<key>scope</key>
<string>constant, support.constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#6782D3</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support</string>
<key>scope</key>
<string>support</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#3333FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Section name</string>
<key>scope</key>
<string>entity.name.section</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Frame title</string>
<key>scope</key>
<string>entity.name.function.frame</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>XML Declaration</string>
<key>scope</key>
<string>meta.tag.preprocessor.xml</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#333333</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag Attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#3366CC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag Name</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>4FCFA210-B247-11D9-9D00-000D93347A42</string>
</dict>
</plist>

View File

@@ -0,0 +1,450 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>author</key>
<string>Chris Thomas</string>
<key>name</key>
<string>Tango</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFFFFF</string>
<key>caret</key>
<string>#000000</string>
<key>foreground</key>
<string>#303436</string>
<key>invisibles</key>
<string>#BFBFBF</string>
<key>lineHighlight</key>
<string>#0000000F</string>
<key>selection</key>
<string>#4D97FF54</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#555753</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword, storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#303436</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#4F9B00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>User-defined constant</string>
<key>scope</key>
<string>constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#194A87</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#194A87</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable.language, variable.other</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#194A87</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#A70000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String interpolation</string>
<key>scope</key>
<string>constant.character.escape, string source</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#A70000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Preprocessor line</string>
<key>scope</key>
<string>meta.preprocessor</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#65961E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Preprocessor directive</string>
<key>scope</key>
<string>keyword.control.import</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#65961E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function, support.function.any-method</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#5C3566</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Type name</string>
<key>scope</key>
<string>entity.name.type</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class name</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function parameter</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument and result types</string>
<key>scope</key>
<string>storage.type.method</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#70727E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Section</string>
<key>scope</key>
<string>meta.section entity.name.section, declaration.section entity.name.section</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#3C4C72</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library object</string>
<key>scope</key>
<string>support.class, support.type</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D15B00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#529C08</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library variable</string>
<key>scope</key>
<string>support.variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#2E65A5</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JS: Operator</string>
<key>scope</key>
<string>keyword.operator.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#687687</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#990000</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid trailing whitespace</string>
<key>scope</key>
<string>invalid.deprecated.trailing-whitespace</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFD0D0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Embedded source</string>
<key>scope</key>
<string>text source, string.unquoted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#0000000D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Embedded embedded source</string>
<key>scope</key>
<string>text source string.unquoted, text source text source</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#0000000F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup XML declaration</string>
<key>scope</key>
<string>meta.tag.preprocessor.xml</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#68685B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup DOCTYPE</string>
<key>scope</key>
<string>meta.tag.sgml.doctype, meta.tag.sgml.doctype entity, meta.tag.sgml.doctype string, meta.tag.preprocessor.xml, meta.tag.preprocessor.xml entity, meta.tag.preprocessor.xml string</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#888888</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup DTD</string>
<key>scope</key>
<string>string.quoted.docinfo.doctype.DTD</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup tag</string>
<key>scope</key>
<string>meta.tag, declaration.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#4266A0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup name of tag</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Heading</string>
<key>scope</key>
<string>markup.heading</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#4266A0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Quote</string>
<key>scope</key>
<string>markup.quote</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: List</string>
<key>scope</key>
<string>markup.list</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B90690</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>509B45AB-A33A-472C-80CF-656718CEECC9</string>
</dict>
</plist>

View File

@@ -0,0 +1,551 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>comment</key>
<string>Created by Kenneth Reitz, inspired by minimal design</string>
<key>name</key>
<string>krTheme</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#0B0A09</string>
<key>caret</key>
<string>#FF9900</string>
<key>foreground</key>
<string>#FCFFE0</string>
<key>invisibles</key>
<string>#FFB16F52</string>
<key>lineHighlight</key>
<string>#38403D</string>
<key>selection</key>
<string>#AA00FF73</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constant</string>
<key>scope</key>
<string>constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D27518C2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Entity</string>
<key>scope</key>
<string>entity</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#A89100B5</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Entity Other</string>
<key>scope</key>
<string>entity.other</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#BA6912</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#949C8B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FFEE80</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string -string.unquoted.old-plist -string.unquoted.heredoc, string.unquoted.heredoc string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#C7A4A1B5</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#706D5B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support</string>
<key>scope</key>
<string>support</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#9FC28A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D1A796</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Lang Variable</string>
<key>scope</key>
<string>variable.language</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FF80E1</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function Call</string>
<key>scope</key>
<string>meta.function-call</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFEE80</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#A41300</string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Embedded Source</string>
<key>scope</key>
<string>text source, string.unquoted.heredoc, source source</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#24231D4D</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D9D59F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Entity inherited-class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#7EFCFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String embedded-source</string>
<key>scope</key>
<string>string.quoted source</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#439740BA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String constant</string>
<key>scope</key>
<string>string constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#60DB5DBA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String.regexp</string>
<key>scope</key>
<string>string.regexp</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#7DFFC0A6</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String variable</string>
<key>scope</key>
<string>string variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#B8B960</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support.function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#85873A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support.constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#C27E66</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Exception</string>
<key>scope</key>
<string>support.class.exception</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF1E00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>C/C++ Preprocessor Line</string>
<key>scope</key>
<string>meta.preprocessor.c</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8996A8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>C/C++ Preprocessor Directive</string>
<key>scope</key>
<string>meta.preprocessor.c keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AFC4DB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Doctype/XML Processing</string>
<key>scope</key>
<string>meta.sgml.html meta.doctype, meta.sgml.html meta.doctype entity, meta.sgml.html meta.doctype string, meta.xml-processing, meta.xml-processing entity, meta.xml-processing string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#73817D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Meta.tag.A</string>
<key>scope</key>
<string>meta.tag, meta.tag entity</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#BABD9C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css tag-name</string>
<key>scope</key>
<string>meta.selector.css entity.name.tag</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#99A190</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css#id</string>
<key>scope</key>
<string>meta.selector.css entity.other.attribute-name.id</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CC8844</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css.class</string>
<key>scope</key>
<string>meta.selector.css entity.other.attribute-name.class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CFB958</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css property-name:</string>
<key>scope</key>
<string>support.type.property-name.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E0DDAD</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css property-value;</string>
<key>scope</key>
<string>meta.property-group support.constant.property-value.css, meta.property-value support.constant.property-value.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AEB14B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css @at-rule</string>
<key>scope</key>
<string>meta.preprocessor.at-rule keyword.control.at-rule</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFB010</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css additional-constants</string>
<key>scope</key>
<string>meta.property-value support.constant.named-color.css, meta.property-value constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#999179</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css constructor.argument</string>
<key>scope</key>
<string>meta.constructor.argument.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#EB939A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.header</string>
<key>scope</key>
<string>meta.diff, meta.diff.header</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#000E1A</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.deleted</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#800F00</string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.changed</string>
<key>scope</key>
<string>markup.changed</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#806F00</string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.inserted</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#228000</string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Raw Markup</string>
<key>scope</key>
<string>markup.raw</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#8FDDF630</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Block Quote</string>
<key>scope</key>
<string>markup.quote</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#005BAA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>List</string>
<key>scope</key>
<string>markup.list</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#0F0040</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Bold Markup</string>
<key>scope</key>
<string>markup.bold</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#9D80FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Italic Markup</string>
<key>scope</key>
<string>markup.italic</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#80FFBB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Heading Markup</string>
<key>scope</key>
<string>markup.heading</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>87F051F7-B6FB-408C-96F9-467B66C14E9F</string>
</dict>
</plist>

View File

@@ -0,0 +1,235 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>author</key>
<string>Domenico Carbotta</string>
<key>name</key>
<string>IDLE</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFFFFF</string>
<key>caret</key>
<string>#000000</string>
<key>foreground</key>
<string>#000000</string>
<key>invisibles</key>
<string>#BFBFBF</string>
<key>lineHighlight</key>
<string>#00000012</string>
<key>selection</key>
<string>#BAD6FD</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#919191</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#00A33F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A535AE</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>User-defined constant</string>
<key>scope</key>
<string>constant.character, constant.other</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable.language, variable.other</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF5600</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF5600</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Type name</string>
<key>scope</key>
<string>entity.name.type</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#21439C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#21439C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Tag name</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A535AE</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A535AE</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library class/type</string>
<key>scope</key>
<string>support.type, support.class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A535AE</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library variable</string>
<key>scope</key>
<string>support.variable</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A535AE</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#990000</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String interpolation</string>
<key>scope</key>
<string>constant.other.placeholder.py</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#990000</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>DDC0CBE1-442B-4CB5-80E4-26E4CFB3A277</string>
</dict>
</plist>

View File

@@ -0,0 +1,285 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Merbivore</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#161616</string>
<key>caret</key>
<string>#FFFFFF</string>
<key>foreground</key>
<string>#E6E1DC</string>
<key>invisibles</key>
<string>#404040</string>
<key>lineHighlight</key>
<string>#333435</string>
<key>selection</key>
<string>#5A647EE0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Source</string>
<key>scope</key>
<string>source</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#AD2EA4</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword, storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FC6F09</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function (definition)</string>
<key>scope</key>
<string>entity.name.function, keyword.other.name-of-parameter.objc</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class (definition)</string>
<key>scope</key>
<string>entity.name</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Class inheritence</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FC83FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#58C554</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable.language, variable.other</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constant</string>
<key>scope</key>
<string>constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#1EDAFB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constant (other variable)</string>
<key>scope</key>
<string>variable.other.constant</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Constant (built-in)</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FDC251</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#8DFF0A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library type</string>
<key>scope</key>
<string>support.type</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#1EDAFB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8DFF0A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup tag</string>
<key>scope</key>
<string>meta.tag, declaration.tag, entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FC6F09</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFF89</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#990000</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String interpolation</string>
<key>scope</key>
<string>constant.character.escaped, constant.character.escape, string source, string source.ruby</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#519F50</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff Add</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#144212</string>
<key>foreground</key>
<string>#E6E1DC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff Remove</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#660000</string>
<key>foreground</key>
<string>#E6E1DC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff Header</string>
<key>scope</key>
<string>meta.diff.header, meta.separator.diff, meta.diff.index, meta.diff.range</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#2F33AB</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>2ABC646D-06F3-48A5-94E9-18EF34474C97</string>
</dict>
</plist>

View File

@@ -0,0 +1,285 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Merbivore Soft</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#1C1C1C</string>
<key>caret</key>
<string>#FFFFFF</string>
<key>foreground</key>
<string>#E6E1DC</string>
<key>invisibles</key>
<string>#404040</string>
<key>lineHighlight</key>
<string>#333435</string>
<key>selection</key>
<string>#392243E0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Source</string>
<key>scope</key>
<string>source</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#AC4BB8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword, storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FC803A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function (definition)</string>
<key>scope</key>
<string>entity.name.function, keyword.other.name-of-parameter.objc</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class (definition)</string>
<key>scope</key>
<string>entity.name</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Class inheritence</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#C984CD</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#7FC578</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable.language, variable.other</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constant</string>
<key>scope</key>
<string>constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#68C1D8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constant (other variable)</string>
<key>scope</key>
<string>variable.other.constant</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Constant (built-in)</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#E1C582</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#8EC65F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library type</string>
<key>scope</key>
<string>support.type</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#68C1D8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8EC65F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup tag</string>
<key>scope</key>
<string>meta.tag, declaration.tag, entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FC803A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#EAF1A3</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FE3838</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String interpolation</string>
<key>scope</key>
<string>constant.character.escaped, constant.character.escape, string source, string source.ruby</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#B3E5B4</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff Add</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#6FC58B</string>
<key>foreground</key>
<string>#E6E1DC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff Remove</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#AC3735</string>
<key>foreground</key>
<string>#E6E1DC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff Header</string>
<key>scope</key>
<string>meta.diff.header, meta.separator.diff, meta.diff.index, meta.diff.range</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#5A9EE1</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>B3517E4B-5243-46CF-AB04-9AE7B41DE3F2</string>
</dict>
</plist>

View File

@@ -0,0 +1,451 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>monoindustrial</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#222C28</string>
<key>caret</key>
<string>#FFFFFF</string>
<key>foreground</key>
<string>#FFFFFF</string>
<key>invisibles</key>
<string>#666C6880</string>
<key>lineHighlight</key>
<string>#0C0D0C40</string>
<key>selection</key>
<string>#91999466</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#151C19</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#666C68</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Type</string>
<key>scope</key>
<string>storage, support.type</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#C23B00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Embedded code</string>
<key>scope</key>
<string>string.unquoted.embedded, text source, string.unquoted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#151C19</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String interpolation</string>
<key>scope</key>
<string>constant.character.escaped, string source - string.unquoted.embedded, string string source</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#1A0700</string>
<key>foreground</key>
<string>#E9470000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string - string source, string source string, meta.scope.heredoc</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#1A0700</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#C23800</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E98800</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable.language, variable.other</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#648BD2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constant</string>
<key>scope</key>
<string>constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E98800</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Preprocessor line</string>
<key>scope</key>
<string>other.preprocessor</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#161D1A</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#A8B3AB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Preprocessor directive</string>
<key>scope</key>
<string>entity.name.preprocessor</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#161D1A</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#A8B3AB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function, keyword.operator, keyword.other.name-of-parameter</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#A8B3AB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class name</string>
<key>scope</key>
<string>entity.name.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#9A2F00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function parameter</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#648BD2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument and result types</string>
<key>scope</key>
<string>storage.type.method</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#666C68</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword, storage.type.function.php</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#A39E64</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#990000AD</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid trailing whitespace</string>
<key>scope</key>
<string>invalid.trailing-whitespace</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFD0D0</string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#588E60</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library object</string>
<key>scope</key>
<string>support.class, support.type, entity.name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#5778B6</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#C87500</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library variable</string>
<key>scope</key>
<string>support.other.variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#5879B7</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup XML declaration</string>
<key>scope</key>
<string>declaration.xml-processing</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#68685B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup DOCTYPE</string>
<key>scope</key>
<string>declaration.doctype</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#888888</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup DTD</string>
<key>scope</key>
<string>declaration.doctype.DTD</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#888888</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup tag</string>
<key>scope</key>
<string>declaration.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#A65EFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup name of tag</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A65EFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#909993</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Punctuation</string>
<key>scope</key>
<string>punctuation</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#90999380</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class name</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#7642B7</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Changed files (Subversion)</string>
<key>scope</key>
<string>meta.scope.changed-files.svn, markup.inserted.svn, markup.changed.svn, markup.deleted.svn</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#00000059</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Blocks, Expressions 1</string>
<key>scope</key>
<string>meta.section</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#78807B0A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Blocks, Expressions 2</string>
<key>scope</key>
<string>meta.section meta.section</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#78807B0A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Blocks, Expressions 3</string>
<key>scope</key>
<string>meta.section meta.section meta.section</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#78807B0A</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>EEA328BA-54E5-49DC-81F3-1F25BF8AF163</string>
</dict>
</plist>

View File

@@ -0,0 +1,289 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Monokai</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#272822</string>
<key>caret</key>
<string>#F8F8F0</string>
<key>foreground</key>
<string>#F8F8F2</string>
<key>invisibles</key>
<string>#3B3A32</string>
<key>lineHighlight</key>
<string>#3E3D32</string>
<key>selection</key>
<string>#49483E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#75715E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E6DB74</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>User-defined constant</string>
<key>scope</key>
<string>constant.character, constant.other</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage type</string>
<key>scope</key>
<string>storage.type</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class name</string>
<key>scope</key>
<string>entity.name.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic underline</string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#FD971F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag name</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library class/type</string>
<key>scope</key>
<string>support.type, support.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library variable</string>
<key>scope</key>
<string>support.other.variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#F92672</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F8F8F0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid deprecated</string>
<key>scope</key>
<string>invalid.deprecated</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#AE81FF</string>
<key>foreground</key>
<string>#F8F8F0</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>D8D5E82E-3D5B-46B5-B38E-8C841C21347D</string>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,701 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>author</key>
<string>Mats Persson</string>
<key>name</key>
<string>Pastels on Dark</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#211E1E</string>
<key>caret</key>
<string>#FFFFFF</string>
<key>foreground</key>
<string>#DADADA</string>
<key>invisibles</key>
<string>#4F4D4D</string>
<key>lineHighlight</key>
<string>#353030</string>
<key>selection</key>
<string>#73597E80</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comments</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#555555</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comments Block</string>
<key>scope</key>
<string>comment.block</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#555555</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Strings</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AD9361</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Numbers</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#CCCCCC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keywords</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#A1A1FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Preprocessor Line</string>
<key>scope</key>
<string>meta.preprocessor</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#2F006E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Preprocessor Directive</string>
<key>scope</key>
<string>keyword.control.import</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Functions</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#A1A1FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function result</string>
<key>scope</key>
<string>declaration.function function-result</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0000FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>declaration.function function-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument name</string>
<key>scope</key>
<string>declaration.function argument-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument type</string>
<key>scope</key>
<string>declaration.function function-arg-type</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0000FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument variable</string>
<key>scope</key>
<string>declaration.function function-argument</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class name</string>
<key>scope</key>
<string>declaration.class class-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class inheritance</string>
<key>scope</key>
<string>declaration.class class-inheritance</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FF0000</string>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#FFF9F9</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid Trailing Whitespace</string>
<key>scope</key>
<string>invalid.deprecated.trailing-whitespace</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFD0D0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Section</string>
<key>scope</key>
<string>declaration.section section-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Interpolation</string>
<key>scope</key>
<string>string.interpolation</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#C10006</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Regular Expressions</string>
<key>scope</key>
<string>string.regexp</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#666666</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variables</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#C1C144</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constants</string>
<key>scope</key>
<string>constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#6782D3</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Character Constants</string>
<key>scope</key>
<string>constant.character</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#AFA472</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Language Constants</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#DE8E30</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Embedded Code</string>
<key>scope</key>
<string>embedded</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag name</string>
<key>scope</key>
<string>keyword.markup.element-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#858EF4</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Attribute name</string>
<key>scope</key>
<string>keyword.markup.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#9B456F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Attribute with Value</string>
<key>scope</key>
<string>meta.attribute-with-value</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#9B456F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Exceptions</string>
<key>scope</key>
<string>keyword.exception</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#C82255</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Operators</string>
<key>scope</key>
<string>keyword.operator</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#47B8D6</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Control Structures</string>
<key>scope</key>
<string>keyword.control</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#6969FA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>HTML: DocInfo XML</string>
<key>scope</key>
<string>meta.tag.preprocessor.xml</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#68685B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>HTML: DocType</string>
<key>scope</key>
<string>meta.tag.sgml.doctype</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#888888</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>HTML: DocInfo DTD</string>
<key>scope</key>
<string>string.quoted.docinfo.doctype.DTD</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>HTML: ServerSide Includes</string>
<key>scope</key>
<string>comment.other.server-side-include.xhtml, comment.other.server-side-include.html</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#909090</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>HTML: Tag</string>
<key>scope</key>
<string>text.html declaration.tag, text.html meta.tag, text.html entity.name.tag.xhtml</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#858EF4</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>HTML: attribute=""</string>
<key>scope</key>
<string>keyword.markup.attribute-name</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#9B456F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>PHP: PHPdocs</string>
<key>scope</key>
<string>keyword.other.phpdoc.php</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#777777</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>PHP: Include() &amp; Require()</string>
<key>scope</key>
<string>keyword.other.include.php</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#C82255</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>PHP: Constants Core Predefined</string>
<key>scope</key>
<string>support.constant.core.php</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#DE8E20</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>PHP: Constants Standard Predefined</string>
<key>scope</key>
<string>support.constant.std.php</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#DE8E10</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>PHP: Variables Globals</string>
<key>scope</key>
<string>variable.other.global.php</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B72E1D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>PHP: Variables Safer Globals</string>
<key>scope</key>
<string>variable.other.global.safer.php</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#00FF00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>PHP: Strings Single-Quoted</string>
<key>scope</key>
<string>string.quoted.single.php</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#BFA36D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>PHP: Keywords Storage</string>
<key>scope</key>
<string>keyword.storage.php</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#6969FA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>PHP: Strings Double-Quoted</string>
<key>scope</key>
<string>string.quoted.double.php</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AD9361</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS: Selectors #ID</string>
<key>scope</key>
<string>entity.other.attribute-name.id.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#EC9E00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS: Selectors &lt;Elements&gt;</string>
<key>scope</key>
<string>entity.name.tag.css</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#B8CD06</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS: Selectors .ClassName</string>
<key>scope</key>
<string>entity.other.attribute-name.class.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#EDCA06</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS: Selectors :PseudoClass</string>
<key>scope</key>
<string>entity.other.attribute-name.pseudo-class.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#2E759C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS: Invalid Comma</string>
<key>scope</key>
<string>invalid.bad-comma.css</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FF0000</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS: Property Value</string>
<key>scope</key>
<string>support.constant.property-value.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#9B2E4D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS: Property Keyword</string>
<key>scope</key>
<string>support.type.property-name.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E1C96B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS: Property Colours</string>
<key>scope</key>
<string>constant.other.rgb-value.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#666633</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS: Font Names</string>
<key>scope</key>
<string>support.constant.font-name.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#666633</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>TMLangDef: Keys</string>
<key>scope</key>
<string>support.constant.tm-language-def, support.constant.name.tm-language-def</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#7171F3</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS: Units</string>
<key>scope</key>
<string>keyword.other.unit.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#6969FA</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>343011CC-B7DF-11D9-B5C6-000D93C8BE28</string>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,437 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>BBEdit</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFFFFF</string>
<key>caret</key>
<string>#000000</string>
<key>foreground</key>
<string>#000000</string>
<key>invisibles</key>
<string>#BFBFBF</string>
<key>lineHighlight</key>
<string>#00000012</string>
<key>selection</key>
<string>#FFD420</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#804000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword, storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#0000FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FF0080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FF0080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>User-defined constant</string>
<key>scope</key>
<string>constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#C5060B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#004080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable.language, variable.other</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#006600</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String interpolation</string>
<key>scope</key>
<string>constant.character.escaped, constant.character.escape, string source</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#33CC33</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Preprocessor line</string>
<key>scope</key>
<string>other.preprocessor</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#1A921C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Preprocessor directive</string>
<key>scope</key>
<string>entity.name.preprocessor</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#0C450D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function, keyword.other.name-of-parameter.objc</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#0000A2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class name</string>
<key>scope</key>
<string>entity.name.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class name</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function parameter</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument and result types</string>
<key>scope</key>
<string>storage.type.method</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#70727E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Section</string>
<key>scope</key>
<string>meta.section entity.name.section, declaration.section entity.name.section</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#0000FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library object</string>
<key>scope</key>
<string>support.class, support.type</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#6D79DE</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#06960E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library variable</string>
<key>scope</key>
<string>support.other.variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#21439C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JS: Operator</string>
<key>scope</key>
<string>keyword.operator.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#687687</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#990000</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid trailing whitespace</string>
<key>scope</key>
<string>invalid.trailing-whitespace</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFD0D0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Embedded source</string>
<key>scope</key>
<string>text source, string.unquoted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#427FF51A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup XML declaration</string>
<key>scope</key>
<string>meta.xml-processing, declaration.xml-processing</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#68685B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup DOCTYPE</string>
<key>scope</key>
<string>meta.doctype, declaration.doctype</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#888888</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup DTD</string>
<key>scope</key>
<string>meta.doctype.DTD, declaration.doctype.DTD</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup tag</string>
<key>scope</key>
<string>meta.tag, declaration.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#1C02FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup name of tag</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Heading</string>
<key>scope</key>
<string>markup.heading</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#0C07FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Quote</string>
<key>scope</key>
<string>markup.quote</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: List</string>
<key>scope</key>
<string>markup.list</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B90690</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>0047F0B6-DB9C-4533-A155-5BAA91BD70F2</string>
</dict>
</plist>

View File

@@ -0,0 +1,514 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>author</key>
<string>Michael Sheets</string>
<key>name</key>
<string>Tango in Twilight</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#000000F2</string>
<key>caret</key>
<string>#A7A7A7</string>
<key>foreground</key>
<string>#F8FFF6</string>
<key>invisibles</key>
<string>#FFFFFF40</string>
<key>lineHighlight</key>
<string>#FFFFFF08</string>
<key>selection</key>
<string>#6930A299</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#686A78</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constant</string>
<key>scope</key>
<string>constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CF6A4C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Entity</string>
<key>scope</key>
<string>entity</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#9B703F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#C4A000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F9EE98</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#4E9A06</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support</string>
<key>scope</key>
<string>support</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#75507B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#729FCF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid Deprecated</string>
<key>scope</key>
<string>invalid.deprecated</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic underline</string>
<key>foreground</key>
<string>#D2A8A1</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid Illegal</string>
<key>scope</key>
<string>invalid.illegal</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#562D56BF</string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>-----------------------------------</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>♦ Embedded Source</string>
<key>scope</key>
<string>text source</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#B0B3BA14</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ Embedded Source (Bright)</string>
<key>scope</key>
<string>text.html.ruby source</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#B1B3BA21</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ Entity inherited-class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#9B5C2E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ String embedded-source</string>
<key>scope</key>
<string>string source</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#DAEFA3</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ String constant</string>
<key>scope</key>
<string>string constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#DDF2A4</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ String.regexp</string>
<key>scope</key>
<string>string.regexp</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#E9C062</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ String.regexp.«special»</string>
<key>scope</key>
<string>string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CF7D34</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ String variable</string>
<key>scope</key>
<string>string variable</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8A9A95</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ Support.function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#DAD085</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ Support.constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#CF6A4C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>c C/C++ Preprocessor Line</string>
<key>scope</key>
<string>meta.preprocessor.c</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8996A8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>c C/C++ Preprocessor Directive</string>
<key>scope</key>
<string>meta.preprocessor.c keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AFC4DB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>✘ Doctype/XML Processing</string>
<key>scope</key>
<string>meta.tag.sgml.doctype, meta.tag.sgml.doctype entity, meta.tag.sgml.doctype string, meta.tag.preprocessor.xml, meta.tag.preprocessor.xml entity, meta.tag.preprocessor.xml string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#494949</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>✘ Meta.tag.«all»</string>
<key>scope</key>
<string>declaration.tag, declaration.tag entity, meta.tag, meta.tag entity</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AC885B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>✘ Meta.tag.inline</string>
<key>scope</key>
<string>declaration.tag.inline, declaration.tag.inline entity, source entity.name.tag, source entity.other.attribute-name, meta.tag.inline, meta.tag.inline entity</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E0C589</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css tag-name</string>
<key>scope</key>
<string>meta.selector.css entity.name.tag</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CDA869</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css:pseudo-class</string>
<key>scope</key>
<string>meta.selector.css entity.other.attribute-name.tag.pseudo-class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8F9D6A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css#id</string>
<key>scope</key>
<string>meta.selector.css entity.other.attribute-name.id</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8B98AB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css.class</string>
<key>scope</key>
<string>meta.selector.css entity.other.attribute-name.class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#9B703F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css property-name:</string>
<key>scope</key>
<string>support.type.property-name.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FCE94F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css property-value;</string>
<key>scope</key>
<string>meta.property-group support.constant.property-value.css, meta.property-value support.constant.property-value.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#C4A000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css @at-rule</string>
<key>scope</key>
<string>meta.preprocessor.at-rule keyword.control.at-rule</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8693A5</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css additional-constants</string>
<key>scope</key>
<string>meta.property-value support.constant.named-color.css, meta.property-value constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CA7840</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css constructor.argument</string>
<key>scope</key>
<string>meta.constructor.argument.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8F9D6A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>⎇ diff.header</string>
<key>scope</key>
<string>meta.diff, meta.diff.header, meta.separator</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#0E2231</string>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>⎇ diff.deleted</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#420E09</string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>⎇ diff.changed</string>
<key>scope</key>
<string>markup.changed</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#4A410D</string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>⎇ diff.inserted</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#253B22</string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: List</string>
<key>scope</key>
<string>markup.list</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#C4A000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Heading</string>
<key>scope</key>
<string>markup.heading</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CC0000</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>D00855FD-E400-4887-A6EB-DA4583F68EEC</string>
</dict>
</plist>

View File

@@ -0,0 +1,792 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>IR_White</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFFFFF</string>
<key>caret</key>
<string>#A7A7A7</string>
<key>foreground</key>
<string>#010101</string>
<key>invisibles</key>
<string>#CAE2FB3D</string>
<key>lineHighlight</key>
<string>#FFFFFF0D</string>
<key>selection</key>
<string>#E0E0ED</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#898989</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Entity</string>
<key>scope</key>
<string>entity</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#A15001</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#016692</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class</string>
<key>scope</key>
<string>entity.name.type</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
<key>foreground</key>
<string>#646409</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support</string>
<key>scope</key>
<string>support</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#646409</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#877611</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage.modifier</string>
<key>scope</key>
<string>storage.modifier</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#014A69</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constant</string>
<key>scope</key>
<string>constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#333366</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#009F78</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#8C008A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Punctuation</string>
<key>scope</key>
<string>punctuation</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#696989</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid Deprecated</string>
<key>scope</key>
<string>invalid.deprecated</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic underline</string>
<key>foreground</key>
<string>#A00294</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid Illegal</string>
<key>scope</key>
<string>invalid.illegal</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#DF68D9BF</string>
<key>foreground</key>
<string>#A00294</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>-----------------------------------</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>♦ Embedded Source (Bright)</string>
<key>scope</key>
<string>text source</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#B1B3BA08</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ Entity inherited-class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#D19264</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ String embedded-variable</string>
<key>scope</key>
<string>source string source</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ String punctuation</string>
<key>scope</key>
<string>source string source punctuation.section.embedded</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#00FF00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ String constant</string>
<key>scope</key>
<string>string constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#00FF00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ String.regexp</string>
<key>scope</key>
<string>string.regexp</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#9D7416</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ String.regexp.«special»</string>
<key>scope</key>
<string>string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FF8000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ String.regexp.group</string>
<key>scope</key>
<string>string.regexp.group</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#0000001A</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#B08C39</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ String.regexp.character-class</string>
<key>scope</key>
<string>string.regexp.character-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#C29B4E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ String variable</string>
<key>scope</key>
<string>string variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#756565</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ Support.function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#7A7025</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ Support.constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#582B00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>c C/C++ Preprocessor Line</string>
<key>scope</key>
<string>meta.preprocessor.c</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#765757</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>c C/C++ Preprocessor Directive</string>
<key>scope</key>
<string>meta.preprocessor.c keyword</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#502424</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>j Cast</string>
<key>scope</key>
<string>meta.cast</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#010101</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>✘ Doctype/XML Processing</string>
<key>scope</key>
<string>meta.sgml.html meta.doctype, meta.sgml.html meta.doctype entity, meta.sgml.html meta.doctype string, meta.xml-processing, meta.xml-processing entity, meta.xml-processing string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#010101</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>✘ Meta.tag.«all»</string>
<key>scope</key>
<string>meta.tag, meta.tag entity</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#0067C2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>✘ Meta.tag.inline</string>
<key>scope</key>
<string>source entity.name.tag, source entity.other.attribute-name, meta.tag.inline, meta.tag.inline entity</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#00528B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>✘ Meta.tag.attribute-name</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#BC4D00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>✘ Namespaces</string>
<key>scope</key>
<string>entity.name.tag.namespace, entity.other.attribute-name.namespace</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#9B431E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css tag-name</string>
<key>scope</key>
<string>meta.selector.css entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
<key>foreground</key>
<string>#0067C2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css:pseudo-class</string>
<key>scope</key>
<string>meta.selector.css entity.other.attribute-name.tag.pseudo-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#628795</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css#id</string>
<key>scope</key>
<string>meta.selector.css entity.other.attribute-name.id</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#667587</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css.class</string>
<key>scope</key>
<string>meta.selector.css entity.other.attribute-name.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#2A85CF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css property-name:</string>
<key>scope</key>
<string>support.type.property-name.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css property-value;</string>
<key>scope</key>
<string>meta.property-group support.constant.property-value.css, meta.property-value support.constant.property-value.css</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#675C06</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css @at-rule</string>
<key>scope</key>
<string>meta.preprocessor.at-rule keyword.control.at-rule</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#795A5A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css additional-constants</string>
<key>scope</key>
<string>meta.property-value support.constant.named-color.css, meta.property-value constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#3C785D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css constructor.argument</string>
<key>scope</key>
<string>meta.constructor.argument.css</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#628795</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>⎇ diff.header</string>
<key>scope</key>
<string>meta.diff, meta.diff.header</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#0E2231</string>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>⎇ diff.deleted</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#420E09</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>⎇ diff.changed</string>
<key>scope</key>
<string>markup.changed</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#4A410D</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>⎇ diff.inserted</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#253B22</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>--------------------------------</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Markup: Italic</string>
<key>scope</key>
<string>markup.italic</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#9D7416</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Bold</string>
<key>scope</key>
<string>markup.bold</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#9D7416</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Underline</string>
<key>scope</key>
<string>markup.underline</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
<key>foreground</key>
<string>#9B431E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Quote</string>
<key>scope</key>
<string>markup.quote</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FEE09C12</string>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#46391E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Heading</string>
<key>scope</key>
<string>markup.heading, markup.heading entity</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#632D04</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D95B06</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: List</string>
<key>scope</key>
<string>markup.list</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#46391E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Raw</string>
<key>scope</key>
<string>markup.raw</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#B1B3BA08</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#7C4CA8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Comment</string>
<key>scope</key>
<string>markup comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#C84D09</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Separator</string>
<key>scope</key>
<string>meta.separator</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#242424</string>
<key>foreground</key>
<string>#746DFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Log Entry</string>
<key>scope</key>
<string>meta.line.entry.logfile, meta.line.exit.logfile</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#EEEEEE29</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Log Entry Error</string>
<key>scope</key>
<string>meta.line.error.logfile</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#751012</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>BC53AA17-9977-4679-9CEF-F047BCC92152</string>
</dict>
</plist>

View File

@@ -0,0 +1,186 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>comment</key>
<string>http://chriskempson.com</string>
<key>name</key>
<string>Tomorrow</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFFFFF</string>
<key>caret</key>
<string>#AEAFAD</string>
<key>foreground</key>
<string>#4D4D4C</string>
<key>invisibles</key>
<string>#D1D1D1</string>
<key>lineHighlight</key>
<string>#EFEFEF</string>
<key>selection</key>
<string>#D6D6D6</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8E908C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Foreground</string>
<key>scope</key>
<string>keyword.operator.class, constant.other, source.php.embedded.line</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#666969</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable, String Link, Regular Expression, Tag Name</string>
<key>scope</key>
<string>variable, support.other.variable, string.other.link, string.regexp, entity.name.tag, entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#C82829</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number, Constant, Function Argument, Tag Attribute, Embedded</string>
<key>scope</key>
<string>constant.numeric, constant.language, support.constant, constant.character, variable.parameter, punctuation.section.embedded, keyword.other.unit</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F5871F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class, Support</string>
<key>scope</key>
<string>entity.name.class, entity.name.type.class, support.type, support.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#C99E00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String, Symbols, Inherited Class, Markup Heading</string>
<key>scope</key>
<string>string, constant.other.symbol, entity.other.inherited-class, markup.heading</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#718C00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Operator, Misc</string>
<key>scope</key>
<string>keyword.operator, constant.other.color</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#3E999F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function, Special Method, Block Level</string>
<key>scope</key>
<string>entity.name.function, meta.function-call, support.function, keyword.other.special-method, meta.block-level</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#4271AE</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword, Storage</string>
<key>scope</key>
<string>keyword, storage, storage.type</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#8959A8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#C82829</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Separator</string>
<key>scope</key>
<string>meta.separator</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#4271AE</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Deprecated</string>
<key>scope</key>
<string>invalid.deprecated</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#8959A8</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>82CCD69C-F1B1-4529-B39E-780F91F07604</string>
</dict>
</plist>

View File

@@ -0,0 +1,647 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>comment</key>
<string>Tomorrow Night</string>
<key>name</key>
<string>Tomorrow Night</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#1D1F21</string>
<key>caret</key>
<string>#7E807D</string>
<key>foreground</key>
<string>#AFB0AE</string>
<key>invisibles</key>
<string>#BFBFBF</string>
<key>lineHighlight</key>
<string>#282A2E</string>
<key>selection</key>
<string>#373B41</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tomorrow Night</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>By Chris Kempson</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>http://tomorrowtheme.com</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#8E8F8D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#A7B367</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String Embedded Source</string>
<key>scope</key>
<string>string source</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D09562</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D09562</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D56C69</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>User-defined constant</string>
<key>scope</key>
<string>constant.character, constant.other</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D56C69</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#82A3BF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support</string>
<key>scope</key>
<string>support</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D56C69</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#BA9AC2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class name</string>
<key>scope</key>
<string>entity.name.class, entity.name.type.class, entity.name.type.module</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#82A3BF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D56C69</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#82A3BF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#82A3BF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag name</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#BA9AC2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#BA9AC2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#C3A2CC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#AFB0AE</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class Variable</string>
<key>scope</key>
<string>variable.other, variable.js, punctuation.separator.variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#82A3BF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Language Constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D09562</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Meta Brace</string>
<key>scope</key>
<string>punctuation.section.embedded -(source string source punctuation.section.embedded), meta.brace.erb.html</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#A7B367</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FF0B00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Normal Variable</string>
<key>scope</key>
<string>variable.other.php, variable.other.normal</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D56C69</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function Call</string>
<key>scope</key>
<string>meta.function-call</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#82A3BF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function Object</string>
<key>scope</key>
<string>meta.function-call.object</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#BA9AC2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function Call Variable</string>
<key>scope</key>
<string>variable.other.property</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#BA9AC2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword Control</string>
<key>scope</key>
<string>keyword.control</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#BA9AC2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag</string>
<key>scope</key>
<string>meta.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#BB99C1</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag Name</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#BF9CBE</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Doctype</string>
<key>scope</key>
<string>meta.doctype, meta.tag.sgml-declaration.doctype, meta.tag.sgml.doctype</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#A7B367</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag Inline Source</string>
<key>scope</key>
<string>meta.tag.inline source, text.html.php.source</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#A7B367</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag Other</string>
<key>scope</key>
<string>meta.tag.other, entity.name.tag.style, entity.name.tag.script, meta.tag.block.script, source.js.embedded punctuation.definition.tag.html, source.css.embedded punctuation.definition.tag.html</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#C3A2CC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag Attribute</string>
<key>scope</key>
<string>entity.other.attribute-name, meta.tag punctuation.definition.string</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#C2A2CC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag Value</string>
<key>scope</key>
<string>meta.tag string -source -punctuation, text source text meta.tag string -punctuation</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#82A3BF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Meta Brace</string>
<key>scope</key>
<string>punctuation.section.embedded -(source string source punctuation.section.embedded), meta.brace.erb.html</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D09562</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>HTML ID</string>
<key>scope</key>
<string>meta.toc-list.id</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#C2A2CC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS ID</string>
<key>scope</key>
<string>meta.selector.css entity.other.attribute-name.id</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#BA9AC2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS Property Name</string>
<key>scope</key>
<string>support.type.property-name.css</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#82A3BF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS Property Value</string>
<key>scope</key>
<string>meta.property-group support.constant.property-value.css, meta.property-value support.constant.property-value.css</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D56C69</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JavaScript Variable</string>
<key>scope</key>
<string>variable.language.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D66C68</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>PHP Function Call</string>
<key>scope</key>
<string>meta.function-call.object.php</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D3B96B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>PHP Single Quote HMTL Fix</string>
<key>scope</key>
<string>punctuation.definition.string.end.php, punctuation.definition.string.begin.php</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A8B06E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>PHP Parenthesis HMTL Fix</string>
<key>scope</key>
<string>source.php.embedded.line.html</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AFB0AE</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Ruby Symbol</string>
<key>scope</key>
<string>constant.other.symbol.ruby</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#A7B467</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Ruby Variable</string>
<key>scope</key>
<string>variable.language.ruby</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D3B96B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Ruby Special Method</string>
<key>scope</key>
<string>keyword.other.special-method.ruby</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D3B96C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Ruby Embedded Source</string>
<key>scope</key>
<string>source.ruby.embedded.source</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D09562</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SQL</string>
<key>scope</key>
<string>keyword.other.DML.sql</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D3B96B</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>46647F37-962F-491B-84F4-770380692011</string>
</dict>
</plist>

View File

@@ -0,0 +1,186 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>comment</key>
<string>http://chriskempson.com</string>
<key>name</key>
<string>Tomorrow Night - Blue</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#002451</string>
<key>caret</key>
<string>#FFFFFF</string>
<key>foreground</key>
<string>#FFFFFF</string>
<key>invisibles</key>
<string>#404F7D</string>
<key>lineHighlight</key>
<string>#00346E</string>
<key>selection</key>
<string>#003F8E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#7285B7</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Foreground, Operator</string>
<key>scope</key>
<string>keyword.operator.class, keyword.operator, constant.other, source.php.embedded.line</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable, String Link, Regular Expression, Tag Name</string>
<key>scope</key>
<string>variable, support.other.variable, string.other.link, string.regexp, entity.name.tag, entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF9DA4</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number, Constant, Function Argument, Tag Attribute, Embedded</string>
<key>scope</key>
<string>constant.numeric, constant.language, support.constant, constant.character, variable.parameter, punctuation.section.embedded, keyword.other.unit</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FFC58F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class, Support</string>
<key>scope</key>
<string>entity.name.class, entity.name.type.class, support.type, support.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FFEEAD</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String, Symbols, Inherited Class, Markup Heading</string>
<key>scope</key>
<string>string, constant.other.symbol, entity.other.inherited-class, markup.heading</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D1F1A9</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Operator, Misc</string>
<key>scope</key>
<string>keyword.operator, constant.other.color</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#99FFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function, Special Method, Block Level</string>
<key>scope</key>
<string>entity.name.function, meta.function-call, support.function, keyword.other.special-method, meta.block-level</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#BBDAFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword, Storage</string>
<key>scope</key>
<string>keyword, storage, storage.type, entity.name.tag.css</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#EBBBFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#F99DA5</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Separator</string>
<key>scope</key>
<string>meta.separator</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#BBDAFE</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Deprecated</string>
<key>scope</key>
<string>invalid.deprecated</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#EBBBFF</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>3F4BB232-3C3A-4396-99C0-06A9573715E9</string>
</dict>
</plist>

View File

@@ -0,0 +1,186 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>comment</key>
<string>http://chriskempson.com</string>
<key>name</key>
<string>Tomorrow Night - Bright</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#000000</string>
<key>caret</key>
<string>#9F9F9F</string>
<key>foreground</key>
<string>#DEDEDE</string>
<key>invisibles</key>
<string>#343434</string>
<key>lineHighlight</key>
<string>#2A2A2A</string>
<key>selection</key>
<string>#424242</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#969896</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Foreground</string>
<key>scope</key>
<string>keyword.operator.class, constant.other, source.php.embedded.line</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#EEEEEE</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable, String Link, Regular Expression, Tag Name</string>
<key>scope</key>
<string>variable, support.other.variable, string.other.link, string.regexp, entity.name.tag, entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D54E53</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number, Constant, Function Argument, Tag Attribute, Embedded</string>
<key>scope</key>
<string>constant.numeric, constant.language, support.constant, constant.character, variable.parameter, punctuation.section.embedded, keyword.other.unit</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#E78C45</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class, Support</string>
<key>scope</key>
<string>entity.name.class, entity.name.type.class, support.type, support.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#E7C547</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String, Symbols, Inherited Class, Markup Heading</string>
<key>scope</key>
<string>string, constant.other.symbol, entity.other.inherited-class, markup.heading</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#B9CA4A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Operator, Misc</string>
<key>scope</key>
<string>keyword.operator, constant.other.color</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#70C0B1</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function, Special Method, Block Level</string>
<key>scope</key>
<string>entity.name.function, meta.function-call, support.function, keyword.other.special-method, meta.block-level</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#7AA6DA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword, Storage</string>
<key>scope</key>
<string>keyword, storage, storage.type, entity.name.tag.css</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#C397D8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#DF5F5F</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#CED2CF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Separator</string>
<key>scope</key>
<string>meta.separator</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#82A3BF</string>
<key>foreground</key>
<string>#CED2CF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Deprecated</string>
<key>scope</key>
<string>invalid.deprecated</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#B798BF</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#CED2CF</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>33D8C715-AD3A-455B-8DF2-56F708909FFE</string>
</dict>
</plist>

View File

@@ -0,0 +1,186 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>comment</key>
<string>http://chriskempson.com</string>
<key>name</key>
<string>Tomorrow Night - Eighties</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#2D2D2D</string>
<key>caret</key>
<string>#CCCCCC</string>
<key>foreground</key>
<string>#CCCCCC</string>
<key>invisibles</key>
<string>#6A6A6A</string>
<key>lineHighlight</key>
<string>#393939</string>
<key>selection</key>
<string>#515151</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#999999</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Foreground</string>
<key>scope</key>
<string>keyword.operator.class, constant.other, source.php.embedded.line</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#CCCCCC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable, String Link, Tag Name</string>
<key>scope</key>
<string>variable, support.other.variable, string.other.link, entity.name.tag, entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F2777A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number, Constant, Function Argument, Tag Attribute, Embedded</string>
<key>scope</key>
<string>constant.numeric, constant.language, support.constant, constant.character, variable.parameter, punctuation.section.embedded, keyword.other.unit</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F99157</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class, Support</string>
<key>scope</key>
<string>entity.name.class, entity.name.type.class, support.type, support.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FFCC66</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String, Symbols, Inherited Class, Markup Heading</string>
<key>scope</key>
<string>string, constant.other.symbol, entity.other.inherited-class, markup.heading</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#99CC99</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Operator, Misc</string>
<key>scope</key>
<string>keyword.operator, constant.other.color</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#66CCCC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function, Special Method, Block Level</string>
<key>scope</key>
<string>entity.name.function, meta.function-call, support.function, keyword.other.special-method, meta.block-level</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#99CCCC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword, Storage</string>
<key>scope</key>
<string>keyword, storage, storage.type, entity.name.tag.css</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#CC99CC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#F2777A</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#CDCDCD</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Separator</string>
<key>scope</key>
<string>meta.separator</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#99CCCC</string>
<key>foreground</key>
<string>#CDCDCD</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Deprecated</string>
<key>scope</key>
<string>invalid.deprecated</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#CC99CC</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#CDCDCD</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>DE477E5B-BD4D-46B0-BF80-2EA32A2814D5</string>
</dict>
</plist>

View File

@@ -0,0 +1,610 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>author</key>
<string>Michael Sheets</string>
<key>gutterSettings</key>
<dict>
<key>background</key>
<string>#232323</string>
<key>divider</key>
<string>#414143</string>
<key>foreground</key>
<string>#E2E2E2</string>
<key>selectionBackground</key>
<string>#414143</string>
<key>selectionBorder</key>
<string>#484848</string>
<key>selectionForeground</key>
<string>#BABABA</string>
</dict>
<key>name</key>
<string>Twilight</string>
<key>semanticClass</key>
<string>theme.dark.twilight</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#141414</string>
<key>caret</key>
<string>#A7A7A7</string>
<key>foreground</key>
<string>#F8F8F8</string>
<key>invisibles</key>
<string>#FFFFFF40</string>
<key>lineHighlight</key>
<string>#FFFFFF08</string>
<key>selection</key>
<string>#DDF0FF33</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Foldings</string>
<key>scope</key>
<string>deco.folding</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#5A6A65</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#5F5A60</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constant</string>
<key>scope</key>
<string>constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CF6A4C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Entity</string>
<key>scope</key>
<string>entity</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#9B703F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#CDA869</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F9EE98</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#8F9D6A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support</string>
<key>scope</key>
<string>support</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#9B859D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#7587A6</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid Deprecated</string>
<key>scope</key>
<string>invalid.deprecated</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic underline</string>
<key>foreground</key>
<string>#D2A8A1</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid Illegal</string>
<key>scope</key>
<string>invalid.illegal</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#562D56BF</string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>-----------------------------------</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>♦ Embedded Source</string>
<key>scope</key>
<string>meta.embedded.block, punctuation.whitespace.embedded</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#B0B3BA14</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ Embedded Source (Bright)</string>
<key>scope</key>
<string>meta.embedded.line</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#B1B3BA21</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ Entity inherited-class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#9B5C2E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ String embedded-source</string>
<key>scope</key>
<string>string meta.embedded</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#DAEFA3</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ String constant</string>
<key>scope</key>
<string>string constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#DDF2A4</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ String.regexp</string>
<key>scope</key>
<string>string.regexp</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#E9C062</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ String.regexp.«special»</string>
<key>scope</key>
<string>string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CF7D34</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ String variable</string>
<key>scope</key>
<string>string variable</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8A9A95</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ Support.function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#DAD085</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ Support.type</string>
<key>scope</key>
<string>support.type</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#9B859D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>♦ Support.constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#CF6A4C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>c C/C++ Preprocessor Line</string>
<key>scope</key>
<string>meta.preprocessor.c, source.swift meta.preprocessor</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8996A8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>c C/C++ Preprocessor Directive</string>
<key>scope</key>
<string>meta.preprocessor.c keyword, source.swift meta.preprocessor keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AFC4DB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>✘ Doctype/XML Processing</string>
<key>scope</key>
<string>meta.tag.metadata.doctype, meta.tag.metadata.doctype entity, meta.tag.metadata.doctype string, meta.tag.metadata.processing.xml, meta.tag.metadata.processing.xml entity, meta.tag.metadata.processing.xml string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#494949</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>✘ Meta.tag.«all»</string>
<key>scope</key>
<string>declaration.tag, declaration.tag entity, meta.tag, meta.tag entity</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AC885B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>✘ Meta.tag.inline</string>
<key>scope</key>
<string>declaration.tag.inline, declaration.tag.inline entity, meta.tag.inline, meta.tag.inline entity</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E0C589</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css tag-name</string>
<key>scope</key>
<string>meta.selector.css entity.name.tag</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CDA869</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css:pseudo-class</string>
<key>scope</key>
<string>meta.selector.css entity.other.attribute-name.tag.pseudo-class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8F9D6A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css#id</string>
<key>scope</key>
<string>meta.selector.css entity.other.attribute-name.id</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8B98AB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css.class</string>
<key>scope</key>
<string>meta.selector.css entity.other.attribute-name.class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#9B703F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css property-name:</string>
<key>scope</key>
<string>support.type.property-name.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#C5AF75</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css property-value;</string>
<key>scope</key>
<string>meta.property-group support.constant.property-value.css, meta.property-value support.constant.property-value.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F9EE98</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css @at-rule</string>
<key>scope</key>
<string>meta.preprocessor.at-rule keyword.control.at-rule</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8693A5</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css additional-constants</string>
<key>scope</key>
<string>meta.property-value support.constant.named-color.css, meta.property-value constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CA7840</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>§ css constructor.argument</string>
<key>scope</key>
<string>meta.constructor.argument.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8F9D6A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>⎇ diff.header</string>
<key>scope</key>
<string>meta.diff, meta.diff.header, meta.separator, meta.diff.range, meta.diff.index</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#0E2231</string>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>⎇ diff.deleted</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#420E09</string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>⎇ diff.changed</string>
<key>scope</key>
<string>markup.changed</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#4A410D</string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>⎇ diff.inserted</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#253B22</string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: List</string>
<key>scope</key>
<string>markup.list</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F9EE98</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Heading</string>
<key>scope</key>
<string>markup.heading</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CF6A4C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Raw Block</string>
<key>scope</key>
<string>markup.raw.block</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#B0B3BA14</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Test: 1</string>
<key>scope</key>
<string>meta.test1</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#0E2231C5</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Test: 2</string>
<key>scope</key>
<string>meta.test2</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#420E0990</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Test: 3</string>
<key>scope</key>
<string>meta.test3</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#4A410D90</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Test: 4</string>
<key>scope</key>
<string>meta.test4</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#253B2290</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>766026CB-703D-4610-B070-8DE07D967C5F</string>
</dict>
</plist>

View File

@@ -0,0 +1,447 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Vibrant Ink</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#000000</string>
<key>caret</key>
<string>#FFFFFF</string>
<key>foreground</key>
<string>#FFFFFF</string>
<key>invisibles</key>
<string>#404040</string>
<key>lineHighlight</key>
<string>#333300</string>
<key>selection</key>
<string>#35493CE0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Text base</string>
<key>scope</key>
<string>text</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#0F0F0F</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inline Ruby Html</string>
<key>scope</key>
<string>source.ruby.rails.embedded.html</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Ruby Html</string>
<key>scope</key>
<string>text.html.ruby</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#101010</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Ruby Number</string>
<key>scope</key>
<string>constant.numeric.ruby</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CCFF33</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Ruby source</string>
<key>scope</key>
<string>source.ruby</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Source base</string>
<key>scope</key>
<string>source</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#000000</string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#9933CC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constant</string>
<key>scope</key>
<string>constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#339999</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FF6600</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Pre-processor Line</string>
<key>scope</key>
<string>keyword.preprocessor</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#EDF8F9</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Pre-processor Directive</string>
<key>scope</key>
<string>keyword.preprocessor directive</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function, storage.type.function.js</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FFCC00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Block comment</string>
<key>scope</key>
<string>source comment.block</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#070707</string>
<key>foreground</key>
<string>#772CB7</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable.other</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>ActiveRecord Function</string>
<key>scope</key>
<string>support.function.activerecord.rails</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#999966</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#66FF00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String escapes</string>
<key>scope</key>
<string>string constant.character.escape</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AAAAAA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String (executed)</string>
<key>scope</key>
<string>string.interpolated</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#CCCC33</string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Regular expression</string>
<key>scope</key>
<string>string.regexp</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#44B4CC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String (literal)</string>
<key>scope</key>
<string>string.literal</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CCCC33</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String escapes (executed)</string>
<key>scope</key>
<string>string.interpolated constant.character.escape</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#555555</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class name</string>
<key>scope</key>
<string>entity.name.class, support.class.js</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class inheritance</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag name</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Html Meta</string>
<key>scope</key>
<string>meta.tag.inline.any.html, meta.tag.block.any.html</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FF6600</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#99CC99</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Other Keywords</string>
<key>scope</key>
<string>keyword.other</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#DDE93D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS Selector</string>
<key>scope</key>
<string>meta.selector.css, entity.other.attribute-name.pseudo-class.css, entity.name.tag.wildcard.css, entity.other.attribute-name.id.css, entity.other.attribute-name.class.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF6600</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS Property</string>
<key>scope</key>
<string>support.type.property-name.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#999966</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS Other</string>
<key>scope</key>
<string>keyword.other.unit.css, constant.other.rgb-value.css, constant.numeric.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Javascript Events</string>
<key>scope</key>
<string>support.function.event-handler.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Javascript Operators</string>
<key>scope</key>
<string>keyword.operator.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Javascript Keywords</string>
<key>scope</key>
<string>keyword.control.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CCCC66</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Prototype Objects</string>
<key>scope</key>
<string>support.class.prototype.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Prototype Methods</string>
<key>scope</key>
<string>object.property.function.prototype.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF6600</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>4B7A9AA6-C472-4460-BA48-199E2624956B</string>
</dict>
</plist>

View File

@@ -0,0 +1,918 @@
{
"name": "Winter",
"semanticHighlighting": true,
"type": "dark",
"colors": {
"activityBar.activeBorder": "#86a9ff",
"activityBar.background": "#0a0c10",
"activityBar.border": "#303339",
"activityBar.foreground": "#bdc1ca",
"activityBar.inactiveForeground": "#84878f",
"activityBarBadge.background": "#86a9ff",
"activityBarBadge.foreground": "#17191e",
"badge.background": "#284992",
"badge.foreground": "#d4d8e2",
"breadcrumb.activeSelectionForeground": "#84878f",
"breadcrumb.focusForeground": "#bdc1ca",
"breadcrumb.foreground": "#84878f",
"breadcrumbPicker.background": "#24262c",
"button.background": "#86a9ff",
"button.foreground": "#17191e",
"button.hoverBackground": "#7796e0",
"button.secondaryBackground": "#303339",
"button.secondaryForeground": "#bdc1ca",
"button.secondaryHoverBackground": "#2d3036",
"charts.blue": "#8bacfe",
"charts.green": "#a1c861",
"charts.orange": "#ff9946",
"charts.purple": "#bfa0ee",
"charts.red": "#ff8d90",
"charts.yellow": "#e1b834",
"checkbox.background": "#303339",
"checkbox.border": "#303339",
"debugConsole.errorForeground": "#ff8d90",
"debugConsole.infoForeground": "#9b9ea7",
"debugConsole.sourceForeground": "#9b9ea7",
"debugConsole.warningForeground": "#e5b700",
"debugConsoleInputIcon.foreground": "#bfa0ee",
"debugExceptionWidget.background": "#851a27",
"debugExceptionWidget.border": "#962631",
"debugIcon.breakpointCurrentStackframeForeground": "#e1b834",
"debugIcon.breakpointDisabledForeground": "#9b9ea7",
"debugIcon.breakpointForeground": "#e97377",
"debugIcon.breakpointStackframeForeground": "#a1c861",
"debugIcon.breakpointUnverifiedForeground": "#9b9ea7",
"debugIcon.continueForeground": "#8bacfe",
"debugIcon.disconnectForeground": "#ff8d90",
"debugIcon.pauseForeground": "#8bacfe",
"debugIcon.restartForeground": "#a1c861",
"debugIcon.startForeground": "#a1c861",
"debugIcon.stepBackForeground": "#8bacfe",
"debugIcon.stepIntoForeground": "#8bacfe",
"debugIcon.stepOutForeground": "#8bacfe",
"debugIcon.stepOverForeground": "#8bacfe",
"debugIcon.stopForeground": "#ff8d90",
"debugTokenExpression.boolean": "#92b1ff",
"debugTokenExpression.error": "#ff8d90",
"debugTokenExpression.name": "#bdc1ca",
"debugTokenExpression.number": "#92b1ff",
"debugTokenExpression.string": "#a3ce57",
"debugTokenExpression.value": "#a3ce57",
"debugToolBar.background": "#24262c",
"debugView.exceptionLabelBackground": "#851a27",
"descriptionForeground": "#84878f",
"diffEditor.diagonalFill": "#3d3f46",
"diffEditor.insertedLineBackground": "#3f58214d",
"diffEditor.insertedTextBackground": "#3e5815b3",
"diffEditor.removedLineBackground": "#7e34324d",
"diffEditor.removedTextBackground": "#7c2c2fb3",
"disabledForeground": "#84878f",
"dropdown.background": "#24262c",
"dropdown.border": "#24262c",
"dropdown.foreground": "#bdc1ca",
"dropdown.listBackground": "#24262c",
"editor.background": "#17191e",
"editor.findMatchBackground": "#755c00",
"editor.findMatchHighlightBackground": "#5a4400bf",
"editor.focusedStackFrameHighlightBackground": "#9b750099",
"editor.foldBackground": "#24262cb3",
"editor.foreground": "#bdc1ca",
"editor.inlineValuesForeground": "#84878f",
"editor.lineHighlightBackground": "#2a2c32b3",
"editor.linkedEditingBackground": "#004e4f",
"editor.selectionBackground": "#424f6db3",
"editor.selectionHighlightBackground": "#494d5480",
"editor.stackFrameHighlightBackground": "#63970080",
"editor.wordHighlightBackground": "#63656e80",
"editor.wordHighlightBorder": "#00000000",
"editor.wordHighlightStrongBackground": "#63656e80",
"editor.wordHighlightStrongBorder": "#00000000",
"editorBracketHighlight.foreground1": "#c5a0fb",
"editorBracketHighlight.foreground2": "#ff9396",
"editorBracketHighlight.foreground3": "#ff9e51",
"editorBracketHighlight.foreground4": "#e0b627",
"editorBracketHighlight.foreground5": "#a3ce57",
"editorBracketHighlight.foreground6": "#49c3c5",
"editorBracketHighlight.unexpectedBracket.foreground": "#84878f",
"editorBracketMatch.background": "#63656e80",
"editorBracketMatch.border": "#00000000",
"editorCodeLens.foreground": "#84878f",
"editorCursor.foreground": "#bacdff",
"editorError.foreground": "#f6676f",
"editorGhostText.foreground": "#84878f",
"editorGroup.border": "#303339",
"editorGroup.dropBackground": "#494d5480",
"editorGroupHeader.tabsBackground": "#0a0c10",
"editorGroupHeader.tabsBorder": "#303339",
"editorGutter.addedBackground": "#677e4a",
"editorGutter.deletedBackground": "#9c5e62",
"editorGutter.modifiedBackground": "#5b6f9e",
"editorHint.foreground": "#6d6f77",
"editorHoverWidget.border": "#3d3f46",
"editorIndentGuide.activeBackground": "#494b52",
"editorIndentGuide.background": "#494d5480",
"editorInfo.foreground": "#8bacfe",
"editorInlayHint.background": "#3b3e45b3",
"editorInlayHint.foreground": "#84878f",
"editorInlayHint.typeBackground": "#3b3e45b3",
"editorInlayHint.typeForeground": "#84878f",
"editorLightBulb.foreground": "#e1b834",
"editorLightBulbAutoFix.foreground": "#86a9ff",
"editorLineNumber.activeForeground": "#9b9ea7",
"editorLineNumber.foreground": "#55585f",
"editorLink.activeForeground": "#86a9ff",
"editorOverviewRuler.border": "#0a0c10",
"editorRuler.foreground": "#63656e80",
"editorSuggestWidget.border": "#3d3f46",
"editorWarning.foreground": "#c9a100",
"editorWhitespace.foreground": "#494b52",
"editorWidget.background": "#24262c",
"editorWidget.border": "#3d3f46",
"editorWidget.foreground": "#9b9ea7",
"errorForeground": "#f6676f",
"focusBorder": "#5e74ab",
"foreground": "#bdc1ca",
"gitDecoration.addedResourceForeground": "#a1c861",
"gitDecoration.conflictingResourceForeground": "#ff9946",
"gitDecoration.deletedResourceForeground": "#ff8d90",
"gitDecoration.ignoredResourceForeground": "#9b9ea7",
"gitDecoration.modifiedResourceForeground": "#8bacfe",
"gitDecoration.renamedResourceForeground": "#a1c861",
"gitDecoration.stageDeletedResourceForeground": "#ff8d90",
"gitDecoration.stageModifiedResourceForeground": "#8bacfe",
"gitDecoration.submoduleResourceForeground": "#84878f",
"gitDecoration.untrackedResourceForeground": "#a1c861",
"icon.foreground": "#9b9ea7",
"input.background": "#17191e",
"input.border": "#303339",
"input.foreground": "#bdc1ca",
"input.placeholderForeground": "#84878f",
"inputOption.activeBackground": "#26407a",
"inputOption.activeForeground": "#bacdff",
"inputOption.hoverBackground": "#2b2e34",
"inputValidation.errorBackground": "#851a27",
"inputValidation.errorBorder": "#962631",
"inputValidation.infoBackground": "#234082",
"inputValidation.infoBorder": "#2f4d90",
"inputValidation.warningBackground": "#665000",
"inputValidation.warningBorder": "#755c00",
"keybindingLabel.background": "#303339",
"keybindingLabel.border": "#3d3f46",
"keybindingLabel.bottomBorder": "#3d3f46",
"keybindingLabel.foreground": "#bdc1ca",
"list.activeSelectionBackground": "#1a3c83",
"list.activeSelectionForeground": "#d4d8e2",
"list.errorForeground": "#f6676f",
"list.focusBackground": "#303339",
"list.focusForeground": "#bdc1ca",
"list.highlightForeground": "#bacdff",
"list.hoverBackground": "#3d3f46",
"list.hoverForeground": "#bdc1ca",
"list.inactiveFocusBackground": "#303339",
"list.inactiveSelectionBackground": "#24262c",
"list.inactiveSelectionForeground": "#bdc1ca",
"list.invalidItemForeground": "#c9a100",
"list.warningForeground": "#ffce1b",
"menu.separatorBackground": "#3d3f46",
"menubar.selectionBackground": "#303339",
"menubar.selectionForeground": "#bdc1ca",
"merge.commonContentBackground": "#2a2c32b3",
"merge.commonHeaderBackground": "#3b3e45b3",
"merge.currentContentBackground": "#26447f66",
"merge.currentHeaderBackground": "#314e8db3",
"merge.incomingContentBackground": "#3d5a1e66",
"merge.incomingHeaderBackground": "#49651eb3",
"minimap.errorHighlight": "#851a27",
"minimap.findMatchHighlight": "#493900",
"minimap.selectionHighlight": "#284992",
"minimap.warningHighlight": "#665000",
"notificationCenterHeader.background": "#303339",
"notificationCenterHeader.foreground": "#84878f",
"notifications.background": "#303339",
"notifications.border": "#303339",
"notifications.foreground": "#bdc1ca",
"notificationsErrorIcon.foreground": "#ff8d90",
"notificationsInfoIcon.foreground": "#8bacfe",
"notificationsWarningIcon.foreground": "#e5b700",
"panel.background": "#0a0c10",
"panel.border": "#303339",
"panelInput.border": "#303339",
"panelTitle.activeBorder": "#86a9ff",
"panelTitle.activeForeground": "#bdc1ca",
"panelTitle.inactiveForeground": "#84878f",
"peekView.border": "#86a9ff",
"peekViewEditor.background": "#24262c",
"peekViewEditor.matchHighlightBackground": "#493900",
"peekViewResult.background": "#17191e",
"peekViewResult.fileForeground": "#bdc1ca",
"peekViewResult.lineForeground": "#9b9ea7",
"peekViewResult.matchHighlightBackground": "#493900",
"peekViewResult.selectionBackground": "#1a3c83",
"peekViewResult.selectionForeground": "#d4d8e2",
"peekViewTitle.background": "#24262c",
"peekViewTitleDescription.foreground": "#84878f",
"peekViewTitleLabel.foreground": "#d4d8e2",
"pickerGroup.border": "#3d3f46",
"pickerGroup.foreground": "#84878f",
"progressBar.background": "#86a9ff",
"quickInput.background": "#24262c",
"quickInput.foreground": "#bdc1ca",
"scrollbar.shadow": "#17191e",
"scrollbarSlider.activeBackground": "#5e6068b3",
"scrollbarSlider.background": "#6a70784d",
"scrollbarSlider.hoverBackground": "#63656e80",
"selection.background": "#424f6db3",
"settings.headerForeground": "#84878f",
"settings.modifiedItemIndicator": "#2f4d90",
"sideBar.background": "#111217",
"sideBar.border": "#303339",
"sideBar.foreground": "#bdc1ca",
"sideBarSectionHeader.background": "#111217",
"sideBarSectionHeader.border": "#303339",
"sideBarSectionHeader.foreground": "#bdc1ca",
"sideBarTitle.foreground": "#bdc1ca",
"statusBar.background": "#111217",
"statusBar.border": "#303339",
"statusBar.debuggingBackground": "#513875",
"statusBar.debuggingForeground": "#bdc1ca",
"statusBar.focusBorder": "#5e74ab",
"statusBar.foreground": "#84878f",
"statusBar.noFolderBackground": "#111217",
"statusBarItem.activeBackground": "#3d3f46",
"statusBarItem.errorBackground": "#851a27",
"statusBarItem.errorForeground": "#d4d8e2",
"statusBarItem.focusBorder": "#5e74ab",
"statusBarItem.hoverBackground": "#303339",
"statusBarItem.prominentBackground": "#24262c",
"statusBarItem.remoteBackground": "#111217",
"statusBarItem.remoteForeground": "#f39244",
"statusBarItem.warningBackground": "#665000",
"statusBarItem.warningForeground": "#d4d8e2",
"symbolIcon.arrayForeground": "#5dbded",
"symbolIcon.booleanForeground": "#92b1ff",
"symbolIcon.classForeground": "#5dbded",
"symbolIcon.colorForeground": "#a3ce57",
"symbolIcon.constructorForeground": "#ff9396",
"symbolIcon.enumeratorForeground": "#5dbded",
"symbolIcon.enumeratorMemberForeground": "#92b1ff",
"symbolIcon.eventForeground": "#9b9ea7",
"symbolIcon.fieldForeground": "#5dbded",
"symbolIcon.fileForeground": "#92b1ff",
"symbolIcon.folderForeground": "#92b1ff",
"symbolIcon.functionForeground": "#ff9e51",
"symbolIcon.interfaceForeground": "#5dbded",
"symbolIcon.keyForeground": "#92b1ff",
"symbolIcon.keywordForeground": "#e0b627",
"symbolIcon.methodForeground": "#ff9e51",
"symbolIcon.moduleForeground": "#92b1ff",
"symbolIcon.namespaceForeground": "#92b1ff",
"symbolIcon.nullForeground": "#e0b627",
"symbolIcon.numberForeground": "#49c3c5",
"symbolIcon.objectForeground": "#5dbded",
"symbolIcon.operatorForeground": "#a3ce57",
"symbolIcon.packageForeground": "#5dbded",
"symbolIcon.propertyForeground": "#5dbded",
"symbolIcon.referenceForeground": "#92b1ff",
"symbolIcon.snippetForeground": "#92b1ff",
"symbolIcon.stringForeground": "#a3ce57",
"symbolIcon.structForeground": "#5dbded",
"symbolIcon.textForeground": "#a3ce57",
"symbolIcon.typeParameterForeground": "#a3ce57",
"symbolIcon.unitForeground": "#92b1ff",
"symbolIcon.variableForeground": "#5dbded",
"tab.activeBackground": "#17191e",
"tab.activeBorder": "#17191e",
"tab.activeBorderTop": "#5e74ab",
"tab.activeForeground": "#bdc1ca",
"tab.border": "#303339",
"tab.hoverBackground": "#17191e99",
"tab.inactiveBackground": "#0a0c10",
"tab.inactiveForeground": "#84878f",
"tab.unfocusedActiveBorder": "#17191e",
"tab.unfocusedActiveBorderTop": "#303339",
"tab.unfocusedHoverBackground": "#17191e66",
"terminal.ansiBlack": "#17191e",
"terminal.ansiBlue": "#8bacfe",
"terminal.ansiBrightBlack": "#55585f",
"terminal.ansiBrightBlue": "#aec4ff",
"terminal.ansiBrightCyan": "#7de5e7",
"terminal.ansiBrightGreen": "#bade7f",
"terminal.ansiBrightMagenta": "#d5b9ff",
"terminal.ansiBrightRed": "#ffb3b4",
"terminal.ansiBrightWhite": "#d4d8e2",
"terminal.ansiBrightYellow": "#f5d05f",
"terminal.ansiCyan": "#4bd1d3",
"terminal.ansiGreen": "#a1c861",
"terminal.ansiMagenta": "#bfa0ee",
"terminal.ansiRed": "#ff8d90",
"terminal.ansiWhite": "#bdc1ca",
"terminal.ansiYellow": "#e1b834",
"terminal.foreground": "#bdc1ca",
"terminalCommandDecoration.defaultBackground": "#6d6f77",
"terminalCommandDecoration.errorBackground": "#962631",
"terminalCommandDecoration.successBackground": "#49650f",
"testing.iconErrored": "#ff8d90",
"testing.iconFailed": "#ff8d90",
"testing.iconPassed": "#a1c861",
"testing.iconQueued": "#e5b700",
"testing.iconSkipped": "#9b9ea7",
"testing.iconUnset": "#9b9ea7",
"testing.message.error.decorationForeground": "#ff8d90",
"testing.message.error.lineBackground": "#851a27",
"testing.runAction": "#a1c861",
"textBlockQuote.background": "#0a0c10",
"textBlockQuote.border": "#303339",
"textCodeBlock.background": "#303339",
"textLink.activeForeground": "#86a9ff",
"textLink.foreground": "#86a9ff",
"textPreformat.foreground": "#84878f",
"textSeparator.foreground": "#84878f",
"titleBar.activeBackground": "#111217",
"titleBar.activeForeground": "#9b9ea7",
"titleBar.border": "#303339",
"titleBar.inactiveBackground": "#111217",
"titleBar.inactiveForeground": "#84878f",
"toolbar.activeBackground": "#63656e80",
"toolbar.hoverBackground": "#494d5480",
"tree.indentGuidesStroke": "#494b52",
"widget.shadow": "#03050a4d"
},
"tokenColors": [
{
"scope": "comment",
"settings": {
"foreground": "#84878f"
}
},
{
"scope": [
"string",
"constant.other.symbol",
"string.quoted"
],
"settings": {
"foreground": "#a3ce57"
}
},
{
"scope": "string.regexp",
"settings": {
"foreground": "#49c3c5"
}
},
{
"scope": [
"constant.character",
"constant.other"
],
"settings": {
"foreground": "#49c3c5"
}
},
{
"scope": "constant.character.format",
"settings": {
"foreground": "#49c3c5",
"fontStyle": ""
}
},
{
"scope": "constant.other.caps",
"settings": {
"foreground": "#49c3c5",
"fontStyle": ""
}
},
{
"scope": "variable.parameter.function.language.special.self",
"settings": {
"foreground": "#e0b627"
}
},
{
"scope": "constant.numeric",
"settings": {
"foreground": "#92b1ff"
}
},
{
"scope": "constant.language",
"settings": {
"foreground": "#92b1ff"
}
},
{
"scope": [
"meta.constant",
"entity.name.constant"
],
"settings": {
"foreground": "#92b1ff"
}
},
{
"scope": "variable",
"settings": {
"foreground": "#bdc1ca"
}
},
{
"scope": "variable.member",
"settings": {
"foreground": "#c5a0fb"
}
},
{
"scope": "variable.language",
"settings": {
"foreground": "#49c3c5"
}
},
{
"scope": [
"storage",
"storage.type.keyword"
],
"settings": {
"foreground": "#e0b627"
}
},
{
"scope": "keyword",
"settings": {
"foreground": "#e0b627"
}
},
{
"scope": "source.java meta.class.java meta.class.identifier.java storage.type.java",
"settings": {
"foreground": "#e0b627"
}
},
{
"scope": "keyword.operator",
"settings": {
"foreground": "#ff9396",
"fontStyle": ""
}
},
{
"scope": [
"punctuation.separator",
"punctuation.terminator",
"punctuation.semi"
],
"settings": {
"foreground": "#84878f"
}
},
{
"scope": "punctuation.section",
"settings": {
"foreground": "#bdc1ca"
}
},
{
"scope": "punctuation.accessor",
"settings": {
"foreground": "#ff9396"
}
},
{
"scope": "punctuation.definition.template-expression",
"settings": {
"foreground": "#e0b627"
}
},
{
"scope": "punctuation.section.interpolation",
"settings": {
"foreground": "#e0b627"
}
},
{
"scope": [
"source.java storage.type",
"source.haskell storage.type",
"source.c storage.type",
"source.zig storage.type"
],
"settings": {
"foreground": "#5dbded",
"fontStyle": ""
}
},
{
"scope": "entity.other.inherited-class",
"settings": {
"foreground": "#49c3c5"
}
},
{
"scope": "storage.type.function.arrow",
"settings": {
"foreground": "#e0b627",
"fontStyle": ""
}
},
{
"scope": "source.java storage.type.primitive",
"settings": {
"foreground": "#49c3c5"
}
},
{
"scope": "entity.name.function",
"settings": {
"foreground": "#ff9e51"
}
},
{
"scope": [
"variable.parameter",
"meta.parameter"
],
"settings": {
"foreground": "#92b1ff"
}
},
{
"scope": [
"variable.function",
"variable.annotation",
"meta.function-call.generic",
"support.function.go"
],
"settings": {
"foreground": "#ff9e51"
}
},
{
"scope": [
"support.function",
"support.macro"
],
"settings": {
"foreground": "#c5a0fb"
}
},
{
"scope": [
"entity.name.import",
"entity.name.package"
],
"settings": {
"foreground": "#a3ce57"
}
},
{
"scope": [
"entity.name",
"source.js meta.function-call.constructor variable.type",
"support.class.component.vue"
],
"settings": {
"foreground": "#5dbded",
"fontStyle": ""
}
},
{
"scope": [
"entity.name.tag",
"meta.tag.sgml"
],
"settings": {
"foreground": "#49c3c5"
}
},
{
"scope": [
"punctuation.definition.tag.end",
"punctuation.definition.tag.begin",
"punctuation.definition.tag"
],
"settings": {
"foreground": "#5c9b9f"
}
},
{
"scope": "entity.other.attribute-name",
"settings": {
"foreground": "#ff9e51"
}
},
{
"scope": "support.constant",
"settings": {
"foreground": "#ff9396"
}
},
{
"scope": [
"support.type",
"support.class",
"source.go storage.type"
],
"settings": {
"foreground": "#49c3c5"
}
},
{
"scope": [
"meta.decorator variable.other",
"meta.decorator punctuation.decorator",
"storage.type.annotation",
"variable.annotation",
"punctuation.definition.annotation"
],
"settings": {
"foreground": "#92b1ff"
}
},
{
"scope": "invalid",
"settings": {
"foreground": "#ff8d90"
}
},
{
"scope": [
"meta.diff",
"meta.diff.header"
],
"settings": {
"foreground": "#a3ce57"
}
},
{
"scope": "source.ruby variable.other.readwrite",
"settings": {
"foreground": "#ff9e51"
}
},
{
"scope": [
"source.css entity.name.tag",
"source.sass entity.name.tag",
"source.scss entity.name.tag",
"source.less entity.name.tag",
"source.stylus entity.name.tag"
],
"settings": {
"foreground": "#5dbded"
}
},
{
"scope": [
"source.css support.type",
"source.sass support.type",
"source.scss support.type",
"source.less support.type",
"source.stylus support.type"
],
"settings": {
"foreground": "#84878f"
}
},
{
"scope": "support.type.property-name",
"settings": {
"foreground": "#49c3c5",
"fontStyle": ""
}
},
{
"scope": "constant.numeric.line-number.find-in-files - match",
"settings": {
"foreground": "#84878f"
}
},
{
"scope": "constant.numeric.line-number.match",
"settings": {
"foreground": "#e0b627"
}
},
{
"scope": "entity.name.filename.find-in-files",
"settings": {
"foreground": "#a3ce57"
}
},
{
"scope": "message.error",
"settings": {
"foreground": "#ff8d90"
}
},
{
"scope": [
"markup.heading",
"markup.heading entity.name"
],
"settings": {
"foreground": "#a3ce57",
"fontStyle": "bold"
}
},
{
"scope": [
"markup.underline.link",
"string.other.link"
],
"settings": {
"foreground": "#5dbded"
}
},
{
"scope": "markup.italic",
"settings": {
"foreground": "#c5a0fb"
}
},
{
"scope": "markup.bold",
"settings": {
"foreground": "#c5a0fb",
"fontStyle": "bold"
}
},
{
"scope": [
"markup.italic markup.bold",
"markup.bold markup.italic"
],
"settings": {
"fontStyle": "bold italic"
}
},
{
"scope": "meta.separator",
"settings": {
"foreground": "#84878f",
"fontStyle": "bold"
}
},
{
"scope": "markup.quote",
"settings": {
"foreground": "#49c3c5"
}
},
{
"scope": "markup.list punctuation.definition.list.begin",
"settings": {
"foreground": "#ff9e51"
}
},
{
"scope": "markup.inserted",
"settings": {
"foreground": "#a1c861"
}
},
{
"scope": "markup.changed",
"settings": {
"foreground": "#8bacfe"
}
},
{
"scope": "markup.deleted",
"settings": {
"foreground": "#ff8d90"
}
},
{
"scope": "markup.strike",
"settings": {
"foreground": "#92b1ff"
}
},
{
"scope": "markup.table",
"settings": {
"foreground": "#49c3c5"
}
},
{
"scope": "text.html.markdown markup.inline.raw",
"settings": {
"foreground": "#ff9396"
}
},
{
"scope": "text.html.markdown meta.dummy.line-break",
"settings": {
"foreground": "#84878f"
}
},
{
"scope": "punctuation.definition.markdown",
"settings": {
"foreground": "#84878f"
}
},
{
"scope": "token.info-token",
"settings": {
"foreground": "#8bacfe"
}
},
{
"scope": "token.warn-token",
"settings": {
"foreground": "#e5b700"
}
},
{
"scope": "token.error-token",
"settings": {
"foreground": "#ff8d90"
}
},
{
"scope": "token.debug-token",
"settings": {
"foreground": "#bfa0ee"
}
},
{
"scope": "variable.other.enummember",
"settings": {
"foreground": "#c5a0fb"
}
},
{
"scope": [
"keyword.operator.key-value.rust",
"punctuation.comma.rust"
],
"settings": {
"foreground": "#84878f"
}
},
{
"scope": "meta.attribute.rust",
"settings": {
"foreground": "#92b1ff"
}
},
{
"scope": "entity.name.function.preprocessor",
"settings": {
"foreground": "#ff9e51"
}
},
{
"scope": "entity.name.label",
"settings": {
"foreground": "#c5a0fb"
}
},
{
"scope": "meta.decorator.ts entity.name.function",
"settings": {
"foreground": "#92b1ff"
}
},
{
"scope": "source.json meta.structure.dictionary.json support.type.property-name.json",
"settings": {
"foreground": "#c5a0fb"
}
},
{
"scope": "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json",
"settings": {
"foreground": "#ff9396"
}
},
{
"scope": "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json",
"settings": {
"foreground": "#ff9e51"
}
},
{
"scope": "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json",
"settings": {
"foreground": "#e0b627"
}
},
{
"scope": "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json",
"settings": {
"foreground": "#a3ce57"
}
}
],
"semanticTokenColors": {
"property.static.readonly": "#92b1ff",
"variable.static": "#92b1ff",
"selfKeyword": {
"foreground": "#e0b627",
"italic": false
}
}
}

View File

@@ -0,0 +1,267 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Notepad 2</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFFFFF</string>
<key>caret</key>
<string>#000000</string>
<key>foreground</key>
<string>#000000</string>
<key>invisibles</key>
<string>#BFBFBF</string>
<key>lineHighlight</key>
<string>#FFB85159</string>
<key>selection</key>
<string>#98CCFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFFFFF</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FF8000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#008000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#FF0000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>User-defined constant</string>
<key>scope</key>
<string>constant.character, constant.other</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable.language, variable.other</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#000080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#800080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#800080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class name</string>
<key>scope</key>
<string>entity.name.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>1231</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Function argument</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag name</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#0000AF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#CE0000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#800080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library class/type</string>
<key>scope</key>
<string>support.type, support.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library variable</string>
<key>scope</key>
<string>support.other.variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>5DB91612-025C-4043-952B-E2B3A32FA27A</string>
</dict>
</plist>

View File

@@ -0,0 +1,122 @@
/* eslint-disable */
const mix = require('laravel-mix');
const fs = require('fs');
const path = require('path');
const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin');
require('laravel-mix-polyfill');
/* eslint-enable */
// Clean js/build directory before compiling
const buildDir = path.join(__dirname, 'js/build');
if (fs.existsSync(buildDir)) {
fs.readdirSync(buildDir).forEach((file) => {
const filePath = path.join(buildDir, file);
if (fs.statSync(filePath).isDirectory()) {
fs.rmSync(filePath, { recursive: true });
} else {
fs.unlinkSync(filePath);
}
});
}
mix.setPublicPath(__dirname);
mix
.options({
terser: {
extractComments: false,
},
})
// Compile editor
.js(
'js/codeeditor.js',
'js/build/codeeditor.bundle.js',
)
.less(
'less/codeeditor.less',
'css/codeeditor.css',
)
.webpackConfig({
plugins: [
new MonacoWebpackPlugin({
filename: 'js/build/[name].worker.js',
languages: [
'typescript',
'javascript',
'css',
'json',
'html',
'ini',
'less',
'markdown',
'mysql',
'php',
'scss',
'twig',
'xml',
'yaml',
],
features: [
'anchorSelect',
'bracketMatching',
'caretOperations',
'clipboard',
'codelens',
'colorPicker',
'comment',
'contextmenu',
'cursorUndo',
'find',
'folding',
'gotoSymbol',
'hover',
'inPlaceReplace',
'indentation',
'inlineHints',
'links',
'multicursor',
'parameterHints',
'rename',
'smartSelect',
'snippet',
'suggest',
'wordHighlighter',
'wordOperations',
],
}),
],
})
// Polyfill for all targeted browsers
.polyfill({
enabled: mix.inProduction(),
useBuiltIns: 'usage',
targets: '> 0.5%, last 2 versions, not dead, Firefox ESR, not ie > 0',
})
.after(() => {
let bundle = fs.readFileSync('js/build/codeeditor.bundle.js', 'utf8');
// Remove inline CSS calls to the codicon font
bundle = bundle.replace(/@font-face[^{]*\{(?:[^{}]|{[^}]*})*?codicon[^}]*?\}/g, '');
// Remove Monaco plugin's MonacoEnvironment assignment to prevent timing issues
// This allows our runtime window.MonacoEnvironment from codeeditor.js to be used exclusively
// The plugin's version uses hardcoded webpack publicPath which breaks CDN/subdirectory support
// Pattern: ...}),self.MonacoEnvironment=(...});var
// Replace: ,self.MonacoEnvironment=(...}); with just ;
// Result: ...});var (valid JavaScript with proper statement terminator)
const monacoEnvStart = bundle.indexOf(',self.MonacoEnvironment=');
if (monacoEnvStart !== -1) {
const afterStart = bundle.substring(monacoEnvStart);
const monacoEnvEnd = afterStart.indexOf('});var');
if (monacoEnvEnd !== -1) {
// Replace the pattern with semicolon to maintain statement terminator
// +3 to skip past '});' (3 characters)
bundle = bundle.substring(0, monacoEnvStart) + ';' + bundle.substring(monacoEnvStart + monacoEnvEnd + 3);
}
}
fs.writeFileSync('js/build/codeeditor.bundle.js', bundle);
});

View File

@@ -0,0 +1,48 @@
<?php if ($this->previewMode): ?>
<div class="form-control">
<pre><?= e($value) ?></pre>
</div>
<?php else: ?>
<div
id="<?= $this->getId() ?>"
class="field-codeeditor size-<?= $size ?> <?= $stretch?'layout-relative':'' ?>"
data-control="codeeditor"
data-alias="<?= $this->alias ?? 'null' ?>"
data-font-size="<?= $fontSize ?>"
data-word-wrap="<?= $wordWrap ?>"
data-code-folding="<?= $codeFolding ? 'true' : 'false' ?>"
data-auto-close-tags="<?= $autoClosing ? 'true' : 'false' ?>"
data-tab-size="<?= $tabSize ?>"
data-theme="<?= $theme ?>"
data-show-invisibles="<?= $showInvisibles ? 'true' : 'false' ?>"
data-display-indent-guides="<?= $displayIndentGuides ? 'true' : 'false' ?>"
data-show-print-margin="<?= $showPrintMargin ? 'true' : 'false' ?>"
data-highlight-active-line="<?= $highlightActiveLine ? 'true' : 'false' ?>"
data-use-soft-tabs="<?= $useSoftTabs ? 'true' : 'false' ?>"
data-show-gutter="<?= $showGutter ? 'true' : 'false' ?>"
data-read-only="<?= $readOnly ? 'true' : 'false' ?>"
data-show-minimap="<?= $showMinimap ? 'true' : 'false' ?>"
data-bracket-colors="<?= $bracketColors ? 'true': 'false' ?>"
data-show-colors="<?= $showColors ? 'true' : 'false' ?>"
data-language="<?= $language ?>"
data-margin="<?= $margin ?>"
data-scroll-past-end="<?= $scrollPastEnd ?>"
<?= $this->formField->getAttributes() ?>
>
<div class="editor-container"></div>
<div class="editor-toolbar" data-status-bar>
<div class="language">
<?= strtoupper($language) ?>
</div>
<div class="position">
</div>
<div class="actions">
<a href="#" class="action" data-full-screen data-toggle="tooltip" title="<?= e(trans('backend::lang.editor.toggle_fullscreen')) ?>">
<i class="icon-maximize"></i>
</a>
</div>
</div>
<input name="<?= $name ?>" data-value-bag id="<?= $this->getId('value') ?>" type="hidden" value="<?= e($value) ?>">
</div>
<?php endif ?>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,512 @@
import Pickr from '@simonwep/pickr';
import '@simonwep/pickr/dist/themes/nano.min.css';
import '../../less/colorpicker.less';
((Snowboard, $) => {
/**
* Color picker widget.
*
* The color picker widget allows for easy colour selection from a color swatches, or a custom
* color from a palette. The colour can be returned in various formats.
*
* @author Ben Thomson <git@alfreido.com>
* @copyright 2023 Winter CMS
*/
class ColorPicker extends Snowboard.PluginBase {
/**
* Constructor.
*
* @param {HTMLElement} element
*/
construct(element) {
this.element = element;
this.pickr = null;
this.config = this.snowboard.dataConfig(this, element);
if (typeof this.config.get('formats') === 'string') {
this.config.set('formats', [this.config.get('formats')]);
}
// Child elements
this.dataLocker = element.querySelector(this.config.get('dataLocker'));
this.container = element.querySelector('.colorpicker-container');
this.colorPreview = element.querySelector('[data-color-preview]');
this.colorValue = element.querySelector('[data-color-value]');
// User inputs
this.keyboardEntry = false;
this.originalColor = null;
this.originalFormat = null;
this.formatSet = false;
// Events
this.events = {
focus: () => this.onFocus(),
blur: () => this.onBlur(),
keydown: (event) => this.onKeyDown(event),
keyup: (event) => this.onKeyUp(event),
colorClick: (event) => this.onColorClick(event),
pickrInit: () => this.onPickerInit(),
pickrChange: (hsva) => this.onPickerChange(hsva),
pickrStopChange: () => this.onPickerStopChange(),
pickrSwatch: (hsva) => this.onPickerSwatch(hsva),
pickrCancel: () => this.onPickerStopChange(),
pickrHide: () => this.onPickerHide(),
pickrClear: () => this.onPickerClear(),
stop: (event) => {
event.preventDefault();
event.stopPropagation();
},
};
this.createPickr();
this.attachEvents();
}
/**
* Sets the default options for this widget.
*
* Available options:
*
* - `data-allow-custom`: If set, allows custom colors to be picked or entered, outside
* of the available colors.
* - `data-allow-empty`: If set, allows the color to be cleared.
* - `data-available-colors=""`: An array of colors to be used as swatches.
* - `data-data-locker=""`: A selector for the element that will be used to contain the selected color value.
* - `data-disabled`: If set, disables the color picker.
* - `data-formats=""`: The format to use for the color value. Can be `hex`, `rgb`, `hsl`, or `cmyk`.
* - `data-show-alpha`: If set, shows the alpha channel.
*
* @returns {Object}
*/
defaults() {
return {
allowCustom: false,
allowEmpty: false,
availableColors: [],
dataLocker: null,
disabled: false,
formats: 'hex',
showAlpha: false,
};
}
/**
* Create a Pickr instance.
*/
createPickr() {
this.pickr = Pickr.create({
el: this.colorPreview,
theme: 'nano',
disabled: this.config.get('disabled'),
swatches: this.config.get('availableColors'),
lockOpacity: !this.config.get('showAlpha'),
useAsButton: true,
container: this.element,
comparison: true,
showAlways: true,
position: 'top-middle',
components: {
palette: this.config.get('allowCustom'),
preview: this.config.get('allowCustom'),
hue: this.config.get('allowCustom'),
opacity: this.config.get('showAlpha'),
interaction: {
hex: (this.config.get('formats').length > 1 && this.config.get('formats').includes('hex')),
rgba: (this.config.get('formats').length > 1 && this.config.get('formats').includes('rgb')),
hsla: (this.config.get('formats').length > 1 && this.config.get('formats').includes('hsl')),
cmyk: (this.config.get('formats').length > 1 && this.config.get('formats').includes('cmyk')),
input: false,
cancel: false,
clear: this.config.get('allowEmpty'),
save: false,
},
},
i18n: {
'btn:last-color': $.wn.lang.get('colorpicker.last_color', 'Use previously selected color'),
'aria:palette': $.wn.lang.get('colorpicker.aria_palette', 'Color selection area'),
'aria:hue': $.wn.lang.get('colorpicker.aria_hue', 'Hue selection slider'),
'aria:opacity': $.wn.lang.get('colorpicker.aria_opacity', 'Opacity selection slider'),
},
});
}
/**
* Attaches event listeners for several interactions.
*/
attachEvents() {
this.colorValue.addEventListener('focus', this.events.focus);
this.colorValue.addEventListener('blur', this.events.blur);
this.colorValue.addEventListener('keydown', this.events.keydown);
this.colorValue.addEventListener('keyup', this.events.keyup);
this.colorPreview.addEventListener('click', this.events.colorClick);
this.pickr.on('init', this.events.pickrInit);
this.pickr.on('change', this.events.pickrChange);
this.pickr.on('changestop', this.events.pickrStopChange);
this.pickr.on('swatchselect', this.events.pickrSwatch);
this.pickr.on('cancel', this.events.pickrCancel);
this.pickr.on('hide', this.events.pickrHide);
this.pickr.on('clear', this.events.pickrClear);
}
/**
* Destructor.
*/
destruct() {
this.colorValue.removeEventListener('focus', this.events.focus);
this.colorValue.removeEventListener('blur', this.events.blur);
this.colorValue.removeEventListener('keydown', this.events.keydown);
this.colorValue.removeEventListener('keyup', this.events.keyup);
this.colorPreview.removeEventListener('click', this.events.colorClick);
this.pickr.off('init', this.events.pickrInit);
this.pickr.off('change', this.events.pickrChange);
this.pickr.off('changestop', this.events.pickrStopChange);
this.pickr.off('swatchselect', this.events.pickrSwatch);
this.pickr.off('cancel', this.events.pickrCancel);
this.pickr.off('hide', this.events.pickrHide);
this.pickr.off('clear', this.events.pickrClear);
this.pickr.destroyAndRemove();
this.dataLocker = null;
this.container = null;
this.colorPreview = null;
this.colorValue = null;
this.config = null;
super.destruct();
}
/**
* Show picker when focusing on text field for widget.
*/
onFocus() {
this.showPicker();
}
/**
* Show picker when the color preview next to the text field is clicked.
*
* @param {Event} event
*/
onColorClick(event) {
if (event.currentTarget !== this.colorValue) {
this.colorValue.focus();
}
this.showPicker();
}
/**
* Hide picker when the text field loses focus.
*/
onBlur() {
this.hidePicker();
}
/**
* Fired when a key is pressed down.
*
* We use this to disable the Enter key submitting the form by mistake.
*
* @param {Event} event
*/
onKeyDown(event) {
if (event.key === 'Enter') {
event.preventDefault();
}
}
/**
* Fired when a key is pressed while in the picker, or within the text field of the widget.
*
* @param {Event} event
*/
onKeyUp(event) {
// Escape always acts as a cancel
if (event.key === 'Escape') {
this.keyboardEntry = false;
this.setColor(this.originalColor);
this.hidePicker();
this.colorValue.blur();
event.stopPropagation();
return;
}
// Enter will select the current color and hide the picker
if (event.key === 'Enter') {
this.setColor(this.pickr.getColor());
this.hidePicker();
this.colorValue.blur();
event.preventDefault();
event.stopPropagation();
return;
}
this.keyboardEntry = (
(this.colorValue.value === '' && this.config.get('allowEmpty'))
|| this.pickr.setColor(this.colorValue.value)
);
}
/**
* Shows the color picker.
*
* This also prevents mouse clicks within the picker from making the text field lose focus.
*/
showPicker() {
this.keyboardEntry = false;
this.originalColor = this.pickr.getColor().clone();
this.originalFormat = this.getCurrentFormat();
this.pickr.show();
// Prevent blur event of the text field firing if the mouse click started inside picker,
// even if it ends up outside. This prevents the whitespace in the picker firing a blur
// event and hiding the picker.
this.pickr.getRoot().app.addEventListener('mousedown', this.events.stop);
}
/**
* Hides the picker.
*/
hidePicker() {
this.pickr.getRoot().app.removeEventListener('mousedown', this.events.stop);
this.pickr.hide();
}
/**
* Fires when the picker is first initialized for a widget.
*/
onPickerInit() {
if (this.dataLocker.value) {
this.pickr.setColor(this.dataLocker.value);
}
this.hidePicker();
if (this.dataLocker.value) {
if (this.config.get('formats').length === 1) {
this.setColorFormat(this.config.get('formats')[0]);
}
this.setColor(this.pickr.getColor());
}
}
/**
* Fires when the user drags the selector on the color palette, or the hue/opacity sliders.
* @param {HSVaColor} hsva
*/
onPickerChange(hsva) {
this.keyboardEntry = false;
if (!this.formatSet && this.config.get('formats').length === 1) {
this.setColorFormat(this.config.get('formats')[0]);
}
this.pickr.getRoot().preview.currentColor.innerText = this.valueFromHSVA(hsva);
// If the format changes, change the value
if (this.getCurrentFormat() !== this.originalFormat) {
this.setColor(hsva);
this.originalFormat = this.getCurrentFormat();
}
// Set the color selection text to black or white depending on which color is picked
if (this.isLightColor(hsva)) {
this.pickr.getRoot().preview.currentColor.style.color = '#000';
} else {
this.pickr.getRoot().preview.currentColor.style.color = '#fff';
}
}
/**
* Updates the selected color when the user stops dragging on the palette.
*/
onPickerStopChange() {
this.setColor(this.pickr.getColor());
if (this.config.get('formats').length === 1) {
this.setColorFormat(this.config.get('formats')[0]);
}
this.onPickerChange(this.pickr.getColor());
}
/**
* Fires when the user picks a swatch color.
*
* @param {HSVaColor} hsva
*/
onPickerSwatch(hsva) {
this.keyboardEntry = false;
this.setColor(hsva);
if (this.config.get('formats').length === 1) {
this.setColorFormat(this.config.get('formats')[0]);
}
}
/**
* Fires when the picker is hidden.
*/
onPickerHide() {
if (this.keyboardEntry) {
if (this.colorValue.value === '' && this.config.get('allowEmpty')) {
this.setColor();
} else {
this.setColor(this.pickr.getColor());
if (this.config.get('formats').length === 1) {
this.setColorFormat(this.config.get('formats')[0]);
}
}
}
if (this.dataLocker.value === '') {
this.pickr.setColor(null);
} else {
this.pickr.setColor(this.dataLocker.value);
}
this.colorValue.value = this.dataLocker.value;
if (
this.originalColor !== null
&& this.valueFromHSVA(this.pickr.getColor()) !== this.valueFromHSVA(this.originalColor)
) {
const event = new Event('change');
event.color = this.colorValue.value;
this.element.dispatchEvent(event);
}
}
/**
* Fires when the picker is cleared.
*/
onPickerClear() {
this.setColor();
this.hidePicker();
this.colorValue.blur();
}
/**
* Gets the necessary color value based on the selected format.
*
* @param {HSVaColor} hsva
* @param {String} overrideFormat Overrides the format specified in the widget config. Can be one of "rgb", "hsl",
* "cmyk" and "hex".
* @returns {String}
*/
valueFromHSVA(hsva, overrideFormat) {
const format = overrideFormat || this.getCurrentFormat();
switch (format) {
case 'rgb':
return hsva.toRGBA().toString(1);
case 'hsl':
return hsva.toHSLA().toString(1);
case 'cmyk':
return hsva.toCMYK().toString(1);
case 'hex':
default:
return hsva.toHEXA().toString();
}
}
/**
* Gets the current color representation from Pickr and translates it to our lowercase color format.
*
* @returns {String}
*/
getCurrentFormat() {
const currentFormat = this.pickr.getColorRepresentation();
switch (currentFormat) {
case 'RGBA':
return 'rgb';
case 'HSLA':
return 'hsl';
case 'CMYK':
return 'cmyk';
case 'HEXA':
default:
return 'hex';
}
}
/**
* Sets the color value for the widget and updates the color preview.
*
* @param {HSVaColor?} hsva
*/
setColor(hsva) {
if (hsva === undefined && !this.config.get('allowEmpty') && this.originalColor) {
this.colorPreview.style.background = this.valueFromHSVA(this.originalColor, 'hex');
this.colorValue.value = this.valueFromHSVA(this.originalColor);
this.dataLocker.value = this.valueFromHSVA(this.originalColor);
} else if (hsva === undefined) {
this.colorPreview.style.background = '#fff';
this.colorValue.value = '';
this.dataLocker.value = '';
} else {
this.colorPreview.style.background = this.valueFromHSVA(hsva, 'hex');
this.colorValue.value = this.valueFromHSVA(hsva);
this.dataLocker.value = this.valueFromHSVA(hsva);
}
}
/**
* Sets the color format used for the value.
*
* @param {String} format One of "rgb", "hsl", "cmyk", "hex"
*/
setColorFormat(format) {
switch (format) {
case 'rgb':
this.pickr.setColorRepresentation('RGBA');
break;
case 'hsl':
this.pickr.setColorRepresentation('HSLA');
break;
case 'cmyk':
this.pickr.setColorRepresentation('CMYK');
break;
case 'hex':
default:
this.pickr.setColorRepresentation('HEX');
break;
}
this.formatSet = true;
}
/**
* Determines if the given HSVAColor is a "light" color.
*
* @param {HSVaColor} hsva
* @returns {Boolean}
*/
isLightColor(hsva) {
const rgba = hsva.toRGBA();
// Borrowed from https://awik.io/determine-color-bright-dark-using-javascript/
const ratio = Math.sqrt(
0.299 * (rgba[0] * rgba[0])
+ 0.587 * (rgba[1] * rgba[1])
+ 0.114 * (rgba[2] * rgba[2]),
);
// If alpha drops by 30%, then assume it is a light color
if (rgba[3] < 0.7) {
return true;
}
return (ratio > 127.5);
}
}
Snowboard.addPlugin('backend.formwidget.colorpicker', ColorPicker);
Snowboard['backend.ui.widgethandler']().register('colorpicker', 'backend.formwidget.colorpicker');
})(window.Snowboard, window.jQuery);

View File

@@ -0,0 +1,109 @@
@import "../../../../assets/less/core/boot.less";
.field-colorpicker {
.colorpicker-container {
display: flex;
flex-direction: row-reverse;
position: relative;
max-width: 300px;
width: 100%;
}
[data-color-preview] {
flex-grow: 0;
flex-shrink: 0;
width: 40px;
height: @input-height-base;
background: @input-bg;
cursor: pointer;
border: 1px solid @input-border;
.box-shadow(@input-box-shadow);
border-top-left-radius: @input-border-radius;
border-bottom-left-radius: @input-border-radius;
}
[data-color-value] {
flex: 1;
border-left: none;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
// PICKR OVERRIDES
.pcr-app[data-theme="nano"] {
width: 18em;
.pcr-selection {
// Add an additional row to the grid for color selection and preview
grid-template-rows: 1fr 5fr auto auto;
gap: 0;
.pcr-color-preview {
grid-row-start: 1;
grid-column-start: 1;
grid-row-end: 1;
grid-column-end: 3;
margin: 0;
flex-direction: row-reverse;
.pcr-current-color {
flex-grow: 0;
flex-shrink: 0;
width: 80%;
border-radius: 0;
border-bottom: 1px solid rgba(0, 0, 0, 0.5);
font-family: monospace;
height: 28px;
line-height: 29px;
text-align: center;
font-size: 0.85em;
&::before {
content: none;
}
}
.pcr-last-color {
display: block;
flex-grow: 0;
flex-shrink: 0;
width: 20%;
border-radius: 0;
background: var(--pcr-color);
border-bottom: 1px solid rgba(0, 0, 0, 0.5);
}
}
.pcr-color-palette {
grid-row-start: 2;
grid-column-start: 1;
grid-row-end: 2;
grid-column-end: 3;
}
.pcr-color-chooser {
margin-top: 0.8rem;
grid-row-start: 3;
grid-column-start: 1;
grid-row-end: 3;
grid-column-end: 3;
}
.pcr-color-opacity {
margin-top: 0.8em;
grid-row-start: 4;
grid-column-start: 1;
grid-row-end: 4;
grid-column-end: 3;
}
}
}
&[data-disabled="true"] [data-color-preview] {
cursor: default;
}
}

View File

@@ -0,0 +1,57 @@
<div
id="<?= $this->getId() ?>"
class="
field-colorpicker
<?php if ($readOnly || $disabled || $this->previewMode): ?>
disabled
<?php endif; ?>
"
data-control="colorpicker"
data-formats="<?= e(json_encode($formats)) ?>"
data-available-colors="<?= e(json_encode($availableColors)) ?>"
data-data-locker="#<?= $this->getId('input') ?>"
<?php if ($showAlpha): ?>
data-show-alpha="<?= $showAlpha ?>"
<?php endif ?>
<?php if ($allowEmpty): ?>
data-allow-empty="<?= $allowEmpty ?>"
<?php endif ?>
<?php if ($allowCustom): ?>
data-allow-custom="<?= $allowCustom ?>"
<?php endif ?>
<?php if ($readOnly || $disabled || $this->previewMode): ?>
data-disabled="true"
<?php endif; ?>
<?= $this->formField->getAttributes() ?>
>
<div class="colorpicker-container">
<?php if ($readOnly || !$allowCustom || $this->previewMode): ?>
<span
data-color-value
class="form-control"
>
<?= e($value); ?>
</span>
<?php else: ?>
<input
data-color-value
class="form-control"
placeholder="No color"
value="<?= e($value); ?>"
<?php if ($disabled): ?>
disabled
<?php endif ?>
>
<?php endif ?>
<div
data-color-preview
></div>
</div>
<input
type="hidden"
id="<?= $this->getId('input') ?>"
name="<?= $name ?>"
value="<?= e($value) ?>" />
</div>

View File

@@ -0,0 +1,8 @@
<div
id="<?= $this->getId() ?>"
class="field-datatable size-<?= $size ?>">
<?= $table->render() ?>
</div>

View File

@@ -0,0 +1,79 @@
<?php if (!empty($error)): ?>
<p class="flash-message static error">
<?= e($error); ?></p>
</p>
<?php if ($this->previewMode): ?>
<span class="form-control"><?= $value ? e($value) : '&nbsp;' ?></span>
<?php else: ?>
<input
type="text"
name="<?= $field->getName() ?>"
id="<?= $field->getId() ?>"
value="<?= e($value) ?>"
class="form-control"
autocomplete="off"
/>
<?php endif ?>
<?php return; ?>
<?php endif; ?>
<?php if ($this->previewMode): ?>
<div class="form-control"><?= Backend::dateTime($value, [
'format' => $format,
'formatAlias' => $formatAlias,
'defaultValue' => $value
]) ?></div>
<?php else: ?>
<div
id="<?= $this->getId() ?>"
class="field-datepicker"
data-control="datepicker"
data-mode="<?= $mode ?>"
data-show-week-number="<?= $showWeekNumber ?>"
<?php if ($formatMoment): ?>
data-format="<?= $formatMoment ?>"
<?php endif ?>
<?php if ($minDate): ?>
data-min-date="<?= $minDate ?>"
<?php endif ?>
<?php if ($maxDate): ?>
data-max-date="<?= $maxDate ?>"
<?php endif ?>
<?php if ($yearRange): ?>
data-year-range="<?= $yearRange ?>"
<?php endif ?>
<?php if ($firstDay): ?>
data-first-day="<?= $firstDay ?>"
<?php endif ?>
<?php if ($ignoreTimezone): ?>
data-ignore-timezone
<?php endif ?>
>
<?php if ($mode == 'date'): ?>
<?= $this->makePartial('picker_date') ?>
<?php elseif ($mode == 'datetime'): ?>
<div class="row">
<div class="col-md-7">
<?= $this->makePartial('picker_date') ?>
</div>
<div class="col-md-5">
<?= $this->makePartial('picker_time') ?>
</div>
</div>
<?php elseif ($mode == 'time'): ?>
<?= $this->makePartial('picker_time') ?>
<?php endif ?>
<!-- Data locker -->
<input
type="hidden"
name="<?= $field->getName() ?>"
id="<?= $field->getId() ?>"
value="<?= e($value) ?>"
data-datetime-value
/>
</div>
<?php endif ?>

View File

@@ -0,0 +1,11 @@
<!-- Date -->
<div class="input-with-icon right-align">
<i class="icon icon-calendar-o"></i>
<input
type="text"
id="<?= $this->getId('date') ?>"
class="form-control align-right"
autocomplete="off"
<?= $field->getAttributes() ?>
data-datepicker />
</div>

View File

@@ -0,0 +1,11 @@
<!-- Time -->
<div class="input-with-icon right-align">
<i class="icon icon-clock-o"></i>
<input
type="text"
id="<?= $this->getId('time') ?>"
class="form-control align-right"
autocomplete="off"
<?= $field->getAttributes() ?>
data-timepicker />
</div>

View File

@@ -0,0 +1,6 @@
.fieldset{position:relative;min-height:30px;border:1px solid #d1d6d9;border-radius:0.5rem;box-shadow:inset 0 1px 0 rgba(209,214,217,0.25),0 1px 0 rgba(255,255,255,.5);margin-top:5px;padding:1em 1.25em 0 1.25em;background:#f5f5f5}
.fieldset>legend{border:none;margin:0;padding-inline:1rem;width:fit-content;font-size:18px;color:inherit}
.fieldset .control-tabs.primary-tabs .nav-tabs{margin:0}
.fieldset .control-tabs.primary-tabs .nav-tabs>li.active>a:before{background-color:#f5f5f5;border-color:#f5f5f5}
.fieldset .control-tabs.primary-tabs .nav-tabs>li>a>span.title:before,
.fieldset .control-tabs.primary-tabs .nav-tabs>li>a>span.title:after{background-color:#f5f5f5}

View File

@@ -0,0 +1,41 @@
@import "../../../../assets/less/core/boot.less";
@panel-bg: #f5f5f5;
.fieldset {
position: relative;
min-height: 30px;
border: 1px solid @input-border;
border-radius: 0.5rem;
box-shadow: @input-box-shadow;
margin-top: 5px;
padding: 1em 1.25em 0 1.25em;
background: @panel-bg;
& > legend {
border: none;
margin: 0;
padding-inline: 1rem;
width: fit-content;
font-size: 18px;
color: inherit;
}
.control-tabs.primary-tabs {
.nav-tabs {
margin: 0;
> li.active > a:before {
background-color: @panel-bg;
border-color: @panel-bg;
}
> li > a > span.title {
&:before, &:after {
background-color: @panel-bg;
}
}
}
}
}

View File

@@ -0,0 +1,9 @@
<?php $label = object_get($this->config, 'label'); ?>
<fieldset class="fieldset">
<?php if ($label): ?>
<legend><?= e(trans($label)) ?></legend>
<?php endif ?>
<?= $this->formWidget->render(['section' => 'outside']) ?>
</fieldset>

View File

@@ -0,0 +1,157 @@
.field-fileupload .upload-object{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;position:relative;outline:none;overflow:hidden;display:inline-block;vertical-align:top}
.field-fileupload .upload-object img{width:100%;height:100%}
.field-fileupload .upload-object .icon-container{display:table;opacity:0.6}
.field-fileupload .upload-object .icon-container i{color:#95a5a6;display:inline-block}
.field-fileupload .upload-object .icon-container div{display:table-cell;text-align:center;vertical-align:middle}
.field-fileupload .upload-object .icon-container.image>div.icon-wrapper{display:none}
.field-fileupload .upload-object h4{font-size:13px;color:#2A3E51;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:150%;margin:15px 0 5px 0;padding-right:0;-webkit-transition:padding 0.1s;transition:padding 0.1s;position:relative}
.field-fileupload .upload-object h4 a{position:absolute;right:0;top:0;display:none;font-weight:400}
.field-fileupload .upload-object p.size{font-size:12px;color:#95a5a6}
.field-fileupload .upload-object p.size strong{font-weight:400}
.field-fileupload .upload-object .meta .drag-handle{position:absolute;bottom:0;right:0;cursor:move;display:block}
.field-fileupload .upload-object .info h4 a,
.field-fileupload .upload-object .meta a.upload-remove-button,
.field-fileupload .upload-object .meta a.drag-handle{color:#2b3e50;display:none;font-size:13px;text-decoration:none}
.field-fileupload .upload-object .icon-container{position:relative}
.field-fileupload .upload-object .icon-container:after{background-image:url('../../../../../system/assets/ui/images/loader-transparent.svg');position:absolute;content:' ';width:40px;height:40px;left:50%;top:50%;margin-top:-20px;margin-left:-20px;display:block;background-size:40px 40px;background-position:50% 50%;-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite}
.field-fileupload .upload-object.is-success .icon-container{opacity:1}
.field-fileupload .upload-object.is-success .icon-container:after{opacity:0;-webkit-transition:opacity 0.3s ease;transition:opacity 0.3s ease}
.field-fileupload .upload-object.is-error .icon-container:after{content:"";background:none;font-family:"Font Awesome 6 Free";font-weight:900;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-style:normal;font-variant:normal;text-rendering:auto;content:"\f071";-webkit-animation:none;animation:none;font-size:40px;color:#e01346;margin-top:-20px;margin-left:-20px;text-shadow:2px 2px 0 #fff}
.field-fileupload .upload-object.is-loading .icon-container{opacity:0.6}
.field-fileupload .upload-object.is-loading .icon-container:after{opacity:1;-webkit-transition:opacity 0.3s ease;transition:opacity 0.3s ease}
.field-fileupload .upload-object.is-success{cursor:pointer}
.field-fileupload .upload-object.is-success .progress-bar{opacity:0;-webkit-transition:opacity 0.3s ease;transition:opacity 0.3s ease}
.field-fileupload .upload-object.is-success:hover h4 a,
.field-fileupload .upload-object.is-success:hover .meta .upload-remove-button,
.field-fileupload .upload-object.is-success:hover .meta .drag-handle{display:block}
.field-fileupload .upload-object.is-error{cursor:pointer}
.field-fileupload .upload-object.is-error .icon-container{opacity:1}
.field-fileupload .upload-object.is-error .icon-container>img,
.field-fileupload .upload-object.is-error .icon-container>i{opacity:0.5}
.field-fileupload .upload-object.is-error .info h4{color:#e01346}
.field-fileupload .upload-object.is-error .info h4 a{display:none}
.field-fileupload .upload-object.is-error .meta{display:none}
.field-fileupload.is-sortable{position:relative}
.field-fileupload.is-sortable .upload-placeholder{position:relative;border:1px dotted #e0e0e0 !important}
.field-fileupload.is-sortable .upload-object.dragged{position:absolute;opacity:0.5;filter:alpha(opacity=50);z-index:2000}
.field-fileupload.is-sortable .upload-object.dragged .uploader-toolbar{display:none}
.field-fileupload.is-preview .upload-button,
.field-fileupload.is-preview .upload-remove-button,
.field-fileupload.is-preview .meta a.drag-handle{display:none !important}
@media (max-width:1024px){.field-fileupload .upload-object.is-success h4 a,.field-fileupload .upload-object.is-success .meta .upload-remove-button,.field-fileupload .upload-object.is-success .meta .drag-handle{display:block !important}}
.fileupload-config-form .fileupload-url-button{padding-left:0}
.fileupload-config-form .fileupload-url-button>i{color:#666}
.fileupload-config-form .file-upload-modal-image-header{background-color:#FEFEFE;background-image:-webkit-linear-gradient(45deg,#CBCBCB 25%,transparent 25%,transparent 75%,#CBCBCB 75%,#CBCBCB),-webkit-linear-gradient(45deg,#CBCBCB 25%,transparent 25%,transparent 75%,#CBCBCB 75%,#CBCBCB);background-image:-moz-linear-gradient(45deg,#CBCBCB 25%,transparent 25%,transparent 75%,#CBCBCB 75%,#CBCBCB),-moz-linear-gradient(45deg,#CBCBCB 25%,transparent 25%,transparent 75%,#CBCBCB 75%,#CBCBCB);background-image:-o-linear-gradient(45deg,#CBCBCB 25%,transparent 25%,transparent 75%,#CBCBCB 75%,#CBCBCB),-o-linear-gradient(45deg,#CBCBCB 25%,transparent 25%,transparent 75%,#CBCBCB 75%,#CBCBCB);background-image:-ms-linear-gradient(45deg,#CBCBCB 25%,transparent 25%,transparent 75%,#CBCBCB 75%,#CBCBCB),-ms-linear-gradient(45deg,#CBCBCB 25%,transparent 25%,transparent 75%,#CBCBCB 75%,#CBCBCB);background-image:linear-gradient(45deg,#CBCBCB 25%,transparent 25%,transparent 75%,#CBCBCB 75%,#CBCBCB),linear-gradient(45deg,#CBCBCB 25%,transparent 25%,transparent 75%,#CBCBCB 75%,#CBCBCB);-webkit-background-size:20px 20px;-moz-background-size:20px 20px;background-size:20px 20px;background-position:0 0,10px 10px}
.fileupload-config-form .file-upload-modal-image-header,
.fileupload-config-form .file-upload-modal-image-header img{border-top-right-radius:2px;border-top-left-radius:2px}
.fileupload-config-form .file-upload-modal-image-header .close{position:absolute;top:20px;right:20px;background:#BDC3C7;opacity:0.7;height:24px;width:22px;z-index:1}
.fileupload-config-form .file-upload-modal-image-header .close:hover,
.fileupload-config-form .file-upload-modal-image-header .close:focus{opacity:0.9}
.fileupload-config-form .file-upload-modal-image-header + .modal-body{padding-top:20px}
.field-fileupload.style-image-multi .upload-button,
.field-fileupload.style-image-multi .upload-object{margin:0 10px 10px 0}
.field-fileupload.style-image-multi .upload-button{display:block;border:2px dashed #BDC3C7;background-clip:content-box;background-color:#F9F9F9;position:relative;outline:none;float:left;width:76px;height:76px}
.field-fileupload.style-image-multi .upload-button .upload-button-icon{position:absolute;width:22px;height:22px;top:50%;left:50%;margin-top:-11px;margin-left:-11px}
.field-fileupload.style-image-multi .upload-button .upload-button-icon:before{text-align:center;display:block;font-size:22px;height:22px;width:22px;line-height:22px;color:#BDC3C7}
.field-fileupload.style-image-multi .upload-button .upload-button-icon.large-icon{width:34px;height:34px;top:50%;left:50%;margin-top:-17px;margin-left:-17px}
.field-fileupload.style-image-multi .upload-button .upload-button-icon.large-icon:before{font-size:34px;height:24px;width:24px;line-height:24px}
.field-fileupload.style-image-multi .upload-button:hover{border:2px dashed #2da7c7}
.field-fileupload.style-image-multi .upload-button:hover .upload-button-icon:before{color:#2da7c7}
.field-fileupload.style-image-multi .upload-button:focus{border:2px dashed #2da7c7}
.field-fileupload.style-image-multi .upload-button:focus .upload-button-icon:before{color:#2da7c7}
.field-fileupload.style-image-multi .upload-files-container{margin-left:90px}
.field-fileupload.style-image-multi .upload-object{background:#fff;border:1px solid #ecf0f1;width:260px}
.field-fileupload.style-image-multi .upload-object .progress-bar{display:block;width:100%;overflow:hidden;height:5px;background-color:#f5f5f5;border-radius:3px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);position:absolute;bottom:10px;left:0}
.field-fileupload.style-image-multi .upload-object .progress-bar .upload-progress{float:left;width:0%;height:100%;line-height:5px;color:#fff;background-color:#5fb6f5;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:width 0.6s ease;transition:width 0.6s ease}
.field-fileupload.style-image-multi .upload-object .icon-container{border-right:1px solid #f6f8f9;float:left;overflow:hidden;width:75px;height:75px;display:flex;align-items:center;justify-content:center}
.field-fileupload.style-image-multi .upload-object .icon-container i{font-size:35px}
.field-fileupload.style-image-multi .upload-object .icon-container.image img{border-bottom-left-radius:3px;border-top-left-radius:3px;width:auto;height:auto;max-height:100%}
.field-fileupload.style-image-multi .upload-object .info{margin-left:90px}
.field-fileupload.style-image-multi .upload-object .info h4{padding-right:15px}
.field-fileupload.style-image-multi .upload-object .info h4 a{right:15px}
.field-fileupload.style-image-multi .upload-object .meta{position:absolute;bottom:0;left:0;right:0;margin:0 15px 0 90px}
.field-fileupload.style-image-multi .upload-object .meta a.drag-handle{bottom:15px}
.field-fileupload.style-image-multi .upload-object.upload-placeholder{height:75px;background-color:transparent}
.field-fileupload.style-image-multi .upload-object.upload-placeholder:after{opacity:0}
.field-fileupload.style-image-multi .upload-object:hover{background:#4da7e8 !important}
.field-fileupload.style-image-multi .upload-object:hover i,
.field-fileupload.style-image-multi .upload-object:hover p.size{color:#ecf0f1}
.field-fileupload.style-image-multi .upload-object:hover h4{color:white}
.field-fileupload.style-image-multi .upload-object:hover .icon-container{border-right-color:#4da7e8 !important}
.field-fileupload.style-image-multi .upload-object:hover h4{padding-right:35px}
.field-fileupload.style-image-multi.is-preview .upload-files-container{margin-left:0}
.form-sidebar .field-fileupload.style-image-multi .upload-files-container{margin-left:0}
.form-sidebar .field-fileupload.style-image-multi .upload-button{width:100%}
@media (max-width:1280px){.field-fileupload.style-image-multi .upload-object{width:230px}}
@media (max-width:1024px){.field-fileupload.style-image-multi .upload-button{width:100%}.field-fileupload.style-image-multi .upload-files-container{margin-left:0}.field-fileupload.style-image-multi .upload-object{margin-right:0;display:block;width:auto}}
.field-fileupload.style-image-single.is-populated .upload-button{display:none}
.field-fileupload.style-image-single .upload-button{display:block;border:2px dashed #BDC3C7;background-clip:content-box;background-color:#F9F9F9;position:relative;outline:none;min-height:100px;min-width:100px}
.field-fileupload.style-image-single .upload-button .upload-button-icon{position:absolute;width:22px;height:22px;top:50%;left:50%;margin-top:-11px;margin-left:-11px}
.field-fileupload.style-image-single .upload-button .upload-button-icon:before{text-align:center;display:block;font-size:22px;height:22px;width:22px;line-height:22px;color:#BDC3C7}
.field-fileupload.style-image-single .upload-button .upload-button-icon.large-icon{width:34px;height:34px;top:50%;left:50%;margin-top:-17px;margin-left:-17px}
.field-fileupload.style-image-single .upload-button .upload-button-icon.large-icon:before{font-size:34px;height:24px;width:24px;line-height:24px}
.field-fileupload.style-image-single .upload-button:hover{border:2px dashed #2da7c7}
.field-fileupload.style-image-single .upload-button:hover .upload-button-icon:before{color:#2da7c7}
.field-fileupload.style-image-single .upload-button:focus{border:2px dashed #2da7c7}
.field-fileupload.style-image-single .upload-button:focus .upload-button-icon:before{color:#2da7c7}
.field-fileupload.style-image-single .upload-object{padding-bottom:66px}
.field-fileupload.style-image-single .upload-object .icon-container{border:1px solid #f6f8f9;background:rgba(255,255,255,0.5)}
.field-fileupload.style-image-single .upload-object .icon-container.image img{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;display:block;max-width:100%;height:auto;min-height:100px;min-width:100px}
.field-fileupload.style-image-single .upload-object .progress-bar{display:block;width:100%;overflow:hidden;height:5px;background-color:#f5f5f5;border-radius:3px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);position:absolute;bottom:10px;left:0}
.field-fileupload.style-image-single .upload-object .progress-bar .upload-progress{float:left;width:0%;height:100%;line-height:5px;color:#fff;background-color:#5fb6f5;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:width 0.6s ease;transition:width 0.6s ease}
.field-fileupload.style-image-single .upload-object .info{position:absolute;left:0;right:0;bottom:0;height:66px}
.field-fileupload.style-image-single .upload-object .meta{position:absolute;bottom:65px;left:0;right:0;margin:0 15px}
.field-fileupload.style-image-single .upload-object:hover h4{padding-right:20px}
@media (max-width:1024px){.field-fileupload.style-image-single .upload-object h4{padding-right:20px !important}}
.field-fileupload.style-file-multi .upload-button{margin-bottom:10px}
.field-fileupload.style-file-multi .upload-files-container{border:1px solid #eee;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;border-bottom:none;display:none}
.field-fileupload.style-file-multi.is-populated .upload-files-container{display:block}
.field-fileupload.style-file-multi .upload-object{display:block;width:100%;border-bottom:1px solid #eee;padding-left:10px}
.field-fileupload.style-file-multi .upload-object:nth-child(even){background-color:#f5f5f5}
.field-fileupload.style-file-multi .upload-object .icon-container{position:absolute;top:0;left:10px;width:15px;padding:11px 7px}
.field-fileupload.style-file-multi .upload-object .icon-container i{line-height:150%;font-size:15px}
.field-fileupload.style-file-multi .upload-object .icon-container img{display:none}
.field-fileupload.style-file-multi .upload-object .info{margin-left:35px;margin-right:15%}
.field-fileupload.style-file-multi .upload-object .info h4,
.field-fileupload.style-file-multi .upload-object .info p{margin:0;padding:11px 0;font-size:12px;font-weight:normal;line-height:150%;color:#666}
.field-fileupload.style-file-multi .upload-object .info h4{padding-right:15px}
.field-fileupload.style-file-multi .upload-object .info h4 a{padding:10px 0;right:15px}
.field-fileupload.style-file-multi .upload-object .info p.size{position:absolute;top:0;right:0;width:15%;display:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.field-fileupload.style-file-multi .upload-object .progress-bar{display:block;width:100%;overflow:hidden;height:5px;background-color:#f5f5f5;border-radius:3px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);position:absolute;top:18px;left:0}
.field-fileupload.style-file-multi .upload-object .progress-bar .upload-progress{float:left;width:0%;height:100%;line-height:5px;color:#fff;background-color:#5fb6f5;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:width 0.6s ease;transition:width 0.6s ease}
.field-fileupload.style-file-multi .upload-object .meta{position:absolute;top:0;right:0;margin-right:15px;width:15%}
.field-fileupload.style-file-multi .upload-object .meta a.drag-handle{top:-2px;bottom:auto;line-height:150%;padding:10px 0}
.field-fileupload.style-file-multi .upload-object .icon-container:after{width:20px;height:20px;margin-top:-10px;margin-left:-10px;background-size:20px 20px}
.field-fileupload.style-file-multi .upload-object.is-error .icon-container:after{font-size:20px}
.field-fileupload.style-file-multi .upload-object.is-success .info p.size{display:block}
.field-fileupload.style-file-multi .upload-object.upload-placeholder{height:35px;background-color:transparent}
.field-fileupload.style-file-multi .upload-object.upload-placeholder:after{opacity:0}
.field-fileupload.style-file-multi .upload-object:hover{background:#4da7e8 !important}
.field-fileupload.style-file-multi .upload-object:hover i,
.field-fileupload.style-file-multi .upload-object:hover p.size{color:#ecf0f1}
.field-fileupload.style-file-multi .upload-object:hover h4{color:white}
.field-fileupload.style-file-multi .upload-object:hover .icon-container{border-right-color:#4da7e8 !important}
.field-fileupload.style-file-multi .upload-object:hover h4{padding-right:35px}
@media (max-width:1199px){.field-fileupload.style-file-multi .info{margin-right:20% !important}.field-fileupload.style-file-multi .info p.size{width:20% !important}.field-fileupload.style-file-multi .meta{width:20% !important}}
@media (max-width:991px){.field-fileupload.style-file-multi .upload-object h4{padding-right:35px !important}.field-fileupload.style-file-multi .info{margin-right:25% !important}.field-fileupload.style-file-multi .info p.size{width:25% !important;padding-right:35px !important}.field-fileupload.style-file-multi .meta{width:25% !important}}
.field-fileupload.style-file-single{background-color:#fff;border:1px solid #d1d6d9;overflow:hidden;position:relative;padding-right:30px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(209,214,217,0.25),0 1px 0 rgba(255,255,255,.5);box-shadow:inset 0 1px 0 rgba(209,214,217,0.25),0 1px 0 rgba(255,255,255,.5)}
.field-fileupload.style-file-single .upload-button{position:absolute;top:50%;margin-top:-44px;height:88px;background:transparent;right:-2px;color:#595959}
.field-fileupload.style-file-single .upload-button i{font-size:14px}
.field-fileupload.style-file-single .upload-button:hover{color:#333}
.field-fileupload.style-file-single .upload-empty-message{padding:8px 0 8px 11px;font-size:14px;cursor:pointer}
.field-fileupload.style-file-single.is-populated .upload-empty-message{display:none}
.field-fileupload.style-file-single .upload-object{display:block;width:100%;padding:7px 0 9px 0}
.field-fileupload.style-file-single .upload-object .icon-container{position:absolute;top:0;left:0;width:15px;padding:0 5px;margin:8px 0 0 7px;text-align:center}
.field-fileupload.style-file-single .upload-object .icon-container i{line-height:150%;font-size:15px}
.field-fileupload.style-file-single .upload-object .icon-container img{display:none}
.field-fileupload.style-file-single .upload-object .info{margin-left:34px;margin-right:15%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.field-fileupload.style-file-single .upload-object .info h4,
.field-fileupload.style-file-single .upload-object .info p{display:inline;margin:0;padding:0;font-size:13px;line-height:150%;color:#666}
.field-fileupload.style-file-single .upload-object .info p.size{font-weight:normal}
.field-fileupload.style-file-single .upload-object .info p.size:before{content:" - "}
.field-fileupload.style-file-single .upload-object .progress-bar{display:block;width:100%;overflow:hidden;height:5px;background-color:#f5f5f5;border-radius:3px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);position:absolute;top:50%;margin-top:-2px;right:5px}
.field-fileupload.style-file-single .upload-object .progress-bar .upload-progress{float:left;width:0%;height:100%;line-height:5px;color:#fff;background-color:#5fb6f5;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:width 0.6s ease;transition:width 0.6s ease}
.field-fileupload.style-file-single .upload-object .meta{position:absolute;top:50%;margin-top:-44px;height:88px;right:0;width:15%}
.field-fileupload.style-file-single .upload-object .meta .upload-remove-button{position:absolute;top:50%;right:0;height:20px;margin-top:-10px;margin-right:10px;z-index:100}
.field-fileupload.style-file-single .upload-object .icon-container:after{width:20px;height:20px;margin-top:-10px;margin-left:-10px;background-size:20px 20px}
.field-fileupload.style-file-single .upload-object.is-error .icon-container:after{font-size:20px}

View File

@@ -0,0 +1,495 @@
/*
* File upload form field control
*
* Data attributes:
* - data-control="fileupload" - enables the file upload plugin
* - data-template - a Dropzone.js template to use for each item
* - data-error-template - a popover template used to show an error
* - data-sort-handler - AJAX handler for sorting postbacks
* - data-config-handler - AJAX handler for configuration popup
*
* JavaScript API:
* $('div').fileUploader()
*
* Dependancies:
* - Dropzone.js
*/
+function ($) { "use strict";
var Base = $.wn.foundation.base,
BaseProto = Base.prototype
// FILEUPLOAD CLASS DEFINITION
// ============================
var FileUpload = function (element, options) {
this.$el = $(element)
this.options = options || {}
$.wn.foundation.controlUtils.markDisposable(element)
Base.call(this)
this.init()
}
FileUpload.prototype = Object.create(BaseProto)
FileUpload.prototype.constructor = FileUpload
FileUpload.prototype.init = function() {
if (this.options.isMulti === null) {
this.options.isMulti = this.$el.hasClass('is-multi')
}
if (this.options.isPreview === null) {
this.options.isPreview = this.$el.hasClass('is-preview')
}
if (this.options.isSortable === null) {
this.options.isSortable = this.$el.hasClass('is-sortable')
}
this.$el.one('dispose-control', this.proxy(this.dispose))
this.$clickableElements = []
const uploadButtonEl = $('.upload-button', this.$el).get(0)
if (uploadButtonEl) {
this.$clickableElements.push(uploadButtonEl)
}
const uploadEmptyMessageEl = $('div.upload-empty-message', this.$el).get(0)
if (uploadEmptyMessageEl) {
this.$clickableElements.push(uploadEmptyMessageEl)
}
this.$filesContainer = $('.upload-files-container', this.$el)
this.uploaderOptions = {}
this.$el.on('click', '.upload-object.is-success', this.proxy(this.onClickSuccessObject))
this.$el.on('click', '.upload-object.is-error', this.proxy(this.onClickErrorObject))
// Stop here for preview mode
if (this.options.isPreview)
return
this.$el.on('click', '.upload-remove-button', this.proxy(this.onRemoveObject))
this.bindUploader()
if (this.options.isSortable) {
this.bindSortable()
}
}
FileUpload.prototype.dispose = function() {
this.$el.off('click', '.upload-object.is-success', this.proxy(this.onClickSuccessObject))
this.$el.off('click', '.upload-object.is-error', this.proxy(this.onClickErrorObject))
this.$el.off('click', '.upload-remove-button', this.proxy(this.onRemoveObject))
this.$el.off('dispose-control', this.proxy(this.dispose))
this.$el.removeData('oc.fileUpload')
this.$el = null
this.$clickableElements = null
this.$filesContainer = null
this.uploaderOptions = null
// In some cases options could contain callbacks,
// so it's better to clean them up too.
this.options = null
BaseProto.dispose.call(this)
}
//
// Uploading
//
FileUpload.prototype.bindUploader = function() {
this.uploaderOptions = {
url: this.options.url,
paramName: this.options.paramName,
clickable: this.$clickableElements,
previewsContainer: this.$filesContainer.get(0),
maxFiles: !this.options.isMulti ? 1 : null,
maxFilesize: this.options.maxFilesize,
timeout: 0,
headers: {}
}
if (this.options.fileTypes) {
this.uploaderOptions.acceptedFiles = this.options.fileTypes
}
if (this.options.template) {
this.uploaderOptions.previewTemplate = $(this.options.template).html()
}
this.uploaderOptions.thumbnailWidth = this.options.thumbnailWidth
? this.options.thumbnailWidth : null
this.uploaderOptions.thumbnailHeight = this.options.thumbnailHeight
? this.options.thumbnailHeight : null
this.uploaderOptions.resize = this.onResizeFileInfo
/*
* Add CSRF token to headers
*/
var token = $('meta[name="csrf-token"]').attr('content')
if (token) {
this.uploaderOptions.headers['X-CSRF-TOKEN'] = token
}
this.dropzone = new Dropzone(this.$el.get(0), this.uploaderOptions)
this.dropzone.on('addedfile', this.proxy(this.onUploadAddedFile))
this.dropzone.on('sending', this.proxy(this.onUploadSending))
this.dropzone.on('success', this.proxy(this.onUploadSuccess))
this.dropzone.on('error', this.proxy(this.onUploadError))
Snowboard.globalEvent("formwidgets.fileupload.initUploader", this);
}
FileUpload.prototype.onResizeFileInfo = function(file) {
var info,
targetWidth,
targetHeight
if (!this.options.thumbnailWidth && !this.options.thumbnailHeight) {
targetWidth = targetHeight = 100
}
else if (this.options.thumbnailWidth) {
targetWidth = this.options.thumbnailWidth
targetHeight = this.options.thumbnailWidth * file.height / file.width
}
else if (this.options.thumbnailHeight) {
targetWidth = this.options.thumbnailHeight * file.height / file.width
targetHeight = this.options.thumbnailHeight
}
// drawImage(image, srcX, srcY, srcWidth, srcHeight, trgX, trgY, trgWidth, trgHeight) takes an image, clips it to
// the rectangle (srcX, srcY, srcWidth, srcHeight), scales it to dimensions (trgWidth, trgHeight), and draws it
// on the canvas at coordinates (trgX, trgY).
info = {
srcX: 0,
srcY: 0,
srcWidth: file.width,
srcHeight: file.height,
trgX: 0,
trgY: 0,
trgWidth: targetWidth,
trgHeight: targetHeight
}
return info
}
FileUpload.prototype.onUploadAddedFile = function(file) {
var $object = $(file.previewElement).data('dzFileObject', file),
filesize = this.getFilesize(file)
// Change filesize format to match Winter\Storm\Filesystem\Filesystem::sizeToString() format
$(file.previewElement).find('[data-dz-size]').html('<strong>' + filesize.size + '</strong> ' + filesize.units)
// Remove any exisiting objects for single variety
if (!this.options.isMulti) {
this.removeFileFromElement($object.siblings())
}
this.evalIsPopulated()
}
FileUpload.prototype.onUploadSending = function(file, xhr, formData) {
this.addExtraFormData(formData)
xhr.setRequestHeader('X-WINTER-REQUEST-HANDLER', this.options.uploadHandler)
}
FileUpload.prototype.onUploadSuccess = function(file, response) {
var $preview = $(file.previewElement),
$img = $('.image img', $preview)
$preview.addClass('is-success')
if (response.id) {
$preview.data('id', response.id)
$preview.data('path', response.path)
$('.upload-remove-button', $preview).data('request-data', { file_id: response.id })
$img.attr('src', response.thumb)
}
this.triggerChange();
}
FileUpload.prototype.onUploadError = function(file, error) {
var $preview = $(file.previewElement)
$preview.addClass('is-error')
}
/*
* Trigger change event (Compatibility with winter.form.js)
*/
FileUpload.prototype.triggerChange = function() {
this.$el.closest('[data-field-name]').trigger('change.oc.formwidget')
}
/*
* Add the required additional data to the fileupload request
*/
FileUpload.prototype.addExtraFormData = function(formData) {
if (this.options.extraData) {
$.each(this.options.extraData, function (name, value) {
formData.append(name, value)
})
}
// Add the data from the containing form element to the upload request to
// ensure that the widget is properly initialized to handle the upload
var $form = this.$el.closest('form')
if ($form.length > 0) {
var requestParentData = $form.getRequestParentData()
$.each(requestParentData, function (key) {
formData.append(key, this)
})
}
}
FileUpload.prototype.removeFileFromElement = function($element) {
var self = this
$element.each(function() {
var $el = $(this),
obj = $el.data('dzFileObject')
if (obj) {
self.dropzone.removeFile(obj)
}
else {
$el.remove()
}
})
}
//
// Sorting
//
FileUpload.prototype.bindSortable = function() {
var
self = this,
placeholderEl = $('<div class="upload-object upload-placeholder"/>').css({
width: this.options.imageWidth,
height: this.options.imageHeight
})
this.$filesContainer.sortable({
itemSelector: 'div.upload-object.is-success',
nested: false,
tolerance: -100,
placeholder: placeholderEl,
handle: '.drag-handle',
onDrop: function ($item, container, _super) {
_super($item, container)
self.onSortAttachments()
},
distance: 10
})
}
FileUpload.prototype.onSortAttachments = function() {
if (this.options.sortHandler) {
/*
* Build an object of ID:ORDER
*/
var orderData = {}
this.$el.find('.upload-object.is-success')
.each(function(index){
var id = $(this).data('id')
orderData[id] = index + 1
})
this.$el.request(this.options.sortHandler, {
data: { sortOrder: orderData }
})
}
}
//
// User interaction
//
FileUpload.prototype.onRemoveObject = function(ev) {
var self = this,
$object = $(ev.target).closest('.upload-object')
$(ev.target)
.closest('.upload-remove-button')
.one('ajaxPromise', function(){
$object.addClass('is-loading')
})
.one('ajaxDone', function(){
self.removeFileFromElement($object)
self.evalIsPopulated()
self.triggerChange()
})
.request()
ev.stopPropagation()
}
FileUpload.prototype.onClickSuccessObject = function(ev) {
if ($(ev.target).closest('.meta').length) return
var $target = $(ev.target).closest('.upload-object')
if (!this.options.configHandler) {
window.open($target.data('path'))
return
}
$target.popup({
handler: this.options.configHandler,
extraData: { file_id: $target.data('id') }
})
$target.one('popupComplete', function(event, element, modal){
modal.one('ajaxDone', 'button[type=submit]', function(e, context, data) {
if (data.displayName) {
$('[data-dz-name]', $target).text(data.displayName)
}
})
})
}
FileUpload.prototype.onClickErrorObject = function(ev) {
var
self = this,
$target = $(ev.target).closest('.upload-object'),
errorMsg = $('[data-dz-errormessage]', $target).text(),
$template = $(this.options.errorTemplate)
// Remove any exisiting objects for single variety
if (!this.options.isMulti) {
this.removeFileFromElement($target.siblings())
}
$target.ocPopover({
content: Mustache.render($template.html(), { errorMsg: errorMsg }),
modal: true,
highlightModalTarget: true,
placement: 'top',
fallbackPlacement: 'left',
containerClass: 'popover-danger'
})
var $container = $target.data('oc.popover').$container
$container.one('click', '[data-remove-file]', function() {
$target.data('oc.popover').hide()
self.removeFileFromElement($target)
self.evalIsPopulated()
})
}
//
// Helpers
//
FileUpload.prototype.evalIsPopulated = function() {
var isPopulated = !!$('.upload-object', this.$filesContainer).length
this.$el.toggleClass('is-populated', isPopulated)
// Reset maxFiles counter
if (!isPopulated) {
this.dropzone.removeAllFiles()
}
}
/*
* Replicates the formatting of Winter\Storm\Filesystem\Filesystem::sizeToString(). This method will return
* an object with the file size amount and the unit used as `size` and `units` respectively.
*/
FileUpload.prototype.getFilesize = function (file) {
var formatter = new Intl.NumberFormat('en', {
style: 'decimal',
minimumFractionDigits: 2,
maximumFractionDigits: 2
}),
size = 0,
units = 'bytes'
if (file.size >= 1073741824) {
size = formatter.format(file.size / 1073741824)
units = 'GB'
} else if (file.size >= 1048576) {
size = formatter.format(file.size / 1048576)
units = 'MB'
} else if (file.size >= 1024) {
size = formatter.format(file.size / 1024)
units = 'KB'
} else if (file.size > 1) {
size = file.size
units = 'bytes'
} else if (file.size == 1) {
size = 1
units = 'byte'
}
return {
size: size,
units: units
}
}
FileUpload.DEFAULTS = {
url: window.location,
uploadHandler: null,
configHandler: null,
sortHandler: null,
extraData: {},
paramName: 'file_data',
fileTypes: null,
maxFilesize: 256,
template: null,
errorTemplate: null,
isMulti: null,
isPreview: null,
isSortable: null,
thumbnailWidth: 120,
thumbnailHeight: 120
}
// FILEUPLOAD PLUGIN DEFINITION
// ============================
var old = $.fn.fileUploader
$.fn.fileUploader = function (option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('oc.fileUpload')
var options = $.extend({}, FileUpload.DEFAULTS, $this.data(), typeof option == 'object' && option)
if (!data) $this.data('oc.fileUpload', (data = new FileUpload(this, options)))
if (typeof option == 'string') data[option].call($this)
})
}
$.fn.fileUploader.Constructor = FileUpload
// FILEUPLOAD NO CONFLICT
// =================
$.fn.fileUploader.noConflict = function () {
$.fn.fileUpload = old
return this
}
// FILEUPLOAD DATA-API
// ===============
$(document).render(function () {
$('[data-control="fileupload"]').fileUploader()
})
}(window.jQuery);

View File

@@ -0,0 +1,414 @@
.uploader-object-active() {
background: @fileupload-object-active-bg !important;
i, p.size {
color: #ecf0f1;
}
h4 {
color: white;
}
.icon-container {
border-right-color: @fileupload-object-active-bg !important;
}
}
.uploader-progress-bar() {
display: block;
width: 100%;
overflow: hidden;
height: @fileupload-progress-bar-height;
background-color: @fileupload-progress-bar-bg;
border-radius: @border-radius-base;
.box-shadow(inset 0 1px 2px rgba(0,0,0,.1));
.upload-progress {
float: left;
width: 0%;
height: 100%;
line-height: @fileupload-progress-bar-height;
color: @fileupload-progress-bar-color;
background-color: #5fb6f5;
.box-shadow(none);
.transition(width .6s ease);
}
}
.uploader-block-button() {
display: block;
border: 2px dashed #BDC3C7;
background-clip: content-box;
background-color: #F9F9F9;
position: relative;
outline: none;
.upload-button-icon {
position: absolute;
width: 22px;
height: 22px;
top: 50%;
left: 50%;
margin-top: -11px;
margin-left: -11px;
&:before {
text-align: center;
display: block;
font-size: 22px;
height: 22px;
width: 22px;
line-height: 22px;
color: #BDC3C7;
}
&.large-icon {
width: 34px;
height: 34px;
top: 50%;
left: 50%;
margin-top: -17px;
margin-left: -17px;
&:before {
font-size: 34px;
height: 24px;
width: 24px;
line-height: 24px;
}
}
}
&:hover {
border: 2px dashed @brand-secondary;
.upload-button-icon:before {
color: @brand-secondary;
}
}
&:focus {
border: 2px dashed @brand-secondary;
.upload-button-icon:before {
color: @brand-secondary;
}
}
}
.uploader-small-loader() {
width: 20px;
height: 20px;
margin-top: -10px;
margin-left: -10px;
background-size: 20px 20px;
}
.uploader-vertical-align() {
position: absolute;
top: 50%;
margin-top: -44px;
height: 88px;
}
//
// Shared
//
.field-fileupload {
//
// Uploaded item
//
.upload-object {
.border-radius(3px);
position: relative;
outline: none;
overflow: hidden;
display: inline-block;
vertical-align: top;
img {
width: 100%;
height: 100%;
}
.icon-container {
display: table;
opacity: .6;
i {
color: #95a5a6;
display: inline-block;
}
div {
display: table-cell;
text-align: center;
vertical-align: middle;
}
}
.icon-container.image {
> div.icon-wrapper {
display: none;
}
}
h4 {
font-size: 13px;
color: #2A3E51;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
line-height: 150%;
margin: 15px 0 5px 0;
padding-right: 0;
.transition(padding 0.1s);
position: relative;
a {
position: absolute;
right: 0;
top: 0;
display: none;
font-weight: 400;
}
}
p.size {
font-size: 12px;
color: #95a5a6;
strong { font-weight: 400; }
}
.meta {
.drag-handle {
position: absolute;
bottom: 0;
right: 0;
cursor: move;
display: block;
}
}
.info h4 a,
.meta a.upload-remove-button,
.meta a.drag-handle {
color: #2b3e50;
display: none;
font-size: 13px;
text-decoration: none;
}
}
//
// Loading State
//
.upload-object {
.icon-container {
position: relative;
}
.icon-container:after {
background-image: url('../../../../../system/assets/ui/images/loader-transparent.svg');
position: absolute;
content: ' ';
width: 40px;
height: 40px;
left: 50%;
top: 50%;
margin-top: -20px;
margin-left: -20px;
display: block;
background-size: 40px 40px;
background-position: 50% 50%;
.animation(spin 1s linear infinite);
}
&.is-success {
.icon-container {
opacity: 1;
}
.icon-container:after {
opacity: 0;
.transition(opacity .3s ease);
}
}
// Replaces the loader with an error symbol
&.is-error {
.icon-container:after {
content: "";
background: none;
.icon(@exclamation-triangle);
.animation(none);
font-size: 40px;
color: @brand-danger;
margin-top: -20px;
margin-left: -20px;
text-shadow: 2px 2px 0 #fff;
}
}
&.is-loading {
.icon-container {
opacity: .6;
}
.icon-container:after {
opacity: 1;
.transition(opacity .3s ease);
}
}
}
//
// Success state
//
.upload-object.is-success {
cursor: pointer;
.progress-bar {
opacity: 0;
.transition(opacity .3s ease);
}
&:hover {
h4 a,
.meta .upload-remove-button,
.meta .drag-handle { display: block; }
}
}
//
// Error State
//
.upload-object.is-error {
cursor: pointer;
.icon-container {
opacity: 1;
> img, > i {
opacity: .5;
}
}
.info h4 {
color: @brand-danger;
a {
display: none;
}
}
.meta {
display: none;
}
}
//
// Sortable
//
&.is-sortable {
position: relative;
.upload-placeholder {
position: relative;
border: 1px dotted #e0e0e0 !important;
}
.upload-object.dragged {
position: absolute;
.opacity(.5);
z-index: 2000;
.uploader-toolbar {
display: none;
}
}
}
//
// Preview mode
//
&.is-preview {
.upload-button,
.upload-remove-button,
.meta a.drag-handle {
display: none !important;
}
}
}
//
// Media
//
@media (max-width: 1024px) {
.field-fileupload {
.upload-object.is-success {
h4 a,
.meta .upload-remove-button,
.meta .drag-handle { display: block !important; }
}
}
}
//
// Config form
//
.fileupload-config-form {
.fileupload-url-button{
padding-left: 0;
> i {
color: #666;
}
}
.file-upload-modal-image-header {
// Photoshop transparent background
// Based on: http://lea.verou.me/css3patterns/#checkerboard
background-color: #FEFEFE;
background-image: -webkit-linear-gradient(45deg, #CBCBCB 25%, transparent 25%, transparent 75%, #CBCBCB 75%, #CBCBCB), -webkit-linear-gradient(45deg, #CBCBCB 25%, transparent 25%, transparent 75%, #CBCBCB 75%, #CBCBCB);
background-image: -moz-linear-gradient(45deg, #CBCBCB 25%, transparent 25%, transparent 75%, #CBCBCB 75%, #CBCBCB), -moz-linear-gradient(45deg, #CBCBCB 25%, transparent 25%, transparent 75%, #CBCBCB 75%, #CBCBCB);
background-image: -o-linear-gradient(45deg, #CBCBCB 25%, transparent 25%, transparent 75%, #CBCBCB 75%, #CBCBCB), -o-linear-gradient(45deg, #CBCBCB 25%, transparent 25%, transparent 75%, #CBCBCB 75%, #CBCBCB);
background-image: -ms-linear-gradient(45deg, #CBCBCB 25%, transparent 25%, transparent 75%, #CBCBCB 75%, #CBCBCB), -ms-linear-gradient(45deg, #CBCBCB 25%, transparent 25%, transparent 75%, #CBCBCB 75%, #CBCBCB);
background-image: linear-gradient(45deg, #CBCBCB 25%, transparent 25%, transparent 75%, #CBCBCB 75%, #CBCBCB), linear-gradient(45deg, #CBCBCB 25%, transparent 25%, transparent 75%, #CBCBCB 75%, #CBCBCB);
-webkit-background-size: 20px 20px;
-moz-background-size: 20px 20px;
background-size: 20px 20px;
background-position: 0 0, 10px 10px;
&, img {
.border-top-radius(2px);
}
.close {
position: absolute;
top: 20px;
right: 20px;
background: #BDC3C7;
opacity: .7;
height: 24px;
width: 22px;
z-index: 1;
&:hover, &:focus {
opacity: .9;
}
}
}
.file-upload-modal-image-header + .modal-body {
padding-top: @padding-standard;
}
}

View File

@@ -0,0 +1,176 @@
//
// Multi File
//
.field-fileupload.style-file-multi {
.upload-button {
margin-bottom: 10px;
}
.upload-files-container {
border: 1px solid @fileupload-list-border-color;
.border-radius(3px);
border-bottom: none;
display: none;
}
&.is-populated .upload-files-container {
display: block;
}
.upload-object {
display: block;
width: 100%;
border-bottom: 1px solid @fileupload-list-border-color;
padding-left: 10px;
&:nth-child(even) {
background-color: @fileupload-list-accent-bg;
}
.icon-container {
position: absolute;
top: 0;
left: 10px;
width: 15px;
padding: 11px 7px;
i {
line-height: 150%;
font-size: 15px;
}
img { display: none; }
}
.info {
margin-left: 35px;
margin-right: 15%;
h4, p {
margin: 0;
padding: 11px 0;
font-size: 12px;
font-weight: normal;
line-height: 150%;
color: #666666;
}
h4 {
padding-right: 15px;
a {
padding: 10px 0;
right: 15px;
}
}
p.size {
position: absolute;
top: 0;
right: 0;
width: 15%;
display: none;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
.progress-bar {
.uploader-progress-bar();
position: absolute;
top: 18px;
left: 0;
}
.meta {
position: absolute;
top: 0;
right: 0;
margin-right: 15px;
width: 15%;
a.drag-handle {
top: -2px;
bottom: auto;
line-height: 150%;
padding: 10px 0;
}
}
.icon-container:after {
.uploader-small-loader();
}
&.is-error .icon-container:after {
font-size: 20px;
}
//
// Success
//
&.is-success {
.info p.size { display: block; }
}
//
// Sorting
//
&.upload-placeholder {
height: 35px;
background-color: transparent;
&:after { opacity: 0; }
}
//
// Hover
//
&:hover {
.uploader-object-active();
h4 { padding-right: 35px; }
}
}
}
//
// Media
//
@media (max-width: @screen-md-max) {
.field-fileupload.style-file-multi {
.info {
margin-right: 20% !important;
p.size {
width: 20% !important;
}
}
.meta {
width: 20% !important;
}
}
}
@media (max-width: @screen-sm-max) {
.field-fileupload.style-file-multi {
.upload-object {
h4 { padding-right: 35px !important; }
}
.info {
margin-right: 25% !important;
p.size {
width: 25% !important;
padding-right: 35px !important;
}
}
.meta {
width: 25% !important;
}
}
}

View File

@@ -0,0 +1,120 @@
//
// Single File
//
.field-fileupload.style-file-single {
background-color: @color-form-field-bg;
border: 1px solid @color-form-field-border;
overflow: hidden;
position: relative;
padding-right: 30px;
border-radius: 3px;
.box-shadow(@input-box-shadow);
.upload-button {
.uploader-vertical-align();
background: transparent;
right: -2px;
color: lighten(@color-form-field-recordfinder-btn, 15%);
i {
font-size: 14px;
}
&:hover {
color: @color-form-field-recordfinder-btn;
}
}
.upload-empty-message {
padding: 8px 0 8px 11px;
font-size: 14px;
cursor: pointer;
}
&.is-populated {
.upload-empty-message {
display: none;
}
}
.upload-object {
display: block;
width: 100%;
padding: 7px 0 9px 0;
.icon-container {
position: absolute;
top: 0;
left: 0;
width: 15px;
padding: 0 5px;
margin: 8px 0 0 7px;
text-align: center;
i {
line-height: 150%;
font-size: 15px;
}
img { display: none; }
}
.info {
margin-left: 34px;
margin-right: 15%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
h4, p {
display: inline;
margin: 0;
padding: 0;
font-size: 13px;
line-height: 150%;
color: #666666;
}
p.size {
font-weight: normal;
&:before {
content: " - ";
}
}
}
.progress-bar {
.uploader-progress-bar();
position: absolute;
top: 50%;
margin-top: -2px;
right: 5px;
}
.meta {
.uploader-vertical-align();
right: 0;
width: 15%;
.upload-remove-button {
position: absolute;
top: 50%;
right: 0;
height: 20px;
margin-top: -10px;
margin-right: 10px;
z-index: 100;
}
}
.icon-container:after {
.uploader-small-loader();
}
&.is-error .icon-container:after {
font-size: 20px;
}
}
}

View File

@@ -0,0 +1,139 @@
//
// Multi Image
//
.field-fileupload.style-image-multi {
.upload-button,
.upload-object {
margin: 0 10px 10px 0;
}
.upload-button {
.uploader-block-button();
float: left;
width: 76px;
height: 76px;
}
.upload-files-container {
margin-left: 90px;
}
.upload-object {
background: #fff;
border: 1px solid #ecf0f1;
width: 260px;
.progress-bar {
.uploader-progress-bar();
position: absolute;
bottom: 10px;
left: 0;
}
.icon-container {
border-right: 1px solid #f6f8f9;
float: left;
overflow: hidden;
width: 75px;
height: 75px;
display: flex;
align-items: center;
justify-content: center;
i {
font-size: 35px;
}
&.image img {
.border-left-radius(3px);
width: auto;
height: auto;
max-height: 100%;
}
}
.info {
margin-left: 90px;
h4 {
padding-right: 15px;
a {
right: 15px;
}
}
}
.meta {
position: absolute;
bottom: 0;
left: 0;
right: 0;
margin: 0 15px 0 90px;
a.drag-handle {
bottom: 15px;
}
}
&.upload-placeholder {
height: 75px;
background-color: transparent;
&:after { opacity: 0; }
}
&:hover {
.uploader-object-active();
h4 { padding-right: 35px; }
}
}
&.is-preview {
.upload-files-container {
margin-left: 0;
}
}
}
//
// On Sidebar
//
.form-sidebar .field-fileupload.style-image-multi .upload-files-container {
margin-left: 0px;
}
.form-sidebar .field-fileupload.style-image-multi .upload-button {
width: 100%;
}
//
// Media
//
@media (max-width: 1280px) {
.field-fileupload.style-image-multi {
.upload-object {
width: 230px;
}
}
}
@media (max-width: 1024px) {
.field-fileupload.style-image-multi {
.upload-button {
width: 100%;
}
.upload-files-container {
margin-left: 0;
}
.upload-object {
margin-right: 0;
display: block;
width: auto;
}
}
}

Some files were not shown because too many files have changed in this diff Show More