This commit is contained in:
Takashi Yoshinaga
2019-08-20 19:18:49 +09:00
parent 340dda3a69
commit 354a84e7d8
2259 changed files with 80712 additions and 0 deletions
@@ -0,0 +1,137 @@
# Changelog
All notable changes to this package will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
## [2.0.7] - 2019-03-06
- Fix version parse for .NET 3.5
## [2.0.4] - 2018-12-02
- Fix version conversion to support different CultureInfos
## [2.0.3] - 2018-10-10
- When a preview package is installed, keep showing updates even if "Show Preview Packages" is not checked
- When user as not already choose to show or hide Preview Packages:
- If a preview package is already installed, "Show Preview Packages" is checked
- If no preview packages are installed, "Show Preview Packages" is not checked
## [2.0.2] - 2018-10-04
- Documentation Update
- Update dialog title to "Unity Package Manager"
## [2.0.1] - 2018-09-14
- Move undesired public classes to internal
- Minor fix to the documentation
## [2.0.0] - 2018-09-10
- Always mark a package as up to date when it's not installed
- Add "Advanced" menu
- Hide preview packages by default
- Labelled packages with major version '0' as preview
- Fixed cropped error message
- Disabled downgrading Package Manager UI to incompatible versions
- Updated docs to reflect the new UI
- Fix incorrect verified tag on preview packages
- UI Fixes:
- Change mouse cursor when hovering over links
- Tweak UI layout for better alignment
- Fixed dropdown to work with 2018.3 editor
- Updated style to reflect changes in VisualElements
- Added packages serialization to avoid unnecessary refreshes
- Enable "View Documentation" Button on built-in packages, and make it point to the url contained in the description string
- Added persistent error icon when there are package add or remove errors
- Filter by name, category, version and release tag
- Show All Package by default
- MenuDropdown for All packages/In project/Built-in
- UI redesign
- Remove sentence "This package is installed for..." and all other sentence regarding status of the package
- Hide buttons for embedded, git and local packages
- Display "No results for ""
## [1.9.9] - 2018-05-09
- Only show user visible versions in the UI
## [1.9.8] - 2018-05-01
- Fixed package to work with 2018.3
- Deprecated 2018.1 because of its inability to update without error
## [1.9.6] - 2018-04-10
- Added ability to choose a package version
- Added loading indicator when retrieving package lists
## [1.9.5] - 2018-03-28
- Optimize packages list loading
- Fixes for UXML factories changes in Unity
- UI Fixes:
- "View changes" update position and label should say "View Changelog"
- Packages list should not have padding
- preview and verified tags should be lower case everywhere
- the package displayed name should stay on 1 line
## [1.9.3] - 2018-03-11
- Added caching for faster UI response time
- Exposed APIs for the Package Manager UI extension mechanism
## [1.8.2] - 2018-03-02
- Modified Tags to reflect new package workflow (Preview -> Released(no tag) -> Verified)
## [1.8.1] - 2018-02-23
- Removed Recommended tag if package version is alpha, beta or experimental
## [1.8.0] - 2018-02-16
- Removed support built-in packages
- Fixed packages sorting in All tab
- Fixed error reporting with an invalid manifest
## [1.7.2] - 2018-02-08
- Fixed errors when an exception is thrown during an operation
- Changed to only show "View Changes" when there is an update button
- Fixed typos in dialog when updating package manager ui
## [1.7.0] - 2018-02-05
- Added 'View Documentation' link to package details
- Added 'View changes' link to package details
## [1.6.1] - 2018-01-30
### Fixes
- When updating from 1.5.1, ask user to confirm close of window prior to update
- Made window dockable
- Reworked UI styles
- Enhanced keyboard navigation
## [1.5.1] - 2018-01-18
### Fixes
- Replaced VisualContainer by VisualElement in code and templates
- Moved "Project->Packages->Manage" menu item to "Window->Package Manager"
- Showed the latest version and description in tab "Install" instead of the current version
- Added "Recommended" tag properly
- Added "Go back to" when latest version is less than current one
- Removed "Update to" when current version is greater than latest one. (case for embedded or local packages)
- Replaced packages action button label:
- "Install" instead of "Add" for packages
- "Enable/Disable" instead of "Add/Remove" for built-in packages
- Added "alpha", "beta", "experimental" and "recommended" tags support
- Added loading progress while opening window
- Added package description and display name update
- Added extra messaging on package state
- Performed Documentation update
## [1.3.0] - 2017-12-12
### Changes
- Added assembly definition files
- Forced SemVer to use .NetStandard
- Fixed ValidationSuiteTests tests
- Handled compatible versions returned in PackageInfo
## [1.2.0] - 2017-11-16
### Fixes
- Fixed flickering test When_Default_FirstPackageUIElement_HasSelectedClass, use package only
- Fixed documentation
- Added Doxygen configuration file
- Removed unused fields in package.json
- Changed 'Modules' for 'Built In Packages'
- Removed version display for Built In Packages
## [1.0.0] - 2017-11-10
### This is the first release of *Unity Package Manager UI*.
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 6277a751c6c9f46359fc7004b3ee12f0
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,372 @@
# Unity Package Manager
A package is a container that holds any combination of Assets, Shaders, Textures, plug-ins, icons, and scripts that enhance various parts of your Project, including Unity modules (such as Physics or Animation). Unity packages are newer, more tightly integrated versions of Asset Store packages, able to deliver a wide range of enhancements to Unity.
Use the Unity Package Manager (in Unity’s top menu: __Window__ > __Package Manager__) to view which packages are available for installation or already installed in your Project. In addition, you can use this window to see [which versions are available](#VersionList), and [install](#PackManInstall), [remove](#PackManRemove), [disable](#PackManDisable), or [update](#PackManUpdate) packages for each Project.
![Packages window](Images/PackageManagerUI-Main.png)
The Packages window displays:
- (A) The [package scope drop-down menu](#scope), which allows you to filter which packages appear in the list.
- (B) The [Advanced button](#advanced), which allows you to display preview packages in addition to packages that have been verified to work with Unity.
- (C) The [search box](#searchText), which allows you to look for packages by name.
- (D) The [packages list view](#PackManLists), which displays all packages that match the filter and search parameters you specify.
- (E) The [package-specific detail view](#PackManDetails), which displays information specific to the package selected in the list.
- (F) The [status bar](#statusbar), which displays messages about the package load status and warnings about the network.
- (G) The [Add package from disk button](#extpkg), which allows you to specify the location of an external package.
<a name="PackManLists"></a>
## Finding packages
The Packages window displays the following types of Unity packages:
- **Read-only packages**
These are packages which the Package Manager downloads from the [Unity package registry](#PackManRegistry) as needed. They are not bundled with the Project source and may have dependencies on other packages in external Projects. This type is typical of most Unity packages.
- **Local packages**
These are packages that you saved on your computer in an [external](#extpkg) location outside of your current Unity Project.
- **Built-in packages**
These represent some of the core Unity features. You can use these packages to [turn Unity modules on and off](#PackManDisable).
**Note**: You can find out more about what each module implements in the [Unity Scripting API](https://docs.unity3d.com/ScriptReference/). Each module assembly page lists which APIs the built-in package implements.
By default, the Packages window displays the list of all packages either registered in the [package registry](#PackManRegistry) or installed [locally](#extpkg).
The following icons show you package status:
![check mark](Images/PackageManagerUI-checkmark.png) A check mark indicates that the package is already [installed](#PackManInstall) or [enabled](#PackManDisable).
![download icon](Images/PackageManagerUI-downloadicon.png) The download icon indicates that the installed packages has [an available update](#PackManUpdate).
![error indicator](Images/PackageManagerUI-errorflag.png) An error icon indicates that something went wrong during installation or loading. For more advice on resolving errors, see [Error messages](#troubleshooting) below.
You can [filter](#scope) the list to display only packages installed in your Project (including [local](#extpkg) packages), or display only built-in Unity packages. You can also [search](#searchText) for a specific package by package name, tag, or package version number.
<a name="scope"></a>
### Filtering the list
To change which packages appear in the list, select the scope you want from the drop-down menu in the left hand corner of the Packages window.
You can select from these options:
- The **All packages** scope (the default) displays all packages on the [package registry](#PackManRegistry), regardless of whether they are already installed in your Project. This also includes [local](#extpkg) packages (which are always installed).
- The **In Project** scope displays all packages currently installed in your Project, including [local](#extpkg) packages.
- The **Built-in packages** scope displays only built-in Unity packages.
When you select a new scope, your choice appears on the package scope drop-down menu and the list displays the packages matching your choice.
**Note:** If you entered any text in the [search box](#searchText), the list only displays packages which match both the scope and the search criteria.
<a name="advanced"></a>
### Advanced button
The **Advanced** button opens a drop-down menu that allows you to show preview packages. Preview package are not verified to work with Unity and might be unstable. They are not not supported in production environments.
To show the preview packages that are available, click the **Advanced** button, then click the **Show preview packages** menu item.
<a name="searchText"></a>
### Searching for packages
You can use the search box at the top of the Packages window to find any packages that match the text you enter. The Package Manager updates the package list as you enter text, displaying every package within the current scope that matches. For example, if you enter `web` in the search box, the list displays different results depending on whether you chose the **Built-in packages** scope or the **All packages** scope:
![Built-in package scope](Images/PackageManagerUI-SearchResults.png)
You can look for a package by its [package name](#PackManManifestsPackage), its [tag name](#version_tags), or its [package version number](#VersionList). The Package Manager analyzes the text that you enter to detect which method you are using and updates the list of packages dynamically.
**Package name**
You can search for either the display name as it appears in the Packages window, or the registered package name that begins with `com.unity`.
Your search text could match the beginning, middle, or end of the package's name.
**Tag name**
To search by tag name, enter one of the package version tags. For example, if you enter `verified` in the search box, only packages with a verified tag appear, regardless of their package name.
**Version number**
Enter the [version number](#VersionList) in version order (`MAJOR.MINOR.PATCH`). For example, typing `1` returns all packages with versions matching `1.x.x` (for example, `1.0.0`, `1.3.2`, and `1.10.1` all match but not `0.1.0` ).
<a name="statusbar"></a>
### Status bar
The Package Manager displays messages in the status bar at the bottom left of the Packages window.
There are typically three status messages that you might see. The **Loading packages** message appears briefly the first time you open Packman UI in a new Project. However, if the Package Manager [detects a problem](#troubleshooting), such as a missing network connection, the Package Manager displays a warning in the status bar:
![Network error message](Images/PackageManagerUI-StatusBar_Network.png)
You will also often see a message informing you when the last update occurred:
![Update message](Images/PackageManagerUI-StatusBar_Update.png)
<a name="PackManDetails"></a>
## Viewing package details
The pane on the right side of the Packages window displays details about the selected package.
![Details pane](Images/PackageManagerUI-DetailsPane.png)
These details include the following information:
- (A) The display name
- (B) The [version number](#VersionList) (and [tag](#version_tags), if available)
- \(C\) The [links](#links) to open the package documentation page, the package change log (if available), and the license information.
- (D) The official package name from the [registry](#PackManRegistry) starting with `com.unity.`
- (E) The author
- (F) A brief description
- (G) Buttons to [install](#PackManInstall) or [update](#PackManUpdate) a package (or the **Up to date** message if the selected version is already installed)
- (H) The package version drop-down menu
- (I) Buttons to [remove](#PackManRemove) or [disable](#PackManDisable) the package
<a name="VersionList"></a>
### List of versions
You can view the list of versions available for the current package by clicking the version drop-down menu beside the **Update to** or **Install** button in the upper right of the Package specific detail view.
- (A) The main menu displays the current version, the latest version (even if it is a preview), and the verified version.
- (B) The submenu displays all available versions.
You can select any of these versions for the current package and install that specific version using the **Install** or **Update to** button.
<a name="version_tags"></a>
### Version tags
Some packages display tags next to the version number. These tags convey information about that version of the package.
The Package Manager uses the following values:
| **Tag** | **Meaning** |
|--|--|
| `Verified` | This package has been verified by Unity's Quality Assurance team to work with a specific version of the Editor. |
| `Preview` | This package is at an early stage of the release cycle and may not have been documented and fully validated by either the development team or Unity's Quality Assurance team. |
| `Local` | This package is located on your local disk but is external to your Unity Project folder. |
| *(no tag)* | This package is considered production quality, which means it is fully validated, documented, supported, and incrementally updated. |
<a name="links"></a>
### Finding more information
You can find out more about a package by viewing its documentation, changelog, or license information.
To access any of these pages, click the **View documentation**, **View changelog**, or **View licences** links.
The package page opens in your default browser.
![Package information page](Images/PackageManagerUI-DocSite.png)
To switch back and forth between the *Manual* documentation, the *Scripting API* documentation, the *Changelog*, and the *License* information for this package, click the corresponding link at the top of the page.
<a name="PackManOpen"></a>
## Installing, removing, disabling, and updating packages
You can perform a variety of tasks through the Packages window:
- [Install a new package](#PackManInstall)
- [Remove an installed package](#PackManRemove)
- [Disable a built-in package](#PackManDisable)
- [Update an installed package](#PackManUpdate)
- [Specify an external package location](#extpkg)
### Accessing the Packages window
To open the Packages window, navigate to Unity's main menu and go to **Window** > **Package Manager**.
<a name="PackManInstall"></a>
### Installing a new package
To install a new package:
1. Open the Packages window and select **All packages** from the [package scope](#scope) drop-down menu.
2. Select the package you want to install from the [list of packages](#PackManLists). The package information appears in the [details pane](#PackManDetails).
3. Select the version you want from the [version drop-down menu](#VersionList).
4. Click the **Install** button. When the progress bar finishes, the new package is ready to use.
<a name="PackManRemove"></a>
### Removing an installed package
You can only remove packages which are not required by another package.
When you remove a package, any Editor or run-time functionality which it implemented is no longer available.
To remove an installed package:
1. Open the Packages window and select **In Project** (or **All packages**) from the [package scope](#scope) drop-down menu.
2. Select the package you want to remove from the [list of packages](#PackManLists). The package information appears in the [details pane](#PackManDetails).
3. Click the **Remove** button. When the progress bar finishes, the package disappears from the list.
You can restore a removed package from the list when you are in the **All packages** scope.
<a name="PackManDisable"></a>
### Disabling a built-in package
You can disable a built-in package if you don't need some modules and you want to save resources. However, when you disable a built-in package, the corresponding Unity functionality is no longer available. This results in the following:
- If you use a Scripting API implemented by a disabled package, you get compiler errors.
- Components implemented by the disabled built-in package are also disabled, which means you cannot add them to any GameObjects. If you have a GameObject that already has one of these components, Unity ignores them in Play mode. You can see them in the Inspector window but they are greyed out to indicate that they are not available.
- When building a game, Unity strips all disabled components. For build targets which support engine code stripping (like WebGL, iOS, and Android), Unity doesn't add any code from a disabled built-in package.
To disable a built-in package:
1. Open the Packages window and select **Built-in packages** from the [package scope](#scope) drop-down menu.
2. Select the package you want to remove from the [list of packages](#PackManLists). Its information appears in the Details pane.
3. Click the **Disable** button. When the progress bar finishes, the check mark no longer appears next to the built-in package and the **Disable** button becomes an **Enable** button.
To re-enable a disabled built-in package, click the **Enable** button.
<a name="PackManUpdate"></a>
### Updating an installed package
You can update a package while in either the **In Project** or **All** mode:
1. Open the Packages window. An arrow indicator appears next to any packages that have updates available.
2. Select the package you want to update from the [list of packages](#PackManLists). The package information appears in the [details pane](#PackManDetails).
3. Select the version you want from the [version drop-down menu](#VersionList).
4. Click the **Update to** button.
When the progress bar finishes, the new package version information appears in the Details pane, and any new functionality is immediately available.
<a name="extpkg"></a>
### Specifying a local package location
The Package Manager can load a package from anywhere on your computer even if you saved it outside your Unity Project folder. For example, if you have a package called `com.unity.my-local-package` and you save it on the `Desktop` but your Unity Project is under the `Documents` folder.
To load a package from your local disk:
1. Click the plus (`+`) icon in the status bar.
The **Add package from disk** button appears.
![Add package from disk button](Images/PackageManagerUI-ExternalPackageButton.png)
2. Click the **Add package from disk** button to bring up a file browser.
3. Navigate to the folder root of your local package.
4. Double-click the `package.json` file in the file browser.
The file browser closes and the package now appears in the [package list](#PackManLists) with the `local` tag.
<a name="troubleshooting"></a>
## Error messages
The Package Manager displays error indicators when it encounters problems:
- **System-wide issues**
Error messages that appear in the [status bar](#statusbar) indicate the Package Manager has detected an issue that is not related to a specific package. For example, if the Package Manager cannot access the [package registry server](#PackManRegistry), it displays this message in the status bar:
![Network error message](Images/PackageManagerUI-StatusBar_Network.png)
If your network cannot reach the package registry server, it is probably because there is a connection problem with the network. When you or your system administrator fix the network error, the status bar clears.
- **Package-specific issues**
If a specific package has a problem when loading or installing, the error icon (![error indicator](Images/PackageManagerUI-errorflag.png)) appears in the [package list](#PackManLists) next to the compromised package. To find out what the problem is, open the compromised package's [details pane](#PackManDetails).
## Understanding how packages work
In addition to its contents (Assets, Shaders, Textures, plug-ins, icons, and scripts), a Unity package contains a [package manifest file](#PackManManifestsPackage). The package manifest tells Unity how to display its information page in the Packages window, and how to install the package in the Project.
It also contains several files that help manage package deployment, including the tests, samples, license, changelog, and documentation.
<a name="PackManManifests"></a>
### Manifests
There are two types of manifest files: [Project](#PackManManifestsProject) manifests (`manifest.json`), and [package](#PackManManifestsPackage) manifests (`package.json`). Both files use JSON (JavaScript Object Notation) syntax to communicate with the Package Manager, by describing which packages are available for each Project, and what each package contains.
<a name="PackManManifestsProject"></a>
#### Project manifests
Project manifests (`manifest.json`) tell the Package Manager which packages and versions are available to the Project.
Project manifests support the following value:
| Key | JSON Type | Description |
|--|--|--|
| `dependencies` | Object |List of packages for the Package Manager to load. These are usually packages officially registered with Unity, but may also include [local packages that are external](#extpkg) to your Unity project. |
Example of a `manifest.json` file:
{
"dependencies": {
"com.unity.package-1": "1.0.0",
"com.unity.package-2": "2.0.0",
"com.unity.package-3": "3.0.0",
"com.unity.my-local-package": "file:/<external_path>/com.unity.my-local-package"
}
}
Unity stores each Project manifest in the `[your_Project_root_folder]/Packages/manifest.json` file.
<a name="PackManManifestsPackage"></a>
#### Package manifests
The Package Manager uses package manifests (`package.json`) to determine which version of the package to load, and what information to display in the Packages window.
Package manifests support the following values:
| Key | JSON Type | Description |
|--|--|--|
| `name` | String |The officially registered package name, following this naming convention: `"com.unity.[package name]"`. For example, `"com.unity.resourcemanager"` |
| `displayName` | String |The package name as it appears in the Packages window. For example, `"Resource Manager"` |
| `version` | String |The package version `"MAJOR.MINOR.PATCH"`. Unity packages follow the [Semantic Versioning](https://semver.org) system. For example, `"1.3.0"`. |
| `unity` | String |The Unity version that supports this package. For example, `"2018.1"` indicates compatibility starting with Unity version 2018.1. |
| `description` | String |A brief description of the package. This is the text that appears on the Details pane of the Packages window. Some special formatting character codes are supported, such as line breaks (`\n`) and bullets (`\u25AA`). |
| `category` | String |The category this packages is in. For example, `"Forces"`. |
| `dependencies` | Object |A list of packages that this package depends on, expressed as a JSON dictionary where the key is the package name and the value is the version number. Unity downloads all dependencies and loads them into the project alongside this package. |
Example of a `package.json` file:
{
"name": "com.unity.package-4",
"displayName": "Package Number 4",
"version": "2.5.1",
"unity": "2018.2",
"description": "This package provides X, Y, and Z. \n\nTo find out more, click the \"View documentation\" link.",
"keywords": ["key X", "key Y", "key Z"],
"category": "Controllers",
"dependencies": {
"com.unity.package-1": "1.0.0",
"com.unity.package-2": "2.0.0",
"com.unity.package-3": "3.0.0"
}
}
Unity stores each package manifest in the `[package_root_folder]/package.json` file.
<a name="PackManRegistry"></a>
### Package registry
Unity maintains a central registry of official packages that are available for distribution. When Unity loads, the Package Manager communicates with the registry, checks the Project manifest file, and displays the status of each available package in the Packages window.
When you remove a package from the Project, the Package Manager updates the Project manifest to exclude that package from the list when in **In Project** mode but it is still available in **All packages** mode because it is still in the registry.
When you install or update a package, the Package Manager downloads the package from the registry.
# Technical details
## Requirements
This version of Unity Package Manager is compatible with the following versions of the Unity Editor:
* 2018.3 and later (recommended)
## Documentation revision history
|Date|Reason|
|---|---|
|October 3, 2018|Documentation updated. Image updates and minor corrections.|
|September 14, 2018|Documentation updated. Matches package version 2.0.1.|
|June 4, 2018|Documentation updated. Matches package version 2.0.0.|
|May 25, 2018|Documentation updated. Matches package version 1.9.9.|
|May 4, 2018|Documentation updated. Matches package version 1.9.8.|
|March 19, 2018|Documentation updated. Matches package version 1.9.0.|
|Feb 8, 2018|Documentation updated. Matches package version 1.7.0.|
|Feb 6, 2018|Documentation cleaned up. Matches package version 1.6.1.|
|Jan 31, 2018|Documentation updated (developmental review)|
|Jan 29, 2018|Document updated. Matches package version 1.6.0.|
|Jan 18, 2018|Document updated. Matches package version 1.5.1.|
|Jan 17, 2018|Document updated. Matches package version 1.5.0.|
|Jan 12, 2018|Document updated. Matches package version 1.4.0.|
|Nov 7, 2017|Document created. Matches package version 1.0.0.|
@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 797cf0c5f1b7e4e1ab17481bd9b698eb
folderAsset: yes
timeCreated: 1501783286
licenseType: Pro
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
using System.Runtime.CompilerServices;
using UnityEditor.Experimental.UIElements;
[assembly: InternalsVisibleTo("Unity.PackageManagerCaptain.Editor")]
[assembly: InternalsVisibleTo("Unity.PackageManagerUI.EditorTests")]
#if UNITY_2018_3_OR_NEWER
[assembly: UxmlNamespacePrefix("UnityEditor.PackageManager.UI", "upm")]
#endif
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: ca53a6f1e29564d528bb56b92e0f181c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: b0c12f0066bd444a1b3a900679169f30
folderAsset: yes
timeCreated: 1501783300
licenseType: Pro
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: da0b41deddf0a4414b09681018c171f1
folderAsset: yes
timeCreated: 1502292048
licenseType: Pro
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 8c25f8b5c9da143328c516248414b95d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,105 @@
fileFormatVersion: 2
guid: 4dfd3f5da88944ec6ac5977d676c30c6
TextureImporter:
fileIDToRecycleName: {}
externalObjects: {}
serializedVersion: 5
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -1
wrapU: 1
wrapV: 1
wrapW: -1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spritePixelsToUnits: 100
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- serializedVersion: 2
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
vertices: []
indices:
edges: []
weights: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,97 @@
fileFormatVersion: 2
guid: acc34040a66fe4170bc8885268860cfe
TextureImporter:
fileIDToRecycleName: {}
externalObjects: {}
serializedVersion: 6
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: -1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- serializedVersion: 2
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
vertices: []
indices:
edges: []
weights: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,105 @@
fileFormatVersion: 2
guid: 3cf132d4fa07f4f0cb2883499c5c7dd0
TextureImporter:
fileIDToRecycleName: {}
externalObjects: {}
serializedVersion: 5
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -1
wrapU: 1
wrapV: 1
wrapW: -1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spritePixelsToUnits: 100
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- serializedVersion: 2
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 66120540d98c346bab32966fe3676afd
vertices: []
indices:
edges: []
weights: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 907731821455c4fa989ac14278e02251
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,105 @@
fileFormatVersion: 2
guid: f8eca3a711f4842eba0c52ea9885ef7f
TextureImporter:
fileIDToRecycleName: {}
externalObjects: {}
serializedVersion: 5
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -1
wrapU: 1
wrapV: 1
wrapW: -1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spritePixelsToUnits: 100
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- serializedVersion: 2
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
vertices: []
indices:
edges: []
weights: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,97 @@
fileFormatVersion: 2
guid: 4c433abcdb28444ebb7bd395ba5c76fc
TextureImporter:
fileIDToRecycleName: {}
externalObjects: {}
serializedVersion: 6
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: -1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- serializedVersion: 2
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
vertices: []
indices:
edges: []
weights: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,105 @@
fileFormatVersion: 2
guid: 01e02995805eb483690380a911a657e2
TextureImporter:
fileIDToRecycleName: {}
externalObjects: {}
serializedVersion: 5
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -1
wrapU: 1
wrapV: 1
wrapW: -1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spritePixelsToUnits: 100
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- serializedVersion: 2
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: f6ebd98fa3a904bd4bb57dae59f0a4ce
vertices: []
indices:
edges: []
weights: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: fe684bbd80eab45778b9eb316893ff7c
folderAsset: yes
timeCreated: 1502132899
licenseType: Pro
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,74 @@
/***************************************************************************************************
*** Auto-Generated - Do not modify .uss File ***
Only Modify Main.scss
***************************************************************************************************/
//--------------------------------------------------------------------------------------------------
// Pure theme colors
//--------------------------------------------------------------------------------------------------
$unity-text-color: #b4b4b4;
$unity-list-hover-background: #484848;
$unity-list-selected-background: #3e5f96;
$unity-background: #383838;
//--------------------------------------------------------------------------------------------------
// Custom colors
//--------------------------------------------------------------------------------------------------
$unity-background-light-contrast: #3c3c3c; // For dark contrast, use: #404040 and #232323
$unity-background-dark-contrast: #707070; // $
$unity-text-color-highlight: #f4f4f4;
$unity-installed-color-highlight: rgba(255,255,254,0.4);
$not-installed-package-background-color: #424242;
$package-tag-color: #ffa44e;
$package-tag-recommended-color: #e4e4e4;
$caret-text-color: #646464;
$link-text-color: #4F80F8;
//--------------------------------------------------------------------------------------------------
// Custom backgrounds
//--------------------------------------------------------------------------------------------------
$installed-package-background: resource("Builtin Skins/DarkSkin/Images/MenuItemOn.png");
$background-left-button: resource("Builtin Skins/DarkSkin/Images/btn left.png");
$background-left-button-selected: resource("Builtin Skins/DarkSkin/Images/btn left on.png");;
$background-mid-button: resource("Builtin Skins/DarkSkin/Images/btn mid.png");
$background-mid-button-selected: resource("Builtin Skins/DarkSkin/Images/btn mid on.png");
$background-right-button: resource("Builtin Skins/DarkSkin/Images/btn right.png");
$background-right-button-selected: resource("Builtin Skins/DarkSkin/Images/btn right on.png");
$background-button-slice-right: 0;
$background-button-slice-left: 0;
$background-button-slice-middle: 1;
$background-status-outdated: resource("Images/Dark/download");
$background-status-error: resource("Images/Dark/error");
$background-spinner-normal: resource("Images/Dark/loading");
$background-spinner-large: resource("Images/Dark/loading");
$popup-background: resource("Builtin Skins/DarkSkin/Images/mini popup.png");
$toolbar-background: resource("Builtin Skins/DarkSkin/Images/Toolbar.png");
$toolbar-button-background: resource("Builtin Skins/DarkSkin/Images/toolbar button.png");
$toolbar-button-active-background: resource("Builtin Skins/DarkSkin/Images/toolbar button act.png");
$toolbar-button-pulldown-background: resource("Builtin Skins/DarkSkin/Images/toolbar pulldown.png");
$toolbar-button-popup-background: resource("Builtin Skins/DarkSkin/Images/toolbar popup.png");
$toolbar-search-textfield-background: resource("Builtin Skins/DarkSkin/Images/toolbarsearch.png");
$toolbar-search-textfield-focus-background: resource("Builtin Skins/DarkSkin/Images/toolbarsearch focused.png");
$toolbar-search-cancel-background: resource("Builtin Skins/DarkSkin/Images/toolbarsearchCancelButton.png");
$toolbar-search-cancel-active-background: resource("Builtin Skins/DarkSkin/Images/toolbarsearchCancelButtonActive.png");
$toolbar-search-cancel-off-background: resource("Builtin Skins/DarkSkin/Images/toolbarsearchCancelButtonOff.png");
//--------------------------------------------------------------------------------------------------
// Common stylesheet
//--------------------------------------------------------------------------------------------------
@import "common";
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 880f2fc52037c4fe09edb80cfe84ac7c
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: c7559cdbc33f04af1a5a42d2aa5b40a5
ScriptedImporter:
fileIDToRecycleName:
11400000: stylesheet
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
@@ -0,0 +1,74 @@
/***************************************************************************************************
*** Auto-Generated - Do not modify .uss File ***
Only Modify Main.scss
***************************************************************************************************/
//--------------------------------------------------------------------------------------------------
// Pure theme colors
//--------------------------------------------------------------------------------------------------
$unity-text-color: #000000;
$unity-list-hover-background: #8f8f8f;
$unity-list-selected-background: #3e7de7;
$unity-background: #c2c2c2;
//--------------------------------------------------------------------------------------------------
// Custom colors
//--------------------------------------------------------------------------------------------------
$unity-background-light-contrast: #D5D5D5;
$unity-background-dark-contrast: #6C6C6C;
$unity-text-color-highlight: #f4f4f4;
$unity-installed-color-highlight: rgba(1,0,0,0.3);
$not-installed-package-background-color: #d1d1d1;
$package-tag-color: #d25a00;
$package-tag-recommended-color: #000;
$caret-text-color: #646464;
$link-text-color: #0808FC;
//--------------------------------------------------------------------------------------------------
// Custom backgrounds
//--------------------------------------------------------------------------------------------------
$installed-package-background: resource("Builtin Skins/LightSkin/Images/MenuItemOn.png");
$background-left-button: resource("Builtin Skins/LightSkin/Images/btn left.png");
$background-left-button-selected: resource("Builtin Skins/LightSkin/Images/btn left on.png");;
$background-mid-button: resource("Builtin Skins/LightSkin/Images/btn mid.png");
$background-mid-button-selected: resource("Builtin Skins/LightSkin/Images/btn mid on.png");
$background-right-button: resource("Builtin Skins/LightSkin/Images/btn right.png");
$background-right-button-selected: resource("Builtin Skins/LightSkin/Images/btn right on.png");
$background-button-slice-right: 6;
$background-button-slice-left: 6;
$background-button-slice-middle: 1;
$background-status-outdated: resource("Images/Light/download");
$background-status-error: resource("Images/Dark/error");
$background-spinner-normal: resource("Images/Light/loading");
$background-spinner-large: resource("Images/Light/loading");
$popup-background: resource("Builtin Skins/LightSkin/Images/mini popup.png");
$toolbar-background: resource("Builtin Skins/LightSkin/Images/Toolbar.png");
$toolbar-button-background: resource("Builtin Skins/LightSkin/Images/toolbar button.png");
$toolbar-button-active-background: resource("Builtin Skins/LightSkin/Images/toolbar button act.png");
$toolbar-button-pulldown-background: resource("Builtin Skins/LightSkin/Images/toolbar pulldown.png");
$toolbar-button-popup-background: resource("Builtin Skins/LightSkin/Images/toolbar popup.png");
$toolbar-search-textfield-background: resource("Builtin Skins/LightSkin/Images/toolbarsearch.png");
$toolbar-search-textfield-focus-background: resource("Builtin Skins/LightSkin/Images/toolbarsearch focused.png");
$toolbar-search-cancel-background: resource("Builtin Skins/LightSkin/Images/toolbarsearchCancelButton.png");
$toolbar-search-cancel-active-background: resource("Builtin Skins/LightSkin/Images/toolbarsearchCancelButtonActive.png");
$toolbar-search-cancel-off-background: resource("Builtin Skins/LightSkin/Images/toolbarsearchCancelButtonOff.png");
//--------------------------------------------------------------------------------------------------
// Common stylesheet
//--------------------------------------------------------------------------------------------------
@import "common";
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: f1687bb24464840ae9e1d253685ae0f6
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: abdc053b8e3644f299aedc641d609a84
ScriptedImporter:
fileIDToRecycleName:
11400000: stylesheet
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
@@ -0,0 +1,960 @@
// If you are using IntelliJ Rider, you can simply turn on the SCSS compiler, otherwise here is how to convert scss to uss
// # Install Sass
// gem install sass
//
// # Convert
// sass --sourcemap=none --style=expanded --scss --no-cache Main_Dark.scss Main_Dark.uss
// sass --sourcemap=none --style=expanded --scss --no-cache Main_Light.scss Main_Light.uss
//
// # Watch
// sass --watch --sourcemap=none --style=expanded --scss --no-cache Main_Light.scss:Main_Light.uss Main_Dark.scss:Main_Dark.uss
//
// Sass to Uss Notes
// - Sass converts rgb(0,0,0) to css 'black'. Uss doesn't support named colors. The workaround is to set the color in sass as #000000
//
// Uss Notes
// Runtime\UIElements\Managed\StyleSheets\StyleSheetCache.cs:50 to see which properties are available (until there is a doc)
//--------------------------------------------------------------------------------------------------
// Helper Mixins
//--------------------------------------------------------------------------------------------------
@mixin border($top, $right, $bottom, $left) {
@if $top != 'auto' {border-top-width: $top;}
@if $left != 'auto' {border-left-width: $right;}
@if $bottom != 'auto' {border-bottom-width: $bottom;}
@if $right != 'auto' {border-right-width: $left;}
}
@mixin border-box($width: 1) {
@include border($width, $width, $width, $width);
}
@mixin padding($top, $right, $bottom, $left) {
@if $top != 'auto' {padding-top: $top;}
@if $left != 'auto' {padding-left: $left;}
@if $bottom != 'auto' {padding-bottom: $bottom;}
@if $right != 'auto' {padding-right: $right;}
}
@mixin padding-box($size) {
@include padding($size, $size, $size, $size);
}
@mixin margin($top, $right, $bottom, $left) {
@if $top != 'auto' {margin-top: $top;}
@if $left != 'auto' {margin-left: $left;}
@if $bottom != 'auto' {margin-bottom: $bottom;}
@if $right != 'auto' {margin-right: $right;}
}
@mixin margin-box($size) {
@include margin($size, $size, $size, $size);
}
@mixin slice($top, $right, $bottom, $left) {
@if $top != 'auto' {-unity-slice-top: $top;}
@if $left != 'auto' {-unity-slice-left: $left;}
@if $bottom != 'auto' {-unity-slice-bottom: $bottom;}
@if $right != 'auto' {-unity-slice-right: $right;}
}
@mixin slice-box($size) {
@include slice($size, $size, $size, $size);
}
@mixin position($top, $right, $bottom, $left) {
@if $top != 'auto' {top: $top;}
@if $left != 'auto' {left: $left;}
@if $bottom != 'auto' {bottom: $bottom;}
@if $right != 'auto' {right: $right;}
}
@mixin text-clip() {
overflow: hidden;
}
@mixin selected-element() {
background-color: $unity-list-selected-background;
color: $unity-text-color-highlight;
}
@mixin active-tab() {
background-color: $unity-background-dark-contrast;
color: $unity-text-color-highlight;
}
@mixin inactive-tab() {
background-color: $unity-background-light-contrast;
color: $unity-text-color;
}
@mixin button($top, $right, $bottom, $left) {
flex: 0 0 auto;
@include padding($top, $right, $bottom, $left);
@include slice(4, 6, 4, 6);
&.display-none {
position: absolute;
border-radius: 0;
width: 0;
height: 0;
min-height: 0;
max-height: 0;
min-width: 0;
max-width: 0;
border-top-width: 0;
border-left-width: 0;
border-bottom-width: 0;
border-right-width: 0;
min-width: 0;
@include border-box(0);
@include padding-box(0);
@include margin-box(0);
@include slice-box(0);
visibility: hidden;
}
&:hover {
color: $unity-text-color;
}
}
@mixin button-box($size) {
@include button($size, $size, $size, $size);
}
//--------------------------------------------------------------------------------------------------
// Font
//--------------------------------------------------------------------------------------------------
@mixin font-small() {
font-size: 9;
}
@mixin font-normal() {
font-size: 12;
}
//--------------------------------------------------------------------------------------------------
// Styles
//--------------------------------------------------------------------------------------------------
#container {
-unity-position: absolute;
@include position(0, 0, 0, 0);
}
.display-none {
position: absolute;
overflow: hidden;
border-radius: 0;
width: 0;
height: 0;
min-height: 0;
max-height: 0;
min-width: 0;
max-width: 0;
border-top-width: 0;
border-left-width: 0;
border-bottom-width: 0;
border-right-width: 0;
@include border-box(0);
@include padding-box(0);
@include margin-box(0);
}
.row {
flex: 1 0 0;
flex-direction: row;
}
.column {
flex: 1 0 0;
flex-direction: column;
}
.tag {
@include border-box(1);
@include padding(1, 3, 1, 3);
@include font-small();
border-radius: 5;
-unity-text-align: middle-center;
border-color: #000000;
color: #000000;
}
$spinner-large-size: 32;
$spinner-large-half-size: 16;
$spinner-normal-size: 14;
$spinner-normal-half-size: 7;
$toolbar-height: 18;
#toolbarContainer {
flex: 0 0 auto;
flex-direction: row;
align-items: flex-start;
height: $toolbar-height;
#toolbarView {
flex: 1 0 0;
flex-direction: row;
align-items: flex-start;
background-image: $toolbar-background;
margin-top: -1;
@include slice(1, 1, 1, 1);
.toolbarButton {
flex: 1 0 0;
font-size: 9;
-unity-text-align: middle-center;
background-image: $toolbar-button-background;
@include button-box(0);
@include margin(0, -1, 0, 0);
@include padding(0, 5, 0, 5);
height: 19;
&.space {
margin-left: 7;
}
&.active {
background-image: $toolbar-button-active-background;
}
&.pulldown {
&:active {
background-image: $toolbar-button-background;
}
}
}
#toolbarLeft {
flex: 0 0 auto;
flex-direction: row;
align-items: flex-start;
}
#toolbarRight {
flex: 1 0 0;
flex-direction: row;
justify-content: flex-end;
#toolbarSearch {
flex: 1 0 0;
height: $toolbar-height;
max-width: 500;
flex-direction: row;
@include margin(0, 5, 0, 0);
}
}
}
}
#searchContainer {
flex: 1 0 0;
flex-direction: row;
align-items: center;
justify-content: flex-start;
height: 14;
@include margin(0, 0, 0, 0);
#searchTextField {
flex: 1 0 0;
font-size: 9;
background-image: $toolbar-search-textfield-background;
@include margin(2, 5, 1, 5);
@include padding(2, 17, 1, 17);
@include slice(1, 0, 1, 14);
height: 14;
&:focus {
background-image: $toolbar-search-textfield-focus-background;
}
&.placeholder {
color: $unity-background-dark-contrast;
}
}
#searchCancelButton {
width: 14;
height: 15;
background-image: $toolbar-search-cancel-off-background;
@include button-box(0);
@include slice(1, 14, 1, 0);
@include margin(3, 0, 2, -10);
@include padding-box(0);
@include border-box(0);
&.on {
background-image: $toolbar-search-cancel-background;
}
&:active {
background-image: $toolbar-search-cancel-active-background;
}
}
}
#detailListView {
flex: 1 0 0;
flex-direction: row;
.link {
color: $link-text-color;
background: rgba(0, 0, 0, 0);
background-image: none;
@include margin-box(0);
@include padding-box(0);
cursor: link;
}
.emptyArea {
flex: 1 0 0;
@extend .column;
.title {
-unity-text-align: middle-center;
font-size: 14;
}
.loading {
-unity-position: relative;
@include position($spinner-normal-half-size, auto, auto, $spinner-normal-half-size);
@include border-box(0);
@include padding-box(0);
@include margin-box(0);
@include slice-box(0);
width: $spinner-normal-size;
height: $spinner-normal-size;
max-width: $spinner-normal-size;
max-height: $spinner-normal-size;
}
}
#headerTitle {
flex: 1 0 0;
font-size: 12;
-unity-font-style: bold;
color: $unity-text-color;
}
#headerCaret {
flex: 0 0 auto;
font-size: 12;
-unity-font-style: bold;
color: $unity-text-color;
min-width: 16;
}
#spinnerContainer {
-unity-position: absolute;
@include position(3, 0, auto, 2);
width: 14;
flex: 0.1 0 0;
flex-direction: column;
align-items: center;
}
.loading {
-unity-position: relative;
@include position($spinner-normal-half-size, auto, auto, $spinner-normal-half-size);
@include border-box(0);
@include padding-box(0);
@include margin-box(0);
@include slice-box(0);
width: $spinner-normal-size;
height: $spinner-normal-size;
max-width: $spinner-normal-size;
max-height: $spinner-normal-size;
}
.combo {
@extend .row;
@include margin-box(3);
@include padding-box(3);
.popup {
@include padding(0, 0, 0, 8);
@include margin-box(0);
border-top-width-left-radius: 0;
border-bottom-width-left-radius: 0;
}
.button {
flex: 1 0 0; // Make buttons take all the parent's free space
@include font-normal();
@include border-box(0);
@include margin-box(0);
@include padding(2, 6, 3, 6);
@include slice(4, $background-button-slice-middle, 4, $background-button-slice-middle);
-unity-text-align: middle-center;
border-left-width: 0;
border-top-width: 0;
border-right-width: 0;
border-bottom-width: 0;
background-image: $background-mid-button;
border-top-width-right-radius: 0;
border-bottom-width-right-radius: 0;
border-top-width-left-radius: 0;
border-bottom-width-left-radius: 0;
&.selected {
background-image: $background-mid-button-selected;
color: $unity-text-color-highlight;
}
&.first {
@include slice(4, $background-button-slice-right, 4, 6);
background-image: $background-left-button;
&.selected {
background-image: $background-left-button-selected;
}
}
&.last {
@include slice(4, 6, 4, $background-button-slice-left);
background-image: $background-right-button;
&.selected {
background-image: $background-right-button-selected;
}
}
&.small {
flex: 0.5 0 0;
@include padding(0, 0, 0, 0);
}
}
}
//--------------------------------------------------------------------------------------------------
// Package List
//--------------------------------------------------------------------------------------------------
#packageListGroup {
width: 270;
#listContainerOuter {
@extend .column;
}
#groupContainerOuter {
#headerContainer {
flex: 1 0 0;
flex-direction: row;
align-items: center;
border-color: rgba(0,0,0, 0.5);
#headerTitle {
height: 0;
@include margin-box(0);
@include padding-box(0);
@include border-box(0);
}
}
#groupContainer {
@include margin(0, 0, 0, 0);
}
}
#packageList, #listContainer, #listGroups {
@extend .column;
}
#scrollView {
@extend .column;
#VerticalScroller {
bottom: 0;
}
#HorizontalScroller {
height: 0;
}
#ContentViewport {
bottom: 0;
#ContentView {
right: 0;
left: 0;
}
}
}
#noResult {
#noResultText {
-unity-word-wrap: true;
}
}
}
//--------------------------------------------------------------------------------------------------
// Package Item
//--------------------------------------------------------------------------------------------------
.package {
flex: 1 0 0;
flex-direction: row;
align-items: center;
@include margin(0, 0, 0, 0);
border-color: rgba(0,0,0, 0.5);
border-bottom-width: 1;
&.selected {
@include selected-element();
#packageName, #packageVersion {
color: $unity-text-color-highlight;
}
}
.status {
flex: 0 0 14;
width: 14;
height: 14;
@include margin(auto, 0, auto, 2);
&.installed {
background-image: $installed-package-background;
&.no-icon {
background-image: none;
}
}
&.outdated {
background-image: $background-status-outdated;
&.no-icon {
background-image: none;
}
}
&.inprogress {
background-image: none;
}
&.error {
background-image: $background-status-error;
}
}
.name {
flex: 1 0 0;
@include font-normal();
@include margin(auto, 5, auto, 0);
@include text-clip();
}
.version {
flex: 0 0 auto;
@include margin(auto, 5, auto, 0);
@include font-small;
}
}
//--------------------------------------------------------------------------------------------------
// Package Details
//--------------------------------------------------------------------------------------------------
#detailsGroup {
flex: 1 0 0;
border-left-width: 1px;
border-color: rgba(0,0,0, 0.5);
#detailsContainer {
flex: 1 0 0;
flex-direction: column;
-unity-position: relative;
}
}
#detailView {
flex: 1 0 0;
#VerticalScroller {
bottom: 0;
}
#ContentViewport {
#ContentView {
-unity-position: absolute;
@include position(0, 0, auto, 0);
}
}
.detail {
flex: 1 0 0;
flex-direction: column;
@include padding-box(5);
.header {
flex: 1 0 0;
flex-direction: row;
align-items: flex-start;
margin-bottom: 8;
#titleContainer {
flex: 0.9 0 0;
#detailTitle {
font-size: 18;
-unity-font-style: bold;
-unity-word-wrap: true;
@include margin(0, 0, 0, 4);
}
}
$controls-height: 19;
#detailsControls {
flex: 1 0 0;
height: $controls-height;
flex-direction: row;
align-items: center;
flex-wrap: wrap;
@include margin(3, 0, 0, 0);
}
#updateCombo {
flex: 1 0 0;
height: $controls-height;
align-items: center;
@include margin(0, 0, 0, 0);
@include padding(0, 0, 0, 0);
#update {
flex: 0 0 auto;
}
#updateDropdownContainer {
min-width: 65;
max-width: 150;
height: $controls-height;
flex: 0 0 auto;
.popup {
@include font-normal();
height: $controls-height;
&:focus {
background-image: $popup-background;
}
&:hover {
.textElement {
color: $unity-text-color;
}
}
.textElement {
margin-top: 2;
}
}
}
.action {
flex: 0 0 auto;
@include margin-box(0);
@include font-normal();
@include padding(2, 4, 3, 4);
right: -3;
&:hover {
color: $unity-text-color;
}
}
}
#updateContainer {
height: $controls-height;
flex: 1 0 0;
align-items: flex-end;
@include padding-box(0);
}
.button {
height: $controls-height;
@include font-normal();
@include button(3,3,4,3);
}
}
#detailVersion {
font-size: 16;
max-height: 30;
}
#detailName {
flex: 1 0 0;
max-height: 20;
-unity-font-style: italic;
}
#detailPackageStatus {
flex: 1 0 0;
-unity-font-style: bold;
-unity-word-wrap: true;
}
#detailTag {
width: 60;
@include font-normal();
border-radius: 5;
border-color: rgb(180, 180, 180);
@include border-box(2);
-unity-text-align: middle-center;
}
#detailDesc, #detailModuleReference {
flex: 1 0 0;
@include font-normal();
-unity-word-wrap: true;
&.empty {
-unity-font-style: italic;
}
}
#detailAuthor {
flex: 1 0 0;
@include font-normal();
-unity-word-wrap: true;
}
#detailCategory {
flex: 1 0 0;
@include font-normal();
-unity-word-wrap: true;
@include margin(auto, auto, 5, auto);
}
#changeLogContainer, #viewLicensesContainer {
flex: 0 0 auto;
flex-direction: row;
}
#detailActions, .detailActions {
flex: 0 0 auto;
flex-direction: row;
margin-left: 2;
@extend .row;
.detailAction {
@include margin(auto, 0, auto, 0);
@include padding(auto, 2, auto, 2);
border-left-width: 2;
border-right-width: 2;
}
.detailActionSeparator {
@include margin(auto, 0, auto, 0);
@include padding(auto, 0, auto, 0);
border-left-width: 0;
border-right-width: 0;
}
#thirdPartyNoticeLabel {
@include margin(4, 0, 4, 0);
@include padding-box(0);
-unity-word-wrap: true;
}
#viewThirdParty {
border-right-width: 0;
}
}
.versionContainer {
@extend .row;
align-items: center;
justify-content: flex-start;
#detailVersion {
flex: 0 0 auto;
}
}
.tag {
border-color: $package-tag-color;
color: $package-tag-color;
&.verified {
border-color: $package-tag-recommended-color;
color: $package-tag-recommended-color;
}
}
.tagLines {
}
.tagLine {
flex: 0 0 auto;
flex-direction: row;
}
.tagContainer {
}
}
}
#detailError {
-unity-position: absolute;
@include position(5, 5, auto, 5);
min-height: 200;
-unity-word-wrap: true;
&.display-none {
@include position(0, 0, 0, 0);
width: 0;
height: 0;
min-height: 0;
max-height: 0;
@include border-box(0);
@include padding-box(0);
@include margin-box(0);
}
}
#packageStatusBar {
-unity-position: relative;
flex: 0 0 auto;
@include margin(2, 0, 0, 0);
border-color: rgba(0, 0, 0, 0.5);
@include border(1, 0, 0, 0);
}
#statusBarContainer {
flex-direction: row;
align-items: center;
justify-content: space-between;
#loadingContainer{
flex-direction: row;
align-items: center;
justify-content: flex-start;
margin-left: 2;
#loadingIcon {
background-image: $background-status-error;
width: 16;
height: 16;
margin-left: -12;
margin-right: 0;
}
#loadingText {
padding-left: 2;
-unity-font-style: italic;
&.icon {
margin-left: 0;
}
}
}
#moreAddOptionsButton {
font-size: 16;
background-image: none;
@include margin(0, 0, -2, 0);
@include padding(3, 6, 6, 6);
border-color: rgba(0, 0, 0, 0.5);
@include border(0, 1, 0, 0);
}
}
#packageAddFromUrlField {
-unity-position: absolute;
@include position(-35, 0, 0, 0);
}
#addFromUrlFieldContainer {
border-color: rgba(0, 0, 0, 0.5);
@include border(1, 0, 1, 0);
flex-direction: row;
justify-content: space-between;
align-items: center;
height: 35;
background-color: $unity-background;
#urlTextField {
flex: 1 0 0;
height: 20;
-unity-text-align: middle-left;
}
#addFromUrlButton {
flex: 0 0 auto;
height: 20;
}
}
}
.alert {
background-color: rgba(200,0,0,0.8);
border-color: #FF0000;
flex-direction: row;
@include border-box(1);
@include padding(5, 10, 5, 10);
#alertMessage {
flex: 1 0 0;
color: $unity-text-color-highlight;
-unity-word-wrap: true;
@include text-clip();
}
#close {
flex: 0 0 auto;
max-height: 30;
@include position(auto, auto, auto, 5);
@include button(3,3,4,3);
}
}
.spinner {
flex: 0 0 auto;
@include position(-$spinner-normal-half-size, auto, auto, -$spinner-normal-half-size);
min-width: $spinner-normal-size;
min-height: $spinner-normal-size;
max-width: $spinner-normal-size;
max-height: $spinner-normal-size;
background-image: $background-spinner-normal;
}
.largeSpinner {
flex: 0 0 auto;
@include position(-$spinner-large-half-size, auto, auto, -$spinner-large-half-size);
min-width: $spinner-large-size;
min-height: $spinner-large-size;
max-width: $spinner-large-size;
max-height: $spinner-large-size;
background-image: $background-spinner-large;
}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: e45f79867376940b7ba31502238d8efa
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 1cf679539c5e5499e8856aaacf1fc32f
folderAsset: yes
timeCreated: 1502292048
licenseType: Pro
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<engine:UXML
xmlns:engine="UnityEngine.Experimental.UIElements"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="UnityEngine.Experimental.UIElements UIElementsSchema/UnityEngine.Experimental.UIElements.xsd">
<engine:VisualElement name="alertContainer" class="alert">
<engine:Label name="alertMessage"/>
<engine:Button name="close" text="Close" class="button"/>
</engine:VisualElement>
</engine:UXML>
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 4f768b64e6c37495699fffe3007e4379
ScriptedImporter:
fileIDToRecycleName:
11400000: tree
11400002: inlineStyle
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<engine:UXML
xmlns:engine="UnityEngine.Experimental.UIElements"
xmlns:upm="UnityEditor.PackageManager.UI"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="UnityEngine.Experimental.UIElements UIElementsSchema/UnityEngine.Experimental.UIElements.xsd
UnityEditor.PackageManager.UI UIElementsSchema/UnityEditor.PackageManager.UI.xsd">
<engine:VisualElement name="addFromUrlFieldContainer" focus-index="0">
<engine:TextField name="urlTextField"/>
<engine:Button name="addFromUrlButton" text="Add"/>
</engine:VisualElement>
</engine:UXML>
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 97dff1b5ae41ee84886ae7a80ae21499
ScriptedImporter:
fileIDToRecycleName:
11400000: tree
11400002: inlineStyle
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<engine:UXML
xmlns:engine="UnityEngine.Experimental.UIElements"
xmlns:upm="UnityEditor.PackageManager.UI"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="UnityEngine.Experimental.UIElements UIElementsSchema/UnityEngine.Experimental.UIElements.xsd
UnityEditor.PackageManager.UI UIElementsSchema/UnityEditor.PackageManager.UI.xsd">
<engine:VisualElement name="detailsContainer">
<engine:ScrollView name="detailView">
<engine:VisualElement name="detail" class="detail">
<engine:VisualElement class="header">
<engine:VisualElement name="titleContainer">
<engine:Label name="detailTitle"/>
</engine:VisualElement>
<engine:VisualElement name="detailsControls">
<engine:VisualElement name="updateContainer">
<engine:VisualElement name="updateCombo" class="combo">
<engine:Button name="update" text="Update" class="action"/>
<engine:VisualElement name="updateDropdownContainer" class="button last"/>
</engine:VisualElement>
</engine:VisualElement>
<engine:Button name="updateBuiltIn" text="Enable" class="button"/>
<engine:Button name="remove" text="Remove" class="button"/>
</engine:VisualElement>
</engine:VisualElement>
<engine:VisualElement class="versionContainer">
<engine:Label name="detailVersion"/>
<engine:VisualElement name="tag-inDevelopment" class="tagLine display-none">
<engine:Label name="tag" class="tag" text="in development"/>
</engine:VisualElement>
<engine:VisualElement name="tag-local" class="tagLine display-none">
<engine:Label name="tag" class="tag" text="local"/>
</engine:VisualElement>
<engine:VisualElement name="tag-preview" class="tagLine display-none">
<engine:Label name="tag" class="tag" text="preview"/>
</engine:VisualElement>
<engine:VisualElement name="tag-verified" class="tagLine display-none">
<engine:Label name="tagVerify" class="tag verified" text="verified"/>
</engine:VisualElement>
</engine:VisualElement>
<engine:VisualElement name="detailCustomContainer" class="display-none"/>
<engine:VisualElement name="documentationContainer" class="display-none">
<engine:VisualElement name="detailActions">
<engine:Button name="viewDocumentation" class="detailAction link" text="View documentation"/>
<engine:VisualElement name="changeLogContainer">
<engine:Label name="changelogSeparator" class="detailActionSeparator" text="-"/>
<engine:Button name="viewChangelog" class="detailAction link" text="View changelog"/>
</engine:VisualElement>
<engine:VisualElement name="viewLicensesContainer">
<engine:Label name="thirdPartySeparator" class="detailActionSeparator" text="-"/>
<engine:Button name="viewLicenses" class="link" text="View licenses"/>
</engine:VisualElement>
</engine:VisualElement>
</engine:VisualElement>
<engine:Label name="detailName"/>
<engine:Label name="detailAuthor"/>
<engine:Label name="detailModuleReference"/>
<engine:Label name="detailDesc"/>
</engine:VisualElement>
</engine:ScrollView>
<upm:Alert name="detailError" class="display-none"/>
</engine:VisualElement>
</engine:UXML>
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 93c1370867fcb45079592da39e0994c5
ScriptedImporter:
fileIDToRecycleName:
11400000: tree
11400002: inlineStyle
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<engine:UXML
xmlns:engine="UnityEngine.Experimental.UIElements"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="UnityEngine.Experimental.UIElements UIElementsSchema/UnityEngine.Experimental.UIElements.xsd">
<engine:VisualElement name="groupContainerOuter">
<engine:VisualElement name="headerContainer">
<engine:Label name="headerTitle" text="Default" />
</engine:VisualElement>
<engine:VisualElement name="groupContainer" />
</engine:VisualElement>
</engine:UXML>
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 25ebe415cc14c4f4ea15c34a796b75bb
ScriptedImporter:
fileIDToRecycleName:
11400000: tree
11400002: inlineStyle
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<engine:UXML
xmlns:engine="UnityEngine.Experimental.UIElements"
xmlns:upm="UnityEditor.PackageManager.UI"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="UnityEngine.Experimental.UIElements UIElementsSchema/UnityEngine.Experimental.UIElements.xsd
UnityEditor.PackageManager.UI UIElementsSchema/UnityEditor.PackageManager.UI.xsd">
<engine:VisualElement name="packageContainer" class="package">
<engine:VisualElement name="spinnerContainer">
<engine:VisualElement name="loadingSpinnerContainer" class="loading">
<upm:LoadingSpinner name="packageSpinner" class="spinner"/>
</engine:VisualElement>
</engine:VisualElement>
<engine:Label name="packageState" class="status" />
<engine:Label name="packageName" class="name" />
<engine:Label name="packageVersion" class="version"/>
</engine:VisualElement>
</engine:UXML>
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 10145f279f90346bbb61712ff585828b
ScriptedImporter:
fileIDToRecycleName:
11400000: tree
11400002: inlineStyle
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<engine:UXML
xmlns:engine="UnityEngine.Experimental.UIElements"
xmlns:upm="UnityEditor.PackageManager.UI"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="UnityEngine.Experimental.UIElements UIElementsSchema/UnityEngine.Experimental.UIElements.xsd
UnityEditor.PackageManager.UI UIElementsSchema/UnityEditor.PackageManager.UI.xsd">
<engine:VisualElement name="listContainerOuter">
<engine:VisualElement name="listContainer">
<!-- Specifying the vertical page size a workaround for https://fogbugz.unity3d.com/f/cases/1029430/ -->
<engine:ScrollView name="scrollView" vertical-page-size="10"/>
<engine:VisualElement name="emptyArea" class="list emptyArea">
<engine:Label class="title" text="There are no packages."/>
</engine:VisualElement>
<engine:VisualElement name="noResult" class="list emptyArea">
<engine:Label name="noResultText" class="title"/>
</engine:VisualElement>
</engine:VisualElement>
</engine:VisualElement>
</engine:UXML>
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 46c02d8d6499b4309ac1ec5d0b818585
ScriptedImporter:
fileIDToRecycleName:
11400000: tree
11400002: inlineStyle
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<engine:UXML
xmlns:engine="UnityEngine.Experimental.UIElements"
xmlns:upm="UnityEditor.PackageManager.UI"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="UnityEngine.Experimental.UIElements UIElementsSchema/UnityEngine.Experimental.UIElements.xsd
UnityEditor.PackageManager.UI UIElementsSchema/UnityEditor.PackageManager.UI.xsd">
<engine:VisualElement name="toolbarView">
<engine:VisualElement name="toolbarLeft">
<engine:Label name="toolbarFilterButton" class="toolbarButton space pulldown" text="All Packages ▾"/>
<engine:Label class="toolbarButton"/>
</engine:VisualElement>
<engine:VisualElement name="toolbarRight">
<engine:Label name="toolbarAdvancedButton" class="toolbarButton pulldown" text="Advanced ▾"/>
<upm:PackageSearchToolbar name="toolbarSearch"/>
</engine:VisualElement>
</engine:VisualElement>
</engine:UXML>
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 3aba9fe1ad29b42ffb0eea781318a626
ScriptedImporter:
fileIDToRecycleName:
11400000: tree
11400002: inlineStyle
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<engine:UXML
xmlns:engine="UnityEngine.Experimental.UIElements"
xmlns:upm="UnityEditor.PackageManager.UI"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="UnityEngine.Experimental.UIElements UIElementsSchema/UnityEngine.Experimental.UIElements.xsd
UnityEditor.PackageManager.UI UIElementsSchema/UnityEditor.PackageManager.UI.xsd">
<engine:VisualElement name="container">
<upm:PackageManagerToolbar name="toolbarContainer"/>
<engine:VisualElement name="detailListView">
<engine:VisualElement name="packageListGroup">
<upm:PackageList name="packageList" />
<upm:PackageStatusBar name="packageStatusBar" />
</engine:VisualElement>
<upm:PackageDetails name="detailsGroup" />
</engine:VisualElement>
</engine:VisualElement>
</engine:UXML>
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a8d9e44eff3f447db9448925617ccb44
ScriptedImporter:
fileIDToRecycleName:
11400000: tree
11400002: inlineStyle
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<engine:UXML
xmlns:engine="UnityEngine.Experimental.UIElements"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="UnityEngine.Experimental.UIElements UIElementsSchema/UnityEngine.Experimental.UIElements.xsd">
<engine:VisualElement name="searchContainer">
<engine:TextField name="searchTextField"/>
<engine:Button name="searchCancelButton"/>
</engine:VisualElement>
</engine:UXML>
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: cd44c1bc0fa624a39aa784af44c62180
ScriptedImporter:
fileIDToRecycleName:
11400000: tree
11400002: inlineStyle
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<engine:UXML
xmlns:engine="UnityEngine.Experimental.UIElements"
xmlns:upm="UnityEditor.PackageManager.UI"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="UnityEngine.Experimental.UIElements UIElementsSchema/UnityEngine.Experimental.UIElements.xsd
UnityEditor.PackageManager.UI UIElementsSchema/UnityEditor.PackageManager.UI.xsd">
<engine:VisualElement name="statusBarContainer">
<engine:VisualElement name="loadingContainer">
<engine:VisualElement name="loadingSpinnerContainer" class="loading">
<upm:LoadingSpinner name="packageSpinner" class="spinner"/>
</engine:VisualElement>
<engine:Label name="loadingIcon"/>
<engine:Label name="loadingText"/>
</engine:VisualElement>
<engine:Button name="moreAddOptionsButton" text="+"/>
</engine:VisualElement>
<upm:PackageAddFromUrlField name="packageAddFromUrlField"/>
</engine:UXML>
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: bbec1324b05a54939ad2fea2d7e11063
ScriptedImporter:
fileIDToRecycleName:
11400000: tree
11400002: inlineStyle
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 3a2bf0128e2dd664f91dfba49e36a012
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:upm="UnityEditor.PackageManager.UI" xmlns:engine="UnityEngine.Experimental.UIElements" xmlns:editor="UnityEditor.Experimental.UIElements" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="UnityEngine.Experimental.UIElements.xsd" namespace="UnityEngine.Experimental.UIElements" />
<xs:import schemaLocation="UnityEditor.PackageManager.UI.xsd" namespace="UnityEditor.PackageManager.UI" />
<xs:import schemaLocation="UnityEditor.Experimental.UIElements.xsd" namespace="UnityEditor.Experimental.UIElements" />
</xs:schema>
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 7d22934bf84ccd14082fd2d5a9f5951e
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,173 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:upm="UnityEditor.PackageManager.UI" xmlns:engine="UnityEngine.Experimental.UIElements" xmlns:editor="UnityEditor.Experimental.UIElements" elementFormDefault="qualified" targetNamespace="UnityEditor.Experimental.UIElements" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="UnityEngine.Experimental.UIElements.xsd" namespace="UnityEngine.Experimental.UIElements" />
<xs:complexType name="DoubleFieldType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute default="" name="text" type="xs:string" use="optional" />
<xs:attribute default="0" name="maxLength" type="xs:int" use="optional" />
<xs:attribute default="false" name="password" type="xs:boolean" use="optional" />
<xs:attribute default="" name="maskCharacter" type="xs:string" use="optional" />
<xs:attribute default="0" name="value" type="xs:float" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="DoubleField" substitutionGroup="engine:VisualElement" type="editor:DoubleFieldType" />
<xs:complexType name="IntegerFieldType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute default="" name="text" type="xs:string" use="optional" />
<xs:attribute default="0" name="maxLength" type="xs:int" use="optional" />
<xs:attribute default="false" name="password" type="xs:boolean" use="optional" />
<xs:attribute default="" name="maskCharacter" type="xs:string" use="optional" />
<xs:attribute default="0" name="value" type="xs:int" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="IntegerField" substitutionGroup="engine:VisualElement" type="editor:IntegerFieldType" />
<xs:complexType name="CurveFieldType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="CurveField" substitutionGroup="engine:VisualElement" type="editor:CurveFieldType" />
<xs:complexType name="ObjectFieldType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute default="true" name="allowSceneObjects" type="xs:boolean" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="ObjectField" substitutionGroup="engine:VisualElement" type="editor:ObjectFieldType" />
<xs:complexType name="ColorFieldType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute default="RGBA(0.000, 0.000, 0.000, 1.000)" name="value" type="xs:string" use="optional" />
<xs:attribute default="true" name="showEyeDropper" type="xs:boolean" use="optional" />
<xs:attribute default="true" name="showAlpha" type="xs:boolean" use="optional" />
<xs:attribute default="false" name="hdr" type="xs:boolean" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="ColorField" substitutionGroup="engine:VisualElement" type="editor:ColorFieldType" />
<xs:complexType name="EnumFieldType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute default="" name="text" type="xs:string" use="optional" />
<xs:attribute name="type" type="xs:string" use="required" />
<xs:attribute default="" name="value" type="xs:string" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="EnumField" substitutionGroup="engine:VisualElement" type="editor:EnumFieldType" />
<xs:complexType name="GradientFieldType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="GradientField" substitutionGroup="engine:VisualElement" type="editor:GradientFieldType" />
<xs:complexType name="RectFieldType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute default="0" name="x" type="xs:float" use="optional" />
<xs:attribute default="0" name="y" type="xs:float" use="optional" />
<xs:attribute default="0" name="w" type="xs:float" use="optional" />
<xs:attribute default="0" name="h" type="xs:float" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="RectField" substitutionGroup="engine:VisualElement" type="editor:RectFieldType" />
<xs:complexType name="Vector2FieldType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute default="0" name="x" type="xs:float" use="optional" />
<xs:attribute default="0" name="y" type="xs:float" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="Vector2Field" substitutionGroup="engine:VisualElement" type="editor:Vector2FieldType" />
<xs:complexType name="Vector3FieldType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute default="0" name="x" type="xs:float" use="optional" />
<xs:attribute default="0" name="y" type="xs:float" use="optional" />
<xs:attribute default="0" name="z" type="xs:float" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="Vector3Field" substitutionGroup="engine:VisualElement" type="editor:Vector3FieldType" />
<xs:complexType name="Vector4FieldType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute default="0" name="x" type="xs:float" use="optional" />
<xs:attribute default="0" name="y" type="xs:float" use="optional" />
<xs:attribute default="0" name="z" type="xs:float" use="optional" />
<xs:attribute default="0" name="w" type="xs:float" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="Vector4Field" substitutionGroup="engine:VisualElement" type="editor:Vector4FieldType" />
<xs:complexType name="BoundsFieldType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute default="0" name="cx" type="xs:float" use="optional" />
<xs:attribute default="0" name="cy" type="xs:float" use="optional" />
<xs:attribute default="0" name="cz" type="xs:float" use="optional" />
<xs:attribute default="0" name="ex" type="xs:float" use="optional" />
<xs:attribute default="0" name="ey" type="xs:float" use="optional" />
<xs:attribute default="0" name="ez" type="xs:float" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="BoundsField" substitutionGroup="engine:VisualElement" type="editor:BoundsFieldType" />
</xs:schema>
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 86d0242b70e6ab24aaf5a0e67edf2a61
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:upm="UnityEditor.PackageManager.UI" xmlns:engine="UnityEngine.Experimental.UIElements" xmlns:editor="UnityEditor.Experimental.UIElements" elementFormDefault="qualified" targetNamespace="UnityEditor.PackageManager.UI" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="UnityEngine.Experimental.UIElements.xsd" namespace="UnityEngine.Experimental.UIElements" />
<xs:complexType name="AlertType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="engine:VisualElement" />
</xs:sequence>
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute default="" name="text" type="xs:string" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="Alert" substitutionGroup="engine:VisualElement" type="upm:AlertType" />
<xs:complexType name="LoadingSpinnerType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="LoadingSpinner" substitutionGroup="engine:VisualElement" type="upm:LoadingSpinnerType" />
<xs:complexType name="PackageDetailsType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="engine:VisualElement" />
</xs:sequence>
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="PackageDetails" substitutionGroup="engine:VisualElement" type="upm:PackageDetailsType" />
<xs:complexType name="PackageGroupType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="engine:VisualElement" />
</xs:sequence>
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="PackageGroup" substitutionGroup="engine:VisualElement" type="upm:PackageGroupType" />
<xs:complexType name="PackageItemType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="engine:VisualElement" />
</xs:sequence>
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="PackageItem" substitutionGroup="engine:VisualElement" type="upm:PackageItemType" />
<xs:complexType name="PackageListType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="engine:VisualElement" />
</xs:sequence>
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="PackageList" substitutionGroup="engine:VisualElement" type="upm:PackageListType" />
<xs:complexType name="PackageSearchFilterTabsType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="engine:VisualElement" />
</xs:sequence>
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="PackageSearchFilterTabs" substitutionGroup="engine:VisualElement" type="upm:PackageSearchFilterTabsType" />
</xs:schema>
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 3abc8faab9f5cbe4db0336c99fef85ca
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,269 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:upm="UnityEditor.PackageManager.UI" xmlns:engine="UnityEngine.Experimental.UIElements" xmlns:editor="UnityEditor.Experimental.UIElements" elementFormDefault="qualified" targetNamespace="UnityEngine.Experimental.UIElements" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="UXMLType">
<xs:complexContent mixed="false">
<xs:restriction base="xs:anyType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="engine:VisualElement" />
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="UXML" type="engine:UXMLType" />
<xs:simpleType name="VisualElement_pickingMode_Type">
<xs:restriction base="xs:string">
<xs:enumeration value="Position" />
<xs:enumeration value="Ignore" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="VisualElementType">
<xs:complexContent mixed="false">
<xs:restriction base="xs:anyType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="engine:VisualElement" />
</xs:sequence>
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="VisualElement" type="engine:VisualElementType" />
<xs:complexType name="IMGUIContainerType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="IMGUIContainer" substitutionGroup="engine:VisualElement" type="engine:IMGUIContainerType" />
<xs:complexType name="ImageType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="Image" substitutionGroup="engine:VisualElement" type="engine:ImageType" />
<xs:complexType name="LabelType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute default="" name="text" type="xs:string" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="Label" substitutionGroup="engine:VisualElement" type="engine:LabelType" />
<xs:complexType name="RepeatButtonType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute default="" name="text" type="xs:string" use="optional" />
<xs:attribute default="0" name="delay" type="xs:long" use="optional" />
<xs:attribute default="0" name="interval" type="xs:long" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="RepeatButton" substitutionGroup="engine:VisualElement" type="engine:RepeatButtonType" />
<xs:complexType name="ScrollerButtonType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute default="0" name="delay" type="xs:long" use="optional" />
<xs:attribute default="0" name="interval" type="xs:long" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="ScrollerButton" substitutionGroup="engine:VisualElement" type="engine:ScrollerButtonType" />
<xs:complexType name="ScrollViewType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="engine:VisualElement" />
</xs:sequence>
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute default="false" name="showHorizontalScroller" type="xs:boolean" use="optional" />
<xs:attribute default="false" name="showVerticalScroller" type="xs:boolean" use="optional" />
<xs:attribute default="0" name="horizontalLowValue" type="xs:float" use="optional" />
<xs:attribute default="0" name="horizontalHighValue" type="xs:float" use="optional" />
<xs:attribute default="0" name="horizontalPageSize" type="xs:float" use="optional" />
<xs:attribute default="0" name="horizontalValue" type="xs:float" use="optional" />
<xs:attribute default="0" name="verticalLowValue" type="xs:float" use="optional" />
<xs:attribute default="0" name="verticalHighValue" type="xs:float" use="optional" />
<xs:attribute default="0" name="verticalPageSize" type="xs:float" use="optional" />
<xs:attribute default="0" name="verticalValue" type="xs:float" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="ScrollView" substitutionGroup="engine:VisualElement" type="engine:ScrollViewType" />
<xs:simpleType name="Scroller_direction_Type">
<xs:restriction base="xs:string">
<xs:enumeration value="Horizontal" />
<xs:enumeration value="Vertical" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="ScrollerType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute default="0" name="lowValue" type="xs:float" use="optional" />
<xs:attribute default="0" name="highValue" type="xs:float" use="optional" />
<xs:attribute default="Vertical" name="direction" type="engine:Scroller_direction_Type" use="optional" />
<xs:attribute default="0" name="value" type="xs:float" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="Scroller" substitutionGroup="engine:VisualElement" type="engine:ScrollerType" />
<xs:simpleType name="Slider_direction_Type">
<xs:restriction base="xs:string">
<xs:enumeration value="Horizontal" />
<xs:enumeration value="Vertical" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="SliderType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute default="0" name="lowValue" type="xs:float" use="optional" />
<xs:attribute default="0" name="highValue" type="xs:float" use="optional" />
<xs:attribute default="0" name="pageSize" type="xs:float" use="optional" />
<xs:attribute default="Vertical" name="direction" type="engine:Slider_direction_Type" use="optional" />
<xs:attribute default="0" name="value" type="xs:float" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="Slider" substitutionGroup="engine:VisualElement" type="engine:SliderType" />
<xs:complexType name="TextFieldType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute default="" name="text" type="xs:string" use="optional" />
<xs:attribute default="0" name="maxLength" type="xs:int" use="optional" />
<xs:attribute default="false" name="password" type="xs:boolean" use="optional" />
<xs:attribute default="" name="maskCharacter" type="xs:string" use="optional" />
<xs:attribute default="false" name="multiline" type="xs:boolean" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="TextField" substitutionGroup="engine:VisualElement" type="engine:TextFieldType" />
<xs:complexType name="ToggleType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute default="" name="text" type="xs:string" use="optional" />
<xs:attribute default="false" name="value" type="xs:boolean" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="Toggle" substitutionGroup="engine:VisualElement" type="engine:ToggleType" />
<xs:complexType name="VisualContainerType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="engine:VisualElement" />
</xs:sequence>
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="VisualContainer" substitutionGroup="engine:VisualElement" type="engine:VisualContainerType" />
<xs:complexType name="TemplateContainerType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute name="template" type="xs:string" use="required" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="TemplateContainer" substitutionGroup="engine:VisualElement" type="engine:TemplateContainerType" />
<xs:complexType name="BoxType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="engine:VisualElement" />
</xs:sequence>
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="Box" substitutionGroup="engine:VisualElement" type="engine:BoxType" />
<xs:complexType name="PopupWindowType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="engine:VisualElement" />
</xs:sequence>
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute default="" name="text" type="xs:string" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="PopupWindow" substitutionGroup="engine:VisualElement" type="engine:PopupWindowType" />
<xs:complexType name="ListViewType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute default="30" name="itemHeight" type="xs:int" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="ListView" substitutionGroup="engine:VisualElement" type="engine:ListViewType" />
<xs:complexType name="ButtonType">
<xs:complexContent mixed="false">
<xs:restriction base="engine:VisualElementType">
<xs:attribute default="" name="name" type="xs:string" use="optional" />
<xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
<xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
<xs:attribute default="" name="text" type="xs:string" use="optional" />
<xs:anyAttribute processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="Button" substitutionGroup="engine:VisualElement" type="engine:ButtonType" />
</xs:schema>
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 9da568db70dafa345a908282554b3672
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 3c61c79a991f84470843243e9710743e
folderAsset: yes
timeCreated: 1502224504
licenseType: Pro
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 06b575597b644fe8ba88495149d01b66
timeCreated: 1503684160
@@ -0,0 +1,563 @@
/*
Copyright (c) 2013 Max Hauser
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
From: https://github.com/maxhauser/semver
*/
using System;
#if !NETSTANDARD
using System.Globalization;
using System.Runtime.Serialization;
using System.Security.Permissions;
#endif
using System.Text.RegularExpressions;
namespace Semver
{
/// <summary>
/// A semantic version implementation.
/// Conforms to v2.0.0 of http://semver.org/
/// </summary>
#if NETSTANDARD
public sealed class SemVersion : IComparable<SemVersion>, IComparable
#else
[Serializable]
internal sealed class SemVersion : IComparable<SemVersion>, IComparable, ISerializable
#endif
{
static Regex parseEx =
new Regex(@"^(?<major>\d+)" +
@"(\.(?<minor>\d+))?" +
@"(\.(?<patch>\d+))?" +
@"(\-(?<pre>[0-9A-Za-z\-\.]+))?" +
@"(\+(?<build>[0-9A-Za-z\-\.]+))?$",
#if NETSTANDARD
RegexOptions.CultureInvariant | RegexOptions.ExplicitCapture);
#else
RegexOptions.CultureInvariant | RegexOptions.Compiled | RegexOptions.ExplicitCapture);
#endif
#if !NETSTANDARD
/// <summary>
/// Initializes a new instance of the <see cref="SemVersion" /> class.
/// </summary>
/// <param name="info"></param>
/// <param name="context"></param>
/// <exception cref="ArgumentNullException"></exception>
private SemVersion(SerializationInfo info, StreamingContext context)
{
if (info == null) throw new ArgumentNullException("info");
var semVersion = Parse(info.GetString("SemVersion"));
Major = semVersion.Major;
Minor = semVersion.Minor;
Patch = semVersion.Patch;
Prerelease = semVersion.Prerelease;
Build = semVersion.Build;
}
#endif
/// <summary>
/// Initializes a new instance of the <see cref="SemVersion" /> class.
/// </summary>
/// <param name="major">The major version.</param>
/// <param name="minor">The minor version.</param>
/// <param name="patch">The patch version.</param>
/// <param name="prerelease">The prerelease version (eg. "alpha").</param>
/// <param name="build">The build eg ("nightly.232").</param>
public SemVersion(int major, int minor = 0, int patch = 0, string prerelease = "", string build = "")
{
this.Major = major;
this.Minor = minor;
this.Patch = patch;
this.Prerelease = prerelease ?? "";
this.Build = build ?? "";
}
/// <summary>
/// Initializes a new instance of the <see cref="SemVersion"/> class.
/// </summary>
/// <param name="version">The <see cref="System.Version"/> that is used to initialize
/// the Major, Minor, Patch and Build properties.</param>
public SemVersion(Version version)
{
if (version == null)
throw new ArgumentNullException("version");
this.Major = version.Major;
this.Minor = version.Minor;
if (version.Revision >= 0)
{
this.Patch = version.Revision;
}
this.Prerelease = String.Empty;
if (version.Build > 0)
{
this.Build = version.Build.ToString();
}
else
{
this.Build = String.Empty;
}
}
/// <summary>
/// Parses the specified string to a semantic version.
/// </summary>
/// <param name="version">The version string.</param>
/// <param name="strict">If set to <c>true</c> minor and patch version are required, else they default to 0.</param>
/// <returns>The SemVersion object.</returns>
/// <exception cref="System.InvalidOperationException">When a invalid version string is passed.</exception>
public static SemVersion Parse(string version, bool strict = false)
{
var match = parseEx.Match(version);
if (!match.Success)
{
return new SemVersion(0);
}
#if NETSTANDARD
var major = int.Parse(match.Groups["major"].Value);
#else
var major = int.Parse(match.Groups["major"].Value, CultureInfo.InvariantCulture);
#endif
var minorMatch = match.Groups["minor"];
int minor = 0;
if (minorMatch.Success)
{
#if NETSTANDARD
minor = int.Parse(minorMatch.Value);
#else
minor = int.Parse(minorMatch.Value, CultureInfo.InvariantCulture);
#endif
}
else if (strict)
{
throw new InvalidOperationException("Invalid version (no minor version given in strict mode)");
}
var patchMatch = match.Groups["patch"];
int patch = 0;
if (patchMatch.Success)
{
#if NETSTANDARD
patch = int.Parse(patchMatch.Value);
#else
patch = int.Parse(patchMatch.Value, CultureInfo.InvariantCulture);
#endif
}
else if (strict)
{
throw new InvalidOperationException("Invalid version (no patch version given in strict mode)");
}
var prerelease = match.Groups["pre"].Value;
var build = match.Groups["build"].Value;
return new SemVersion(major, minor, patch, prerelease, build);
}
/// <summary>
/// Parses the specified string to a semantic version.
/// </summary>
/// <param name="version">The version string.</param>
/// <param name="semver">When the method returns, contains a SemVersion instance equivalent
/// to the version string passed in, if the version string was valid, or <c>null</c> if the
/// version string was not valid.</param>
/// <param name="strict">If set to <c>true</c> minor and patch version are required, else they default to 0.</param>
/// <returns><c>False</c> when a invalid version string is passed, otherwise <c>true</c>.</returns>
public static bool TryParse(string version, out SemVersion semver, bool strict = false)
{
try
{
semver = Parse(version, strict);
return true;
}
catch (Exception)
{
semver = null;
return false;
}
}
/// <summary>
/// Tests the specified versions for equality.
/// </summary>
/// <param name="versionA">The first version.</param>
/// <param name="versionB">The second version.</param>
/// <returns>If versionA is equal to versionB <c>true</c>, else <c>false</c>.</returns>
public static bool Equals(SemVersion versionA, SemVersion versionB)
{
if (ReferenceEquals(versionA, null))
return ReferenceEquals(versionB, null);
return versionA.Equals(versionB);
}
/// <summary>
/// Compares the specified versions.
/// </summary>
/// <param name="versionA">The version to compare to.</param>
/// <param name="versionB">The version to compare against.</param>
/// <returns>If versionA &lt; versionB <c>&lt; 0</c>, if versionA &gt; versionB <c>&gt; 0</c>,
/// if versionA is equal to versionB <c>0</c>.</returns>
public static int Compare(SemVersion versionA, SemVersion versionB)
{
if (ReferenceEquals(versionA, null))
return ReferenceEquals(versionB, null) ? 0 : -1;
return versionA.CompareTo(versionB);
}
/// <summary>
/// Make a copy of the current instance with optional altered fields.
/// </summary>
/// <param name="major">The major version.</param>
/// <param name="minor">The minor version.</param>
/// <param name="patch">The patch version.</param>
/// <param name="prerelease">The prerelease text.</param>
/// <param name="build">The build text.</param>
/// <returns>The new version object.</returns>
public SemVersion Change(int? major = null, int? minor = null, int? patch = null,
string prerelease = null, string build = null)
{
return new SemVersion(
major ?? this.Major,
minor ?? this.Minor,
patch ?? this.Patch,
prerelease ?? this.Prerelease,
build ?? this.Build);
}
/// <summary>
/// Gets the major version.
/// </summary>
/// <value>
/// The major version.
/// </value>
public int Major { get; private set; }
/// <summary>
/// Gets the minor version.
/// </summary>
/// <value>
/// The minor version.
/// </value>
public int Minor { get; private set; }
/// <summary>
/// Gets the patch version.
/// </summary>
/// <value>
/// The patch version.
/// </value>
public int Patch { get; private set; }
/// <summary>
/// Gets the pre-release version.
/// </summary>
/// <value>
/// The pre-release version.
/// </value>
public string Prerelease { get; private set; }
/// <summary>
/// Gets the build version.
/// </summary>
/// <value>
/// The build version.
/// </value>
public string Build { get; private set; }
/// <summary>
/// Returns a <see cref="System.String" /> that represents this instance.
/// </summary>
/// <returns>
/// A <see cref="System.String" /> that represents this instance.
/// </returns>
public override string ToString()
{
var version = "" + Major + "." + Minor + "." + Patch;
if (!String.IsNullOrEmpty(Prerelease))
version += "-" + Prerelease;
if (!String.IsNullOrEmpty(Build))
version += "+" + Build;
return version;
}
/// <summary>
/// Compares the current instance with another object of the same type and returns an integer that indicates
/// whether the current instance precedes, follows, or occurs in the same position in the sort order as the
/// other object.
/// </summary>
/// <param name="obj">An object to compare with this instance.</param>
/// <returns>
/// A value that indicates the relative order of the objects being compared.
/// The return value has these meanings: Value Meaning Less than zero
/// This instance precedes <paramref name="obj" /> in the sort order.
/// Zero This instance occurs in the same position in the sort order as <paramref name="obj" />. i
/// Greater than zero This instance follows <paramref name="obj" /> in the sort order.
/// </returns>
public int CompareTo(object obj)
{
return CompareTo((SemVersion)obj);
}
/// <summary>
/// Compares the current instance with another object of the same type and returns an integer that indicates
/// whether the current instance precedes, follows, or occurs in the same position in the sort order as the
/// other object.
/// </summary>
/// <param name="other">An object to compare with this instance.</param>
/// <returns>
/// A value that indicates the relative order of the objects being compared.
/// The return value has these meanings: Value Meaning Less than zero
/// This instance precedes <paramref name="other" /> in the sort order.
/// Zero This instance occurs in the same position in the sort order as <paramref name="other" />. i
/// Greater than zero This instance follows <paramref name="other" /> in the sort order.
/// </returns>
public int CompareTo(SemVersion other)
{
if (ReferenceEquals(other, null))
return 1;
var r = this.CompareByPrecedence(other);
if (r != 0)
return r;
r = CompareComponent(this.Build, other.Build);
return r;
}
/// <summary>
/// Compares to semantic versions by precedence. This does the same as a Equals, but ignores the build information.
/// </summary>
/// <param name="other">The semantic version.</param>
/// <returns><c>true</c> if the version precedence matches.</returns>
public bool PrecedenceMatches(SemVersion other)
{
return CompareByPrecedence(other) == 0;
}
/// <summary>
/// Compares to semantic versions by precedence. This does the same as a Equals, but ignores the build information.
/// </summary>
/// <param name="other">The semantic version.</param>
/// <returns>
/// A value that indicates the relative order of the objects being compared.
/// The return value has these meanings: Value Meaning Less than zero
/// This instance precedes <paramref name="other" /> in the version precedence.
/// Zero This instance has the same precedence as <paramref name="other" />. i
/// Greater than zero This instance has creater precedence as <paramref name="other" />.
/// </returns>
public int CompareByPrecedence(SemVersion other)
{
if (ReferenceEquals(other, null))
return 1;
var r = this.Major.CompareTo(other.Major);
if (r != 0) return r;
r = this.Minor.CompareTo(other.Minor);
if (r != 0) return r;
r = this.Patch.CompareTo(other.Patch);
if (r != 0) return r;
r = CompareComponent(this.Prerelease, other.Prerelease, true);
return r;
}
static int CompareComponent(string a, string b, bool lower = false)
{
var aEmpty = String.IsNullOrEmpty(a);
var bEmpty = String.IsNullOrEmpty(b);
if (aEmpty && bEmpty)
return 0;
if (aEmpty)
return lower ? 1 : -1;
if (bEmpty)
return lower ? -1 : 1;
var aComps = a.Split('.');
var bComps = b.Split('.');
var minLen = Math.Min(aComps.Length, bComps.Length);
for (int i = 0; i < minLen; i++)
{
var ac = aComps[i];
var bc = bComps[i];
int anum, bnum;
var isanum = Int32.TryParse(ac, out anum);
var isbnum = Int32.TryParse(bc, out bnum);
int r;
if (isanum && isbnum)
{
r = anum.CompareTo(bnum);
if (r != 0) return anum.CompareTo(bnum);
}
else
{
if (isanum)
return -1;
if (isbnum)
return 1;
r = String.CompareOrdinal(ac, bc);
if (r != 0)
return r;
}
}
return aComps.Length.CompareTo(bComps.Length);
}
/// <summary>
/// Determines whether the specified <see cref="System.Object" /> is equal to this instance.
/// </summary>
/// <param name="obj">The <see cref="System.Object" /> to compare with this instance.</param>
/// <returns>
/// <c>true</c> if the specified <see cref="System.Object" /> is equal to this instance; otherwise, <c>false</c>.
/// </returns>
public override bool Equals(object obj)
{
if (ReferenceEquals(obj, null))
return false;
if (ReferenceEquals(this, obj))
return true;
var other = (SemVersion)obj;
return this.Major == other.Major &&
this.Minor == other.Minor &&
this.Patch == other.Patch &&
string.Equals(this.Prerelease, other.Prerelease, StringComparison.Ordinal) &&
string.Equals(this.Build, other.Build, StringComparison.Ordinal);
}
/// <summary>
/// Returns a hash code for this instance.
/// </summary>
/// <returns>
/// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table.
/// </returns>
public override int GetHashCode()
{
unchecked
{
int result = this.Major.GetHashCode();
result = result * 31 + this.Minor.GetHashCode();
result = result * 31 + this.Patch.GetHashCode();
result = result * 31 + this.Prerelease.GetHashCode();
result = result * 31 + this.Build.GetHashCode();
return result;
}
}
#if !NETSTANDARD
[SecurityPermission(SecurityAction.Demand, SerializationFormatter = true)]
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
if (info == null) throw new ArgumentNullException("info");
info.AddValue("SemVersion", ToString());
}
#endif
/// <summary>
/// Implicit conversion from string to SemVersion.
/// </summary>
/// <param name="version">The semantic version.</param>
/// <returns>The SemVersion object.</returns>
public static implicit operator SemVersion(string version)
{
return SemVersion.Parse(version);
}
/// <summary>
/// The override of the equals operator.
/// </summary>
/// <param name="left">The left value.</param>
/// <param name="right">The right value.</param>
/// <returns>If left is equal to right <c>true</c>, else <c>false</c>.</returns>
public static bool operator ==(SemVersion left, SemVersion right)
{
return SemVersion.Equals(left, right);
}
/// <summary>
/// The override of the un-equal operator.
/// </summary>
/// <param name="left">The left value.</param>
/// <param name="right">The right value.</param>
/// <returns>If left is not equal to right <c>true</c>, else <c>false</c>.</returns>
public static bool operator !=(SemVersion left, SemVersion right)
{
return !SemVersion.Equals(left, right);
}
/// <summary>
/// The override of the greater operator.
/// </summary>
/// <param name="left">The left value.</param>
/// <param name="right">The right value.</param>
/// <returns>If left is greater than right <c>true</c>, else <c>false</c>.</returns>
public static bool operator >(SemVersion left, SemVersion right)
{
return SemVersion.Compare(left, right) > 0;
}
/// <summary>
/// The override of the greater than or equal operator.
/// </summary>
/// <param name="left">The left value.</param>
/// <param name="right">The right value.</param>
/// <returns>If left is greater than or equal to right <c>true</c>, else <c>false</c>.</returns>
public static bool operator >=(SemVersion left, SemVersion right)
{
return left == right || left > right;
}
/// <summary>
/// The override of the less operator.
/// </summary>
/// <param name="left">The left value.</param>
/// <param name="right">The right value.</param>
/// <returns>If left is less than right <c>true</c>, else <c>false</c>.</returns>
public static bool operator <(SemVersion left, SemVersion right)
{
return SemVersion.Compare(left, right) < 0;
}
/// <summary>
/// The override of the less than or equal operator.
/// </summary>
/// <param name="left">The left value.</param>
/// <param name="right">The right value.</param>
/// <returns>If left is less than or equal to right <c>true</c>, else <c>false</c>.</returns>
public static bool operator <=(SemVersion left, SemVersion right)
{
return left == right || left < right;
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 5075cb5aa3254b099b11b2840d7cd46e
timeCreated: 1503684176
@@ -0,0 +1,15 @@
namespace Semver
{
internal static class SemVersionExtension
{
public static string VersionOnly(this SemVersion version)
{
return "" + version.Major + "." + version.Minor + "." + version.Patch;
}
public static string ShortVersion(this SemVersion version)
{
return version.Major + "." + version.Minor;
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9f17a0688211d476f8d8c9742bb9f992
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: afd7697844f4142f9aa91471c1fba506
folderAsset: yes
timeCreated: 1502224642
licenseType: Pro
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 1067213df0c64b319bc81e73be809b1a
timeCreated: 1505249387
@@ -0,0 +1,17 @@
using System.Linq;
using UnityEngine;
namespace UnityEditor.PackageManager.UI
{
class ApplicationUtil
{
public static bool IsPreReleaseVersion
{
get
{
var lastToken = Application.unityVersion.Split('.').LastOrDefault();
return lastToken.Contains("a") || lastToken.Contains("b");
}
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7ed48dcc992234c659018e00590315b7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,30 @@
using System;
namespace UnityEditor.PackageManager.UI
{
[Serializable]
internal class OperationSignal<T> where T: IBaseOperation
{
public event Action<T> OnOperation = delegate { };
public T Operation { get; set; }
public void SetOperation(T operation)
{
Operation = operation;
OnOperation(operation);
}
public void WhenOperation(Action<T> callback)
{
if (Operation != null)
callback(Operation);
OnOperation += callback;
}
internal void ResetEvents()
{
OnOperation = delegate { };
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7da0c11c52b4044de81c175887699282
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,19 @@
using UnityEngine.Experimental.UIElements;
namespace UnityEditor.PackageManager.UI
{
internal static class Resources
{
private static string TemplateRoot { get { return PackageManagerWindow.ResourcesPath + "Templates"; } }
private static string TemplatePath(string filename)
{
return string.Format("{0}/{1}", TemplateRoot, filename);
}
public static VisualElement GetTemplate(string templateFilename)
{
return AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(TemplatePath(templateFilename)).CloneTree(null);
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d6a708dbb74414a6dbd60e07d9513c1c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,35 @@
using System.Threading;
namespace UnityEditor.PackageManager.UI
{
internal class ThreadedDelay
{
public int Length { get; set; } // In milliseconds
public bool IsDone { get; private set; }
public ThreadedDelay(int length = 0)
{
Length = length;
IsDone = false;
}
public void Start()
{
if (Length <= 0)
{
IsDone = true;
return;
}
IsDone = false;
Thread newThread = new Thread(() =>
{
Thread.Sleep(Length);
IsDone = true;
});
newThread.Start();
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 490fe93dbc954e3ba3651b7f55eaba70
timeCreated: 1505249395
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 3385f7527e5be4c65b3a5294e8995ff8
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,13 @@
using System;
namespace UnityEditor.PackageManager.UI
{
internal interface IAddOperation : IBaseOperation
{
event Action<PackageInfo> OnOperationSuccess;
PackageInfo PackageInfo { get; }
void AddPackageAsync(PackageInfo packageInfo, Action<PackageInfo> doneCallbackAction = null, Action<Error> errorCallbackAction = null);
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 3dcbbc060dea46168ffc09a580836240
timeCreated: 1504191596
@@ -0,0 +1,14 @@
using System;
namespace UnityEditor.PackageManager.UI
{
internal interface IBaseOperation
{
event Action<Error> OnOperationError;
event Action OnOperationFinalized;
bool IsCompleted { get; }
void Cancel();
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 2f1849b9179b464381598f68663790d3
timeCreated: 1507041169
@@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
namespace UnityEditor.PackageManager.UI
{
internal interface IListOperation : IBaseOperation
{
bool OfflineMode { get; set; }
void GetPackageListAsync(Action<IEnumerable<PackageInfo>> doneCallbackAction, Action<Error> errorCallbackAction = null);
}
}
@@ -0,0 +1,13 @@
fileFormatVersion: 2
guid: b7e8a8fb69eacee439474914ea54bf9b
timeCreated: 1502913188
licenseType: Free
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,14 @@
namespace UnityEditor.PackageManager.UI
{
/// <summary>
/// This is the Interface we will use to create the facade we need for testing.
/// In the case of the Fake factory, we can create fake operations with doctored data we use for our tests.
/// </summary>
internal interface IOperationFactory
{
IListOperation CreateListOperation(bool offlineMode = false);
ISearchOperation CreateSearchOperation();
IAddOperation CreateAddOperation();
IRemoveOperation CreateRemoveOperation();
}
}
@@ -0,0 +1,13 @@
fileFormatVersion: 2
guid: 0a1161a2ab6569948a0aa7899197218c
timeCreated: 1502915478
licenseType: Free
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,11 @@
using System;
namespace UnityEditor.PackageManager.UI
{
internal interface IRemoveOperation : IBaseOperation
{
event Action<PackageInfo> OnOperationSuccess;
void RemovePackageAsync(PackageInfo package, Action<PackageInfo> doneCallbackAction = null, Action<Error> errorCallbackAction = null);
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 54e5fc61925bc4ca3b2c1e82dfb35eb5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

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