diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemeInfo.java b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemeInfo.java index 6ca20c81..6250d22b 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemeInfo.java +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemeInfo.java @@ -25,16 +25,22 @@ class IJThemeInfo { final String name; final String resourceName; + final String license; + final String licenseFile; final String sourceCodeUrl; final String sourceCodePath; final File themeFile; final String lafClassName; - IJThemeInfo( String name, String resourceName, String sourceCodeUrl, String sourceCodePath, + IJThemeInfo( String name, String resourceName, + String license, String licenseFile, + String sourceCodeUrl, String sourceCodePath, File themeFile, String lafClassName ) { this.name = name; this.resourceName = resourceName; + this.license = license; + this.licenseFile = licenseFile; this.sourceCodeUrl = sourceCodeUrl; this.sourceCodePath = sourceCodePath; this.themeFile = themeFile; diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesManager.java b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesManager.java index 6994f8b3..6e7969a2 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesManager.java +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesManager.java @@ -55,10 +55,12 @@ class IJThemesManager String resourceName = e.getKey(); Map value = (Map) e.getValue(); String name = value.get( "name" ); + String license = value.get( "license" ); + String licenseFile = value.get( "licenseFile" ); String sourceCodeUrl = value.get( "sourceCodeUrl" ); String sourceCodePath = value.get( "sourceCodePath" ); - bundledThemes.add( new IJThemeInfo( name, resourceName, sourceCodeUrl, sourceCodePath, null, null ) ); + bundledThemes.add( new IJThemeInfo( name, resourceName, license, licenseFile, sourceCodeUrl, sourceCodePath, null, null ) ); } } @@ -76,7 +78,7 @@ class IJThemesManager moreThemes.clear(); for( File f : themeFiles ) { String name = StringUtils.removeTrailing( f.getName(), ".theme.json" ); - moreThemes.add( new IJThemeInfo( name, null, null, null, f, null ) ); + moreThemes.add( new IJThemeInfo( name, null, null, null, null, null, f, null ) ); lastModifiedMap.put( f, f.lastModified() ); } } diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesPanel.java b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesPanel.java index c516b534..076bf504 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesPanel.java +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesPanel.java @@ -17,6 +17,7 @@ package com.formdev.flatlaf.demo.intellijthemes; import java.awt.Component; +import java.awt.Desktop; import java.awt.EventQueue; import java.awt.Window; import java.awt.event.WindowAdapter; @@ -24,7 +25,13 @@ import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import java.io.File; import java.io.FileInputStream; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; @@ -39,6 +46,8 @@ import com.formdev.flatlaf.FlatIntelliJLaf; import com.formdev.flatlaf.FlatLaf; import com.formdev.flatlaf.FlatLightLaf; import com.formdev.flatlaf.IntelliJTheme; +import com.formdev.flatlaf.extras.FlatSVGIcon; +import com.formdev.flatlaf.util.StringUtils; import net.miginfocom.swing.*; /** @@ -59,9 +68,16 @@ public class IJThemesPanel }; private Window window; + private File lastDirectory; + public IJThemesPanel() { initComponents(); + saveButton.setEnabled( false ); + sourceCodeButton.setEnabled( false ); + saveButton.setIcon( new FlatSVGIcon( "com/formdev/flatlaf/demo/icons/download.svg" ) ); + sourceCodeButton.setIcon( new FlatSVGIcon( "com/formdev/flatlaf/demo/icons/github.svg" ) ); + // create renderer themesList.setCellRenderer( new DefaultListCellRenderer() { @Override @@ -75,10 +91,22 @@ public class IJThemesPanel name = name.substring( sep + 1 ).trim(); JComponent c = (JComponent) super.getListCellRendererComponent( list, name, index, isSelected, cellHasFocus ); + c.setToolTipText( buildToolTip( (IJThemeInfo) value ) ); if( title != null ) c.setBorder( new CompoundBorder( new ListCellTitledBorder( themesList, title ), c.getBorder() ) ); return c; } + + private String buildToolTip( IJThemeInfo ti ) { + if( ti.themeFile != null ) + return ti.themeFile.getPath(); + if( ti.resourceName == null ) + return ti.name; + + return "Name: " + ti.name + + "\nLicense: " + ti.license + + "\nSource Code: " + ti.sourceCodeUrl; + } } ); updateThemesList(); @@ -99,10 +127,10 @@ public class IJThemesPanel // add core themes at beginning categories.put( themes.size(), "Core Themes" ); - themes.add( new IJThemeInfo( "Flat Light", null, null, null, null, FlatLightLaf.class.getName() ) ); - themes.add( new IJThemeInfo( "Flat Dark", null, null, null, null, FlatDarkLaf.class.getName() ) ); - themes.add( new IJThemeInfo( "Flat IntelliJ", null, null, null, null, FlatIntelliJLaf.class.getName() ) ); - themes.add( new IJThemeInfo( "Flat Darcula", null, null, null, null, FlatDarculaLaf.class.getName() ) ); + themes.add( new IJThemeInfo( "Flat Light", null, null, null, null, null, null, FlatLightLaf.class.getName() ) ); + themes.add( new IJThemeInfo( "Flat Dark", null, null, null, null, null, null, FlatDarkLaf.class.getName() ) ); + themes.add( new IJThemeInfo( "Flat IntelliJ", null, null, null, null, null, null, FlatIntelliJLaf.class.getName() ) ); + themes.add( new IJThemeInfo( "Flat Darcula", null, null, null, null, null, null, FlatDarculaLaf.class.getName() ) ); // add uncategorized bundled themes categories.put( themes.size(), "IntelliJ Themes" ); @@ -166,8 +194,13 @@ public class IJThemesPanel if( e.getValueIsAdjusting() ) return; + IJThemeInfo themeInfo = themesList.getSelectedValue(); + boolean bundledTheme = (themeInfo != null && themeInfo.resourceName != null); + saveButton.setEnabled( bundledTheme ); + sourceCodeButton.setEnabled( bundledTheme ); + EventQueue.invokeLater( () -> { - setTheme( themesList.getSelectedValue() ); + setTheme( themeInfo ); } ); } @@ -200,8 +233,59 @@ public class IJThemesPanel FlatLaf.updateUI(); } + private void saveTheme() { + IJThemeInfo themeInfo = themesList.getSelectedValue(); + if( themeInfo == null || themeInfo.resourceName == null ) + return; + + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setSelectedFile( new File( lastDirectory, themeInfo.resourceName ) ); + if( fileChooser.showSaveDialog( SwingUtilities.windowForComponent( this ) ) != JFileChooser.APPROVE_OPTION ) + return; + + File file = fileChooser.getSelectedFile(); + lastDirectory = file.getParentFile(); + + // save theme + try { + Files.copy( getClass().getResourceAsStream( themeInfo.resourceName ), + file.toPath(), StandardCopyOption.REPLACE_EXISTING ); + } catch( IOException ex ) { + showInformationDialog( "Failed to save theme to '" + file + "'.", ex ); + return; + } + + // save license + if( themeInfo.licenseFile != null ) { + try { + File licenseFile = new File( file.getParentFile(), + StringUtils.removeTrailing( file.getName(), ".theme.json" ) + + themeInfo.licenseFile.substring( themeInfo.licenseFile.indexOf( '.' ) ) ); + Files.copy( getClass().getResourceAsStream( themeInfo.licenseFile ), + licenseFile.toPath(), StandardCopyOption.REPLACE_EXISTING ); + } catch( IOException ex ) { + showInformationDialog( "Failed to save theme license to '" + file + "'.", ex ); + return; + } + } + } + + private void browseSourceCode() { + IJThemeInfo themeInfo = themesList.getSelectedValue(); + if( themeInfo == null || themeInfo.resourceName == null ) + return; + + String themeUrl = (themeInfo.sourceCodeUrl + '/' + themeInfo.sourceCodePath).replace( " ", "%20" ); + try { + Desktop.getDesktop().browse( new URI( themeUrl ) ); + } catch( IOException | URISyntaxException ex ) { + showInformationDialog( "Failed to browse '" + themeUrl + "'.", ex ); + } + } + private void showInformationDialog( String message, Exception ex ) { - JOptionPane.showMessageDialog( null, message + "\n\n" + ex.getMessage(), + JOptionPane.showMessageDialog( SwingUtilities.windowForComponent( this ), + message + "\n\n" + ex.getMessage(), "FlatLaf", JOptionPane.INFORMATION_MESSAGE ); } @@ -263,6 +347,9 @@ public class IJThemesPanel private void initComponents() { // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents JLabel themesLabel = new JLabel(); + toolBar = new JToolBar(); + saveButton = new JButton(); + sourceCodeButton = new JButton(); themesScrollPane = new JScrollPane(); themesList = new JList<>(); @@ -272,13 +359,29 @@ public class IJThemesPanel // columns "[grow,fill]", // rows - "[]" + + "[]3" + "[grow,fill]")); //---- themesLabel ---- themesLabel.setText("Themes:"); add(themesLabel, "cell 0 0"); + //======== toolBar ======== + { + toolBar.setFloatable(false); + + //---- saveButton ---- + saveButton.setToolTipText("Save .theme.json of selected IntelliJ theme to file."); + saveButton.addActionListener(e -> saveTheme()); + toolBar.add(saveButton); + + //---- sourceCodeButton ---- + sourceCodeButton.setToolTipText("Opens the source code repository of selected IntelliJ theme in the browser."); + sourceCodeButton.addActionListener(e -> browseSourceCode()); + toolBar.add(sourceCodeButton); + } + add(toolBar, "cell 0 0,alignx right,growx 0"); + //======== themesScrollPane ======== { @@ -292,6 +395,9 @@ public class IJThemesPanel } // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables + private JToolBar toolBar; + private JButton saveButton; + private JButton sourceCodeButton; private JScrollPane themesScrollPane; private JList themesList; // JFormDesigner - End of variables declaration //GEN-END:variables diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesPanel.jfd b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesPanel.jfd index 79d2e1fe..51a3fa3a 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesPanel.jfd +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesPanel.jfd @@ -6,7 +6,7 @@ new FormModel { add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { "$layoutConstraints": "insets dialog,hidemode 3" "$columnConstraints": "[grow,fill]" - "$rowConstraints": "[][grow,fill]" + "$rowConstraints": "[]3[grow,fill]" } ) { name: "this" add( new FormComponent( "javax.swing.JLabel" ) { @@ -18,6 +18,22 @@ new FormModel { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 0 0" } ) + add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) { + name: "toolBar" + "floatable": false + add( new FormComponent( "javax.swing.JButton" ) { + name: "saveButton" + "toolTipText": "Save .theme.json of selected IntelliJ theme to file." + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "saveTheme", false ) ) + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "sourceCodeButton" + "toolTipText": "Opens the source code repository of selected IntelliJ theme in the browser." + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "browseSourceCode", false ) ) + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0,alignx right,growx 0" + } ) add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) { name: "themesScrollPane" add( new FormComponent( "javax.swing.JList" ) { diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/download.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/download.svg new file mode 100644 index 00000000..0d6b0150 --- /dev/null +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/download.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/download_dark.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/download_dark.svg new file mode 100644 index 00000000..3e58c7d6 --- /dev/null +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/download_dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/github.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/github.svg new file mode 100644 index 00000000..ac34d527 --- /dev/null +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/github.svg @@ -0,0 +1,3 @@ + + + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/github_dark.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/github_dark.svg new file mode 100644 index 00000000..e406754b --- /dev/null +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/github_dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/intellijthemes/themes.json b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/intellijthemes/themes.json index ea694810..52b748a0 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/intellijthemes/themes.json +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/intellijthemes/themes.json @@ -1,252 +1,352 @@ { "arc-theme.theme.json": { "name": "Arc", + "license": "MIT", + "licenseFile": "arc-themes.LICENSE.txt", "sourceCodeUrl": "https://gitlab.com/zlamalp/arc-theme-idea", "sourceCodePath": "blob/master/resources/arc-theme.theme.json" }, "arc-theme-orange.theme.json": { "name": "Arc - Orange", + "license": "MIT", + "licenseFile": "arc-themes.LICENSE.txt", "sourceCodeUrl": "https://gitlab.com/zlamalp/arc-theme-idea", "sourceCodePath": "blob/master/resources/arc-theme-orange.theme.json" }, "Cyan.theme.json": { "name": "Cyan light", + "license": "MIT", + "licenseFile": "Cyan.LICENSE.txt", "sourceCodeUrl": "https://github.com/OlyaB/CyanTheme", "sourceCodePath": "blob/master/src/Cyan.theme.json" }, "DarkFlatTheme.theme.json": { "name": "Dark Flat", + "license": "MIT", + "licenseFile": "DarkFlatTheme.LICENSE.txt", "sourceCodeUrl": "https://github.com/nerzhulart/DarkFlatTheme", "sourceCodePath": "blob/master/src/DarkFlatTheme.theme.json" }, "DarkPurple.theme.json": { "name": "Dark purple", + "license": "MIT", + "licenseFile": "DarkPurple.LICENSE.txt", "sourceCodeUrl": "https://github.com/OlyaB/DarkPurpleTheme", "sourceCodePath": "blob/master/src/DarkPurple.theme.json" }, "Dracula.theme.json": { "name": "Dracula", + "license": "MIT", + "licenseFile": "Dracula.LICENSE.txt", "sourceCodeUrl": "https://github.com/dracula/jetbrains", "sourceCodePath": "blob/master/src/main/resources/themes/Dracula.theme.json" }, "Gray.theme.json": { "name": "Gray", + "license": "MIT", + "licenseFile": "Gray.LICENSE.txt", "sourceCodeUrl": "https://github.com/OlyaB/GreyTheme", "sourceCodePath": "blob/master/src/Gray.theme.json" }, "gruvbox_theme.theme.json": { "name": "Gruvbox", + "license": "MIT", + "licenseFile": "gruvbox_theme.LICENSE.txt", "sourceCodeUrl": "https://github.com/Vincent-P/gruvbox-intellij-theme", "sourceCodePath": "blob/master/src/main/resources/gruvbox_theme.theme.json" }, "Hiberbee.theme.json": { "name": "Hiberbee", + "license": "MIT", + "licenseFile": "Hiberbee.LICENSE.txt", "sourceCodeUrl": "https://github.com/Hiberbee/code-highlight-themes", "sourceCodePath": "blob/master/src/main/resources/Hiberbee.theme.json" }, "HighContrast.theme.json": { "name": "High contrast", + "license": "MIT", + "licenseFile": "HighContrast.LICENSE.txt", "sourceCodeUrl": "https://github.com/OlyaB/HighContrastTheme", "sourceCodePath": "blob/master/src/HighContrast.theme.json" }, "Light.theme.json": { "name": "IntelliJ Light Preview", + "license": "MIT", + "licenseFile": "Light.LICENSE.txt", "sourceCodeUrl": "https://github.com/OlyaB/IntelliJLightTheme", "sourceCodePath": "blob/master/src/Light.theme.json" }, "LightFlatTheme.theme.json": { "name": "Light Flat", + "license": "MIT", + "licenseFile": "LightFlatTheme.LICENSE.txt", "sourceCodeUrl": "https://github.com/nerzhulart/LightFlatTheme", "sourceCodePath": "blob/master/src/LightFlatTheme.theme.json" }, "MaterialTheme.theme.json": { "name": "Material Design Dark", + "license": "MIT", + "licenseFile": "MaterialTheme.LICENSE.txt", "sourceCodeUrl": "https://github.com/xinkunZ/NotReallyMDTheme", "sourceCodePath": "blob/master/src/main/resources/MaterialTheme.theme.json" }, "Monocai.theme.json": { "name": "Monocai", + "license": "MIT", + "licenseFile": "Monocai.LICENSE.txt", "sourceCodeUrl": "https://github.com/bmikaili/intellij-monocai-theme", "sourceCodePath": "blob/master/resources/Monocai.theme.json" }, "nord.theme.json": { "name": "Nord", + "license": "MIT", + "licenseFile": "nord.LICENSE.txt", "sourceCodeUrl": "https://github.com/arcticicestudio/nord-jetbrains", "sourceCodePath": "blob/develop/src/nord.theme.json" }, "one_dark.theme.json": { "name": "One Dark", + "license": "MIT", + "licenseFile": "one_dark.LICENSE.txt", "sourceCodeUrl": "https://github.com/one-dark/jetbrains-one-dark-theme", "sourceCodePath": "blob/master/src/main/resources/themes/one_dark.theme.json" }, "solarized_dark_theme.theme.json": { "name": "Solarized Dark", + "license": "MIT", + "licenseFile": "solarized_dark_theme.LICENSE.txt", "sourceCodeUrl": "https://github.com/snowe2010/solarized-jetbrains", "sourceCodePath": "blob/master/src/solarized_dark_theme.theme.json" }, "solarized_light_theme.theme.json": { "name": "Solarized Light", + "license": "MIT", + "licenseFile": "solarized_light_theme.LICENSE.txt", "sourceCodeUrl": "https://github.com/snowe2010/solarized-jetbrains", "sourceCodePath": "blob/master/src/solarized_light_theme.theme.json" }, "Spacegray.theme.json": { "name": "Spacegray", + "license": "MIT", + "licenseFile": "Spacegray.LICENSE.txt", "sourceCodeUrl": "https://github.com/mturlo/intellij-spacegray", "sourceCodePath": "blob/master/src/Spacegray.theme.json" }, "vuesion_theme.theme.json": { "name": "Vuesion", + "license": "MIT", + "licenseFile": "vuesion_theme.LICENSE.txt", "sourceCodeUrl": "https://github.com/vuesion/intellij-theme", "sourceCodePath": "blob/master/resources/META-INF/vuesion_theme.theme.json" }, "material-theme-ui-lite/Arc Dark.theme.json": { "name": "Material Theme UI Lite / Arc Dark", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Arc Dark.theme.json" }, "material-theme-ui-lite/Arc Dark Contrast.theme.json": { "name": "Material Theme UI Lite / Arc Dark Contrast", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Arc Dark Contrast.theme.json" }, "material-theme-ui-lite/Atom One Dark.theme.json": { "name": "Material Theme UI Lite / Atom One Dark", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Atom One Dark.theme.json" }, "material-theme-ui-lite/Atom One Dark Contrast.theme.json": { "name": "Material Theme UI Lite / Atom One Dark Contrast", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Atom One Dark Contrast.theme.json" }, "material-theme-ui-lite/Atom One Light.theme.json": { "name": "Material Theme UI Lite / Atom One Light", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Atom One Light.theme.json" }, "material-theme-ui-lite/Atom One Light Contrast.theme.json": { "name": "Material Theme UI Lite / Atom One Light Contrast", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Atom One Light Contrast.theme.json" }, "material-theme-ui-lite/Dracula.theme.json": { "name": "Material Theme UI Lite / Dracula", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Dracula.theme.json" }, "material-theme-ui-lite/Dracula Contrast.theme.json": { "name": "Material Theme UI Lite / Dracula Contrast", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Dracula Contrast.theme.json" }, "material-theme-ui-lite/GitHub.theme.json": { "name": "Material Theme UI Lite / GitHub", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/GitHub.theme.json" }, "material-theme-ui-lite/GitHub Contrast.theme.json": { "name": "Material Theme UI Lite / GitHub Contrast", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/GitHub Contrast.theme.json" }, "material-theme-ui-lite/Light Owl.theme.json": { "name": "Material Theme UI Lite / Light Owl", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Light Owl.theme.json" }, "material-theme-ui-lite/Light Owl Contrast.theme.json": { "name": "Material Theme UI Lite / Light Owl Contrast", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Light Owl Contrast.theme.json" }, "material-theme-ui-lite/Material Darker.theme.json": { "name": "Material Theme UI Lite / Material Darker", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Material Darker.theme.json" }, "material-theme-ui-lite/Material Darker Contrast.theme.json": { "name": "Material Theme UI Lite / Material Darker Contrast", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Material Darker Contrast.theme.json" }, "material-theme-ui-lite/Material Deep Ocean.theme.json": { "name": "Material Theme UI Lite / Material Deep Ocean", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Material Deep Ocean.theme.json" }, "material-theme-ui-lite/Material Deep Ocean Contrast.theme.json": { "name": "Material Theme UI Lite / Material Deep Ocean Contrast", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Material Deep Ocean Contrast.theme.json" }, "material-theme-ui-lite/Material Lighter.theme.json": { "name": "Material Theme UI Lite / Material Lighter", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Material Lighter.theme.json" }, "material-theme-ui-lite/Material Lighter Contrast.theme.json": { "name": "Material Theme UI Lite / Material Lighter Contrast", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Material Lighter Contrast.theme.json" }, "material-theme-ui-lite/Material Oceanic.theme.json": { "name": "Material Theme UI Lite / Material Oceanic", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Material Oceanic.theme.json" }, "material-theme-ui-lite/Material Oceanic Contrast.theme.json": { "name": "Material Theme UI Lite / Material Oceanic Contrast", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Material Oceanic Contrast.theme.json" }, "material-theme-ui-lite/Material Palenight.theme.json": { "name": "Material Theme UI Lite / Material Palenight", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Material Palenight.theme.json" }, "material-theme-ui-lite/Material Palenight Contrast.theme.json": { "name": "Material Theme UI Lite / Material Palenight Contrast", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Material Palenight Contrast.theme.json" }, "material-theme-ui-lite/Monokai Pro.theme.json": { "name": "Material Theme UI Lite / Monokai Pro", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Monokai Pro.theme.json" }, "material-theme-ui-lite/Monokai Pro Contrast.theme.json": { "name": "Material Theme UI Lite / Monokai Pro Contrast", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Monokai Pro Contrast.theme.json" }, "material-theme-ui-lite/Night Owl.theme.json": { "name": "Material Theme UI Lite / Night Owl", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Night Owl.theme.json" }, "material-theme-ui-lite/Night Owl Contrast.theme.json": { "name": "Material Theme UI Lite / Night Owl Contrast", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Night Owl Contrast.theme.json" }, "material-theme-ui-lite/Solarized Dark.theme.json": { "name": "Material Theme UI Lite / Solarized Dark", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Solarized Dark.theme.json" }, "material-theme-ui-lite/Solarized Dark Contrast.theme.json": { "name": "Material Theme UI Lite / Solarized Dark Contrast", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Solarized Dark Contrast.theme.json" }, "material-theme-ui-lite/Solarized Light.theme.json": { "name": "Material Theme UI Lite / Solarized Light", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Solarized Light.theme.json" }, "material-theme-ui-lite/Solarized Light Contrast.theme.json": { "name": "Material Theme UI Lite / Solarized Light Contrast", + "license": "MIT", + "licenseFile": "material-theme-ui-lite/Material Theme UI Lite.LICENSE.txt", "sourceCodeUrl": "https://github.com/mallowigi/material-theme-ui-lite", "sourceCodePath": "blob/master/src/main/resources/themes/Solarized Light Contrast.theme.json" }