UNPKG

@sketch-hq/sketch-tidy-assistant

Version:

- [Maximum ungrouped layers in an artboard](https://github.com/sketch-hq/sketch-assistants/tree/main/assistants/core/src/rules/artboards-max-ungrouped-layers): `5` - [Borders should not be disabled](https://github.com/sketch-hq/sketch-assistants/tree/ma

1 lines 134 kB
var _sketch;(()=>{var e={398:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isDefined=function(e){return void 0!==e},t.isObject=a,t.assertObject=function(e){if(!a(e))throw Error("AssertionError: value is not an object")},t.isArray=i,t.assertArray=function(e){if(!i(e))throw Error("AssertionError: value is not an array")},t.isSketchFileObject=s,t.assertSketchFileObject=function(e){if(!s(e))throw Error("AssertionError: value is not a Sketch file object")},t.isStringArray=n,t.assertStringArray=function(e){if(!n(e))throw Error("AssertionError: value is not an array of strings")},t.isNumber=l,t.assertNumber=function(e){if(!l(e))throw Error("AssertionError: value is not a number")};var o=r(4710);function a(e){return"object"==typeof e&&null!==e}function i(e){return"object"==typeof e&&null!==e&&e.constructor===Array}function n(e){return i(e)&&"string"==typeof e[0]}function s(e){if(!a(e))return!1;const t="_class"in e&&"string"==typeof e._class?e._class:"";return Object.values(o.FileFormat.ClassValue).includes(t)}function l(e){return"number"==typeof e}},3440:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.createI18NObject=void 0;var o=r(8770),a=Y(r(6657)),i=Y(r(4816)),n=Y(r(6982)),s=Y(r(9382)),l=Y(r(5503)),u=Y(r(840)),d=Y(r(2277)),c=Y(r(47)),h=Y(r(9011)),m=Y(r(2639)),y=Y(r(7411)),f=Y(r(8743)),p=Y(r(9425)),b=Y(r(2170)),g=Y(r(9064)),v=Y(r(3765)),_=Y(r(6778)),w=Y(r(166)),x=Y(r(3262)),S=Y(r(5931)),L=Y(r(4370)),O=Y(r(2475)),I=Y(r(8207)),A=Y(r(8270)),T=Y(r(8761)),z=Y(r(898)),j=Y(r(3666)),M=Y(r(257)),R=Y(r(2345)),k=Y(r(1431)),C=Y(r(4795)),F=Y(r(1008)),N=Y(r(9170)),P=Y(r(1517)),D=Y(r(1361)),E=Y(r(1093)),G=Y(r(5154)),H=Y(r(4860)),V=Y(r(9023)),B=Y(r(7840)),W=r(7395),U=r(5065),q=r(1319);function J(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(J=function(e){return e?r:t})(e)}function Y(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=J(t);if(r&&r.has(e))return r.get(e);var o={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var n=a?Object.getOwnPropertyDescriptor(e,i):null;n&&(n.get||n.set)?Object.defineProperty(o,i,n):o[i]=e[i]}return o.default=e,r&&r.set(e,o),o}function K(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function $(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?K(Object(r),!0).forEach((function(t){Z(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):K(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Z(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}const Q=e=>{const t={en:W.messages,"zh-Hans":U.messages};o.i18n.loadLocaleData({en:{plurals:q.en},"zh-Hans":{plurals:q.zh}}),o.i18n.load({en:t.en,"zh-Hans":t["zh-Hans"]});const r=Object.keys(t).find((t=>t==e.locale))||"en";return o.i18n.activate(r),o.i18n};t.createI18NObject=Q;t.default=async e=>{const t=Q(e),r="@sketch-hq/sketch-core-assistant";return{name:r,rules:[a,i,n,s,l,u,d,c,h,m,y,f,p,b,g,v,_,w,x,S,L,O,I,A,T,z,j,M,R,k,C,F,N,P,D,E,G,H,V,B].map((e=>{const o=e.createRule(t);return $($({},o),{},{name:`${r}/${o.name}`})})),config:{rules:{}}}}},7395:e=>{"use strict";e.exports={messages:{"Layer name matches one of the forbidden patterns":"Layer name matches one of the forbidden patterns","Layer name does not match any of the allowed patterns":"Layer name does not match any of the allowed patterns","Unexpected Artboard grid settings":"Unexpected Artboard grid settings","Artboard grid settings should match the conventions":"Artboard grid settings should match the conventions","Keep your specific grid settings consistent across a document, team or project.":"Keep your specific grid settings consistent across a document, team or project.",Grids:"Grids","List of valid grids":"List of valid grids","Grid Block Size":"Grid Block Size","Grid block size in pixels":"Grid block size in pixels","Thick Lines Every":"Thick Lines Every","Number of blocks between thick grid lines":"Number of blocks between thick grid lines","Unexpected Artboard layout settings":"Unexpected Artboard layout settings","Artboard layout settings should match the conventions":"Artboard layout settings should match the conventions","Keep your specific layout settings consistent across a document, team or project.":"Keep your specific layout settings consistent across a document, team or project.",Layouts:"Layouts","A list of valid layouts. Each object will use Sketch's Layout Settings options":"A list of valid layouts. Each object will use Sketch's Layout Settings options","Draw Vertical":"Draw Vertical","Enables drawing columns":"Enables drawing columns","Total Width":"Total Width","Total width of layout":"Total width of layout","Horizontal Offset":"Horizontal Offset","Horizontal offset of layout":"Horizontal offset of layout","Number of Columns":"Number of Columns","Number of columns in the layout":"Number of columns in the layout","Gutters Outside":"Gutters Outside","Draw gutters on the outside":"Draw gutters on the outside","Gutter Width":"Gutter Width","Gutter width in layout":"Gutter width in layout","Column Width":"Column Width","Layout column widths":"Layout column widths","Draw Horizontal":"Draw Horizontal","Enables drawing rows":"Enables drawing rows","Gutter Height":"Gutter Height","Layout gutter height":"Layout gutter height","Row Height Multiplication":"Row Height Multiplication","Draw Horizontal Lines":"Draw Horizontal Lines","Draw all horizontal lines":"Draw all horizontal lines","{nonGroupLayers, plural, one {There is one ungrouped layer within this Artboard} other {There are # ungrouped layers within this Artboard}}":[["nonGroupLayers","plural",{one:"There is one ungrouped layer within this Artboard",other:["There are ","#"," ungrouped layers within this Artboard"]}]],"{maxUngroupedLayers, plural, one {Artboards should only have one ungrouped layers} other {Artboards should have less than # ungrouped layers}}":[["maxUngroupedLayers","plural",{one:"Artboards should only have one ungrouped layers",other:["Artboards should have less than ","#"," ungrouped layers"]}]],"Grouping layers within your Artboards will help you stay organized.":"Grouping layers within your Artboards will help you stay organized.","Maximum Ungrouped Layers":"Maximum Ungrouped Layers","The maximum number of ungrouped layers":"The maximum number of ungrouped layers","There's a disabled border in this Style":"There's a disabled border in this Style","Styles should not have disabled borders":"Styles should not have disabled borders","Depending on what you're creating, disabled properties may cause uncertainty within your team. Removing them can help.":"Depending on what you're creating, disabled properties may cause uncertainty within your team. Removing them can help.",'{maxIdentical, plural, =1 {Expected the color "{hex}" to only appear once, but found {count} usages. Consider a color variable instead} other {Expected the color "{hex}" to appear no more than # times, but found {count} usages. Consider a color variable instead}}':[["maxIdentical","plural",{1:['Expected the color "',["hex"],'" to only appear once, but found ',["count"]," usages. Consider a color variable instead"],other:['Expected the color "',["hex"],'" to appear no more than ',"#"," times, but found ",["count"]," usages. Consider a color variable instead"]}]],'{maxIdentical, plural, =1 {Expected the color "{hex}" with an alpha value of {alpha}% to only appear once, but found {count} usages. Consider a color variable instead} other {Expected the color "{hex}" with an alpha value of {alpha}% to appear no more than # times, but found {count} usages. Consider a color variable instead}}':[["maxIdentical","plural",{1:['Expected the color "',["hex"],'" with an alpha value of ',["alpha"],"% to only appear once, but found ",["count"]," usages. Consider a color variable instead"],other:['Expected the color "',["hex"],'" with an alpha value of ',["alpha"],"% to appear no more than ","#"," times, but found ",["count"]," usages. Consider a color variable instead"]}]],"{maxIdentical, plural, =0 {Colors should always use color variables} =1 {Identical colors should use color variables} other {More than # identical colors should use color variables}}":[["maxIdentical","plural",{0:"Colors should always use color variables",1:"Identical colors should use color variables",other:["More than ","#"," identical colors should use color variables"]}]],"You could simplify things by using color variables instead.":"You could simplify things by using color variables instead.","Max Identical":"Max Identical","The maximum allowed number of identical colors":"The maximum allowed number of identical colors","Debug all options":"Debug all options","Internal debug rule that defines examples of all available option schema types":"Internal debug rule that defines examples of all available option schema types","Number Option":"Number Option","A number option":"A number option","Integer Option":"Integer Option","An integer option":"An integer option","String Option":"String Option","A string option":"A string option","Default value":"Default value","Boolean Option":"Boolean Option","A boolean option":"A boolean option","String Enum Option":"String Enum Option","A string enum option":"A string enum option","String Array Option":"String Array Option","A string array option":"A string array option","Object Array Option":"Object Array Option","An object array option":"An object array option","Object Array Number Option":"Object Array Number Option","An object array number option":"An object array number option","Hello world":"Hello world","Debug internationalization":"Debug internationalization","Internal debug rule that generates a violation with a translated message":"Internal debug rule that generates a violation with a translated message","Debug throws error":"Debug throws error","Internal debug rule that always throws a rule error":"Internal debug rule that always throws a rule error","This rule waits 5 seconds after reporting this violation":"This rule waits 5 seconds after reporting this violation","Debug timeout":"Debug timeout","Internal debug rule that times-out":"Internal debug rule that times-out","This exportable layer has a blend mode. Try flattening it for more consistent results.":"This exportable layer has a blend mode. Try flattening it for more consistent results.","This exportable layer has blend modes. Try flattening them for more consistent results.":"This exportable layer has blend modes. Try flattening them for more consistent results.","Avoid blend modes on exportable layers":"Avoid blend modes on exportable layers","Blend mode effects depend on what's behind the layer, so exporting layers might not give you the results you want. Some teams might want to flag this to avoid mistakes.":"Blend mode effects depend on what's behind the layer, so exporting layers might not give you the results you want. Some teams might want to flag this to avoid mistakes.","There's a disabled fill in this Style":"There's a disabled fill in this Style","Styles should not have disabled fills":"Styles should not have disabled fills","{numLayers, plural, one {There is one layer in this group} other {There are # layers in this group}}":[["numLayers","plural",{one:"There is one layer in this group",other:["There are ","#"," layers in this group"]}]],"{maxLayers, plural, one {Groups should only have one layer} other {Groups should have no more than # layers}}":[["maxLayers","plural",{one:"Groups should only have one layer",other:["Groups should have no more than ","#"," layers"]}]],"Groups with large layer counts could be considered a document hygiene or usability concern by some teams who may wish to limit the count.":"Groups with large layer counts could be considered a document hygiene or usability concern by some teams who may wish to limit the count.","Maximum Layers":"Maximum Layers","Maximum layers in a group":"Maximum layers in a group","Skip Classes":"Skip Classes","An array of Sketch file class values for layers that should be skipped and not counted when calculating the number of child layers in a group":"An array of Sketch file class values for layers that should be skipped and not counted when calculating the number of child layers in a group","This group is empty":"This group is empty","Groups should not be empty":"Groups should not be empty","Remove empty groups to avoid document organization or usability issues.":"Remove empty groups to avoid document organization or usability issues.","This group is redundant":"This group is redundant","Groups should not be redundant":"Groups should not be redundant","Remove redundant groups to avoid document organization or usability issues. These are groups that aren't styled and only contain one layer.":"Remove redundant groups to avoid document organization or usability issues. These are groups that aren't styled and only contain one layer.","Group is similar to other groups: {identicalGroupNames}":["Group is similar to other groups: ",["identicalGroupNames"]],"{maxIdentical, plural, one {Similar groups should be a symbol} other {More than # similar groups should be a symbol}}":[["maxIdentical","plural",{one:"Similar groups should be a symbol",other:["More than ","#"," similar groups should be a symbol"]}]],"Don't allow groups that are too similar. Consider using a Symbol instead.":"Don't allow groups that are too similar. Consider using a Symbol instead.","The maximum number of identical groups allowed in the document":"The maximum number of identical groups allowed in the document","There's an oversized image in this layer. Images can't be more than {maxRatio}x bigger than the layer frame's width or height.":["There's an oversized image in this layer. Images can't be more than ",["maxRatio"],"x bigger than the layer frame's width or height."],"There's an oversized image in this layer style image fill. Images can't be more than {maxRatio}x bigger than the layer frame's width or height.":["There's an oversized image in this layer style image fill. Images can't be more than ",["maxRatio"],"x bigger than the layer frame's width or height."],"Images shouldn't be more than {maxRatio}x bigger than their frame":["Images shouldn't be more than ",["maxRatio"],"x bigger than their frame"],"Images that are bigger than they need to be swell the document size and could slow things down, so some teams might want to limit this.":"Images that are bigger than they need to be swell the document size and could slow things down, so some teams might want to limit this.","Maximum Ratio":"Maximum Ratio","How much larger an image can be than its frame and still be considered valid":"How much larger an image can be than its frame and still be considered valid","There's an undersized image in this layer. Images must fill at least {0}% of the layer frame's width or height.":["There's an undersized image in this layer. Images must fill at least ",["0"],"% of the layer frame's width or height."],"There's an undersized image in this Layer Style image fill. Images must fill at least {0}% of the layer frame's width or height.":["There's an undersized image in this Layer Style image fill. Images must fill at least ",["0"],"% of the layer frame's width or height."],"Images shouldn't be less than {minRatio}x bigger than their frame":["Images shouldn't be less than ",["minRatio"],"x bigger than their frame"],"Images that are smaller than their layer might result in low-quality exported assets, so some teams might want to limit this.":"Images that are smaller than their layer might result in low-quality exported assets, so some teams might want to limit this.","Minium Allowed Ratio":"Minium Allowed Ratio","How much smaller an image can be in relation to its frame and still be considered valid":"How much smaller an image can be in relation to its frame and still be considered valid","There's a disabled inner shadow in this Style":"There's a disabled inner shadow in this Style","Styles should not have disabled inner shadows":"Styles should not have disabled inner shadows","This Layers Style is different from its Shared Style":"This Layers Style is different from its Shared Style","Layers Styles should be the same as their Shared Style":"Layers Styles should be the same as their Shared Style","If your team wants to strictly use shared styles, you should either create a new shared style or set the layer styles to one of the existing styles.":"If your team wants to strictly use shared styles, you should either create a new shared style or set the layer styles to one of the existing styles.","{maxIdentical, plural, one {Expected no identical layer styles in the document, but found {numIdentical} matching this layer's style. Consider a shared style instead} other {Expected a maximum of # identical layer styles in the document, but found {numIdentical} instances of this layer's style. Consider a shared style instead}}":[["maxIdentical","plural",{one:["Expected no identical layer styles in the document, but found ",["numIdentical"]," matching this layer's style. Consider a shared style instead"],other:["Expected a maximum of ","#"," identical layer styles in the document, but found ",["numIdentical"]," instances of this layer's style. Consider a shared style instead"]}]],"{maxIdentical, plural, one {Layer Styles should not be identical} other {No more than # Layer Styles should be identical}}":[["maxIdentical","plural",{one:"Layer Styles should not be identical",other:["No more than ","#"," Layer Styles should be identical"]}]],"You could simplify things by removing identical shared styles and applying a single Style to all the affected layers.":"You could simplify things by removing identical shared styles and applying a single Style to all the affected layers.","The maximum allowed number of identical Layer Styles":"The maximum allowed number of identical Layer Styles","This layer is hidden":"This layer is hidden","There should be no hidden layers":"There should be no hidden layers","Hidden layers may cause uncertainty. Some teams may want to remove them.":"Hidden layers may cause uncertainty. Some teams may want to remove them.","This layer is not inside an Artboard":"This layer is not inside an Artboard","Layers should not be outside artboards":"Layers should not be outside artboards","Layers outside of Artboards aren't visible on Cloud, so some teams may want to keep all layers inside Artboards.":"Layers outside of Artboards aren't visible on Cloud, so some teams may want to keep all layers inside Artboards.","Unexpected sub-pixel positioning ({x}, {y})":["Unexpected sub-pixel positioning (",["x"],", ",["y"],")"],"Layers must be placed on {increments} sub-pixel increments":["Layers must be placed on ",["increments"]," sub-pixel increments"],"Some teams may consider layers place on sub-pixel values a document organization issue. The exception is if you're designing for devices with @2x and @3x pixel density. In this case, you can use 0.5 and 0.33/0.67 increments.":"Some teams may consider layers place on sub-pixel values a document organization issue. The exception is if you're designing for devices with @2x and @3x pixel density. In this case, you can use 0.5 and 0.33/0.67 increments.","Scale Factors":"Scale Factors","Choose the scale factors that the document supports. Accepted values are @1x, @2x and @3x, which allow whole pixel positions, 0.5 increments and 0.33 increments respectively":"Choose the scale factors that the document supports. Accepted values are @1x, @2x and @3x, which allow whole pixel positions, 0.5 increments and 0.33 increments respectively",'Symbol Style Override is using a Library Style from the library "{libraryName}". If using a Library Style it must come from one of the authorized libraries: {authorizedLibraries}':['Symbol Style Override is using a Library Style from the library "',["libraryName"],'". If using a Library Style it must come from one of the authorized libraries: ',["authorizedLibraries"]],'Layer is using a Library Style from the library "{libraryName}". If using a Library Style it must come from one of the authorized libraries: {authorizedLibraries}':['Layer is using a Library Style from the library "',["libraryName"],'". If using a Library Style it must come from one of the authorized libraries: ',["authorizedLibraries"]],"Library Layer Styles must come from the Libraries {authorizedLibraries}":["Library Layer Styles must come from the Libraries ",["authorizedLibraries"]],"When standardization is important teams may wish to enforce that Library Styles come from a list of authorized libraries.":"When standardization is important teams may wish to enforce that Library Styles come from a list of authorized libraries.","Authorized Libraries":"Authorized Libraries","Libraries that people can use. If someone uses a Library that isn't in this list, they'll see an error.":"Libraries that people can use. If someone uses a Library that isn't in this list, they'll see an error.",'Symbol Override is using a Library Symbol from the library "{libraryName}". If using a Library Symbol it must come from one of the authorized libraries: {authorizedLibraries}':['Symbol Override is using a Library Symbol from the library "',["libraryName"],'". If using a Library Symbol it must come from one of the authorized libraries: ',["authorizedLibraries"]],'Symbol is from the library "{libraryName}". If using a Library Symbol it must come from one of the authorized libraries: {authorizedLibraries}':['Symbol is from the library "',["libraryName"],'". If using a Library Symbol it must come from one of the authorized libraries: ',["authorizedLibraries"]],"Library Symbols must come from the Libraries {authorizedLibraries}":["Library Symbols must come from the Libraries ",["authorizedLibraries"]],"When standardization is important teams may wish to enforce that Library Symbols come from a list of authorized libraries.":"When standardization is important teams may wish to enforce that Library Symbols come from a list of authorized libraries.","Authorized libraries":"Authorized libraries","Libraries that are valid to use. An error is shown if a library that does not belong to this list is used.":"Libraries that are valid to use. An error is shown if a library that does not belong to this list is used.",'Symbol Text Style Override is using a Library Text Style from the library "{libraryName}". If using a Library Text Style it must come from one of the authorized libraries: {authorizedLibraries}':['Symbol Text Style Override is using a Library Text Style from the library "',["libraryName"],'". If using a Library Text Style it must come from one of the authorized libraries: ',["authorizedLibraries"]],'Layer is using a Library Text Style from the library "{libraryName}". If using a Library Text Style it must come from one of the authorized libraries: {authorizedLibraries}':['Layer is using a Library Text Style from the library "',["libraryName"],'". If using a Library Text Style it must come from one of the authorized libraries: ',["authorizedLibraries"]],"Library Text Styles must come from the Libraries {authorizedLibraries}":["Library Text Styles must come from the Libraries ",["authorizedLibraries"]],"When standardization is important teams may wish to enforce that Library Text Styles come from a list of authorized libraries.":"When standardization is important teams may wish to enforce that Library Text Styles come from a list of authorized libraries.","Artboard names should follow the conventions":"Artboard names should follow the conventions","Teams might want to enforce specific naming patterns when it's important that your layers are precisely named.":"Teams might want to enforce specific naming patterns when it's important that your layers are precisely named.","Allowable Patterns":"Allowable Patterns","A list of regular expressions that define which names are allowed":"A list of regular expressions that define which names are allowed","Forbidden Patterns":"Forbidden Patterns","A list of regular expressions that define which names are forbidden":"A list of regular expressions that define which names are forbidden","Group names should follow the conventions":"Group names should follow the conventions","Image names should follow the conventions":"Image names should follow the conventions","Page names should follow the conventions":"Page names should follow the conventions","Shape names should follow the conventions":"Shape names should follow the conventions","Symbol names should follow the conventions":"Symbol names should follow the conventions","Text names should follow the conventions":"Text names should follow the conventions",Messages:"Messages","Define a list of messages to check for":"Define a list of messages to check for","A range of messages to check for":"A range of messages to check for","There's a disabled shadow on this Layer Style":"There's a disabled shadow on this Layer Style","There's a disabled shadow on this Shared Style":"There's a disabled shadow on this Shared Style","Styles should not have disabled shadows":"Styles should not have disabled shadows","This shared style is unused":"This shared style is unused","All Shared Styles should be used":"All Shared Styles should be used","Some teams may consider unused Shared Styles a document organization issue.":"Some teams may consider unused Shared Styles a document organization issue.",'This group was detached from the symbol named "{symbolName}"':['This group was detached from the symbol named "',["symbolName"],'"'],"Symbols should not be detached":"Symbols should not be detached","Detached symbols could indicate an unwanted divergence from a style guide or library.":"Detached symbols could indicate an unwanted divergence from a style guide or library.","This symbol is unused":"This symbol is unused","All symbols should be in-use":"All symbols should be in-use","Some teams may consider unused symbols a document organization issue.":"Some teams may consider unused symbols a document organization issue.","This text style is different from its shared style":"This text style is different from its shared style","Text Styles should be the same as their Shared Styles":"Text Styles should be the same as their Shared Styles","If your team wants to strictly use shared text styles, you should either create a new shared style or set the text styles to one of the existing styles.":"If your team wants to strictly use shared text styles, you should either create a new shared style or set the text styles to one of the existing styles.","{maxIdentical, plural, one {Expected no identical text styles in the document, but found {numIdentical} matching this layer's text style. Consider a shared text style instead} other {Expected a maximum of # identical text styles in the document, but found {numIdentical} instances of this layer's text style. Consider a shared text style instead}}":[["maxIdentical","plural",{one:["Expected no identical text styles in the document, but found ",["numIdentical"]," matching this layer's text style. Consider a shared text style instead"],other:["Expected a maximum of ","#"," identical text styles in the document, but found ",["numIdentical"]," instances of this layer's text style. Consider a shared text style instead"]}]],"{maxIdentical, plural, one {Text styles should not be identical} other {No more than # text styles should be identical}}":[["maxIdentical","plural",{one:"Text styles should not be identical",other:["No more than ","#"," text styles should be identical"]}]],"You could simplify things by removing identical text styles and applying a single style to all affected text.":"You could simplify things by removing identical text styles and applying a single style to all affected text.","The maximum allowed number of identical text styles":"The maximum allowed number of identical text styles"}}},5065:e=>{"use strict";e.exports={messages:{"Layer name matches one of the forbidden patterns":"图层命名使用了一种禁用格式。","Layer name does not match any of the allowed patterns":"图层命名不符合任何一种可用格式。","Unexpected Artboard grid settings":"画板网格设置出现意外","Artboard grid settings should match the conventions":"画板网格设置应符合规范","Keep your specific grid settings consistent across a document, team or project.":"在文档,团队或项目中,使特定的网格设置始终保持一致。",Grids:"网格","List of valid grids":"有效网格列表","Grid Block Size":"网格模块尺寸","Grid block size in pixels":"基于像素的网格模块尺寸","Thick Lines Every":"粗线每隔","Number of blocks between thick grid lines":"网格粗线之间的模块数","Unexpected Artboard layout settings":"画板布局设置出现意外","Artboard layout settings should match the conventions":"画板布局设置应符合规范","Keep your specific layout settings consistent across a document, team or project.":"在文档,团队或项目中,使特定的布局设置始终保持一致。",Layouts:"布局","A list of valid layouts. Each object will use Sketch's Layout Settings options":"有效布局列表。相应对象将使用 Sketch 布局设置中的选项。","Draw Vertical":"垂直绘制","Enables drawing columns":"启用绘制列","Total Width":"总宽","Total width of layout":"布局总宽","Horizontal Offset":"水平偏置","Horizontal offset of layout":"布局水平偏置","Number of Columns":"列数","Number of columns in the layout":"布局列数","Gutters Outside":"外围间距","Draw gutters on the outside":"外侧描边","Gutter Width":"间距宽度","Gutter width in layout":"布局中的间距宽度","Column Width":"列宽","Layout column widths":"布局列宽","Draw Horizontal":"水平绘制","Enables drawing rows":"启用绘制行","Gutter Height":"间距高度","Layout gutter height":"布局间距高度","Row Height Multiplication":"行高复用","Draw Horizontal Lines":"绘制水平线","Draw all horizontal lines":"绘制垂直线","{nonGroupLayers, plural, one {There is one ungrouped layer within this Artboard} other {There are # ungrouped layers within this Artboard}}":[["nonGroupLayers","plural",{one:"这是画板中一个未被编组的图层",other:["该画板中有","#","个未被编组的图层"]}]],"{maxUngroupedLayers, plural, one {Artboards should only have one ungrouped layers} other {Artboards should have less than # ungrouped layers}}":[["maxUngroupedLayers","plural",{one:"只有一个图层未编组的画板",other:["画板中未编组的图层不应多于","#","个"]}]],"Grouping layers within your Artboards will help you stay organized.":"将画板中的图层编组,以保持规范有条理。","Maximum Ungrouped Layers":"至多未编组的图层","The maximum number of ungrouped layers":"未编组图层的最大数量","There's a disabled border in this Style":"该样式中包含一个禁用边框","Styles should not have disabled borders":"样式中不应包含禁用的边框","Depending on what you're creating, disabled properties may cause uncertainty within your team. Removing them can help.":"基于您所创建的内容,禁用的属性可能会导致不稳定。直接移除这些属性可能会比较好。",'{maxIdentical, plural, =1 {Expected the color "{hex}" to only appear once, but found {count} usages. Consider a color variable instead} other {Expected the color "{hex}" to appear no more than # times, but found {count} usages. Consider a color variable instead}}':[["maxIdentical","plural",{1:['颜色 "',["hex"],'" 应只出现一次,但实际发现了 ',["count"]," 个用例。考虑使用颜色变量"],other:['颜色 "',["hex"],'"出现不应超过 ',"#"," 次,但实际发现了 ",["count"]," 个用例。考虑使用颜色变量"]}]],'{maxIdentical, plural, =1 {Expected the color "{hex}" with an alpha value of {alpha}% to only appear once, but found {count} usages. Consider a color variable instead} other {Expected the color "{hex}" with an alpha value of {alpha}% to appear no more than # times, but found {count} usages. Consider a color variable instead}}':[["maxIdentical","plural",{1:["透明度为 ",["alpha"],'% 的颜色 "',["hex"],'" 应只出现一次,但实际发现了 ',["count"]," 个用例。考虑使用颜色变量"],other:["透明度为 ",["alpha"],'% 的颜色 "',["hex"],'" 出现不应超过 ',"#"," 次, 但实际发现 ",["count"]," 个用例。考虑使用颜色变量"]}]],"{maxIdentical, plural, =0 {Colors should always use color variables} =1 {Identical colors should use color variables} other {More than # identical colors should use color variables}}":[["maxIdentical","plural",{0:"颜色应始终使用颜色变量",1:"识别应使用颜色变量的颜色",other:["超过 ","#"," 个相同的颜色应使用颜色变量"]}]],"You could simplify things by using color variables instead.":"使用颜色变量能使您的工作变得更简单。","Max Identical":"最大相似度","The maximum allowed number of identical colors":"允许存在的雷同颜色的最大数量","Debug all options":"调试所有选项","Internal debug rule that defines examples of all available option schema types":"内部调试规则,用于定义所有可用模式选项的示例","Number Option":"数值选项","A number option":"数值选项","Integer Option":"整数选项","An integer option":"整数选项","String Option":"字符串选项","A string option":"字符串选项","Default value":"默认值","Boolean Option":"布尔选项","A boolean option":"布尔选项","String Enum Option":"字符枚举选项","A string enum option":"字符枚举选项","String Array Option":"字符数组选项","A string array option":"字符数组选项","Object Array Option":"对象数组选项","An object array option":"对象数组选项","Object Array Number Option":"对象数组数值选项","An object array number option":"对象数组数值选项","Hello world":"你好世界","Debug internationalization":"国际化调试","Internal debug rule that generates a violation with a translated message":"内部调试规则,与一条经过翻译的消息产生了冲突","Debug throws error":"调试抛出错误","Internal debug rule that always throws a rule error":"总是抛出规则错误的内部调试规则","This rule waits 5 seconds after reporting this violation":"该规则在报告违规后等待5秒","Debug timeout":"调试超时","Internal debug rule that times-out":"超时的内部调试规则","This exportable layer has a blend mode. Try flattening it for more consistent results.":"该可导出图层包含一个混合模式。尝试展平它以确保统一性。","This exportable layer has blend modes. Try flattening them for more consistent results.":"该可导出图层包含多个混合模式。尝试展平它们以确保统一性。","Avoid blend modes on exportable layers":"避免在可导出图层上使用混合模式","Blend mode effects depend on what's behind the layer, so exporting layers might not give you the results you want. Some teams might want to flag this to avoid mistakes.":"混合模式的效果取决于叠加的图层内容,因此实际导出的图层可能无法满足您的期望。有的团队可能会希望做下标记以避免失误。","There's a disabled fill in this Style":"该样式中包含一个禁用的填充项。","Styles should not have disabled fills":"样式中不应包含禁用的填充项","{numLayers, plural, one {There is one layer in this group} other {There are # layers in this group}}":[["numLayers","plural",{one:"编组中的一个图层",other:["该编组中有","#","个图层"]}]],"{maxLayers, plural, one {Groups should only have one layer} other {Groups should have no more than # layers}}":[["maxLayers","plural",{one:"编组中仅包含一个图层",other:["编组中包含至多 ","#"," 个图层"]}]],"Groups with large layer counts could be considered a document hygiene or usability concern by some teams who may wish to limit the count.":"一些编组包含的图层数量很大,有的团队可能会对此抱有文档规范性或可用性方面的顾虑。","Maximum Layers":"至多图层数","Maximum layers in a group":"编组中的至多图层数","Skip Classes":"跳过类名","An array of Sketch file class values for layers that should be skipped and not counted when calculating the number of child layers in a group":"一个 Sketch 文件的类名数组值,用以代表在统计编组中的子图层数量时,应被跳过的图层。","This group is empty":"该编组为空","Groups should not be empty":"不应存在为空的编组","Remove empty groups to avoid document organization or usability issues.":"移除为空的编组,以避免文档组织性或可用性问题。","This group is redundant":"这是一个多余的编组","Groups should not be redundant":"不应存在多余的编组","Remove redundant groups to avoid document organization or usability issues. These are groups that aren't styled and only contain one layer.":"移除多余的编组,以避免文档组织性或可用性问题。\n以下是只包含了一个图层且没有应用任何样式的编组。","Group is similar to other groups: {identicalGroupNames}":["相类似的编组: ",["identicalGroupNames"]],"{maxIdentical, plural, one {Similar groups should be a symbol} other {More than # similar groups should be a symbol}}":[["maxIdentical","plural",{one:"相似的编组应设为控件",other:["超过","#","个相似的编组应直接设为控件"]}]],"Don't allow groups that are too similar. Consider using a Symbol instead.":"尽量避免相似性太高的编组,做成控件可能更合适。","The maximum number of identical groups allowed in the document":"文档中允许存在的雷同编组的最大数量","There's an oversized image in this layer. Images can't be more than {maxRatio}x bigger than the layer frame's width or height.":["该图层中有一张图像尺寸过大。图像尺寸不应超过图层框架宽高的 ",["maxRatio"],"。"],"There's an oversized image in this layer style image fill. Images can't be more than {maxRatio}x bigger than the layer frame's width or height.":["该图层的图像填充中有一张图像尺寸过大。图像尺寸不应超过图层框架宽高的 ",["maxRatio"],"。"],"Images shouldn't be more than {maxRatio}x bigger than their frame":["图像尺寸不应超过框架的 ",["maxRatio"]],"Images that are bigger than they need to be swell the document size and could slow things down, so some teams might want to limit this.":"尺寸过大的图像会导致文档臃肿并拖慢速度,因此有的团队会对此做出限制。","Maximum Ratio":"最高比例","How much larger an image can be than its frame and still be considered valid":"图像较之其框架,可被视为有效的最大尺寸比例","There's an undersized image in this layer. Images must fill at least {0}% of the layer frame's width or height.":["该图层中有一张图像尺寸小。图像尺寸应至少满足图层框架宽高的 ",["0"],"%。"],"There's an undersized image in this Layer Style image fill. Images must fill at least {0}% of the layer frame's width or height.":["该图层的图像填充中有一张图像尺寸过小。图像尺寸至少应满足图层框架宽高的 ",["0"],"%。"],"Images shouldn't be less than {minRatio}x bigger than their frame":["图像尺寸不应小于框架的 ",["minRatio"]],"Images that are smaller than their layer might result in low-quality exported assets, so some teams might want to limit this.":"尺寸过小的图像作为素材导出后会显得模糊,因此有的团队会对此做出限制。","Minium Allowed Ratio":"最小允许比例","How much smaller an image can be in relation to its frame and still be considered valid":"图像较之其框架,可被视为有效的最小尺寸比例","There's a disabled inner shadow in this Style":"该样式中包含一个禁用的内阴影","Styles should not have disabled inner shadows":"样式中不应包含禁用的内阴影","This Layers Style is different from its Shared Style":"该图层样式与共享样式不同","Layers Styles should be the same as their Shared Style":"图层样式应与共享的样式保持一致","If your team wants to strictly use shared styles, you should either create a new shared style or set the layer styles to one of the existing styles.":"如果您所属的团队希望恪守共享样式的使用规范,建议您要么新建一个共享样式,要么直接使用已有的样式。","{maxIdentical, plural, one {Expected no identical layer styles in the document, but found {numIdentical} matching this layer's style. Consider a shared style instead} other {Expected a maximum of # identical layer styles in the document, but found {numIdentical} instances of this layer's style. Consider a shared style instead}}":[["maxIdentical","plural",{one:["期望文档中没有雷同的图层样式,实际发现",["numIdentical"],"个雷同样式,建议直接使用同一个图层样式"],other:["期望文档中雷同的图层样式至多为","#","个,实际发现",["numIdentical"],"个使用相同样式的实例,建议直接使用共享样式"]}]],"{maxIdentical, plural, one {Layer Styles should not be identical} other {No more than # Layer Styles should be identical}}":[["maxIdentical","plural",{one:"图层样式不可雷同",other:["不超过","#","个雷同的图层样式"]}]],"You could simplify things by removing identical shared styles and applying a single Style to all the affected layers.":"在相应图层上,移除雷同共享样式并替换成一个单一样式,可以让之后的工作更加简单。","The maximum allowed number of identical Layer Styles":"允许存在的雷同图层样式的最大数量","This layer is hidden":"该图层被隐藏了","There should be no hidden layers":"不应有隐藏的图层","Hidden layers may cause uncertainty. Some teams may want to remove them.":"隐藏图层可能会引发不确定性。有的团队可能希望希望将其移除。","This layer is not inside an Artboard":"该图层未被归到画板中","Layers should not be outside artboards":"图层不应处于画板之外","Layers outside of Artboards aren't visible on Cloud, so some teams may want to keep all layers inside Artboards.":"画板以外的图层在 Cloud 上是不可见的,因此有的团队会希望将所有图层都归到画板中。","Unexpected sub-pixel positioning ({x}, {y})":["出现意外的亚像素定位 (",["x"],", ",["y"],")"],"Layers must be placed on {increments} sub-pixel increments":["图层应置于",["increments"]," 的亚像素增量"],"Some teams may consider layers place on sub-pixel values a document organization issue. The exception is if you're designing for devices with @2x and @3x pixel density. In this case, you can use 0.5 and 0.33/0.67 increments.":"有的团队会将放置在亚像素位置上的图层视为文档的组织性问题。像素密度为 @2x 和 @3x 的设计除外,在这种情况下,您可以使用0.5或0.33/0.67的增量。","Scale Factors":"缩放条件","Choose the scale factors that the document supports. Accepted values are @1x, @2x and @3x, which allow whole pixel positions, 0.5 increments and 0.33 increments respectively":"选择文档支持的缩放条件。允许值为 @1x, @2x 和 @3x,具体为全像素,0.5的增量,以及0.33的增量",'Symbol Style Override is using a Library Style from the library "{libraryName}". If using a Library Style it must come from one of the authorized libraries: {authorizedLibraries}':['控件的样式覆盖层使用的是来自于 "',["libraryName"],'" 的组件库样式。使用此类样式时,需注意其来源必须为以下已授权的组件库: ',["authorizedLibraries"]],'Layer is using a Library Style from the library "{libraryName}". If using a Library Style it must come from one of the authorized libraries: {authorizedLibraries}':['图层使用的是来自于 "',["libraryName"],'" 的组件库样式。使用此类样式时,需注意其来源必须为以下已授权的组件库: ',["authorizedLibraries"]],"Library Layer Styles must come from the Libraries {authorizedLibraries}":["组件库图层样式必须归属于以下组件库 ",["authorizedLibraries"]],"When standardization is important teams may wish to enforce that Library Styles come from a list of authorized libraries.":"若以标准化为重,团队可能会强制要求,只能使用已授权组件库中的组件样式。","Authorized Libraries":"已授权的组件库","Libraries that people can use. If someone uses a Library that isn't in this list, they'll see an error.":"他人可使用的组件库。如果有人所使用的组件库不在当前的列表中,他们会有看到报错信息。",'Symbol Override is using a Library Symbol from the library "{libraryName}". If using a Library Symbol it must come from one of the authorized libraries: {authorizedLibraries}':['控件覆盖层使用的是来自于 "',["libraryName"],'" 的控件。使用此类控件时,需注意其来源必须为以下已授权的组件库: ',["authorizedLibraries"]],'Symbol is from the library "{libraryName}". If using a Library Symbol it must come from one of the authorized libraries: {authorizedLibraries}':['控件来自于 "',["libraryName"],'" 。使用此类控件时,需注意其来源必须为以下已授权的组件库: ',["authorizedLibraries"]],"Library Symbols must come from the Libraries {authorizedLibraries}":["控件必须归属于以下组件库: ",["authorizedLibraries"]],"When standardization is important teams may wish to enforce that Library Symbols come from a list of authorized libraries.":"若以标准化为重,团队可能会强制要求,只能使用已授权组件库中的控件。","Authorized libraries":"已授权的组件库","Libraries that are valid to use. An error is shown if a library that does not belong to this list is used.":"可供使用的组件库。如果使用了不在列表的组件库,会出现错误提示。",'Symbol Text Style Override is using a Library Text Style from the library "{libraryName}". If using a Library Text Style it must come from one of the authorized libraries: {authorizedLibraries}':['控件的字符样式覆盖层使用的是来自于 "',["libraryName"],'" 的字符样式。使用此类样式时,需注意其来源必须为以下已授权的组件库: ',["authorizedLibraries"]],'Layer is using a Library Text Style from the library "{libraryName}". If using a Library Text Style it must come from one of the authorized libraries: {authorizedLibraries}':['图层使用的是来自于 "',["libraryName"],'" 的字符样式。使用此类样式时,需注意其来源必须为以下已授权的组件库: ',["authorizedLibraries"]],"Library Text Styles must come from the Libraries {authorizedLibraries}":["组件库字符样式必须归属于以下组件库 ",["authorizedLibraries"]],"When standardization is important teams may wish to enforce that Library Text Styles come from a list of authorized libraries.":"若以标准化为重,团队可能会强制要求,只能使用已授权组件库中的字符样式。","Artboard names should follow the conventions":"画板命名应遵守规范","Teams might want to enforce specific naming patterns when it's important that your layers are precisely named.":"若有必要为图层精确命名,有些团队可能会强制执行特定的命名格式。","Allowable Patterns":"允许的格式","A list of regular expressions that define which names are allowed":"用于定义允许的命名范围的正则表达式清单","Forbidden Patterns":"禁用格式","A list of regular expressions that define which names are forbidden":"用于定义禁用的命名范围的正则表达式清单","Group names should follow the conventions":"编组命名应遵守规范","Image names should follow the conventions":"图像命名应遵守规范","Page names should follow the conventions":"页面命名应遵守规范","Shape names should follow the conventions":"形状命名应遵守规范","Symbol names should follow the conventions":"控件命名应遵守规范","Text names should follow the conventions":"字符命名应遵守规范",Messages:"消息","Define a list of messages to check for":"定义待核验的消息清单","A range of messages to check for":"一系列待核验的消息","There's a disabled shadow on this Layer Style":"该样式中包含一个禁用的投影","There's a disabled shadow on this Shared Style":"该共享样式中包含一个禁用的投影","Styles should not have disabled shadows":"样式中不应包含禁用的投影","This shared style is unused":"该共享样式不在用","All Shared Styles should be used":"所有共享样式都应在用","Some teams may consider unused Shared Styles a document organization issue.":"有的团队可能会将不在用的共享样式视为文档的组织性问题。",'This group was detached from the symbol named "{symbolName}"':['该编组是与控件分离而得的,原控件名为 "',["symbolName"],'"'],"Symbols should not be detached":"控件不应被解绑","Detached symbols could indicate an unwanted divergence from a style guide or library.":"有控件解绑,表明可能存在与样式规范或组件库之间存在不必要的分歧。","This symbol is unused":"该控件不在用","All symbols should be in-use":"所有控件都应在用","Some teams may consider unused symbols a document organization issue.":"有的团队可能会将不在用的控件视为文档的组织性问题。","This text style is different from its shared style":"该字符样式与共享样式不同","Text Styles should be the same as their Shared Styles":"字符样式应与共享的样式保持一致","If your team wants to strictly use shared text styles, you should either create a new shared style or set the text styles to one of the existing styles.":"如果您所属的团队希望恪守共享字符样式的使用规范,建议您要么新建一个共享样式,要么直接使用已有的字符样式。","{maxIdentical, plural, one {Expected no identical text styles in the document, but found {numIdentical} matching this layer's text style. Consider a shared text style instead} other {Expected a maximum of # identical text styles in the document, but found {numIdentical} instances of this layer's text style. Consider a shared text style instead}}":[["maxIdentical","plural",{one:["期望文档中没有雷同的字符样式,实际发现 ",["numIdentical"]," 个雷同样式,建议直接使用同一个字符样式"],other:["期望文档中雷同的字符样式至多为","#","个,实际发现 ",["numIdentical"]," 个使用相同样式的实例,建议直接使用共享的字符样式"]}]],"{maxIdentical, plural, one {Text styles should not be identical} other {No more than # text styles should be identical}}":[["maxIdentical","plural",{one:"字符样式不可雷同",other:["不超过","#","个雷同的字符样式"]}]],"You could simplify things by removing identical text styles and applying a single style to all affected text.":"在相应图层上,移除雷同的字符样式并替换成一个单一样式,可以让之后的工作更加简单。","The maximum allowed number of identical text styles":"允许存在的雷同字符样式的最大数量"}}},4255:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isChildOfClass=t.isCombinedShapeChildLayer=t.createImageProcessor=t.createNamePatternRuleFunction=void 0;var o=r(4710),a=(r(8770),r(398));t.createImageProcessor=e=>{const t=new Map,r=async(r,o,a,i)=>{const n={object:o,frame:a,type:i,imageMetadata:await e(r)};if(t.has(r)){const e=t.get(r);null==e||e.push(n)}else t.set(r,[n])},a=[];return{handleLayerImages(e){const{frame:t}=e;if("bitmap"===e._class&&e.image&&"MSJSONFileReference"===e.image._class&&a.push(r(e.image._ref,e,t,"bitmap")),"string"!==e.sharedStyleID&&e.style&&e.style.fills)for(const i of e.style.fills)i.fillType===o.FileFormat.FillType.Pattern&&i.image&&"MSJSONFileReference"===i.image._class&&a.push(r(i.image._ref,e,t,"fill"))},getResults:async()=>(await Promise.all(a),t)}},t.createNamePatternRuleFunction=(e,t)=>{function r(e){if(!Array.isArray(e))throw new Error("Option value is not an array");for(let t=0;t<e.length;t++)if("string"!=typeof e[t])throw new Error("Option array element is not a string")}return async o=>{const{utils:a}=o,i=a.getOption("allowed"),n=a.getOption("forbidden");r(i),r(n);const s=i.map((e=>new RegExp(e))),l=n.map((e=>new RegExp(e)));for(const r of t)for(const t of a.objects[r]){if(!("name"in t))continue;const r=0===s.length||s.map((e=>e.test(t.name))).includes(!0);l.map((e=>e.test(t.name))).includes(!0)?a.report(e._(e._("Layer name matches one of the forbidden patterns")),t):r||a.report(e._(e._("Layer name does not match any of the allowed patterns")),t)}}},t.isCombinedShapeChildLayer=(e,t)=>{const r=t.getObjectParents(e),i=r[r.length-2];return(0,a.isSketchFileObject)(i)&&i._class===o.FileFormat.ClassValue.ShapeGroup},t.isChildOfClass=(e,t,r)=>[...r.getObjectParents(e).filter(a.isSketchFileObject).map((e=>e._class)),e._class].includes(t)},6657:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.createRule=void 0,r(8770),t.createRule=e=>({rule:async t=>{const{utils:r}=t,o=[],a=r.getOption("grids");if(!Array.isArray(a)||0===a.length)return;const i=[];for(let e=0;e<a.length;e++){const t=a[e];if("object"!=typeof t)continue;const{gridBlockSize:r,thickLinesEvery:o}=t;"number"==typeof r&&"number"==typeof o&&i.push({gridBlockSize:r,thickLinesEvery:o})}for(const e of r.objects.artboard){const{grid:t}=e;t?i.map((e=>t.gridSize===e.gridBlockSize&&t.thickGridTimes===e.thickLinesEvery)).includes(!0)||o.push(e):o.push(e)}o.forEach((t=>{r.report(e._(e._("Unexpected Artboard grid settings")),t)}))},name:"artboards-grid",title:e._(e._("Artboard grid settings should match the conventions")),description:e._(e._("Keep your specific grid settings consistent across a document, team or project.")),getOptions:t=>[t.objectArrayOption({name:"grids",title:e._(e._("Grids")),description:e._(e._("List of valid grids")),props:[t.integerOption({name:"gridBlockSize",title:e._(e._("Grid Block Size")),description:e._(e._("Grid block size in pixels"))}),t.integerOption({name:"thickLinesEvery",title:e._(e._("Thick Lines Every")),description:e._(e._("Number of blocks between thick grid lines"))})]})]})},4816:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.createRule=void 0,r(8770),t.createRule=e=>({rule:async t=>{const{utils:r}=t,o=[],a=r.getOption("layouts");if(!Array.isArray(a)||0===a.length)return;const i=[];for(let e=0;e<a.length;e++){const t=a[e];if("object"!=typeof t)continue;const r={drawVertical:!!t.drawVertical,drawHorizontal:!!t.drawHorizontal},{gutterWidth:o,columnWidth:n,guttersOutside:s,horizontalOffset:l,numberOfColumns:u,totalWidth:d}=t;r.drawVertical&&"number"==typeof o&&"number"==typeof n&&"boolean"==typeof s&&"number"==typeof l&&"number"==typeof u&&"number"==typeof d&&(r.columns={gutterWidth:o,columnWidth:n,guttersOutside:s,horizontalOffset:l,numberOfColumns:u,totalWidth:d});const{gutterHeight:c,rowHeightMultiplication:h,drawHorizontalLines:m}=t;r.drawHorizontal&&"number"==typeof c&&"number"==typeof h&&"boolean"==typeof m&&(r.rows={gutterHeight:c,rowHeightMultiplication:h,drawHorizontalLines:m}),i.push(r)}for(const e of r.objects.artboard){const{layout:t}=e;if(!t||!t.isEnabled){o.push(e);continue}const r=i.map((e=>!1===e.drawVertical||"object"==typeof e.