mirror of
https://github.com/penpot/penpot.git
synced 2025-02-13 10:38:13 -05:00
Merge pull request #337 from uxbox/327/shadow_filters
327/shadow filters
This commit is contained in:
commit
f78bd11cec
21 changed files with 680 additions and 155 deletions
|
@ -18,7 +18,7 @@
|
|||
}
|
||||
},
|
||||
"auth.create-demo-profile" : {
|
||||
"used-in" : [ "src/app/main/ui/auth/register.cljs:123", "src/app/main/ui/auth/login.cljs:135" ],
|
||||
"used-in" : [ "src/app/main/ui/auth/login.cljs:135", "src/app/main/ui/auth/register.cljs:123" ],
|
||||
"translations" : {
|
||||
"en" : "Create demo account",
|
||||
"fr" : "Créer un compte de démonstration",
|
||||
|
@ -27,7 +27,7 @@
|
|||
}
|
||||
},
|
||||
"auth.create-demo-profile-label" : {
|
||||
"used-in" : [ "src/app/main/ui/auth/register.cljs:120", "src/app/main/ui/auth/login.cljs:132" ],
|
||||
"used-in" : [ "src/app/main/ui/auth/login.cljs:132", "src/app/main/ui/auth/register.cljs:120" ],
|
||||
"translations" : {
|
||||
"en" : "Just wanna try it?",
|
||||
"fr" : "Vous voulez juste essayer?",
|
||||
|
@ -45,7 +45,7 @@
|
|||
}
|
||||
},
|
||||
"auth.email-label" : {
|
||||
"used-in" : [ "src/app/main/ui/auth/register.cljs:89", "src/app/main/ui/auth/recovery_request.cljs:45", "src/app/main/ui/auth/login.cljs:81" ],
|
||||
"used-in" : [ "src/app/main/ui/auth/login.cljs:81", "src/app/main/ui/auth/register.cljs:89", "src/app/main/ui/auth/recovery_request.cljs:45" ],
|
||||
"translations" : {
|
||||
"en" : "Email",
|
||||
"fr" : "Adresse email",
|
||||
|
@ -186,7 +186,7 @@
|
|||
}
|
||||
},
|
||||
"auth.password-label" : {
|
||||
"used-in" : [ "src/app/main/ui/auth/register.cljs:93", "src/app/main/ui/auth/login.cljs:87" ],
|
||||
"used-in" : [ "src/app/main/ui/auth/login.cljs:87", "src/app/main/ui/auth/register.cljs:93" ],
|
||||
"translations" : {
|
||||
"en" : "Password",
|
||||
"fr" : "Mot de passe",
|
||||
|
@ -294,7 +294,7 @@
|
|||
}
|
||||
},
|
||||
"dashboard.grid.add-shared" : {
|
||||
"used-in" : [ "src/app/main/ui/dashboard/grid.cljs:165", "src/app/main/ui/workspace/header.cljs:175" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:210", "src/app/main/ui/dashboard/grid.cljs:165" ],
|
||||
"translations" : {
|
||||
"en" : "Add as Shared Library",
|
||||
"fr" : "",
|
||||
|
@ -303,7 +303,7 @@
|
|||
}
|
||||
},
|
||||
"dashboard.grid.add-shared-accept" : {
|
||||
"used-in" : [ "src/app/main/ui/dashboard/grid.cljs:94", "src/app/main/ui/workspace/header.cljs:98" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:104", "src/app/main/ui/dashboard/grid.cljs:94" ],
|
||||
"translations" : {
|
||||
"en" : "Add as Shared Library",
|
||||
"fr" : "",
|
||||
|
@ -312,7 +312,7 @@
|
|||
}
|
||||
},
|
||||
"dashboard.grid.add-shared-hint" : {
|
||||
"used-in" : [ "src/app/main/ui/dashboard/grid.cljs:93", "src/app/main/ui/workspace/header.cljs:97" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:103", "src/app/main/ui/dashboard/grid.cljs:93" ],
|
||||
"translations" : {
|
||||
"en" : "Once added as Shared Library, the assets of this file library will be available to be used among the rest of your files.",
|
||||
"fr" : "",
|
||||
|
@ -321,7 +321,7 @@
|
|||
}
|
||||
},
|
||||
"dashboard.grid.add-shared-message" : {
|
||||
"used-in" : [ "src/app/main/ui/dashboard/grid.cljs:92", "src/app/main/ui/workspace/header.cljs:96" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:102", "src/app/main/ui/dashboard/grid.cljs:92" ],
|
||||
"translations" : {
|
||||
"en" : "Add “%s” as Shared Library",
|
||||
"fr" : "",
|
||||
|
@ -348,7 +348,7 @@
|
|||
}
|
||||
},
|
||||
"dashboard.grid.remove-shared" : {
|
||||
"used-in" : [ "src/app/main/ui/dashboard/grid.cljs:164", "src/app/main/ui/workspace/header.cljs:173" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:208", "src/app/main/ui/dashboard/grid.cljs:164" ],
|
||||
"translations" : {
|
||||
"en" : "Remove as Shared Library",
|
||||
"fr" : "",
|
||||
|
@ -357,7 +357,7 @@
|
|||
}
|
||||
},
|
||||
"dashboard.grid.remove-shared-accept" : {
|
||||
"used-in" : [ "src/app/main/ui/dashboard/grid.cljs:113", "src/app/main/ui/workspace/header.cljs:107" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:113", "src/app/main/ui/dashboard/grid.cljs:113" ],
|
||||
"translations" : {
|
||||
"en" : "Remove as Shared Library",
|
||||
"fr" : "",
|
||||
|
@ -366,7 +366,7 @@
|
|||
}
|
||||
},
|
||||
"dashboard.grid.remove-shared-hint" : {
|
||||
"used-in" : [ "src/app/main/ui/dashboard/grid.cljs:112", "src/app/main/ui/workspace/header.cljs:106" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:112", "src/app/main/ui/dashboard/grid.cljs:112" ],
|
||||
"translations" : {
|
||||
"en" : "Once removed as Shared Library, the File Library of this file will stop being available to be used among the rest of your files.",
|
||||
"fr" : "",
|
||||
|
@ -375,7 +375,7 @@
|
|||
}
|
||||
},
|
||||
"dashboard.grid.remove-shared-message" : {
|
||||
"used-in" : [ "src/app/main/ui/dashboard/grid.cljs:111", "src/app/main/ui/workspace/header.cljs:105" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:111", "src/app/main/ui/dashboard/grid.cljs:111" ],
|
||||
"translations" : {
|
||||
"en" : "Remove “%s” as Shared Library",
|
||||
"fr" : "",
|
||||
|
@ -789,7 +789,7 @@
|
|||
}
|
||||
},
|
||||
"errors.media-type-mismatch" : {
|
||||
"used-in" : [ "src/app/main/data/workspace/persistence.cljs:413", "src/app/main/data/media.cljs:61" ],
|
||||
"used-in" : [ "src/app/main/data/media.cljs:61", "src/app/main/data/workspace/persistence.cljs:413" ],
|
||||
"translations" : {
|
||||
"en" : "Seems that the contents of the image does not match the file extension.",
|
||||
"fr" : "",
|
||||
|
@ -798,7 +798,7 @@
|
|||
}
|
||||
},
|
||||
"errors.media-type-not-allowed" : {
|
||||
"used-in" : [ "src/app/main/data/workspace/persistence.cljs:410", "src/app/main/data/media.cljs:58" ],
|
||||
"used-in" : [ "src/app/main/data/media.cljs:58", "src/app/main/data/workspace/persistence.cljs:410" ],
|
||||
"translations" : {
|
||||
"en" : "Seems that this is not a valid image.",
|
||||
"fr" : "",
|
||||
|
@ -843,7 +843,7 @@
|
|||
}
|
||||
},
|
||||
"errors.unexpected-error" : {
|
||||
"used-in" : [ "src/app/main/data/media.cljs:64", "src/app/main/ui/settings/change_email.cljs:50", "src/app/main/ui/workspace/sidebar/options/exports.cljs:66", "src/app/main/ui/auth/register.cljs:54" ],
|
||||
"used-in" : [ "src/app/main/data/media.cljs:64", "src/app/main/ui/settings/change_email.cljs:50", "src/app/main/ui/auth/register.cljs:54", "src/app/main/ui/workspace/sidebar/options/exports.cljs:66" ],
|
||||
"translations" : {
|
||||
"en" : "An unexpected error occurred.",
|
||||
"fr" : "Une erreur inattendue c'est produite",
|
||||
|
@ -870,7 +870,7 @@
|
|||
}
|
||||
},
|
||||
"header.sitemap" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:113" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:135" ],
|
||||
"translations" : {
|
||||
"en" : "Sitemap",
|
||||
"fr" : null,
|
||||
|
@ -888,7 +888,7 @@
|
|||
"unused" : true
|
||||
},
|
||||
"media.loading" : {
|
||||
"used-in" : [ "src/app/main/data/workspace/persistence.cljs:395", "src/app/main/data/media.cljs:43" ],
|
||||
"used-in" : [ "src/app/main/data/media.cljs:43", "src/app/main/data/workspace/persistence.cljs:395" ],
|
||||
"translations" : {
|
||||
"en" : "Loading image...",
|
||||
"fr" : "Chargement de l'image...",
|
||||
|
@ -1059,7 +1059,7 @@
|
|||
}
|
||||
},
|
||||
"settings.multiple" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/stroke.cljs:156", "src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:138", "src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:147", "src/app/main/ui/workspace/sidebar/options/text.cljs:123", "src/app/main/ui/workspace/sidebar/options/text.cljs:213", "src/app/main/ui/workspace/sidebar/options/text.cljs:226" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:138", "src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:147", "src/app/main/ui/workspace/sidebar/options/text.cljs:124", "src/app/main/ui/workspace/sidebar/options/text.cljs:219", "src/app/main/ui/workspace/sidebar/options/text.cljs:232", "src/app/main/ui/workspace/sidebar/options/stroke.cljs:156" ],
|
||||
"translations" : {
|
||||
"en" : "Mixed",
|
||||
"fr" : null,
|
||||
|
@ -1185,7 +1185,7 @@
|
|||
}
|
||||
},
|
||||
"settings.profile-submit-label" : {
|
||||
"used-in" : [ "src/app/main/ui/settings/password.cljs:93", "src/app/main/ui/settings/options.cljs:67", "src/app/main/ui/settings/profile.cljs:91" ],
|
||||
"used-in" : [ "src/app/main/ui/settings/options.cljs:67", "src/app/main/ui/settings/profile.cljs:91", "src/app/main/ui/settings/password.cljs:93" ],
|
||||
"translations" : {
|
||||
"en" : "Update settings",
|
||||
"fr" : "Mettre à jour les paramètres",
|
||||
|
@ -1581,7 +1581,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.header.menu.disable-dynamic-alignment" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:167" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:202" ],
|
||||
"translations" : {
|
||||
"en" : "Disable dynamic alignment",
|
||||
"fr" : "Désactiver l'alignement dynamique",
|
||||
|
@ -1590,7 +1590,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.header.menu.disable-snap-grid" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:139" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:174" ],
|
||||
"translations" : {
|
||||
"en" : "Disable snap to grid",
|
||||
"fr" : "Désactiver l'alignement sur la grille",
|
||||
|
@ -1599,7 +1599,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.header.menu.enable-dynamic-alignment" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:168" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:203" ],
|
||||
"translations" : {
|
||||
"en" : "Enable dynamic aligment",
|
||||
"fr" : "Activer l'alignement dynamique",
|
||||
|
@ -1608,7 +1608,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.header.menu.enable-snap-grid" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:140" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:175" ],
|
||||
"translations" : {
|
||||
"en" : "Snap to grid",
|
||||
"fr" : "Aligner sur la grille",
|
||||
|
@ -1617,7 +1617,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.header.menu.hide-assets" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:160" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:195" ],
|
||||
"translations" : {
|
||||
"en" : "Hide assets",
|
||||
"fr" : "",
|
||||
|
@ -1626,7 +1626,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.header.menu.hide-grid" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:132" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:167" ],
|
||||
"translations" : {
|
||||
"en" : "Hide grids",
|
||||
"fr" : "Masquer la grille",
|
||||
|
@ -1635,7 +1635,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.header.menu.hide-layers" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:146" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:181" ],
|
||||
"translations" : {
|
||||
"en" : "Hide layers",
|
||||
"fr" : "Masquer les couches",
|
||||
|
@ -1644,7 +1644,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.header.menu.hide-palette" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:153" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:188" ],
|
||||
"translations" : {
|
||||
"en" : "Hide color palette",
|
||||
"fr" : "Masquer la palette de couleurs",
|
||||
|
@ -1653,7 +1653,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.header.menu.hide-rules" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:125" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:160" ],
|
||||
"translations" : {
|
||||
"en" : "Hide rules",
|
||||
"fr" : "Masquer les règles",
|
||||
|
@ -1662,7 +1662,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.header.menu.show-assets" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:161" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:196" ],
|
||||
"translations" : {
|
||||
"en" : "Show assets",
|
||||
"fr" : "",
|
||||
|
@ -1671,7 +1671,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.header.menu.show-grid" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:133" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:168" ],
|
||||
"translations" : {
|
||||
"en" : "Show grid",
|
||||
"fr" : "Montrer la grille",
|
||||
|
@ -1680,7 +1680,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.header.menu.show-layers" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:147" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:182" ],
|
||||
"translations" : {
|
||||
"en" : "Show layers",
|
||||
"fr" : "Montrer les couches",
|
||||
|
@ -1689,7 +1689,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.header.menu.show-palette" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:154" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:189" ],
|
||||
"translations" : {
|
||||
"en" : "Show color palette",
|
||||
"fr" : "Montrer la palette de couleurs",
|
||||
|
@ -1698,7 +1698,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.header.menu.show-rules" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:126" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:161" ],
|
||||
"translations" : {
|
||||
"en" : "Show rules",
|
||||
"fr" : "Montrer les règles",
|
||||
|
@ -1707,31 +1707,31 @@
|
|||
}
|
||||
},
|
||||
"workspace.header.save-error" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:56" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:58" ],
|
||||
"translations" : {
|
||||
"en" : "Error on saving"
|
||||
}
|
||||
},
|
||||
"workspace.header.saved" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:51" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:53" ],
|
||||
"translations" : {
|
||||
"en" : "Saved"
|
||||
}
|
||||
},
|
||||
"workspace.header.saving" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:46" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:48" ],
|
||||
"translations" : {
|
||||
"en" : "Saving"
|
||||
}
|
||||
},
|
||||
"workspace.header.unsaved" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:41" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:43" ],
|
||||
"translations" : {
|
||||
"en" : "Unsaved changes"
|
||||
}
|
||||
},
|
||||
"workspace.header.viewer" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:213" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/header.cljs:249" ],
|
||||
"translations" : {
|
||||
"en" : "View mode (Ctrl + P)",
|
||||
"fr" : "Mode visualisation (Ctrl + P)",
|
||||
|
@ -1764,19 +1764,19 @@
|
|||
}
|
||||
},
|
||||
"workspace.libraries.colors.file-library" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/colorpalette.cljs:150", "src/app/main/ui/workspace/colorpicker.cljs:337" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/colorpicker.cljs:338", "src/app/main/ui/workspace/colorpalette.cljs:150" ],
|
||||
"translations" : {
|
||||
"en" : "File library"
|
||||
}
|
||||
},
|
||||
"workspace.libraries.colors.recent-colors" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/colorpalette.cljs:160", "src/app/main/ui/workspace/colorpicker.cljs:336" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/colorpicker.cljs:337", "src/app/main/ui/workspace/colorpalette.cljs:160" ],
|
||||
"translations" : {
|
||||
"en" : "Recent colors"
|
||||
}
|
||||
},
|
||||
"workspace.libraries.colors.save-color" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/colorpicker.cljs:372" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/colorpicker.cljs:373" ],
|
||||
"translations" : {
|
||||
"en" : "Save color"
|
||||
}
|
||||
|
@ -2016,7 +2016,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.grid.auto" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:44" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:35" ],
|
||||
"translations" : {
|
||||
"en" : "Auto",
|
||||
"fr" : "Automatique",
|
||||
|
@ -2025,7 +2025,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.grid.column" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:138" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:129" ],
|
||||
"translations" : {
|
||||
"en" : "Columns",
|
||||
"fr" : "Colonnes",
|
||||
|
@ -2034,7 +2034,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.grid.params.columns" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:179" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:170" ],
|
||||
"translations" : {
|
||||
"en" : "Columns",
|
||||
"fr" : "Colonnes",
|
||||
|
@ -2043,7 +2043,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.grid.params.gutter" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:212" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:203" ],
|
||||
"translations" : {
|
||||
"en" : "Gutter",
|
||||
"fr" : "Gouttière",
|
||||
|
@ -2052,7 +2052,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.grid.params.height" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:203" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:194" ],
|
||||
"translations" : {
|
||||
"en" : "Height",
|
||||
"fr" : "Hauteur",
|
||||
|
@ -2061,7 +2061,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.grid.params.margin" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:218" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:209" ],
|
||||
"translations" : {
|
||||
"en" : "Margin",
|
||||
"fr" : "Marge",
|
||||
|
@ -2070,7 +2070,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.grid.params.rows" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:170" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:161" ],
|
||||
"translations" : {
|
||||
"en" : "Rows",
|
||||
"fr" : "Lignes",
|
||||
|
@ -2079,7 +2079,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.grid.params.set-default" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:231" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:222" ],
|
||||
"translations" : {
|
||||
"en" : "Set as default",
|
||||
"fr" : "Définir par défaut",
|
||||
|
@ -2088,7 +2088,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.grid.params.size" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:163" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:154" ],
|
||||
"translations" : {
|
||||
"en" : "Size",
|
||||
"fr" : "Taille",
|
||||
|
@ -2097,7 +2097,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.grid.params.type" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:188" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:179" ],
|
||||
"translations" : {
|
||||
"en" : "Type",
|
||||
"fr" : "Type",
|
||||
|
@ -2106,7 +2106,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.grid.params.type.bottom" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:196" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:187" ],
|
||||
"translations" : {
|
||||
"en" : "Bottom",
|
||||
"fr" : "Bas",
|
||||
|
@ -2115,7 +2115,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.grid.params.type.center" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:194" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:185" ],
|
||||
"translations" : {
|
||||
"en" : "Center",
|
||||
"fr" : "Centre",
|
||||
|
@ -2124,7 +2124,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.grid.params.type.left" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:193" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:184" ],
|
||||
"translations" : {
|
||||
"en" : "Left",
|
||||
"fr" : "Gauche",
|
||||
|
@ -2133,7 +2133,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.grid.params.type.right" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:197" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:188" ],
|
||||
"translations" : {
|
||||
"en" : "Right",
|
||||
"fr" : "Droite",
|
||||
|
@ -2142,7 +2142,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.grid.params.type.stretch" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:190" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:181" ],
|
||||
"translations" : {
|
||||
"en" : "Stretch",
|
||||
"fr" : "Étirer",
|
||||
|
@ -2151,7 +2151,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.grid.params.type.top" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:192" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:183" ],
|
||||
"translations" : {
|
||||
"en" : "Top",
|
||||
"fr" : "Haut",
|
||||
|
@ -2160,7 +2160,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.grid.params.use-default" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:229" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:220" ],
|
||||
"translations" : {
|
||||
"en" : "Use default",
|
||||
"fr" : "Utiliser la valeur par défaut",
|
||||
|
@ -2169,7 +2169,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.grid.params.width" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:204" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:195" ],
|
||||
"translations" : {
|
||||
"en" : "Width",
|
||||
"fr" : "Largeur",
|
||||
|
@ -2178,7 +2178,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.grid.row" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:139" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:130" ],
|
||||
"translations" : {
|
||||
"en" : "Rows",
|
||||
"fr" : "Lignes",
|
||||
|
@ -2187,7 +2187,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.grid.square" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:137" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:128" ],
|
||||
"translations" : {
|
||||
"en" : "Square",
|
||||
"fr" : "Carré",
|
||||
|
@ -2196,7 +2196,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.grid.title" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:243" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame_grid.cljs:234" ],
|
||||
"translations" : {
|
||||
"en" : "Grid & Layouts",
|
||||
"fr" : "Grille & couches",
|
||||
|
@ -2241,7 +2241,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.position" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/measures.cljs:146", "src/app/main/ui/workspace/sidebar/options/frame.cljs:125" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame.cljs:126", "src/app/main/ui/workspace/sidebar/options/measures.cljs:146" ],
|
||||
"translations" : {
|
||||
"en" : "Position",
|
||||
"fr" : "Position",
|
||||
|
@ -2312,8 +2312,50 @@
|
|||
"es" : "Borde de selección"
|
||||
}
|
||||
},
|
||||
"workspace.options.shadow-options.blur" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/shadow.cljs:163" ],
|
||||
"translations" : {
|
||||
"en" : "Blur"
|
||||
}
|
||||
},
|
||||
"workspace.options.shadow-options.drop-shadow" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/shadow.cljs:129" ],
|
||||
"translations" : {
|
||||
"en" : "Drop shadow"
|
||||
}
|
||||
},
|
||||
"workspace.options.shadow-options.inner-shadow" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/shadow.cljs:130" ],
|
||||
"translations" : {
|
||||
"en" : "Inner shadow"
|
||||
}
|
||||
},
|
||||
"workspace.options.shadow-options.offsetx" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/shadow.cljs:141" ],
|
||||
"translations" : {
|
||||
"en" : "X"
|
||||
}
|
||||
},
|
||||
"workspace.options.shadow-options.offsety" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/shadow.cljs:151" ],
|
||||
"translations" : {
|
||||
"en" : "Y"
|
||||
}
|
||||
},
|
||||
"workspace.options.shadow-options.spread" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/shadow.cljs:174" ],
|
||||
"translations" : {
|
||||
"en" : "Spread"
|
||||
}
|
||||
},
|
||||
"workspace.options.shadow-options.title" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/shadow.cljs:190" ],
|
||||
"translations" : {
|
||||
"en" : "Shadow"
|
||||
}
|
||||
},
|
||||
"workspace.options.size" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/measures.cljs:116", "src/app/main/ui/workspace/sidebar/options/frame.cljs:98" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame.cljs:99", "src/app/main/ui/workspace/sidebar/options/measures.cljs:116" ],
|
||||
"translations" : {
|
||||
"en" : "Size",
|
||||
"fr" : "Taille",
|
||||
|
@ -2322,7 +2364,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.size-presets" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame.cljs:80" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/frame.cljs:81" ],
|
||||
"translations" : {
|
||||
"en" : "Size presets",
|
||||
"fr" : "Tailles prédéfinies",
|
||||
|
@ -2412,7 +2454,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.text-options.align-center" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:169" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:175" ],
|
||||
"translations" : {
|
||||
"en" : "Align center",
|
||||
"fr" : "Aligner au centre",
|
||||
|
@ -2421,7 +2463,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.text-options.align-justify" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:179" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:185" ],
|
||||
"translations" : {
|
||||
"en" : "Justify",
|
||||
"fr" : "Justifier",
|
||||
|
@ -2430,7 +2472,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.text-options.align-left" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:164" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:170" ],
|
||||
"translations" : {
|
||||
"en" : "Align left",
|
||||
"fr" : "Aligner à gauche",
|
||||
|
@ -2448,7 +2490,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.text-options.align-right" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:174" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:180" ],
|
||||
"translations" : {
|
||||
"en" : "Align right",
|
||||
"fr" : "Aligner à droite",
|
||||
|
@ -2466,7 +2508,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.text-options.decoration" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:289" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:306" ],
|
||||
"translations" : {
|
||||
"en" : "Decoration",
|
||||
"fr" : "Décoration",
|
||||
|
@ -2474,8 +2516,26 @@
|
|||
"es" : "Decoración"
|
||||
}
|
||||
},
|
||||
"workspace.options.text-options.grow-auto-height" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:287" ],
|
||||
"translations" : {
|
||||
"en" : "Auto height"
|
||||
}
|
||||
},
|
||||
"workspace.options.text-options.grow-auto-width" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:282" ],
|
||||
"translations" : {
|
||||
"en" : "Auto width"
|
||||
}
|
||||
},
|
||||
"workspace.options.text-options.grow-fixed" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:277" ],
|
||||
"translations" : {
|
||||
"en" : "Fixed"
|
||||
}
|
||||
},
|
||||
"workspace.options.text-options.letter-spacing" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:218" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:224" ],
|
||||
"translations" : {
|
||||
"en" : "Letter Spacing",
|
||||
"fr" : "Espacement de caractères",
|
||||
|
@ -2484,7 +2544,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.text-options.line-height" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:205" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:211" ],
|
||||
"translations" : {
|
||||
"en" : "Line height",
|
||||
"fr" : "Hauteur de ligne",
|
||||
|
@ -2493,7 +2553,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.text-options.lowercase" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:336" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:353" ],
|
||||
"translations" : {
|
||||
"en" : "Lowercase",
|
||||
"fr" : "Minuscule",
|
||||
|
@ -2502,7 +2562,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.text-options.none" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:292", "src/app/main/ui/workspace/sidebar/options/text.cljs:326" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:309", "src/app/main/ui/workspace/sidebar/options/text.cljs:343" ],
|
||||
"translations" : {
|
||||
"en" : "None",
|
||||
"fr" : "Aucune",
|
||||
|
@ -2511,7 +2571,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.text-options.strikethrough" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:304" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:321" ],
|
||||
"translations" : {
|
||||
"en" : "Strikethrough",
|
||||
"fr" : "Barré",
|
||||
|
@ -2520,7 +2580,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.text-options.text-case" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:323" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:340" ],
|
||||
"translations" : {
|
||||
"en" : "Case",
|
||||
"fr" : "Casse",
|
||||
|
@ -2529,7 +2589,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.text-options.title" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:361" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:379" ],
|
||||
"translations" : {
|
||||
"en" : "Text",
|
||||
"fr" : "Texte",
|
||||
|
@ -2538,7 +2598,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.text-options.title-group" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:360" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:378" ],
|
||||
"translations" : {
|
||||
"en" : "Group text",
|
||||
"ru" : "Текст группы",
|
||||
|
@ -2546,7 +2606,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.text-options.title-selection" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:359" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:377" ],
|
||||
"translations" : {
|
||||
"en" : "Selection text",
|
||||
"ru" : "Выбранный текст",
|
||||
|
@ -2554,7 +2614,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.text-options.titlecase" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:341" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:358" ],
|
||||
"translations" : {
|
||||
"en" : "Titlecase",
|
||||
"fr" : "Titre",
|
||||
|
@ -2563,7 +2623,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.text-options.underline" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:298" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:315" ],
|
||||
"translations" : {
|
||||
"en" : "Underline",
|
||||
"fr" : "Souligner",
|
||||
|
@ -2572,7 +2632,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.text-options.uppercase" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:331" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:348" ],
|
||||
"translations" : {
|
||||
"en" : "Uppercase",
|
||||
"fr" : "Majuscule",
|
||||
|
@ -2581,13 +2641,13 @@
|
|||
}
|
||||
},
|
||||
"workspace.options.text-options.vertical-align" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/text.cljs:257" ],
|
||||
"translations" : {
|
||||
"en" : "Vertical align",
|
||||
"fr" : "Alignement vertical",
|
||||
"ru" : "Вертикальное выравнивание",
|
||||
"es" : "Alineación vertical"
|
||||
}
|
||||
},
|
||||
"unused" : true
|
||||
},
|
||||
"workspace.options.use-play-button" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/sidebar/options/interactions.cljs:55" ],
|
||||
|
@ -2617,7 +2677,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.toolbar.assets" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/left_toolbar.cljs:103" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/left_toolbar.cljs:105" ],
|
||||
"translations" : {
|
||||
"en" : "Assets (Ctrl + I)",
|
||||
"fr" : "",
|
||||
|
@ -2626,7 +2686,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.toolbar.circle" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/left_toolbar.cljs:67" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/left_toolbar.cljs:69" ],
|
||||
"translations" : {
|
||||
"en" : "Circle (E)",
|
||||
"fr" : "Cercle (E)",
|
||||
|
@ -2635,7 +2695,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.toolbar.color-palette" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/left_toolbar.cljs:113" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/left_toolbar.cljs:115" ],
|
||||
"translations" : {
|
||||
"en" : "Color Palette (---)",
|
||||
"fr" : "Palette de couleurs (---)",
|
||||
|
@ -2644,7 +2704,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.toolbar.curve" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/left_toolbar.cljs:86" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/left_toolbar.cljs:88" ],
|
||||
"translations" : {
|
||||
"en" : "Curve",
|
||||
"fr" : "Courbe",
|
||||
|
@ -2653,7 +2713,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.toolbar.frame" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/left_toolbar.cljs:57" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/left_toolbar.cljs:59" ],
|
||||
"translations" : {
|
||||
"en" : "Artboard (A)",
|
||||
"fr" : "Plan de travail (A)",
|
||||
|
@ -2662,7 +2722,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.toolbar.image" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/left_toolbar.cljs:77" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/left_toolbar.cljs:79" ],
|
||||
"translations" : {
|
||||
"en" : "Image (I)",
|
||||
"fr" : "Image (I)",
|
||||
|
@ -2680,7 +2740,7 @@
|
|||
"unused" : true
|
||||
},
|
||||
"workspace.toolbar.path" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/left_toolbar.cljs:91" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/left_toolbar.cljs:93" ],
|
||||
"translations" : {
|
||||
"en" : "Path",
|
||||
"fr" : "Chemin",
|
||||
|
@ -2689,7 +2749,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.toolbar.rect" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/left_toolbar.cljs:62" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/left_toolbar.cljs:64" ],
|
||||
"translations" : {
|
||||
"en" : "Box (B)",
|
||||
"fr" : "Boîte (B)",
|
||||
|
@ -2698,7 +2758,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.toolbar.text" : {
|
||||
"used-in" : [ "src/app/main/ui/workspace/left_toolbar.cljs:72" ],
|
||||
"used-in" : [ "src/app/main/ui/workspace/left_toolbar.cljs:74" ],
|
||||
"translations" : {
|
||||
"en" : "Text (T)",
|
||||
"fr" : "Texte (T)",
|
||||
|
@ -2707,7 +2767,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.updates.dismiss" : {
|
||||
"used-in" : [ "src/app/main/data/workspace/libraries.cljs:487" ],
|
||||
"used-in" : [ "src/app/main/data/workspace/libraries.cljs:488" ],
|
||||
"translations" : {
|
||||
"en" : "Dismiss",
|
||||
"fr" : "",
|
||||
|
@ -2716,7 +2776,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.updates.there-are-updates" : {
|
||||
"used-in" : [ "src/app/main/data/workspace/libraries.cljs:483" ],
|
||||
"used-in" : [ "src/app/main/data/workspace/libraries.cljs:484" ],
|
||||
"translations" : {
|
||||
"en" : "There are updates in shared libraries",
|
||||
"fr" : "",
|
||||
|
@ -2725,7 +2785,7 @@
|
|||
}
|
||||
},
|
||||
"workspace.updates.update" : {
|
||||
"used-in" : [ "src/app/main/data/workspace/libraries.cljs:485" ],
|
||||
"used-in" : [ "src/app/main/data/workspace/libraries.cljs:486" ],
|
||||
"translations" : {
|
||||
"en" : "Update",
|
||||
"fr" : "",
|
||||
|
@ -2741,9 +2801,5 @@
|
|||
"ru" : "Кликни чтобы закончить фигуру",
|
||||
"es" : "Pulsar para cerrar la ruta"
|
||||
}
|
||||
},
|
||||
|
||||
"workspace.options.text-options.grow-fixed": "Fixed",
|
||||
"workspace.options.text-options.grow-auto-width": "Auto width",
|
||||
"workspace.options.text-options.grow-auto-height": "Auto height"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,6 +48,11 @@ $br-big: 8px;
|
|||
}
|
||||
}
|
||||
|
||||
.row-grid-2 {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
}
|
||||
|
||||
.flex-grow {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
|
|
@ -364,7 +364,8 @@ ul.slider-dots {
|
|||
position: relative;
|
||||
width: 75px;
|
||||
|
||||
&::after {
|
||||
&::after,
|
||||
.after {
|
||||
color: $color-gray-20;
|
||||
font-size: $fs12;
|
||||
height: 20px;
|
||||
|
@ -374,6 +375,11 @@ ul.slider-dots {
|
|||
width: 20px;
|
||||
}
|
||||
|
||||
.after {
|
||||
width: auto;
|
||||
right: 6px;
|
||||
}
|
||||
|
||||
// Input amounts
|
||||
|
||||
&.pixels {
|
||||
|
|
|
@ -468,8 +468,8 @@
|
|||
}
|
||||
|
||||
.color-th {
|
||||
background-color: $color-gray-10;
|
||||
border: 1px solid $color-gray-10;
|
||||
background-color: $color-gray-30;
|
||||
border: 1px solid $color-gray-30;
|
||||
border-radius: $br-small;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
|
@ -765,6 +765,7 @@
|
|||
top: 0;
|
||||
width: 100%;
|
||||
opacity: 0.4;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.element-set-content .advanced-options {
|
||||
|
@ -775,6 +776,7 @@
|
|||
position: relative;
|
||||
top: 2px;
|
||||
width: calc(100% + 16px);
|
||||
z-index: 20;
|
||||
}
|
||||
|
||||
.btn-options {
|
||||
|
@ -815,7 +817,8 @@
|
|||
}
|
||||
}
|
||||
|
||||
.exports-options {
|
||||
.exports-options,
|
||||
.shadow-options{
|
||||
.element-set-options-group {
|
||||
justify-content: space-between;
|
||||
.delete-icon {
|
||||
|
@ -841,3 +844,35 @@
|
|||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.shadow-options .color-row-wrap {
|
||||
margin-left: 6px;
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
|
||||
.element-set-actions-button {
|
||||
display: flex;
|
||||
min-width: 30px;
|
||||
min-height: 30px;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
svg {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
fill: $color-gray-20;
|
||||
}
|
||||
|
||||
&:hover svg {
|
||||
fill: $color-primary;
|
||||
}
|
||||
}
|
||||
.element-set-actions {
|
||||
display: flex;
|
||||
visibility: hidden;
|
||||
|
||||
}
|
||||
|
||||
.element-set-options-group:hover .element-set-actions {
|
||||
visibility: visible;
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
[app.common.geom.shapes :as geom]
|
||||
[app.common.geom.point :as gpt]
|
||||
[app.common.geom.matrix :as gmt]
|
||||
[app.main.ui.shapes.filters :as filters]
|
||||
[app.main.ui.shapes.frame :as frame]
|
||||
[app.main.ui.shapes.circle :as circle]
|
||||
[app.main.ui.shapes.icon :as icon]
|
||||
|
@ -77,18 +78,21 @@
|
|||
frame-wrapper (mf/use-memo (mf/deps objects) #(frame-wrapper-factory objects))]
|
||||
(when (and shape (not (:hidden shape)))
|
||||
(let [shape (geom/transform-shape frame shape)
|
||||
opts #js {:shape shape}]
|
||||
(case (:type shape)
|
||||
:curve [:> path/path-shape opts]
|
||||
:text [:> text/text-shape opts]
|
||||
:icon [:> icon/icon-shape opts]
|
||||
:rect [:> rect/rect-shape opts]
|
||||
:path [:> path/path-shape opts]
|
||||
:image [:> image/image-shape opts]
|
||||
:circle [:> circle/circle-shape opts]
|
||||
:frame [:> frame-wrapper {:shape shape}]
|
||||
:group [:> group-wrapper {:shape shape :frame frame}]
|
||||
nil))))))
|
||||
opts #js {:shape shape}
|
||||
filter-id (filters/get-filter-id)]
|
||||
[:g {:filter (filters/filter-str filter-id shape)}
|
||||
[:& filters/filters {:filter-id filter-id :shape shape}]
|
||||
(case (:type shape)
|
||||
:curve [:> path/path-shape opts]
|
||||
:text [:> text/text-shape opts]
|
||||
:icon [:> icon/icon-shape opts]
|
||||
:rect [:> rect/rect-shape opts]
|
||||
:path [:> path/path-shape opts]
|
||||
:image [:> image/image-shape opts]
|
||||
:circle [:> circle/circle-shape opts]
|
||||
:frame [:> frame-wrapper {:shape shape}]
|
||||
:group [:> group-wrapper {:shape shape :frame frame}]
|
||||
nil)])))))
|
||||
|
||||
(mf/defc page-svg
|
||||
{::mf/wrap [mf/memo]}
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
(ns app.main.ui.shapes.custom-stroke
|
||||
(:require
|
||||
[rumext.alpha :as mf]
|
||||
[app.common.uuid :as uuid]
|
||||
[app.common.geom.shapes :as geom]
|
||||
[app.util.object :as obj]))
|
||||
|
||||
|
@ -21,7 +22,8 @@
|
|||
(let [shape (unchecked-get props "shape")
|
||||
base-props (unchecked-get props "base-props")
|
||||
elem-name (unchecked-get props "elem-name")
|
||||
{:keys [id x y width height]} (geom/shape->rect-shape shape)
|
||||
{:keys [x y width height]} (geom/shape->rect-shape shape)
|
||||
stroke-id (mf/use-var (uuid/next))
|
||||
stroke-style (:stroke-style shape :none)
|
||||
stroke-position (:stroke-alignment shape :center)]
|
||||
(cond
|
||||
|
@ -32,7 +34,7 @@
|
|||
;; Inner alignment: display the shape with double width stroke,
|
||||
;; and clip the result with the original shape without stroke.
|
||||
(= stroke-position :inner)
|
||||
(let [clip-id (str "clip-" id)
|
||||
(let [clip-id (str "clip-" @stroke-id)
|
||||
|
||||
clip-props (-> (obj/merge! #js {} base-props)
|
||||
(obj/merge! #js {:stroke nil
|
||||
|
@ -59,7 +61,7 @@
|
|||
;; without stroke
|
||||
|
||||
(= stroke-position :outer)
|
||||
(let [mask-id (str "mask-" id)
|
||||
(let [mask-id (str "mask-" @stroke-id)
|
||||
stroke-width (.-strokeWidth ^js base-props)
|
||||
mask-props1 (-> (obj/merge! #js {} base-props)
|
||||
(obj/merge! #js {:stroke "white"
|
||||
|
|
166
frontend/src/app/main/ui/shapes/filters.cljs
Normal file
166
frontend/src/app/main/ui/shapes/filters.cljs
Normal file
|
@ -0,0 +1,166 @@
|
|||
;; This Source Code Form is subject to the terms of the Mozilla Public
|
||||
;; License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
;;
|
||||
;; This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||
;; defined by the Mozilla Public License, v. 2.0.
|
||||
;;
|
||||
;; Copyright (c) 2020 UXBOX Labs SL
|
||||
|
||||
(ns app.main.ui.shapes.filters
|
||||
(:require
|
||||
[rumext.alpha :as mf]
|
||||
[cuerdas.core :as str]
|
||||
[app.util.color :as color]
|
||||
[app.common.math :as mth]
|
||||
[app.common.uuid :as uuid]))
|
||||
|
||||
(defn get-filter-id []
|
||||
(str "filter_" (uuid/next)))
|
||||
|
||||
(defn filter-str
|
||||
[filter-id shape]
|
||||
|
||||
(when (seq (:shadow shape))
|
||||
(str/fmt "url(#$0)" [filter-id])))
|
||||
|
||||
(mf/defc color-matrix
|
||||
[{:keys [color opacity]}]
|
||||
(let [[r g b a] (color/hex->rgba color opacity)
|
||||
[r g b] [(/ r 255) (/ g 255) (/ b 255)]]
|
||||
[:feColorMatrix
|
||||
{:type "matrix"
|
||||
:values (str/fmt "0 0 0 0 $0 0 0 0 0 $1 0 0 0 0 $2 0 0 0 $3 0" [r g b a])}]))
|
||||
|
||||
(mf/defc drop-shadow-filter
|
||||
[{:keys [filter-id filter shape]}]
|
||||
|
||||
(let [{:keys [x y width height]} (:selrect shape)
|
||||
{:keys [id in-filter color opacity offset-x offset-y blur spread]} filter]
|
||||
[:*
|
||||
[:feColorMatrix {:in "SourceAlpha" :type "matrix"
|
||||
:values "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"}]
|
||||
(when (> spread 0)
|
||||
[:feMorphology {:radius spread
|
||||
:operator "dilate"
|
||||
:in "SourceAlpha"
|
||||
:result (str "filter" id)}])
|
||||
|
||||
[:feOffset {:dx offset-x :dy offset-y}]
|
||||
[:feGaussianBlur {:stdDeviation (/ blur 2)}]
|
||||
[:& color-matrix {:color color :opacity opacity}]
|
||||
|
||||
[:feBlend {:mode "normal"
|
||||
:in2 in-filter
|
||||
:result (str "filter" id)}]]))
|
||||
|
||||
(mf/defc inner-shadow-filter
|
||||
[{:keys [filter-id filter shape]}]
|
||||
|
||||
(let [{:keys [x y width height]} (:selrect shape)
|
||||
{:keys [id in-filter color opacity offset-x offset-y blur spread]} filter]
|
||||
[:*
|
||||
[:feColorMatrix {:in "SourceAlpha" :type "matrix"
|
||||
:values "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
:result "hardAlpha"}]
|
||||
|
||||
(when (> spread 0)
|
||||
[:feMorphology {:radius spread
|
||||
:operator "erode"
|
||||
:in "SourceAlpha"
|
||||
:result (str "filter" id)}])
|
||||
|
||||
[:feOffset {:dx offset-x :dy offset-y}]
|
||||
[:feGaussianBlur {:stdDeviation (/ blur 2)}]
|
||||
|
||||
[:feComposite {:in2 "hardAlpha"
|
||||
:operator "arithmetic"
|
||||
:k2 "-1"
|
||||
:k3 "1"}]
|
||||
|
||||
[:& color-matrix {:color color :opacity opacity}]
|
||||
|
||||
[:feBlend {:mode "normal"
|
||||
:in2 in-filter
|
||||
:result (str "filter" id)}]]))
|
||||
|
||||
(defn filter-bounds [shape filter]
|
||||
(let [{:keys [x y width height]} (:selrect shape)
|
||||
{:keys [offset-x offset-y blur spread] :or {offset-x 0 offset-y 0 blur 0 spread 0}} filter
|
||||
filter-x (min x (+ x offset-x (- spread) (- blur) -5))
|
||||
filter-y (min y (+ y offset-y (- spread) (- blur) -5))
|
||||
filter-width (+ width (mth/abs offset-x) (* spread 2) (* blur 2) 10)
|
||||
filter-height (+ height (mth/abs offset-x) (* spread 2) (* blur 2) 10)]
|
||||
{:x1 filter-x
|
||||
:y1 filter-y
|
||||
:x2 (+ filter-x filter-width)
|
||||
:y2 (+ filter-y filter-height)}))
|
||||
|
||||
(defn get-filters-bounds
|
||||
[shape filters]
|
||||
|
||||
(let [filter-bounds (->>
|
||||
filters
|
||||
(filter #(= :drop-shadow (:style %)))
|
||||
(map (partial filter-bounds shape) ))
|
||||
;; We add the selrect so the minimum size will be the selrect
|
||||
filter-bounds (conj filter-bounds (:selrect shape))
|
||||
x1 (apply min (map :x1 filter-bounds))
|
||||
y1 (apply min (map :y1 filter-bounds))
|
||||
x2 (apply max (map :x2 filter-bounds))
|
||||
y2 (apply max (map :y2 filter-bounds))]
|
||||
[x1 y1 (- x2 x1) (- y2 y1)]))
|
||||
|
||||
(mf/defc filters
|
||||
[{:keys [filter-id shape]}]
|
||||
|
||||
(let [add-in-filter
|
||||
(fn [filter in-filter]
|
||||
(assoc filter :in-filter in-filter))
|
||||
|
||||
filters (->> shape :shadow (filter (comp not :hidden)))
|
||||
|
||||
[filter-x filter-y filter-width filter-height] (get-filters-bounds shape filters)]
|
||||
(when (seq filters)
|
||||
[:defs
|
||||
[:filter {:id filter-id
|
||||
:x filter-x :y filter-y
|
||||
:width filter-width :height filter-height
|
||||
:filterUnits "userSpaceOnUse"
|
||||
:color-interpolation-filters "sRGB"}
|
||||
|
||||
(let [;; Add as a paramter the input filter
|
||||
drop-shadow-filters (->> filters (filter #(= :drop-shadow (:style %))))
|
||||
drop-shadow-filters (->> drop-shadow-filters
|
||||
(map #(str "filter" (:id %)))
|
||||
(cons "BackgroundImageFix")
|
||||
(map add-in-filter drop-shadow-filters))
|
||||
|
||||
inner-shadow-filters (->> filters (filter #(= :inner-shadow (:style %))))
|
||||
inner-shadow-filters (->> inner-shadow-filters
|
||||
(map #(str "filter" (:id %)))
|
||||
(cons "shape")
|
||||
(map add-in-filter inner-shadow-filters))]
|
||||
|
||||
[:*
|
||||
[:feFlood {:flood-opacity 0 :result "BackgroundImageFix"}]
|
||||
(for [{:keys [id type] :as filter} drop-shadow-filters]
|
||||
[:& drop-shadow-filter {:key id
|
||||
:filter-id filter-id
|
||||
:filter filter
|
||||
:shape shape}])
|
||||
|
||||
[:feBlend {:mode "normal"
|
||||
:in "SourceGraphic"
|
||||
:in2 (if (seq drop-shadow-filters)
|
||||
(str "filter" (:id (last drop-shadow-filters)))
|
||||
"BackgroundImageFix")
|
||||
:result "shape"}]
|
||||
|
||||
(for [{:keys [id type] :as filter} inner-shadow-filters]
|
||||
[:& inner-shadow-filter {:key id
|
||||
:filter-id filter-id
|
||||
:filter filter
|
||||
:shape shape}])
|
||||
])
|
||||
]])))
|
|
@ -17,6 +17,7 @@
|
|||
[app.main.data.viewer :as dv]
|
||||
[app.main.refs :as refs]
|
||||
[app.main.store :as st]
|
||||
[app.main.ui.shapes.filters :as filters]
|
||||
[app.main.ui.shapes.circle :as circle]
|
||||
[app.main.ui.shapes.frame :as frame]
|
||||
[app.main.ui.shapes.group :as group]
|
||||
|
@ -53,10 +54,14 @@
|
|||
|
||||
on-mouse-down (mf/use-callback
|
||||
(mf/deps shape)
|
||||
#(on-mouse-down % shape))]
|
||||
#(on-mouse-down % shape))
|
||||
|
||||
filter-id (filters/get-filter-id)]
|
||||
|
||||
[:g.shape {:on-mouse-down on-mouse-down
|
||||
:cursor (when (:interactions shape) "pointer")}
|
||||
:cursor (when (:interactions shape) "pointer")
|
||||
:filter (filters/filter-str filter-id shape)}
|
||||
[:& filters/filters {:filter-id filter-id :shape shape}]
|
||||
[:& component {:shape shape
|
||||
:frame frame
|
||||
:childs childs
|
||||
|
|
|
@ -48,16 +48,15 @@
|
|||
|
||||
;; --- Components
|
||||
(mf/defc palette-item
|
||||
[{:keys [color size]}]
|
||||
(let [select-color
|
||||
[{:keys [color size local?]}]
|
||||
(let [id (:id color)
|
||||
file-id (:file-id color)
|
||||
select-color
|
||||
(fn [event]
|
||||
(if (kbd/shift? event)
|
||||
(st/emit! (udw/update-color-on-selected-shapes {:stroke-color (:value color)
|
||||
:stroke-color-ref-file (:file-id color)
|
||||
:stroke-color-ref-id (:id color)}))
|
||||
(st/emit! (udw/update-color-on-selected-shapes {:fill-color (:value color)
|
||||
:fill-color-ref-file (:file-id color)
|
||||
:fill-color-ref-id (:id color)}))))]
|
||||
(let [ids (get-in @st/state [:workspace-local :selected])]
|
||||
(if (kbd/shift? event)
|
||||
(st/emit! (mdc/change-stroke ids (:value color) id file-id))
|
||||
(st/emit! (mdc/change-fill ids (:value color) id file-id)))))]
|
||||
|
||||
[:div.color-cell {:class (str "cell-"(name size))
|
||||
:key (or (str (:id color)) (:value color))
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
[app.main.refs :as refs]
|
||||
[app.main.store :as st]
|
||||
[app.main.ui.keyboard :as kbd]
|
||||
[app.main.ui.shapes.filters :as filters]
|
||||
[app.util.dom :as dom]
|
||||
[app.common.geom.matrix :as gmt]
|
||||
[app.common.geom.point :as gpt]
|
||||
|
@ -69,9 +70,12 @@
|
|||
#(on-mouse-down % shape))
|
||||
on-context-menu (mf/use-callback
|
||||
(mf/deps shape)
|
||||
#(on-context-menu % shape))]
|
||||
#(on-context-menu % shape))
|
||||
filter-id (mf/use-memo filters/get-filter-id)]
|
||||
[:g.shape {:on-mouse-down on-mouse-down
|
||||
:on-context-menu on-context-menu}
|
||||
:on-context-menu on-context-menu
|
||||
:filter (filters/filter-str filter-id shape)}
|
||||
[:& filters/filters {:filter-id filter-id :shape shape}]
|
||||
[:& component {:shape shape}]])))
|
||||
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
[app.main.ui.workspace.shapes.common :as common]
|
||||
[app.main.data.workspace.selection :as dws]
|
||||
[app.main.ui.shapes.frame :as frame]
|
||||
[app.main.ui.shapes.filters :as filters]
|
||||
[app.common.geom.matrix :as gmt]
|
||||
[app.common.geom.point :as gpt]
|
||||
[app.common.geom.shapes :as geom]
|
||||
|
@ -96,7 +97,9 @@
|
|||
(mf/use-callback
|
||||
(mf/deps (:id shape))
|
||||
(fn []
|
||||
(st/emit! (dws/change-hover-state (:id shape) false))))]
|
||||
(st/emit! (dws/change-hover-state (:id shape) false))))
|
||||
|
||||
filter-id (mf/use-memo filters/get-filter-id)]
|
||||
|
||||
(when-not (:hidden shape)
|
||||
[:g {:class (when selected? "selected")
|
||||
|
@ -121,7 +124,8 @@
|
|||
:on-mouse-over on-mouse-over
|
||||
:on-mouse-out on-mouse-out}
|
||||
(:name shape)]
|
||||
[:*
|
||||
[:g.frame {:filter (filters/filter-str filter-id shape)}
|
||||
[:& filters/filters {:filter-id filter-id :shape shape}]
|
||||
[:& frame-shape
|
||||
{:shape shape
|
||||
:childs children}]]])))))
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
[app.main.store :as st]
|
||||
[app.main.ui.keyboard :as kbd]
|
||||
[app.main.ui.shapes.path :as path]
|
||||
[app.main.ui.shapes.filters :as filters]
|
||||
[app.main.ui.workspace.shapes.common :as common]
|
||||
[app.main.data.workspace.drawing :as dr]
|
||||
[app.util.dom :as dom]
|
||||
|
@ -41,10 +42,13 @@
|
|||
(do
|
||||
(dom/stop-propagation event)
|
||||
(dom/prevent-default event)
|
||||
(st/emit! (dw/start-edition-mode (:id shape)))))))]
|
||||
(st/emit! (dw/start-edition-mode (:id shape)))))))
|
||||
filter-id (mf/use-memo filters/get-filter-id)]
|
||||
|
||||
[:g.shape {:on-double-click on-double-click
|
||||
:on-mouse-down on-mouse-down
|
||||
:on-context-menu on-context-menu}
|
||||
:on-context-menu on-context-menu
|
||||
:filter (filters/filter-str filter-id shape)}
|
||||
[:& filters/filters {:filter-id filter-id :shape shape}]
|
||||
[:& path/path-shape {:shape shape :background? true}]]))
|
||||
|
||||
|
|
|
@ -12,7 +12,8 @@
|
|||
[rumext.alpha :as mf]
|
||||
[app.main.ui.workspace.sidebar.options.measures :refer [measure-attrs measures-menu]]
|
||||
[app.main.ui.workspace.sidebar.options.fill :refer [fill-attrs fill-menu]]
|
||||
[app.main.ui.workspace.sidebar.options.stroke :refer [stroke-attrs stroke-menu]]))
|
||||
[app.main.ui.workspace.sidebar.options.stroke :refer [stroke-attrs stroke-menu]]
|
||||
[app.main.ui.workspace.sidebar.options.shadow :refer [shadow-menu]]))
|
||||
|
||||
(mf/defc options
|
||||
[{:keys [shape] :as props}]
|
||||
|
@ -30,4 +31,7 @@
|
|||
:values (select-keys shape fill-attrs)}]
|
||||
[:& stroke-menu {:ids ids
|
||||
:type type
|
||||
:values stroke-values}]]))
|
||||
:values stroke-values}]
|
||||
[:& shadow-menu {:ids ids
|
||||
:type type
|
||||
:values (select-keys shape [:shadow])}]]))
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
;; This Source Code Form is subject to the terms of the Mozilla Public
|
||||
;; License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
;;
|
||||
;; This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||
;; defined by the Mozilla Public License, v. 2.0.
|
||||
;;
|
||||
;; Copyright (c) 2020 UXBOX Labs SL
|
||||
|
||||
(ns app.main.ui.workspace.sidebar.options.common
|
||||
(:require
|
||||
[rumext.alpha :as mf]
|
||||
[app.util.dom :as dom]))
|
||||
|
||||
(mf/defc advanced-options [{:keys [visible? on-close children]}]
|
||||
(let [handle-click (fn [event] (when on-close
|
||||
(do (dom/stop-propagation event)
|
||||
(on-close))))]
|
||||
(when visible?
|
||||
[:*
|
||||
[:div.focus-overlay {:on-click handle-click}]
|
||||
[:div.advanced-options {}
|
||||
children]])))
|
||||
|
|
@ -22,7 +22,8 @@
|
|||
[app.main.ui.components.dropdown :refer [dropdown]]
|
||||
[app.main.ui.workspace.sidebar.options.fill :refer [fill-attrs fill-menu]]
|
||||
[app.main.ui.workspace.sidebar.options.stroke :refer [stroke-attrs stroke-menu]]
|
||||
[app.main.ui.workspace.sidebar.options.frame-grid :refer [frame-grid]]))
|
||||
[app.main.ui.workspace.sidebar.options.frame-grid :refer [frame-grid]]
|
||||
[app.main.ui.workspace.sidebar.options.shadow :refer [shadow-menu]]))
|
||||
|
||||
(declare +size-presets+)
|
||||
|
||||
|
@ -211,5 +212,8 @@
|
|||
[:& stroke-menu {:ids ids
|
||||
:type type
|
||||
:values stroke-values}]
|
||||
[:& shadow-menu {:ids ids
|
||||
:type type
|
||||
:values (select-keys shape [:shadow])}]
|
||||
[:& frame-grid {:shape shape}]]))
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
[app.main.data.workspace.grid :as dw]
|
||||
[app.util.geom.grid :as gg]
|
||||
[app.main.ui.icons :as i]
|
||||
[app.main.ui.workspace.sidebar.options.common :refer [advanced-options]]
|
||||
[app.main.ui.workspace.sidebar.options.rows.color-row :refer [color-row]]
|
||||
[app.main.ui.workspace.sidebar.options.rows.input-row :refer [input-row]]
|
||||
[app.main.ui.components.select :refer [select]]
|
||||
|
@ -30,16 +31,6 @@
|
|||
(def workspace-saved-grids
|
||||
(l/derived :saved-grids refs/workspace-page-options))
|
||||
|
||||
(mf/defc advanced-options [{:keys [visible? on-close children]}]
|
||||
(when visible?
|
||||
[:*
|
||||
[:div.focus-overlay {:on-click #(when on-close
|
||||
(do
|
||||
(dom/stop-propagation %)
|
||||
(on-close)))}]
|
||||
[:div.advanced-options {}
|
||||
children]]))
|
||||
|
||||
(defn- get-size-options [locale]
|
||||
[{:value :auto :label (t locale "workspace.options.grid.auto")}
|
||||
:separator
|
||||
|
@ -254,3 +245,4 @@
|
|||
:on-remove (handle-remove-grid index)
|
||||
:on-save-grid handle-save-grid}])])]))
|
||||
|
||||
|
||||
|
|
|
@ -12,7 +12,8 @@
|
|||
[rumext.alpha :as mf]
|
||||
[app.common.data :as d]
|
||||
[app.main.ui.workspace.sidebar.options.fill :refer [fill-attrs fill-menu]]
|
||||
[app.main.ui.workspace.sidebar.options.stroke :refer [stroke-attrs stroke-menu]]))
|
||||
[app.main.ui.workspace.sidebar.options.stroke :refer [stroke-attrs stroke-menu]]
|
||||
[app.main.ui.workspace.sidebar.options.shadow :refer [shadow-menu]]))
|
||||
|
||||
(mf/defc options
|
||||
[{:keys [shape] :as props}]
|
||||
|
@ -25,4 +26,7 @@
|
|||
:values (select-keys shape fill-attrs)}]
|
||||
[:& stroke-menu {:ids ids
|
||||
:type type
|
||||
:values stroke-values}]]))
|
||||
:values stroke-values}]
|
||||
[:& shadow-menu {:ids ids
|
||||
:type type
|
||||
:values (select-keys shape [:shadow])}]]))
|
||||
|
|
|
@ -12,7 +12,8 @@
|
|||
[rumext.alpha :as mf]
|
||||
[app.main.ui.workspace.sidebar.options.measures :refer [measure-attrs measures-menu]]
|
||||
[app.main.ui.workspace.sidebar.options.fill :refer [fill-attrs fill-menu]]
|
||||
[app.main.ui.workspace.sidebar.options.stroke :refer [stroke-attrs stroke-menu]]))
|
||||
[app.main.ui.workspace.sidebar.options.stroke :refer [stroke-attrs stroke-menu]]
|
||||
[app.main.ui.workspace.sidebar.options.shadow :refer [shadow-menu]]))
|
||||
|
||||
(mf/defc options
|
||||
{::mf/wrap [mf/memo]}
|
||||
|
@ -31,5 +32,8 @@
|
|||
:values fill-values}]
|
||||
[:& stroke-menu {:ids ids
|
||||
:type type
|
||||
:values stroke-values}]]))
|
||||
:values stroke-values}]
|
||||
[:& shadow-menu {:ids ids
|
||||
:type type
|
||||
:values (select-keys shape [:shadow])}]]))
|
||||
|
||||
|
|
199
frontend/src/app/main/ui/workspace/sidebar/options/shadow.cljs
Normal file
199
frontend/src/app/main/ui/workspace/sidebar/options/shadow.cljs
Normal file
|
@ -0,0 +1,199 @@
|
|||
;; This Source Code Form is subject to the terms of the Mozilla Public
|
||||
;; License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
;;
|
||||
;; This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||
;; defined by the Mozilla Public License, v. 2.0.
|
||||
;;
|
||||
;; Copyright (c) 2020 UXBOX Labs SL
|
||||
|
||||
(ns app.main.ui.workspace.sidebar.options.shadow
|
||||
(:require
|
||||
[rumext.alpha :as mf]
|
||||
[app.common.data :as d]
|
||||
[app.common.uuid :as uuid]
|
||||
[app.main.data.workspace.common :as dwc]
|
||||
[app.main.store :as st]
|
||||
[app.main.ui.icons :as i]
|
||||
[app.main.ui.workspace.sidebar.options.common :refer [advanced-options]]
|
||||
[app.main.ui.workspace.sidebar.options.rows.input-row :refer [input-row]]
|
||||
[app.main.ui.workspace.sidebar.options.rows.color-row :refer [color-row]]
|
||||
[app.util.dom :as dom]
|
||||
[app.util.i18n :as i18n :refer [t]]))
|
||||
|
||||
(defn create-shadow []
|
||||
(let [id (uuid/next)]
|
||||
{:id id
|
||||
:style :drop-shadow
|
||||
:color "#000000"
|
||||
:opacity 0.2
|
||||
:offset-x 4
|
||||
:offset-y 4
|
||||
:blur 4
|
||||
:spread 0
|
||||
:hidden false}))
|
||||
|
||||
(defn valid-number? [value]
|
||||
(or (number? value) (not (js/isNaN (js/parseInt value)))))
|
||||
|
||||
(mf/defc shadow-entry
|
||||
[{:keys [ids index value]}]
|
||||
(let [locale (i18n/use-locale)
|
||||
open-shadow (mf/use-state false)
|
||||
|
||||
basic-offset-x-ref (mf/use-ref nil)
|
||||
basic-offset-y-ref (mf/use-ref nil)
|
||||
basic-blur-ref (mf/use-ref nil)
|
||||
|
||||
adv-offset-x-ref (mf/use-ref nil)
|
||||
adv-offset-y-ref (mf/use-ref nil)
|
||||
adv-blur-ref (mf/use-ref nil)
|
||||
adv-spread-ref (mf/use-ref nil)
|
||||
|
||||
remove-shadow-by-id
|
||||
(fn [values id] (->> values (filterv (fn [s] (not= (:id s) id)))))
|
||||
|
||||
on-remove-shadow
|
||||
(fn [id]
|
||||
(fn []
|
||||
(st/emit! (dwc/update-shapes ids #(update % :shadow remove-shadow-by-id id) ))))
|
||||
|
||||
select-text
|
||||
(fn [ref] (fn [event] (dom/select-text! (mf/ref-val ref))))
|
||||
|
||||
update-attr
|
||||
(fn update-attr
|
||||
([index attr valid?]
|
||||
(update-attr index attr valid? nil))
|
||||
|
||||
([index attr valid? update-ref]
|
||||
(fn [event]
|
||||
(let [value (dom/get-value (dom/get-target event))]
|
||||
(when (or (not valid?) (valid? value))
|
||||
(do
|
||||
(when update-ref
|
||||
(dom/set-value! (mf/ref-val update-ref) value))
|
||||
(st/emit! (dwc/update-shapes ids #(assoc-in % [:shadow index attr] (js/parseInt value 10))))))))))
|
||||
|
||||
update-color
|
||||
(fn [index]
|
||||
(fn [color opacity]
|
||||
(st/emit! (dwc/update-shapes
|
||||
ids
|
||||
#(-> %
|
||||
(assoc-in [:shadow index :color] color)
|
||||
(assoc-in [:shadow index :opacity] opacity))))))
|
||||
|
||||
toggle-visibility
|
||||
(fn [index]
|
||||
(fn []
|
||||
(st/emit! (dwc/update-shapes ids #(update-in % [:shadow index :hidden] not)))))]
|
||||
[:*
|
||||
[:div.element-set-options-group
|
||||
|
||||
[:div.element-set-actions-button
|
||||
{:on-click #(reset! open-shadow true)}
|
||||
i/actions]
|
||||
|
||||
[:input.input-text {:type "number"
|
||||
:ref basic-offset-x-ref
|
||||
:on-change (update-attr index :offset-x valid-number?)
|
||||
:on-click (select-text basic-offset-x-ref)
|
||||
:default-value (:offset-x value)}]
|
||||
[:input.input-text {:type "number"
|
||||
:ref basic-offset-y-ref
|
||||
:on-change (update-attr index :offset-y valid-number?)
|
||||
:on-click (select-text basic-offset-y-ref)
|
||||
:default-value (:offset-y value)}]
|
||||
[:input.input-text {:type "number"
|
||||
:ref basic-blur-ref
|
||||
:on-click (select-text basic-blur-ref)
|
||||
:on-change (update-attr index :blur valid-number?)
|
||||
:min 0
|
||||
:default-value (:blur value)}]
|
||||
|
||||
[:div.element-set-actions
|
||||
[:div.element-set-actions-button {:on-click (toggle-visibility index)}
|
||||
(if (:hidden value) i/eye-closed i/eye)]
|
||||
[:div.element-set-actions-button {:on-click (on-remove-shadow (:id value))}
|
||||
i/minus]]]
|
||||
|
||||
[:& advanced-options {:visible? @open-shadow
|
||||
:on-close #(reset! open-shadow false)}
|
||||
[:div.row-grid-2
|
||||
[:select.input-select
|
||||
{:default-value (str (:style value))
|
||||
:on-change (fn [event]
|
||||
(let [value (-> event dom/get-target dom/get-value d/read-string)]
|
||||
(st/emit! (dwc/update-shapes ids #(assoc-in % [:shadow index :style] value)))))}
|
||||
[:option {:value ":drop-shadow"} (t locale "workspace.options.shadow-options.drop-shadow")]
|
||||
[:option {:value ":inner-shadow"} (t locale "workspace.options.shadow-options.inner-shadow")]]]
|
||||
|
||||
[:div.row-grid-2
|
||||
[:div.input-element
|
||||
[:input.input-text {:type "number"
|
||||
:ref adv-offset-x-ref
|
||||
:no-validate true
|
||||
:placeholder "--"
|
||||
:on-click (select-text adv-offset-x-ref)
|
||||
:on-change (update-attr index :offset-x valid-number? basic-offset-x-ref)
|
||||
:default-value (:offset-x value)}]
|
||||
[:span.after (t locale "workspace.options.shadow-options.offsetx")]]
|
||||
|
||||
[:div.input-element
|
||||
[:input.input-text {:type "number"
|
||||
:ref adv-offset-y-ref
|
||||
:no-validate true
|
||||
:placeholder "--"
|
||||
:on-click (select-text adv-offset-y-ref)
|
||||
:on-change (update-attr index :offset-y valid-number? basic-offset-y-ref)
|
||||
:default-value (:offset-y value)}]
|
||||
[:span.after (t locale "workspace.options.shadow-options.offsety")]]]
|
||||
|
||||
[:div.row-grid-2
|
||||
[:div.input-element
|
||||
[:input.input-text {:type "number"
|
||||
:ref adv-blur-ref
|
||||
:no-validate true
|
||||
:placeholder "--"
|
||||
:on-click (select-text adv-blur-ref)
|
||||
:on-change (update-attr index :blur valid-number? basic-blur-ref)
|
||||
:min 0
|
||||
:default-value (:blur value)}]
|
||||
[:span.after (t locale "workspace.options.shadow-options.blur")]]
|
||||
|
||||
[:div.input-element
|
||||
[:input.input-text {:type "number"
|
||||
:ref adv-spread-ref
|
||||
:no-validate true
|
||||
:placeholder "--"
|
||||
:on-click (select-text adv-spread-ref)
|
||||
:on-change (update-attr index :spread valid-number?)
|
||||
:min 0
|
||||
:default-value (:spread value)}]
|
||||
[:span.after (t locale "workspace.options.shadow-options.spread")]]]
|
||||
|
||||
[:div.color-row-wrap
|
||||
[:& color-row {:color {:value (:color value) :opacity (:opacity value)}
|
||||
:on-change (update-color index)
|
||||
:on-open #(st/emit! dwc/start-undo-transaction)
|
||||
:on-close #(st/emit! dwc/commit-undo-transaction)}]]]]))
|
||||
(mf/defc shadow-menu
|
||||
[{:keys [ids type values] :as props}]
|
||||
|
||||
(let [locale (i18n/use-locale)
|
||||
on-add-shadow
|
||||
(fn []
|
||||
(st/emit! (dwc/update-shapes ids #(update % :shadow (fnil conj []) (create-shadow)) )))]
|
||||
[:div.element-set.shadow-options
|
||||
[:div.element-set-title
|
||||
[:span (t locale "workspace.options.shadow-options.title")]
|
||||
[:div.add-page {:on-click on-add-shadow} i/close]]
|
||||
|
||||
(when (seq (:shadow values))
|
||||
[:div.element-set-content
|
||||
(for [[index {:keys [id] :as value}] (d/enumerate (:shadow values []))]
|
||||
[:& shadow-entry {:key (str "shadow-" id)
|
||||
:ids ids
|
||||
:value value
|
||||
:index index}])])]))
|
|
@ -70,7 +70,7 @@
|
|||
:group (t locale "workspace.options.group-stroke")
|
||||
(t locale "workspace.options.stroke"))
|
||||
|
||||
show-options (not= (or (:stroke-style values) :none) :none)
|
||||
show-options (not= (:stroke-style values :none) :none)
|
||||
|
||||
current-stroke-color {:value (:stroke-color values)
|
||||
:opacity (:stroke-opacity values)
|
||||
|
|
|
@ -103,6 +103,10 @@
|
|||
[node]
|
||||
(set! (.-value node) ""))
|
||||
|
||||
(defn set-value!
|
||||
[node value]
|
||||
(set! (.-value node) value))
|
||||
|
||||
(defn select-text!
|
||||
[node]
|
||||
(.select node))
|
||||
|
|
Loading…
Add table
Reference in a new issue