├── .gitignore ├── LICENSE ├── Palettes ├── ios.sketchpalette ├── material-design.sketchpalette └── sketch-default.sketchpalette ├── README.md ├── Sketch Palettes.sketchplugin └── Contents │ └── Sketch │ ├── manifest.json │ ├── sketchPalettes.js │ └── util.js ├── appcast.xml └── palettes.png /.gitignore: -------------------------------------------------------------------------------- 1 | # OS generated files # 2 | ###################### 3 | .DS_Store 4 | .DS_Store? 5 | ._* 6 | .Spotlight-V100 7 | .Trashes 8 | ehthumbs.db 9 | Thumbs.db -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Andrew Fiorillo 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Palettes/ios.sketchpalette: -------------------------------------------------------------------------------- 1 | {"compatibleVersion":"1.4","pluginVersion":"1.4","colors":[{"red":0.3529411764705882,"green":0.7843137254901961,"blue":0.9803921568627451,"alpha":1},{"red":1,"green":0.8,"blue":0,"alpha":1},{"red":1,"green":0.5843137254901961,"blue":0,"alpha":1},{"red":1,"green":0.1764705882352941,"blue":0.3333333333333333,"alpha":1},{"red":0,"green":0.4784313725490196,"blue":1,"alpha":1},{"red":0.2980392156862745,"green":0.8509803921568627,"blue":0.39215686274509803,"alpha":1},{"red":1,"green":0.23137254901960785,"blue":0.18823529411764706,"alpha":1},{"red":0.5568627450980392,"green":0.5568627450980392,"blue":0.5764705882352941,"alpha":1},{"red":0.9372549019607843,"green":0.9372549019607843,"blue":0.9568627450980391,"alpha":1},{"red":0,"green":0,"blue":0,"alpha":1}]} -------------------------------------------------------------------------------- /Palettes/material-design.sketchpalette: -------------------------------------------------------------------------------- 1 | {"compatibleVersion":"1.4","pluginVersion":"1.4","colors":[{"red":0.9568627450980391,"green":0.2627450980392157,"blue":0.21176470588235294,"alpha":1},{"red":1,"green":0.9215686274509803,"blue":0.9333333333333333,"alpha":1},{"red":1,"green":0.803921568627451,"blue":0.8235294117647058,"alpha":1},{"red":0.9372549019607843,"green":0.6039215686274509,"blue":0.6039215686274509,"alpha":1},{"red":0.8980392156862745,"green":0.45098039215686275,"blue":0.45098039215686275,"alpha":1},{"red":0.9372549019607843,"green":0.3254901960784314,"blue":0.3137254901960784,"alpha":1},{"red":0.8980392156862745,"green":0.22352941176470587,"blue":0.20784313725490194,"alpha":1},{"red":0.8274509803921568,"green":0.1843137254901961,"blue":0.1843137254901961,"alpha":1},{"red":0.7764705882352941,"green":0.1568627450980392,"blue":0.1568627450980392,"alpha":1},{"red":0.7176470588235294,"green":0.10980392156862745,"blue":0.10980392156862745,"alpha":1},{"red":1,"green":0.5411764705882353,"blue":0.5019607843137255,"alpha":1},{"red":1,"green":0.32156862745098036,"blue":0.32156862745098036,"alpha":1},{"red":1,"green":0.09019607843137255,"blue":0.26666666666666666,"alpha":1},{"red":0.8352941176470589,"green":0,"blue":0,"alpha":1},{"red":0.9137254901960784,"green":0.11764705882352941,"blue":0.38823529411764707,"alpha":1},{"red":0.9882352941176471,"green":0.8941176470588235,"blue":0.9254901960784314,"alpha":1},{"red":0.9725490196078431,"green":0.7333333333333333,"blue":0.8156862745098039,"alpha":1},{"red":0.9568627450980391,"green":0.5607843137254902,"blue":0.6941176470588235,"alpha":1},{"red":0.9411764705882353,"green":0.38431372549019605,"blue":0.5725490196078431,"alpha":1},{"red":0.9254901960784314,"green":0.25098039215686274,"blue":0.4784313725490196,"alpha":1},{"red":0.8470588235294118,"green":0.10588235294117647,"blue":0.3764705882352941,"alpha":1},{"red":0.7607843137254902,"green":0.09411764705882353,"blue":0.3568627450980392,"alpha":1},{"red":0.6784313725490196,"green":0.0784313725490196,"blue":0.3411764705882353,"alpha":1},{"red":0.5333333333333333,"green":0.054901960784313725,"blue":0.30980392156862746,"alpha":1},{"red":1,"green":0.5019607843137255,"blue":0.6705882352941176,"alpha":1},{"red":1,"green":0.25098039215686274,"blue":0.5058823529411764,"alpha":1},{"red":0.9607843137254902,"green":0,"blue":0.3411764705882353,"alpha":1},{"red":0.7725490196078432,"green":0.06666666666666667,"blue":0.38431372549019605,"alpha":1},{"red":0.611764705882353,"green":0.15294117647058825,"blue":0.6901960784313725,"alpha":1},{"red":0.9529411764705882,"green":0.8980392156862745,"blue":0.9607843137254902,"alpha":1},{"red":0.8823529411764706,"green":0.7450980392156863,"blue":0.9058823529411765,"alpha":1},{"red":0.807843137254902,"green":0.5764705882352941,"blue":0.8470588235294118,"alpha":1},{"red":0.7294117647058823,"green":0.40784313725490196,"blue":0.7843137254901961,"alpha":1},{"red":0.6705882352941176,"green":0.2784313725490196,"blue":0.7372549019607844,"alpha":1},{"red":0.5568627450980392,"green":0.1411764705882353,"blue":0.6666666666666666,"alpha":1},{"red":0.4823529411764706,"green":0.12156862745098039,"blue":0.6352941176470588,"alpha":1},{"red":0.4156862745098039,"green":0.10588235294117647,"blue":0.6039215686274509,"alpha":1},{"red":0.2901960784313725,"green":0.0784313725490196,"blue":0.5490196078431373,"alpha":1},{"red":0.9176470588235294,"green":0.5019607843137255,"blue":0.9882352941176471,"alpha":1},{"red":0.8784313725490196,"green":0.25098039215686274,"blue":0.984313725490196,"alpha":1},{"red":0.8352941176470589,"green":0,"blue":0.9764705882352941,"alpha":1},{"red":0.6666666666666666,"green":0,"blue":1,"alpha":1},{"red":0.403921568627451,"green":0.22745098039215686,"blue":0.7176470588235294,"alpha":1},{"red":0.9294117647058824,"green":0.9058823529411765,"blue":0.9647058823529412,"alpha":1},{"red":0.8196078431372549,"green":0.7686274509803921,"blue":0.9137254901960784,"alpha":1},{"red":0.7019607843137254,"green":0.615686274509804,"blue":0.8588235294117647,"alpha":1},{"red":0.5843137254901961,"green":0.4588235294117647,"blue":0.803921568627451,"alpha":1},{"red":0.49411764705882355,"green":0.3411764705882353,"blue":0.7607843137254902,"alpha":1},{"red":0.3686274509803922,"green":0.20784313725490194,"blue":0.6941176470588235,"alpha":1},{"red":0.3176470588235294,"green":0.1764705882352941,"blue":0.6588235294117647,"alpha":1},{"red":0.27058823529411763,"green":0.15294117647058825,"blue":0.6274509803921569,"alpha":1},{"red":0.19215686274509802,"green":0.10588235294117647,"blue":0.5725490196078431,"alpha":1},{"red":0.7019607843137254,"green":0.5333333333333333,"blue":1,"alpha":1},{"red":0.48627450980392156,"green":0.30196078431372547,"blue":1,"alpha":1},{"red":0.396078431372549,"green":0.12156862745098039,"blue":1,"alpha":1},{"red":0.38431372549019605,"green":0,"blue":0.9176470588235294,"alpha":1},{"red":0.24705882352941178,"green":0.3176470588235294,"blue":0.7098039215686275,"alpha":1},{"red":0.9098039215686274,"green":0.9176470588235294,"blue":0.9647058823529412,"alpha":1},{"red":0.7725490196078432,"green":0.792156862745098,"blue":0.9137254901960784,"alpha":1},{"red":0.6235294117647059,"green":0.6588235294117647,"blue":0.8549019607843137,"alpha":1},{"red":0.4745098039215686,"green":0.5254901960784314,"blue":0.796078431372549,"alpha":1},{"red":0.3607843137254902,"green":0.4196078431372549,"blue":0.7529411764705882,"alpha":1},{"red":0.22352941176470587,"green":0.28627450980392155,"blue":0.6705882352941176,"alpha":1},{"red":0.18823529411764706,"green":0.24705882352941178,"blue":0.6235294117647059,"alpha":1},{"red":0.1568627450980392,"green":0.20784313725490194,"blue":0.5764705882352941,"alpha":1},{"red":0.10196078431372549,"green":0.13725490196078433,"blue":0.49411764705882355,"alpha":1},{"red":0.5490196078431373,"green":0.6196078431372549,"blue":1,"alpha":1},{"red":0.3254901960784314,"green":0.42745098039215684,"blue":0.996078431372549,"alpha":1},{"red":0.2392156862745098,"green":0.3529411764705882,"blue":0.996078431372549,"alpha":1},{"red":0.18823529411764706,"green":0.30980392156862746,"blue":0.996078431372549,"alpha":1},{"red":0.12941176470588234,"green":0.5882352941176471,"blue":0.9529411764705882,"alpha":1},{"red":0.8901960784313725,"green":0.9490196078431372,"blue":0.9921568627450981,"alpha":1},{"red":0.7333333333333333,"green":0.8705882352941177,"blue":0.984313725490196,"alpha":1},{"red":0.5647058823529412,"green":0.792156862745098,"blue":0.9764705882352941,"alpha":1},{"red":0.39215686274509803,"green":0.7098039215686275,"blue":0.9647058823529412,"alpha":1},{"red":0.2588235294117647,"green":0.6470588235294118,"blue":0.9607843137254902,"alpha":1},{"red":0.11764705882352941,"green":0.5333333333333333,"blue":0.8980392156862745,"alpha":1},{"red":0.09803921568627451,"green":0.4627450980392157,"blue":0.8235294117647058,"alpha":1},{"red":0.08235294117647059,"green":0.396078431372549,"blue":0.7529411764705882,"alpha":1},{"red":0.050980392156862744,"green":0.2784313725490196,"blue":0.6313725490196078,"alpha":1},{"red":0.5098039215686274,"green":0.6941176470588235,"blue":1,"alpha":1},{"red":0.26666666666666666,"green":0.5411764705882353,"blue":1,"alpha":1},{"red":0.16078431372549018,"green":0.4745098039215686,"blue":1,"alpha":1},{"red":0.16078431372549018,"green":0.38431372549019605,"blue":1,"alpha":1},{"red":0.011764705882352941,"green":0.6627450980392157,"blue":0.9568627450980391,"alpha":1},{"red":0.8823529411764706,"green":0.9607843137254902,"blue":0.996078431372549,"alpha":1},{"red":0.7019607843137254,"green":0.8980392156862745,"blue":0.9882352941176471,"alpha":1},{"red":0.5058823529411764,"green":0.8313725490196078,"blue":0.9803921568627451,"alpha":1},{"red":0.30980392156862746,"green":0.7647058823529411,"blue":0.9686274509803922,"alpha":1},{"red":0.16078431372549018,"green":0.7137254901960784,"blue":0.9647058823529412,"alpha":1},{"red":0.011764705882352941,"green":0.6078431372549019,"blue":0.8980392156862745,"alpha":1},{"red":0.00784313725490196,"green":0.5333333333333333,"blue":0.8196078431372549,"alpha":1},{"red":0.00784313725490196,"green":0.4666666666666667,"blue":0.7411764705882353,"alpha":1},{"red":0.00392156862745098,"green":0.3411764705882353,"blue":0.6078431372549019,"alpha":1},{"red":0.5019607843137255,"green":0.8470588235294118,"blue":1,"alpha":1},{"red":0.25098039215686274,"green":0.7686274509803921,"blue":1,"alpha":1},{"red":0,"green":0.6901960784313725,"blue":1,"alpha":1},{"red":0,"green":0.5686274509803921,"blue":0.9176470588235294,"alpha":1},{"red":0,"green":0.7372549019607844,"blue":0.8313725490196078,"alpha":1},{"red":0.8784313725490196,"green":0.9686274509803922,"blue":0.9803921568627451,"alpha":1},{"red":0.6980392156862745,"green":0.9215686274509803,"blue":0.9490196078431372,"alpha":1},{"red":0.5019607843137255,"green":0.8705882352941177,"blue":0.9176470588235294,"alpha":1},{"red":0.30196078431372547,"green":0.8156862745098039,"blue":0.8823529411764706,"alpha":1},{"red":0.14901960784313725,"green":0.7764705882352941,"blue":0.8549019607843137,"alpha":1},{"red":0,"green":0.6745098039215687,"blue":0.7568627450980392,"alpha":1},{"red":0,"green":0.592156862745098,"blue":0.6549019607843137,"alpha":1},{"red":0,"green":0.5137254901960784,"blue":0.5607843137254902,"alpha":1},{"red":0,"green":0.3764705882352941,"blue":0.39215686274509803,"alpha":1},{"red":0.5176470588235293,"green":1,"blue":1,"alpha":1},{"red":0.09411764705882353,"green":1,"blue":1,"alpha":1},{"red":0,"green":0.8980392156862745,"blue":1,"alpha":1},{"red":0,"green":0.7215686274509804,"blue":0.8313725490196078,"alpha":1},{"red":0,"green":0.5882352941176471,"blue":0.5333333333333333,"alpha":1},{"red":0.8784313725490196,"green":0.9490196078431372,"blue":0.9450980392156862,"alpha":1},{"red":0.6980392156862745,"green":0.8745098039215686,"blue":0.8588235294117647,"alpha":1},{"red":0.5019607843137255,"green":0.796078431372549,"blue":0.7686274509803921,"alpha":1},{"red":0.30196078431372547,"green":0.7137254901960784,"blue":0.6745098039215687,"alpha":1},{"red":0.14901960784313725,"green":0.6509803921568628,"blue":0.6039215686274509,"alpha":1},{"red":0,"green":0.5372549019607843,"blue":0.4823529411764706,"alpha":1},{"red":0,"green":0.4745098039215686,"blue":0.4196078431372549,"alpha":1},{"red":0,"green":0.4117647058823529,"blue":0.3607843137254902,"alpha":1},{"red":0,"green":0.30196078431372547,"blue":0.25098039215686274,"alpha":1},{"red":0.6549019607843137,"green":1,"blue":0.9215686274509803,"alpha":1},{"red":0.39215686274509803,"green":1,"blue":0.8549019607843137,"alpha":1},{"red":0.11372549019607843,"green":0.9137254901960784,"blue":0.7137254901960784,"alpha":1},{"red":0,"green":0.7490196078431373,"blue":0.6470588235294118,"alpha":1},{"red":0.2980392156862745,"green":0.6862745098039216,"blue":0.3137254901960784,"alpha":1},{"red":0.9098039215686274,"green":0.9607843137254902,"blue":0.9137254901960784,"alpha":1},{"red":0.7843137254901961,"green":0.9019607843137255,"blue":0.788235294117647,"alpha":1},{"red":0.6470588235294118,"green":0.8392156862745098,"blue":0.6549019607843137,"alpha":1},{"red":0.5058823529411764,"green":0.7803921568627451,"blue":0.5176470588235293,"alpha":1},{"red":0.4,"green":0.7333333333333333,"blue":0.4156862745098039,"alpha":1},{"red":0.2627450980392157,"green":0.6274509803921569,"blue":0.2784313725490196,"alpha":1},{"red":0.2196078431372549,"green":0.5568627450980392,"blue":0.23529411764705882,"alpha":1},{"red":0.1803921568627451,"green":0.49019607843137253,"blue":0.19607843137254902,"alpha":1},{"red":0.10588235294117647,"green":0.3686274509803922,"blue":0.12549019607843137,"alpha":1},{"red":0.7254901960784313,"green":0.9647058823529412,"blue":0.792156862745098,"alpha":1},{"red":0.4117647058823529,"green":0.9411764705882353,"blue":0.6823529411764706,"alpha":1},{"red":0,"green":0.9019607843137255,"blue":0.4627450980392157,"alpha":1},{"red":0,"green":0.7843137254901961,"blue":0.3254901960784314,"alpha":1},{"red":0.5450980392156862,"green":0.7647058823529411,"blue":0.2901960784313725,"alpha":1},{"red":0.9450980392156862,"green":0.9725490196078431,"blue":0.9137254901960784,"alpha":1},{"red":0.8627450980392157,"green":0.9294117647058824,"blue":0.7843137254901961,"alpha":1},{"red":0.7725490196078432,"green":0.8823529411764706,"blue":0.6470588235294118,"alpha":1},{"red":0.6823529411764706,"green":0.8352941176470589,"blue":0.5058823529411764,"alpha":1},{"red":0.611764705882353,"green":0.8,"blue":0.396078431372549,"alpha":1},{"red":0.48627450980392156,"green":0.7019607843137254,"blue":0.2588235294117647,"alpha":1},{"red":0.40784313725490196,"green":0.6235294117647059,"blue":0.2196078431372549,"alpha":1},{"red":0.3333333333333333,"green":0.5450980392156862,"blue":0.1843137254901961,"alpha":1},{"red":0.2,"green":0.4117647058823529,"blue":0.11764705882352941,"alpha":1},{"red":0.8,"green":1,"blue":0.5647058823529412,"alpha":1},{"red":0.6980392156862745,"green":1,"blue":0.34901960784313724,"alpha":1},{"red":0.4627450980392157,"green":1,"blue":0.011764705882352941,"alpha":1},{"red":0.39215686274509803,"green":0.8666666666666667,"blue":0.09019607843137255,"alpha":1},{"red":0.803921568627451,"green":0.8627450980392157,"blue":0.22352941176470587,"alpha":1},{"red":0.9764705882352941,"green":0.984313725490196,"blue":0.9058823529411765,"alpha":1},{"red":0.9411764705882353,"green":0.9568627450980391,"blue":0.7647058823529411,"alpha":1},{"red":0.9019607843137255,"green":0.9333333333333333,"blue":0.611764705882353,"alpha":1},{"red":0.8627450980392157,"green":0.9058823529411765,"blue":0.4588235294117647,"alpha":1},{"red":0.8313725490196078,"green":0.8823529411764706,"blue":0.3411764705882353,"alpha":1},{"red":0.7529411764705882,"green":0.792156862745098,"blue":0.2,"alpha":1},{"red":0.6862745098039216,"green":0.7058823529411764,"blue":0.16862745098039217,"alpha":1},{"red":0.6196078431372549,"green":0.615686274509804,"blue":0.1411764705882353,"alpha":1},{"red":0.5098039215686274,"green":0.4666666666666667,"blue":0.09019607843137255,"alpha":1},{"red":0.9568627450980391,"green":1,"blue":0.5058823529411764,"alpha":1},{"red":0.9333333333333333,"green":1,"blue":0.2549019607843137,"alpha":1},{"red":0.7764705882352941,"green":1,"blue":0,"alpha":1},{"red":0.6823529411764706,"green":0.9176470588235294,"blue":0,"alpha":1},{"red":1,"green":0.9215686274509803,"blue":0.23137254901960785,"alpha":1},{"red":1,"green":0.9921568627450981,"blue":0.9058823529411765,"alpha":1},{"red":1,"green":0.9764705882352941,"blue":0.7686274509803921,"alpha":1},{"red":1,"green":0.9607843137254902,"blue":0.615686274509804,"alpha":1},{"red":1,"green":0.9450980392156862,"blue":0.4627450980392157,"alpha":1},{"red":1,"green":0.9333333333333333,"blue":0.34509803921568627,"alpha":1},{"red":0.9921568627450981,"green":0.8470588235294118,"blue":0.20784313725490194,"alpha":1},{"red":0.984313725490196,"green":0.7529411764705882,"blue":0.1764705882352941,"alpha":1},{"red":0.9764705882352941,"green":0.6588235294117647,"blue":0.14509803921568626,"alpha":1},{"red":0.9607843137254902,"green":0.4980392156862745,"blue":0.09019607843137255,"alpha":1},{"red":1,"green":1,"blue":0.5529411764705883,"alpha":1},{"red":1,"green":1,"blue":0,"alpha":1},{"red":1,"green":0.9176470588235294,"blue":0,"alpha":1},{"red":1,"green":0.8392156862745098,"blue":0,"alpha":1},{"red":1,"green":0.7568627450980392,"blue":0.027450980392156862,"alpha":1},{"red":1,"green":0.9725490196078431,"blue":0.8823529411764706,"alpha":1},{"red":1,"green":0.9254901960784314,"blue":0.7019607843137254,"alpha":1},{"red":1,"green":0.8784313725490196,"blue":0.5098039215686274,"alpha":1},{"red":1,"green":0.8352941176470589,"blue":0.30980392156862746,"alpha":1},{"red":1,"green":0.792156862745098,"blue":0.1568627450980392,"alpha":1},{"red":1,"green":0.7019607843137254,"blue":0,"alpha":1},{"red":1,"green":0.6274509803921569,"blue":0,"alpha":1},{"red":1,"green":0.5607843137254902,"blue":0,"alpha":1},{"red":1,"green":0.43529411764705883,"blue":0,"alpha":1},{"red":1,"green":0.8980392156862745,"blue":0.4980392156862745,"alpha":1},{"red":1,"green":0.8431372549019608,"blue":0.25098039215686274,"alpha":1},{"red":1,"green":0.7686274509803921,"blue":0,"alpha":1},{"red":1,"green":0.6705882352941176,"blue":0,"alpha":1},{"red":1,"green":0.596078431372549,"blue":0,"alpha":1},{"red":1,"green":0.9529411764705882,"blue":0.8784313725490196,"alpha":1},{"red":1,"green":0.8784313725490196,"blue":0.6980392156862745,"alpha":1},{"red":1,"green":0.8,"blue":0.5019607843137255,"alpha":1},{"red":1,"green":0.7176470588235294,"blue":0.30196078431372547,"alpha":1},{"red":1,"green":0.6549019607843137,"blue":0.14901960784313725,"alpha":1},{"red":0.984313725490196,"green":0.5490196078431373,"blue":0,"alpha":1},{"red":0.9607843137254902,"green":0.48627450980392156,"blue":0,"alpha":1},{"red":0.9372549019607843,"green":0.4235294117647059,"blue":0,"alpha":1},{"red":0.9019607843137255,"green":0.3176470588235294,"blue":0,"alpha":1},{"red":1,"green":0.8196078431372549,"blue":0.5019607843137255,"alpha":1},{"red":1,"green":0.6705882352941176,"blue":0.25098039215686274,"alpha":1},{"red":1,"green":0.5686274509803921,"blue":0,"alpha":1},{"red":1,"green":0.42745098039215684,"blue":0,"alpha":1},{"red":1,"green":0.3411764705882353,"blue":0.13333333333333333,"alpha":1},{"red":0.984313725490196,"green":0.9137254901960784,"blue":0.9058823529411765,"alpha":1},{"red":1,"green":0.8,"blue":0.7372549019607844,"alpha":1},{"red":1,"green":0.6705882352941176,"blue":0.5686274509803921,"alpha":1},{"red":1,"green":0.5411764705882353,"blue":0.396078431372549,"alpha":1},{"red":1,"green":0.4392156862745098,"blue":0.2627450980392157,"alpha":1},{"red":0.9568627450980391,"green":0.3176470588235294,"blue":0.11764705882352941,"alpha":1},{"red":0.9019607843137255,"green":0.2901960784313725,"blue":0.09803921568627451,"alpha":1},{"red":0.8470588235294118,"green":0.2627450980392157,"blue":0.08235294117647059,"alpha":1},{"red":0.7490196078431373,"green":0.21176470588235294,"blue":0.047058823529411764,"alpha":1},{"red":1,"green":0.6196078431372549,"blue":0.5019607843137255,"alpha":1},{"red":1,"green":0.43137254901960786,"blue":0.25098039215686274,"alpha":1},{"red":1,"green":0.2392156862745098,"blue":0,"alpha":1},{"red":0.8666666666666667,"green":0.17254901960784313,"blue":0,"alpha":1},{"red":0.6196078431372549,"green":0.6196078431372549,"blue":0.6196078431372549,"alpha":1},{"red":0.9803921568627451,"green":0.9803921568627451,"blue":0.9803921568627451,"alpha":1},{"red":0.9607843137254902,"green":0.9607843137254902,"blue":0.9607843137254902,"alpha":1},{"red":0.9333333333333333,"green":0.9333333333333333,"blue":0.9333333333333333,"alpha":1},{"red":0.8784313725490196,"green":0.8784313725490196,"blue":0.8784313725490196,"alpha":1},{"red":0.7411764705882353,"green":0.7411764705882353,"blue":0.7411764705882353,"alpha":1},{"red":0.4588235294117647,"green":0.4588235294117647,"blue":0.4588235294117647,"alpha":1},{"red":0.3803921568627451,"green":0.3803921568627451,"blue":0.3803921568627451,"alpha":1},{"red":0.2588235294117647,"green":0.2588235294117647,"blue":0.2588235294117647,"alpha":1},{"red":0.12941176470588234,"green":0.12941176470588234,"blue":0.12941176470588234,"alpha":1},{"red":0.3764705882352941,"green":0.49019607843137253,"blue":0.5450980392156862,"alpha":1},{"red":0.9254901960784314,"green":0.9372549019607843,"blue":0.9450980392156862,"alpha":1},{"red":0.8117647058823529,"green":0.8470588235294118,"blue":0.8627450980392157,"alpha":1},{"red":0.6901960784313725,"green":0.7450980392156863,"blue":0.7725490196078432,"alpha":1},{"red":0.5647058823529412,"green":0.6431372549019607,"blue":0.6823529411764706,"alpha":1},{"red":0.47058823529411764,"green":0.5647058823529412,"blue":0.611764705882353,"alpha":1},{"red":0.32941176470588235,"green":0.43137254901960786,"blue":0.4784313725490196,"alpha":1},{"red":0.27058823529411763,"green":0.3529411764705882,"blue":0.39215686274509803,"alpha":1},{"red":0.21568627450980393,"green":0.2784313725490196,"blue":0.30980392156862746,"alpha":1},{"red":0.14901960784313725,"green":0.19607843137254902,"blue":0.2196078431372549,"alpha":1},{"red":0.4745098039215686,"green":0.3333333333333333,"blue":0.2823529411764706,"alpha":1},{"red":0.9372549019607843,"green":0.9215686274509803,"blue":0.9137254901960784,"alpha":1},{"red":0.8431372549019608,"green":0.8,"blue":0.7843137254901961,"alpha":1},{"red":0.7372549019607844,"green":0.6666666666666666,"blue":0.6431372549019607,"alpha":1},{"red":0.6313725490196078,"green":0.5333333333333333,"blue":0.4980392156862745,"alpha":1},{"red":0.5529411764705883,"green":0.43137254901960786,"blue":0.38823529411764707,"alpha":1},{"red":0.42745098039215684,"green":0.2980392156862745,"blue":0.2549019607843137,"alpha":1},{"red":0.36470588235294116,"green":0.25098039215686274,"blue":0.21568627450980393,"alpha":1},{"red":0.3058823529411765,"green":0.20392156862745098,"blue":0.1803921568627451,"alpha":1},{"red":0.24313725490196078,"green":0.15294117647058825,"blue":0.13725490196078433,"alpha":1},{"red":0,"green":0,"blue":0,"alpha":1},{"red":1,"green":1,"blue":1,"alpha":1}]} -------------------------------------------------------------------------------- /Palettes/sketch-default.sketchpalette: -------------------------------------------------------------------------------- 1 | {"compatibleVersion":"1.4","pluginVersion":"1.4","colors":[{"red":0.8156862745098039,"green":0.00784313725490196,"blue":0.10588235294117647,"alpha":1},{"red":0.9607843137254902,"green":0.6509803921568628,"blue":0.13725490196078433,"alpha":1},{"red":0.9725490196078431,"green":0.9058823529411765,"blue":0.10980392156862745,"alpha":1},{"red":0.5450980392156862,"green":0.3411764705882353,"blue":0.16470588235294117,"alpha":1},{"red":0.49411764705882355,"green":0.8274509803921568,"blue":0.12941176470588234,"alpha":1},{"red":0.2549019607843137,"green":0.4588235294117647,"blue":0.0196078431372549,"alpha":1},{"red":0.7411764705882353,"green":0.06274509803921569,"blue":0.8784313725490196,"alpha":1},{"red":0.5647058823529412,"green":0.07450980392156863,"blue":0.996078431372549,"alpha":1},{"red":0.2901960784313725,"green":0.5647058823529412,"blue":0.8862745098039215,"alpha":1},{"red":0.3137254901960784,"green":0.8901960784313725,"blue":0.7607843137254902,"alpha":1},{"red":0.7215686274509804,"green":0.9137254901960784,"blue":0.5254901960784314,"alpha":1},{"red":0,"green":0,"blue":0,"alpha":1},{"red":0.2901960784313725,"green":0.2901960784313725,"blue":0.2901960784313725,"alpha":1},{"red":0.6078431372549019,"green":0.6078431372549019,"blue":0.6078431372549019,"alpha":1},{"red":1,"green":1,"blue":1,"alpha":1}]} -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Sketch Palettes 2 | 3 | A Sketch plugin for exporting and importing fill presets. It supports colors, gradients, and Pattern fills. 4 | 5 | 6 | 7 | # Installation 8 | 9 | Move the Sketch Palettes plugin into your Plugins folder or double-click the .sketchplugin file. 10 | 11 | # Usage 12 | 13 | #### Saving Palettes 14 | 15 | You can save palettes from either the Global presets section or from the Document presets section of the color picker. You can also select which of the available fill types you'd like to include. The plugin supports colors, gradients, and pattern fills. Saving will create a .sketchpalette file at whatever location you choose. 16 | 17 | #### Loading Palettes 18 | 19 | Running the "Load Palette..." command in the plugin menu will allow you to choose a .sketchpalette file containg the presets you like to import. You can load palettes into either the Global presets section or into the Document presets section of the color picker. You can also select which of the available fill types you'd like to load. Fill presets will then be appended to the corresponding preset sections. 20 | 21 | #### Removing Palettes 22 | 23 | Select "Clear Palette..." to remove fill presets from either the Global presets or Document presets section of the color picker. You can select which fill types you'd like to clear. 24 | 25 | # Info & Feedback 26 | 27 | This plugin would not have been possible without the help of some other awesome people. Alan Dickinson was enormously helpful and implemented the long-standing feature request to support gradients, as well as some other nice enhancements and bug fixes. William O'Beirne helped with some of the trickier parts earlier on, like making sense of the class-dump of Sketch, to figure out how to use undocumented Sketch functionality. And Ale Muñoz lent a hand fixing bugs here and there. 28 | 29 | If you have any questions, find a bug, or have ideas for ways to improve the plugin, ping me on twitter: @andrewfiorillo -------------------------------------------------------------------------------- /Sketch Palettes.sketchplugin/Contents/Sketch/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Sketch Palettes", 3 | "description": "A Sketch plugin for exporting and importing fill presets. It supports colors, gradients, and pattern fills.", 4 | "author": "Andrew Fiorillo", 5 | "homepage": "http://github.com/andrewfiorillo/sketch-palettes", 6 | "version": "2.22", 7 | "identifier": "com.andrewfiorillo.sketch.sketch-palettes", 8 | "compatibleVersion": "54.1", 9 | "bundleVersion": "2.0", 10 | "appcast": "https://raw.githubusercontent.com/andrewfiorillo/sketch-palettes/master/appcast.xml", 11 | "commands": [ 12 | { 13 | "name": "Load Palette...", 14 | "identifier": "loadPalette", 15 | "shortcut": "", 16 | "script": "sketchPalettes.js", 17 | "handler": "loadPalette" 18 | }, 19 | { 20 | "name": "Save Palette...", 21 | "identifier": "savePalette", 22 | "shortcut": "", 23 | "script": "sketchPalettes.js", 24 | "handler": "savePalette" 25 | }, 26 | { 27 | "name": "Clear Palette...", 28 | "identifier": "clearPalette", 29 | "shortcut": "", 30 | "script": "sketchPalettes.js", 31 | "handler": "clearPalette" 32 | } 33 | ], 34 | "menu": { 35 | "items": [ 36 | "loadPalette", 37 | "savePalette", 38 | "clearPalette" 39 | ] 40 | } 41 | } -------------------------------------------------------------------------------- /Sketch Palettes.sketchplugin/Contents/Sketch/sketchPalettes.js: -------------------------------------------------------------------------------- 1 | 2 | @import "util.js"; 3 | 4 | 5 | //------------------------------------------------------------------------------------------------------------- 6 | // Save palette 7 | //------------------------------------------------------------------------------------------------------------- 8 | 9 | 10 | function savePalette(context) { 11 | 12 | var doc = context.document; 13 | var app = NSApp.delegate(); 14 | var version = context.plugin.version().UTF8String(); 15 | var assets; 16 | 17 | // Preset sources 18 | var sources = [ 19 | { name: "Global Presets", assets: MSPersistentAssetCollection.sharedGlobalAssets()}, 20 | { name: "Document Presets", assets: doc.documentData().assets()}, 21 | ]; 22 | var sourceNames = [ sources[0].name, sources[1].name ]; 23 | var libs = app.librariesController().availableLibraries(); 24 | 25 | // Add presets from libraries, if any, to preset sources 26 | if (libs.length > 0) { 27 | sourceNames.push("--"); 28 | for (var i = 0; i < libs.length; i++) { 29 | var libAssets = libs[i].document().assets(); 30 | if (libAssets.colorAssets().length > 0 || libAssets.gradientAssets().length > 0) { 31 | sources.push({ name: libs[i].name(), assets: libAssets }); 32 | sourceNames.push(libs[i].name()) 33 | } 34 | } 35 | } 36 | 37 | // Create dialog 38 | var dialog = NSAlert.alloc().init(); 39 | dialog.setMessageText("Save Palette"); 40 | dialog.addButtonWithTitle("Save"); 41 | dialog.addButtonWithTitle("Cancel"); 42 | 43 | // Create custom view and fields 44 | var customView = NSView.alloc().initWithFrame(NSMakeRect(0, 0, 200, 180)); 45 | 46 | var labelSource = createLabel(NSMakeRect(0, 150, 200, 25), 12, false, 'Source:'); 47 | customView.addSubview(labelSource); 48 | 49 | var selectSource = createSelect(NSMakeRect(0, 125, 200, 25), sourceNames) 50 | customView.addSubview(selectSource); 51 | 52 | var labelFillTypes = createLabel(NSMakeRect(0, 83, 200, 25), 12, false, 'Fill Types:'); 53 | customView.addSubview(labelFillTypes); 54 | 55 | var checkboxColors = createCheckbox(NSMakeRect(0, 60, 200, 25), "Flat Colors", "colors", true, true); 56 | customView.addSubview(checkboxColors); 57 | 58 | var checkboxGradients = createCheckbox(NSMakeRect(0, 37, 200, 25), "Gradients", "gradients", true, true); 59 | customView.addSubview(checkboxGradients); 60 | 61 | var checkboxImages = createCheckbox(NSMakeRect(0, 14, 200, 25), "Pattern Fills", "images", true, true); 62 | customView.addSubview(checkboxImages); 63 | 64 | // Set checkboxes to disabled if no presets exist in selected section 65 | function setCheckboxStates(selectSource) { 66 | 67 | // var assets; 68 | for (var i = 0; i < sources.length; i++) { 69 | if (selectSource.titleOfSelectedItem() == sources[i].name) { 70 | assets = sources[i].assets; 71 | } 72 | } 73 | 74 | var showColors = (assets.colorAssets().length > 0 ? true : false); 75 | checkboxColors.setState(showColors ? NSOnState : NSOffState); 76 | checkboxColors.setEnabled(showColors); 77 | 78 | var showGradients = (assets.gradientAssets().length > 0 ? true : false); 79 | checkboxGradients.setState(showGradients ? NSOnState : NSOffState); 80 | checkboxGradients.setEnabled(showGradients); 81 | 82 | var showImages = (assets.images().length > 0 ? true : false); 83 | checkboxImages.setState(showImages ? NSOnState : NSOffState); 84 | checkboxImages.setEnabled(showImages); 85 | } 86 | 87 | // set initial chekcbox states 88 | setCheckboxStates(selectSource); 89 | 90 | // Listen for select box change event 91 | selectSource.setCOSJSTargetFunction(function(sender) { 92 | setCheckboxStates(selectSource) 93 | }); 94 | 95 | // Add custom view to dialog 96 | dialog.setAccessoryView(customView); 97 | 98 | // Open dialog and exit if user selects Cancel 99 | if (dialog.runModal() != NSAlertFirstButtonReturn) { 100 | return; 101 | } 102 | 103 | // Get Presets from selected section 104 | // if (selectSource.indexOfSelectedItem() == 0) { 105 | // assets = doc.documentData().assets(); 106 | // } else if (selectSource.indexOfSelectedItem() == 1) { 107 | // assets = MSPersistentAssetCollection.sharedGlobalAssets(); 108 | // } 109 | 110 | var colorAssets = checkboxColors.state() ? assets.colorAssets() : []; 111 | var gradientAssets = checkboxGradients.state() ? assets.gradientAssets() : []; 112 | var images = checkboxImages.state() ? assets.images() : []; 113 | 114 | // Check to make sure there are presets available 115 | if (colorAssets.length <= 0 && images.length <= 0 && gradientAssets.length <= 0) { 116 | NSApp.displayDialog("No presets available!"); 117 | return; 118 | } 119 | 120 | // Create save dialog and set properties 121 | var save = NSSavePanel.savePanel(); 122 | save.setNameFieldStringValue("untitled.sketchpalette"); 123 | save.setAllowedFileTypes(["sketchpalette"]); 124 | save.setAllowsOtherFileTypes(false); 125 | save.setExtensionHidden(false); 126 | 127 | // Open save dialog and run if Save was clicked 128 | if (save.runModal()) { 129 | 130 | // Build palettes 131 | var colorPalette = [], gradientPalette = [], imagePalette = []; 132 | 133 | // Colors 134 | for (var i = 0; i < colorAssets.length; i++) { 135 | var colorName = colorAssets[i].name() ? colorAssets[i].name().UTF8String() : null 136 | colorPalette.push({ 137 | name: colorName, 138 | red: colorAssets[i].color().red(), 139 | green: colorAssets[i].color().green(), 140 | blue: colorAssets[i].color().blue(), 141 | alpha: colorAssets[i].color().alpha() 142 | }); 143 | } 144 | 145 | // Pattern fills 146 | for (var i = 0; i < images.length; i++) { 147 | var data = images[i].data() 148 | var nsdata = NSData.dataWithData(data); 149 | var base64Color = nsdata.base64EncodedStringWithOptions(0).UTF8String(); 150 | imagePalette.push({data: base64Color}); 151 | } 152 | 153 | // Gradients 154 | for (var i = 0; i < gradientAssets.length; i++) { 155 | var gradient_stops = []; 156 | for (var j = 0; j < gradientAssets[i].gradient().stops().length; j++) { 157 | stop_color = { 158 | _class: "color", 159 | red: gradientAssets[i].gradient().stops()[j].color().red(), 160 | green: gradientAssets[i].gradient().stops()[j].color().green(), 161 | blue: gradientAssets[i].gradient().stops()[j].color().blue(), 162 | alpha: gradientAssets[i].gradient().stops()[j].color().alpha() 163 | }; 164 | gradient_stops.push({ 165 | _class: "gradientStop", 166 | color: stop_color, 167 | position: gradientAssets[i].gradient().stops()[j].position() 168 | }); 169 | } 170 | var gradientName = gradientAssets[i].name() ? gradientAssets[i].name().UTF8String() : null 171 | gradientPalette.push({ 172 | name: gradientName, 173 | _class: "gradient", 174 | elipseLength: gradientAssets[i].gradient().elipseLength(), 175 | from: "{" + gradientAssets[i].gradient().from().x + "," + gradientAssets[i].gradient().from().y + "}", 176 | to: "{" + gradientAssets[i].gradient().to().x + "," + gradientAssets[i].gradient().to().y + "}", 177 | stops: gradient_stops, 178 | gradientType: gradientAssets[i].gradient().gradientType() 179 | // shouldSmoothenOpacity: gradients[i].shouldSmoothenOpacity() ? true : false 180 | }); 181 | } 182 | 183 | // Assemble file contents 184 | 185 | var fileData = { 186 | "compatibleVersion": "2.0", // min plugin version to load palette 187 | "pluginVersion": version, // plugin version used to save palette 188 | "colors": colorPalette, 189 | "gradients": gradientPalette, 190 | "images": imagePalette 191 | }; 192 | 193 | // Write file to chosen file path 194 | 195 | var filePath = save.URL().path(); 196 | var file = NSString.stringWithString(JSON.stringify(fileData)); 197 | 198 | file.writeToFile_atomically_encoding_error(filePath, true, NSUTF8StringEncoding, null); 199 | 200 | } 201 | } 202 | 203 | 204 | //------------------------------------------------------------------------------------------------------------- 205 | // Load palette 206 | //------------------------------------------------------------------------------------------------------------- 207 | 208 | 209 | function loadPalette(context) { 210 | 211 | var app = NSApp.delegate(); 212 | var doc = context.document; 213 | var version = context.plugin.version().UTF8String(); 214 | var fileTypes = ["sketchpalette"]; 215 | 216 | // Open file picker to choose palette file 217 | var open = NSOpenPanel.openPanel(); 218 | open.setAllowedFileTypes(fileTypes); 219 | open.setCanChooseDirectories(true); 220 | open.setCanChooseFiles(true); 221 | open.setCanCreateDirectories(true); 222 | open.setTitle("Choose a file"); 223 | open.setPrompt("Choose"); 224 | open.runModal(); 225 | 226 | // Read contents of file into NSString, then to JSON 227 | var filePath = open.URLs().firstObject().path(); 228 | var fileContents = NSString.stringWithContentsOfFile(filePath); 229 | var paletteContents = JSON.parse(fileContents.toString()); 230 | var compatibleVersion = paletteContents.compatibleVersion; 231 | 232 | // Check for presets in file, else set to empty array 233 | var colorPalette = paletteContents.colors ? paletteContents.colors : []; 234 | var gradientPalette = paletteContents.gradients ? paletteContents.gradients : []; 235 | var imagePalette = paletteContents.images ? paletteContents.images : []; 236 | var colorAssets = [], gradientAssets = [], images = []; 237 | 238 | // Check if plugin is out of date and incompatible with a newer palette version 239 | if (compatibleVersion && compatibleVersion > version) { 240 | NSApp.displayDialog("Your plugin is out of date. Please update to the latest version of Sketch Palettes."); 241 | return; 242 | } 243 | 244 | // Check for older hex code palette version 245 | if (!compatibleVersion || compatibleVersion < 1.4) { 246 | // Convert hex colors to MSColors 247 | for (var i = 0; i < colorPalette.length; i++) { 248 | colors.push(MSImmutableColor.colorWithSVGString(colorPalette[i]).newMutableCounterpart()); 249 | } 250 | } else { 251 | 252 | // Colors Fills: convert rgba colors to MSColors 253 | if (colorPalette.length > 0) { 254 | for (var i = 0; i < colorPalette.length; i++) { 255 | var colorName = colorPalette[i].name ? colorPalette[i].name : null; 256 | var mscolor = MSColor.colorWithRed_green_blue_alpha( 257 | colorPalette[i].red, 258 | colorPalette[i].green, 259 | colorPalette[i].blue, 260 | colorPalette[i].alpha 261 | ); 262 | colorAssets.push(MSColorAsset.alloc().initWithAsset_name(mscolor, colorName)); 263 | } 264 | } 265 | 266 | // Pattern Fills: convert base64 strings to MSImageData objects 267 | if (imagePalette.length > 0) { 268 | for (var i = 0; i < imagePalette.length; i++) { 269 | var nsdata = NSData.alloc().initWithBase64EncodedString_options(imagePalette[i].data, 0); 270 | var nsimage = NSImage.alloc().initWithData(nsdata); 271 | // var msimage = MSImageData.alloc().initWithImageConvertingColorSpace(nsimage); 272 | var msimage = MSImageData.alloc().initWithImage(nsimage); 273 | images.push(msimage); 274 | }; 275 | } 276 | 277 | // Gradient Fills: build MSGradientStop and MSGradient objects 278 | if (gradientPalette.length > 0) { 279 | for (var i = 0; i < gradientPalette.length; i++) { 280 | 281 | // Create gradient stops 282 | var gradient = gradientPalette[i]; 283 | var stops = []; 284 | for (var j = 0; j < gradient.stops.length; j++) { 285 | var color = MSColor.colorWithRed_green_blue_alpha( 286 | gradient.stops[j].color.red, 287 | gradient.stops[j].color.green, 288 | gradient.stops[j].color.blue, 289 | gradient.stops[j].color.alpha 290 | ); 291 | stops.push(MSGradientStop.stopWithPosition_color_(gradient.stops[j].position, color)); 292 | } 293 | 294 | // Create gradient object and set basic properties 295 | var msgradient = MSGradient.new(); 296 | msgradient.setGradientType(gradient.gradientType); 297 | // msgradient.shouldSmoothenOpacity = gradient.shouldSmoothenOpacity; 298 | msgradient.elipseLength = gradient.elipseLength; 299 | msgradient.setStops(stops); 300 | 301 | // Parse From and To values into arrays e.g.: from: "{0.1,-0.43}" => fromValue = [0.1, -0.43] 302 | var fromValue = gradient.from.slice(1,-1).split(","); 303 | var toValue = gradient.to.slice(1,-1).split(","); 304 | 305 | // Set CGPoint objects as From and To values 306 | msgradient.setFrom({ x: fromValue[0], y: fromValue[1] }); 307 | msgradient.setTo({ x: toValue[0], y: toValue[1] }); 308 | 309 | var gradientName = gradientPalette[i].name ? gradientPalette[i].name : null; 310 | gradientAssets.push(MSGradientAsset.alloc().initWithAsset_name(msgradient, gradientName)); 311 | 312 | } 313 | } 314 | 315 | } 316 | 317 | // Create dialog 318 | var dialog = NSAlert.alloc().init(); 319 | dialog.setMessageText("Load Palette"); 320 | dialog.addButtonWithTitle("Load"); 321 | dialog.addButtonWithTitle("Cancel"); 322 | 323 | // Create custom view and fields 324 | var customView = NSView.alloc().initWithFrame(NSMakeRect(0, 0, 200, 180)); 325 | 326 | var labelSource = createLabel(NSMakeRect(0, 150, 200, 25), 12, false, 'Source:'); 327 | customView.addSubview(labelSource); 328 | 329 | var selectSource = createSelect(NSMakeRect(0, 125, 200, 25), ["Document Presets", "Global Presets"]) 330 | customView.addSubview(selectSource); 331 | 332 | var labelFillTypes = createLabel(NSMakeRect(0, 83, 200, 25), 12, false, 'Fill Types:'); 333 | customView.addSubview(labelFillTypes); 334 | 335 | var showColors = (colorPalette.length > 0) ? true : false); 336 | var checkboxColors = createCheckbox(NSMakeRect(0, 60, 200, 25), "Flat Colors", "colors", showColors, showColors); 337 | customView.addSubview(checkboxColors); 338 | 339 | var showGradients = (gradientPalette.length > 0) ? true : false); 340 | var checkboxGradients = createCheckbox(NSMakeRect(0, 37, 200, 25), "Gradients", "gradients", showGradients, showGradients); 341 | customView.addSubview(checkboxGradients); 342 | 343 | var showImages = (imagePalette.length > 0 ? true : false); 344 | var checkboxImages = createCheckbox(NSMakeRect(0, 14, 200, 25), "Pattern Fills", "images", showImages, showImages); 345 | customView.addSubview(checkboxImages); 346 | 347 | // Add custom view to dialog 348 | dialog.setAccessoryView(customView); 349 | 350 | // Open dialog and exit if user hits cancel. 351 | if (dialog.runModal() != NSAlertFirstButtonReturn) return; 352 | 353 | // Get target picker section 354 | if (selectSource.indexOfSelectedItem() == 0) { 355 | var assets = doc.documentData().assets(); 356 | } else if (selectSource.indexOfSelectedItem() == 1) { 357 | var assets = MSPersistentAssetCollection.sharedGlobalAssets(); 358 | } 359 | 360 | // Append presets 361 | if (colorAssets.length > 0) assets.addColorAssets(colorAssets); 362 | if (images.length > 0) assets.setImages(assets.images().slice().concat(images)); 363 | if (gradientAssets.length > 0) assets.addGradientAssets(gradientAssets); 364 | 365 | doc.inspectorController().reload(); 366 | app.refreshCurrentDocument(); 367 | 368 | } 369 | 370 | 371 | //------------------------------------------------------------------------------------------------------------- 372 | // Clear palette 373 | //------------------------------------------------------------------------------------------------------------- 374 | 375 | 376 | function clearPalette(context) { 377 | 378 | var doc = context.document; 379 | var selection = context.selection; 380 | var app = NSApp.delegate(); 381 | var version = context.plugin.version().UTF8String(); 382 | 383 | // Create dialog 384 | var dialog = NSAlert.alloc().init(); 385 | dialog.setMessageText("Clear Palette"); 386 | dialog.addButtonWithTitle("Clear"); 387 | dialog.addButtonWithTitle("Cancel"); 388 | 389 | // Create view to hold custom fields 390 | var customView = NSView.alloc().initWithFrame(NSMakeRect(0, 0, 200, 180)); 391 | 392 | var labelSource = createLabel(NSMakeRect(0, 150, 200, 25), 12, false, 'Source:'); 393 | customView.addSubview(labelSource); 394 | 395 | var selectSource = createSelect(NSMakeRect(0, 125, 200, 25), ["Document Presets", "Global Presets"]) 396 | customView.addSubview(selectSource); 397 | 398 | var labelFillTypes = createLabel(NSMakeRect(0, 83, 200, 25), 12, false, 'Fill Types:'); 399 | customView.addSubview(labelFillTypes); 400 | 401 | var checkboxColors = createCheckbox(NSMakeRect(0, 60, 200, 25), "Flat Colors", "colors", true, true); 402 | customView.addSubview(checkboxColors); 403 | 404 | var checkboxGradients = createCheckbox(NSMakeRect(0, 37, 200, 25), "Gradients", "colors", true, true); 405 | customView.addSubview(checkboxGradients); 406 | 407 | var checkboxImages = createCheckbox(NSMakeRect(0, 14, 200, 25), "Pattern Fills", "images", true, true); 408 | customView.addSubview(checkboxImages); 409 | 410 | // Add custom view to dialog 411 | dialog.setAccessoryView(customView); 412 | 413 | // Open dialog and exit if user hits cancel. 414 | if (dialog.runModal() != NSAlertFirstButtonReturn) return; 415 | 416 | // Get target picker section 417 | if (selectSource.indexOfSelectedItem() == 0) { 418 | var assets = doc.documentData().assets(); 419 | } else if (selectSource.indexOfSelectedItem() == 1) { 420 | var assets = MSPersistentAssetCollection.sharedGlobalAssets(); 421 | } 422 | 423 | // Clear presets in chosen sections 424 | if (checkboxColors.state()) assets.setColorAssets([]); 425 | if (checkboxImages.state()) assets.setImages([]); 426 | if (checkboxGradients.state()) assets.setGradientAssets([]); 427 | 428 | doc.inspectorController().reload(); 429 | app.refreshCurrentDocument(); 430 | 431 | } 432 | -------------------------------------------------------------------------------- /Sketch Palettes.sketchplugin/Contents/Sketch/util.js: -------------------------------------------------------------------------------- 1 | 2 | function rect(x,y,w,h) { 3 | var rect = NSMakeRect(x,y,w,h) 4 | return rect; 5 | } 6 | 7 | function createLabel(frame, size, bold, text) { 8 | var label = NSTextField.alloc().initWithFrame(frame); 9 | label.setStringValue(text); 10 | label.setBezeled(false); 11 | label.setDrawsBackground(false); 12 | label.setEditable(false); 13 | label.setSelectable(false); 14 | if (bold) { 15 | label.setFont(NSFont.boldSystemFontOfSize(size)); 16 | } 17 | else { 18 | label.setFont(NSFont.systemFontOfSize(size)); 19 | } 20 | return label; 21 | } 22 | 23 | 24 | function createSelect(frame, items) { 25 | var select = NSPopUpButton.alloc().initWithFrame(frame); 26 | for (var i = 0; i < items.length; i++) { 27 | if (items[i] == "--") { 28 | select.menu().addItem(NSMenuItem.separatorItem()) 29 | } else { 30 | select.addItemWithTitle(items[i]) 31 | } 32 | } 33 | return select; 34 | } 35 | 36 | 37 | function createCheckbox(frame, name, value, onstate, enabled) { 38 | var checkbox = NSButton.alloc().initWithFrame(frame); 39 | checkbox.setButtonType(NSSwitchButton); 40 | // checkbox.setBezelStyle(1); 41 | checkbox.setTitle(name); 42 | checkbox.setTag(value); 43 | checkbox.setState(onstate ? NSOnState : NSOffState); 44 | checkbox.setEnabled(enabled); 45 | return checkbox; 46 | } -------------------------------------------------------------------------------- /appcast.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Sketch Palettes 5 | http://sparkle-project.org/files/sparkletestcast.xml 6 | A Sketch plugin for exporting and importing fill presets. It supports colors, gradients, and pattern fills. 7 | en 8 | 9 | Version 2.22 10 | 11 | 13 |
  • Popover now stays open and updates to automatically show new presets when a palette is loaded
  • 14 | 15 | ]]> 16 |
    17 | 18 |
    19 |
    20 |
    -------------------------------------------------------------------------------- /palettes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andrewfiorillo/sketch-palettes/5b6bfa6eb25cb3244a9e6a226df259e8fb31fc2c/palettes.png --------------------------------------------------------------------------------