@lvl99dotcom/paintcanvas 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +1 -1
  2. package/dist/lib/brushes/StrokeEngine/index.d.ts +2 -2
  3. package/dist/lib/brushes/StrokeEngine/index.js +26 -28
  4. package/dist/lib/classes/BrushSettings/index.d.ts +24 -0
  5. package/dist/lib/classes/BrushSettings/index.js +35 -1
  6. package/dist/lib/classes/KeyboardShortcuts/index.d.ts +17 -6
  7. package/dist/lib/classes/KeyboardShortcuts/index.js +81 -18
  8. package/dist/lib/classes/PaintCanvas/index.d.ts +77 -27
  9. package/dist/lib/classes/PaintCanvas/index.js +141 -41
  10. package/dist/lib/classes/PaintCanvas/tool.d.ts +15 -0
  11. package/dist/lib/classes/PaintCanvas/tool.js +18 -0
  12. package/dist/lib/classes/Palette/index.d.ts +58 -0
  13. package/dist/lib/classes/Palette/index.js +92 -0
  14. package/dist/lib/classes/SettingsAutosave/index.d.ts +52 -0
  15. package/dist/lib/classes/SettingsAutosave/index.js +96 -0
  16. package/dist/lib/classes/ShortcutSettings/index.d.ts +63 -0
  17. package/dist/lib/classes/ShortcutSettings/index.js +110 -0
  18. package/dist/lib/palette/index.d.ts +49 -0
  19. package/dist/lib/palette/index.js +82 -0
  20. package/dist/lib/palette/schema.d.ts +45 -0
  21. package/dist/lib/palette/schema.js +41 -0
  22. package/dist/lib/rendering/cursors/index.d.ts +2 -0
  23. package/dist/lib/rendering/cursors/index.js +3 -1
  24. package/dist/lib/rendering/sample/index.js +3 -2
  25. package/dist/lib/settings/index.d.ts +63 -0
  26. package/dist/lib/settings/index.js +91 -0
  27. package/dist/lib/settings/schema.d.ts +150 -0
  28. package/dist/lib/settings/schema.js +102 -0
  29. package/dist/lib/storage/index.d.ts +36 -5
  30. package/dist/lib/storage/index.js +87 -29
  31. package/dist/lib/utils/colour/index.d.ts +72 -0
  32. package/dist/lib/utils/colour/index.js +154 -0
  33. package/dist/lib/utils/shortcuts/index.d.ts +174 -11
  34. package/dist/lib/utils/shortcuts/index.js +391 -145
  35. package/dist/lib/validation/validators.generated.d.ts +5 -0
  36. package/dist/lib/validation/validators.generated.js +872 -1
  37. package/dist/locales/en-GB.js +87 -1
  38. package/dist/locales/en-US.js +87 -1
  39. package/dist/locales/fr.js +87 -1
  40. package/dist/locales/ja.js +87 -1
  41. package/dist/locales/ko.js +87 -1
  42. package/dist/locales/zh-Hans.js +87 -1
  43. package/dist/locales/zh-Hant.js +87 -1
  44. package/dist/package.js +1 -1
  45. package/dist/ui/elements/PaintCanvas/index.d.ts +49 -47
  46. package/dist/ui/elements/PaintCanvas/index.js +121 -171
  47. package/dist/ui/elements/PaintCanvas/style.js +1 -1
  48. package/dist/ui/elements/PcAppSettings/index.d.ts +59 -0
  49. package/dist/ui/elements/PcAppSettings/index.js +222 -0
  50. package/dist/ui/elements/PcCanvas/index.d.ts +1 -1
  51. package/dist/ui/elements/PcCanvas/index.js +7 -5
  52. package/dist/ui/elements/PcColourPair/index.d.ts +43 -0
  53. package/dist/ui/elements/PcColourPair/index.js +125 -0
  54. package/dist/ui/elements/PcContextMenu/index.d.ts +70 -33
  55. package/dist/ui/elements/PcContextMenu/index.js +128 -97
  56. package/dist/ui/elements/PcLayerItem/index.d.ts +13 -34
  57. package/dist/ui/elements/PcLayerItem/index.js +39 -91
  58. package/dist/ui/elements/PcLayerItem/style.js +1 -1
  59. package/dist/ui/elements/PcMenu/index.d.ts +93 -0
  60. package/dist/ui/elements/PcMenu/index.js +204 -0
  61. package/dist/ui/elements/PcPane/index.d.ts +118 -0
  62. package/dist/ui/elements/PcPane/index.js +357 -0
  63. package/dist/ui/elements/PcPanel/index.d.ts +26 -8
  64. package/dist/ui/elements/PcPanel/index.js +76 -8
  65. package/dist/ui/elements/{PcBrushMenu → PcPanelBrushes}/index.d.ts +20 -6
  66. package/dist/ui/elements/{PcBrushMenu → PcPanelBrushes}/index.js +18 -14
  67. package/dist/ui/elements/PcPanelBrushes/style.js +3 -0
  68. package/dist/ui/elements/PcPanelColours/index.d.ts +171 -0
  69. package/dist/ui/elements/PcPanelColours/index.js +650 -0
  70. package/dist/ui/elements/PcPanelColours/style.js +3 -0
  71. package/dist/ui/elements/{PcLayersMenu → PcPanelLayers}/index.d.ts +17 -4
  72. package/dist/ui/elements/{PcLayersMenu → PcPanelLayers}/index.js +17 -10
  73. package/dist/ui/elements/PcPanelLayers/style.js +3 -0
  74. package/dist/ui/elements/PcShortcutSettings/index.d.ts +69 -0
  75. package/dist/ui/elements/PcShortcutSettings/index.js +273 -0
  76. package/dist/ui/elements/PcToolSettings/index.js +2 -1
  77. package/dist/ui/elements/PcToolbar/index.d.ts +47 -12
  78. package/dist/ui/elements/PcToolbar/index.js +77 -56
  79. package/dist/ui/elements/PcToolbar/style.js +1 -1
  80. package/dist/ui/index.d.ts +7 -1
  81. package/dist/ui/index.js +8 -2
  82. package/dist/ui/tokens/index.js +3 -1
  83. package/locales/en-GB.json +87 -1
  84. package/locales/en-US.json +87 -1
  85. package/locales/fr.json +87 -1
  86. package/locales/ja.json +87 -1
  87. package/locales/ko.json +87 -1
  88. package/locales/zh-Hans.json +87 -1
  89. package/locales/zh-Hant.json +87 -1
  90. package/package.json +1 -1
  91. package/dist/ui/elements/PcBrushMenu/style.js +0 -3
  92. package/dist/ui/elements/PcLayersMenu/style.js +0 -3
@@ -1,86 +1,93 @@
1
+ import { Tool } from "../../../lib/classes/PaintCanvas/tool.js";
1
2
  import style_default from "./style.js";
2
3
  import { NO_TEXT_SELECTION_CSS } from "../../styles/index.js";
3
- import { PcElement, defineElement } from "../../base/index.js";
4
+ import { defineElement } from "../../base/index.js";
5
+ import { PcPane } from "../PcPane/index.js";
4
6
  import ChangeController from "../../ChangeController/index.js";
5
- import { Panel, Tool } from "../../../lib/classes/PaintCanvas/index.js";
6
- import { cmdSymbol } from "../../../lib/utils/shortcuts/index.js";
7
+ import { Panel } from "../../../lib/classes/PaintCanvas/index.js";
8
+ import { cmdSymbol, shortcutLabel } from "../../../lib/utils/shortcuts/index.js";
9
+ import "../PcColourPair/index.js";
7
10
  import { html, nothing, unsafeCSS } from "lit";
8
11
  // src/ui/elements/PcToolbar/index.ts
9
- /** Toolbar buttons in display order: tool, icon name, translation key of its name, and its keyboard shortcut */
12
+ /** Toolbar buttons in display order: tool, icon name, translation key of its name, and its keyboard shortcut action */
10
13
  var TOOLBAR_TOOLS = [
11
14
  {
12
15
  tool: Tool.Brush,
13
16
  icon: "brush",
14
17
  name: "paintCanvas.tool.brush",
15
- shortcut: "B"
18
+ shortcutId: "tool-brush"
16
19
  },
17
20
  {
18
21
  tool: Tool.Eraser,
19
22
  icon: "eraser",
20
23
  name: "paintCanvas.tool.eraser",
21
- shortcut: "E"
24
+ shortcutId: "tool-eraser"
22
25
  },
23
26
  {
24
27
  tool: Tool.Move,
25
28
  icon: "cursor",
26
29
  name: "paintCanvas.tool.move",
27
- shortcut: "V"
30
+ shortcutId: "tool-move"
28
31
  },
29
32
  {
30
33
  tool: Tool.RectangleLasso,
31
34
  icon: "rectangleMask",
32
35
  name: "paintCanvas.tool.rectangleLasso",
33
- shortcut: "M"
36
+ shortcutId: "tool-rectangle-mask"
34
37
  },
35
38
  {
36
39
  tool: Tool.CircleLasso,
37
40
  icon: "circleMask",
38
41
  name: "paintCanvas.tool.circleLasso",
39
- shortcut: "Shift+M"
42
+ shortcutId: "tool-circle-mask"
40
43
  },
41
44
  {
42
45
  tool: Tool.PolygonLasso,
43
46
  icon: "polygonMask",
44
47
  name: "paintCanvas.tool.polygonLasso",
45
- shortcut: "L"
48
+ shortcutId: "tool-polygon-mask"
46
49
  },
47
50
  {
48
51
  tool: Tool.FreeformLasso,
49
52
  icon: "freehandMask",
50
53
  name: "paintCanvas.tool.freeformLasso",
51
- shortcut: "Shift+L"
54
+ shortcutId: "tool-freehand-mask"
52
55
  },
53
56
  {
54
57
  tool: Tool.Pan,
55
58
  icon: "pan",
56
59
  name: "paintCanvas.tool.pan",
57
- shortcut: "Space"
60
+ shortcutId: "pan"
58
61
  },
59
62
  {
60
63
  tool: Tool.Zoom,
61
64
  icon: "zoom",
62
65
  name: "paintCanvas.tool.zoom",
63
- shortcut: "Z"
66
+ shortcutId: "tool-zoom"
64
67
  },
65
68
  {
66
69
  tool: Tool.ColourSample,
67
70
  icon: "eyedropper",
68
71
  name: "paintCanvas.tool.colourSample",
69
- shortcut: "I"
72
+ shortcutId: "tool-colour-sample"
70
73
  }
71
74
  ];
72
75
  /**
73
- * Vertical toolbar: current colour, tools, undo and redo (disabled when there is nothing to undo or redo), layers menu
74
- * toggle (unless `layers` is false) and app menu toggle. Tools, undo, redo and the layers toggle show their icons; undo
75
- * and redo have their shortcuts (⌘ on Apple devices, ^ elsewhere) in their tooltips. The app menu button shows
76
- * `menuText` and is named `menuLabel` for screen readers.
76
+ * Vertical toolbar: the foreground and background colours, tools, undo and redo (disabled when there is nothing to undo
77
+ * or redo), layers menu toggle (unless `layers` is false) and app menu toggle. Pressing a colour selects it and opens the
78
+ * colour palette (if it isn't open). Tools, undo, redo and the layers toggle show
79
+ * their icons; tools have the user's keyboard shortcuts in their tooltips, and undo and redo theirs (⌘ on Apple
80
+ * devices, ^ elsewhere). The app menu button shows `menuText` and is named `menuLabel` for screen readers.
81
+ *
82
+ * It's a `PcPane`: the colours and tools are at its start, and undo, redo, the layers toggle and the app menu toggle at
83
+ * its end, after anything slotted there.
77
84
  *
78
85
  * @example
79
86
  * html`<pc-toolbar .app=${app} menuText="App" menuLabel="App menu"></pc-toolbar>`
80
87
  */
81
- var PcToolbar = class extends PcElement {
88
+ var PcToolbar = class extends PcPane {
82
89
  static properties = {
83
- ...PcElement.properties,
90
+ ...PcPane.properties,
84
91
  app: { attribute: false },
85
92
  menuText: { type: String },
86
93
  menuLabel: { type: String },
@@ -88,7 +95,7 @@ var PcToolbar = class extends PcElement {
88
95
  layers: { type: Boolean }
89
96
  };
90
97
  static styles = [
91
- PcElement.styles,
98
+ ...PcPane.styles,
92
99
  unsafeCSS(NO_TEXT_SELECTION_CSS),
93
100
  unsafeCSS(style_default)
94
101
  ];
@@ -98,7 +105,11 @@ var PcToolbar = class extends PcElement {
98
105
  this.menu = true;
99
106
  this.layers = true;
100
107
  }
101
- changes = new ChangeController(this, () => [this.app, this.app?.history]);
108
+ changes = new ChangeController(this, () => [
109
+ this.app,
110
+ this.app?.history,
111
+ this.app?.shortcuts
112
+ ]);
102
113
  /**
103
114
  * Select a tool (the brush and eraser presets open from the settings bar, not here).
104
115
  */
@@ -106,43 +117,54 @@ var PcToolbar = class extends PcElement {
106
117
  this.app?.selectTool(tool, { fromToolbar: true });
107
118
  }
108
119
  /**
109
- * Update the drawing colour from the colour input.
120
+ * Select the pressed colour, and open the colour palette if it isn't open.
110
121
  */
111
- onColourInput(event) {
112
- this.app?.setColour(event.target.value);
122
+ onColourClick(event) {
123
+ const app = this.app;
124
+ app.selectColour(event.detail.slot);
125
+ if (app.panel !== Panel.Palette) app.togglePanel(Panel.Palette);
126
+ }
127
+ /** A tool's name, with its keyboard shortcut if it has one */
128
+ toolLabel(app, name, shortcutId) {
129
+ const combo = app.shortcuts.combo(shortcutId);
130
+ return combo ? this.t("paintCanvas.tool.withShortcut", {
131
+ tool: this.t(name),
132
+ shortcut: shortcutLabel(combo)
133
+ }) : this.t(name);
134
+ }
135
+ /** The colours and tools */
136
+ renderStart() {
137
+ const app = this.app;
138
+ if (!app) return nothing;
139
+ return html`<pc-colour-pair
140
+ .app=${app}
141
+ @pc-colour-click=${this.onColourClick}
142
+ ></pc-colour-pair>
143
+ ${TOOLBAR_TOOLS.map(({ tool, icon, name, shortcutId }) => {
144
+ const label = this.toolLabel(app, name, shortcutId);
145
+ return html`<button
146
+ type="button"
147
+ data-tool=${tool}
148
+ title=${label}
149
+ aria-label=${label}
150
+ aria-pressed=${app.tool === tool}
151
+ @click=${() => this.onToolClick(tool)}
152
+ >
153
+ <img src=${this.iconUrl(icon)} alt="" />
154
+ </button>`;
155
+ })}`;
156
+ }
157
+ /** The space between the tools and the end */
158
+ renderMiddle() {
159
+ return html`<div class="spacer"></div>`;
113
160
  }
114
- render() {
161
+ /** Undo, redo, and the layers and app menu toggles */
162
+ renderEnd() {
115
163
  const app = this.app;
116
- if (!app) return html``;
164
+ if (!app) return nothing;
117
165
  const cmd = cmdSymbol();
118
166
  const cmdKey = cmd === "⌘" ? "Meta" : "Control";
119
- return html`
120
- <input
121
- type="color"
122
- aria-label=${this.t("paintCanvas.toolbar.currentColour")}
123
- .value=${app.colour}
124
- @input=${this.onColourInput}
125
- />
126
- ${TOOLBAR_TOOLS.map(({ tool, icon, name, shortcut }) => {
127
- const label = this.t("paintCanvas.tool.withShortcut", {
128
- tool: this.t(name),
129
- shortcut
130
- });
131
- return html`
132
- <button
133
- type="button"
134
- data-tool=${tool}
135
- title=${label}
136
- aria-label=${label}
137
- aria-pressed=${app.tool === tool}
138
- @click=${() => this.onToolClick(tool)}
139
- >
140
- <img src=${this.iconUrl(icon)} alt="" />
141
- </button>
142
- `;
143
- })}
144
- <div class="spacer"></div>
145
- <button
167
+ return html`<button
146
168
  type="button"
147
169
  data-action="undo"
148
170
  title=${this.t("paintCanvas.toolbar.undoWithShortcut", { shortcut: `${cmd}Z` })}
@@ -182,8 +204,7 @@ var PcToolbar = class extends PcElement {
182
204
  @click=${() => app.togglePanel(Panel.Menu)}
183
205
  >
184
206
  ${this.menuText}
185
- </button>` : nothing}
186
- `;
207
+ </button>` : nothing}`;
187
208
  }
188
209
  };
189
210
  defineElement("pc-toolbar", PcToolbar);
@@ -1,3 +1,3 @@
1
1
  // src/ui/elements/PcToolbar/style.css?inline
2
- var style_default = ":host {\n display: flex;\n flex-direction: column;\n width: 50px;\n height: 100%;\n background: var(--pc-bar);\n border-right: 1px solid var(--pc-border);\n}\nbutton,\ninput {\n width: 50px;\n height: 50px;\n}\n/* Buttons separated by thin lines, as designed */\nbutton {\n border: 0;\n border-bottom: 1px solid var(--pc-border);\n background: transparent;\n font-size: 20px;\n}\nbutton:hover {\n background: var(--pc-surface-hover);\n}\n/* The open panel */\nbutton[aria-expanded=\"true\"] {\n background: var(--pc-surface-active);\n}\n/* The selected tool, like other pressed icon buttons */\nbutton[aria-pressed=\"true\"],\nbutton[aria-pressed=\"true\"]:hover {\n background: var(--pc-accent);\n}\nbutton:disabled {\n opacity: 0.4;\n background: transparent;\n}\nbutton:focus-visible {\n outline: var(--pc-focus-width) solid var(--pc-focus);\n outline-offset: -3px;\n}\nimg {\n display: block;\n width: 40px;\n height: 40px;\n margin: auto;\n}\n.spacer {\n flex: 1;\n border-bottom: 1px solid var(--pc-border);\n}\n";
2
+ var style_default = ":host {\n width: 50px;\n height: 100%;\n background: var(--pc-bar);\n border-right: 1px solid var(--pc-border);\n}\nbutton {\n width: 50px;\n height: 50px;\n}\npc-colour-pair {\n border-bottom: 1px solid var(--pc-border);\n}\n/* Buttons separated by thin lines, as designed */\nbutton {\n border: 0;\n border-bottom: 1px solid var(--pc-border);\n background: transparent;\n font-size: 20px;\n}\nbutton:hover {\n background: var(--pc-surface-hover);\n}\n/* The open panel */\nbutton[aria-expanded=\"true\"] {\n background: var(--pc-surface-active);\n}\n/* The selected tool, like other pressed icon buttons */\nbutton[aria-pressed=\"true\"],\nbutton[aria-pressed=\"true\"]:hover {\n background: var(--pc-accent);\n}\nbutton:disabled {\n opacity: 0.4;\n background: transparent;\n}\nbutton:focus-visible {\n outline: var(--pc-focus-width) solid var(--pc-focus);\n outline-offset: -3px;\n}\nimg {\n display: block;\n width: 40px;\n height: 40px;\n margin: auto;\n}\n/* All the buttons in one column, so they shrink together when the toolbar is short */\n.start,\n.middle,\n.end {\n display: contents;\n}\n/* The space between the tools and the end */\n.spacer {\n flex: 1;\n border-bottom: 1px solid var(--pc-border);\n}\n";
3
3
  export { style_default as default };
@@ -7,14 +7,20 @@ export { PcButtonGroup } from "./elements/PcButtonGroup";
7
7
  export { PcIconToggle } from "./elements/PcIconToggle";
8
8
  export { PcToggleCheckbox } from "./elements/PcToggleCheckbox";
9
9
  export { PcSlider } from "./elements/PcSlider";
10
- export { PcContextMenu, type MenuItem } from "./elements/PcContextMenu";
10
+ export { PcMenu, type MenuItem } from "./elements/PcMenu";
11
+ export { PcContextMenu, CONTEXT_MENU_TOGGLE_EVENT, MENU_MARGIN, menuLeft, menuTop, type MenuPlacement, } from "./elements/PcContextMenu";
11
12
  export { PcDialog, CANCEL_CHOICE, type DialogChoice, } from "./elements/PcDialog";
12
13
  export { PcToast, TOAST_DURATION_MS, type ToastKind } from "./elements/PcToast";
13
14
  export { PcInfoTip } from "./elements/PcInfoTip";
14
15
  export { PcPopover } from "./elements/PcPopover";
15
16
  export { PcPanel } from "./elements/PcPanel";
17
+ export { PcPane, PANE_COLLAPSE_EVENT, type PaneEdge, type PaneOrientation, } from "./elements/PcPane";
16
18
  export { PcInputSettings, type InputSettingsLike, } from "./elements/PcInputSettings";
17
19
  export { PcMatch } from "./elements/PcMatch";
20
+ export { PcColourPair, COLOUR_CLICK_EVENT } from "./elements/PcColourPair";
21
+ export { PcShortcutSettings, type ShortcutSettingsLike, } from "./elements/PcShortcutSettings";
22
+ export { PcAppSettings } from "./elements/PcAppSettings";
23
+ export { PcPanelColours, LONG_PRESS_MS, type ColourModel, } from "./elements/PcPanelColours";
18
24
  export { PcStats, formatBytes } from "./elements/PcStats";
19
25
  export { PcThemePicker, THEMES, THEME_ICONS, isTheme, type Theme, } from "./elements/PcThemePicker";
20
26
  export { PaintCanvasElement } from "./elements/PaintCanvas";
package/dist/ui/index.js CHANGED
@@ -7,16 +7,22 @@ import { PcButtonGroup } from "./elements/PcButtonGroup/index.js";
7
7
  import { PcIconToggle } from "./elements/PcIconToggle/index.js";
8
8
  import { PcToggleCheckbox } from "./elements/PcToggleCheckbox/index.js";
9
9
  import { PcSlider } from "./elements/PcSlider/index.js";
10
- import { PcContextMenu } from "./elements/PcContextMenu/index.js";
10
+ import { PcMenu } from "./elements/PcMenu/index.js";
11
+ import { CONTEXT_MENU_TOGGLE_EVENT, MENU_MARGIN, PcContextMenu, menuLeft, menuTop } from "./elements/PcContextMenu/index.js";
11
12
  import { CANCEL_CHOICE, PcDialog } from "./elements/PcDialog/index.js";
12
13
  import { PcToast, TOAST_DURATION_MS } from "./elements/PcToast/index.js";
13
14
  import { PcInfoTip } from "./elements/PcInfoTip/index.js";
14
15
  import { PcPopover } from "./elements/PcPopover/index.js";
15
16
  import { PcPanel } from "./elements/PcPanel/index.js";
17
+ import { PANE_COLLAPSE_EVENT, PcPane } from "./elements/PcPane/index.js";
16
18
  import { PcInputSettings } from "./elements/PcInputSettings/index.js";
17
19
  import { PcMatch } from "./elements/PcMatch/index.js";
20
+ import { COLOUR_CLICK_EVENT, PcColourPair } from "./elements/PcColourPair/index.js";
21
+ import { PcShortcutSettings } from "./elements/PcShortcutSettings/index.js";
22
+ import { PcAppSettings } from "./elements/PcAppSettings/index.js";
23
+ import { LONG_PRESS_MS, PcPanelColours } from "./elements/PcPanelColours/index.js";
18
24
  import { PcStats, formatBytes } from "./elements/PcStats/index.js";
19
25
  import { PcThemePicker, THEMES, THEME_ICONS, isTheme } from "./elements/PcThemePicker/index.js";
20
26
  import { PaintCanvasElement } from "./elements/PaintCanvas/index.js";
21
27
  import { DEFAULT_NARROW_WIDTH, DEFAULT_SIDE_MODES, LayoutStateController, STATE_EVENT, matchesState, parseSideModes, sideModeFor } from "./layout/index.js";
22
- export { CANCEL_CHOICE, DARK_TOKENS, DEFAULT_ICONS, DEFAULT_NARROW_WIDTH, DEFAULT_SIDE_MODES, IconRegistry, LIGHT_TOKENS, LayoutStateController, PaintCanvasElement, PcButton, PcButtonGroup, PcContextMenu, PcDialog, PcElement, PcIcon, PcIconToggle, PcInfoTip, PcInputSettings, PcMatch, PcPanel, PcPopover, PcSlider, PcStats, PcThemePicker, PcToast, PcToggleCheckbox, STATE_EVENT, THEMES, THEME_ICONS, TOAST_DURATION_MS, TOKENS_CSS, defineElement, emit, formatBytes, icons, installTokens, isTheme, matchesState, parseSideModes, sideModeFor, tokens };
28
+ export { CANCEL_CHOICE, COLOUR_CLICK_EVENT, CONTEXT_MENU_TOGGLE_EVENT, DARK_TOKENS, DEFAULT_ICONS, DEFAULT_NARROW_WIDTH, DEFAULT_SIDE_MODES, IconRegistry, LIGHT_TOKENS, LONG_PRESS_MS, LayoutStateController, MENU_MARGIN, PANE_COLLAPSE_EVENT, PaintCanvasElement, PcAppSettings, PcButton, PcButtonGroup, PcColourPair, PcContextMenu, PcDialog, PcElement, PcIcon, PcIconToggle, PcInfoTip, PcInputSettings, PcMatch, PcMenu, PcPane, PcPanel, PcPanelColours, PcPopover, PcShortcutSettings, PcSlider, PcStats, PcThemePicker, PcToast, PcToggleCheckbox, STATE_EVENT, THEMES, THEME_ICONS, TOAST_DURATION_MS, TOKENS_CSS, defineElement, emit, formatBytes, icons, installTokens, isTheme, matchesState, menuLeft, menuTop, parseSideModes, sideModeFor, tokens };
@@ -1,3 +1,4 @@
1
+ import { DELETE_CURSOR } from "../../lib/rendering/cursors/index.js";
1
2
  import { unsafeCSS } from "lit";
2
3
  // src/ui/tokens/index.ts
3
4
  /** The light theme's tokens: colours, spacing, corner radius, fonts and focus ring */
@@ -42,7 +43,8 @@ var LIGHT_TOKENS = {
42
43
  "font-size-small": "12px",
43
44
  focus: "#000000",
44
45
  "focus-width": "3px",
45
- "color-scheme": "light"
46
+ "color-scheme": "light",
47
+ "delete-cursor": DELETE_CURSOR
46
48
  };
47
49
  /** The dark theme's tokens that differ from the light theme's */
48
50
  var DARK_TOKENS = {
@@ -25,8 +25,34 @@
25
25
  "paintCanvas.tool.zoom": "Zoom",
26
26
  "paintCanvas.tool.colourSample": "Colour sample",
27
27
  "paintCanvas.tool.withShortcut": "{tool} ({shortcut})",
28
+ "paintCanvas.colours.foreground": "Foreground colour ({colour})",
29
+ "paintCanvas.colours.background": "Background colour ({colour})",
30
+ "paintCanvas.palette.label": "Colour palette",
31
+ "paintCanvas.palette.hex": "Hex colour",
32
+ "paintCanvas.palette.model": "Colour model",
33
+ "paintCanvas.palette.rgb": "RGB",
34
+ "paintCanvas.palette.hsl": "HSL",
35
+ "paintCanvas.palette.red": "Red",
36
+ "paintCanvas.palette.green": "Green",
37
+ "paintCanvas.palette.blue": "Blue",
38
+ "paintCanvas.palette.hue": "Hue",
39
+ "paintCanvas.palette.saturation": "Saturation",
40
+ "paintCanvas.palette.lightness": "Lightness",
41
+ "paintCanvas.palette.saved": "Saved colours",
42
+ "paintCanvas.palette.add": "Save {colour} to the palette",
43
+ "paintCanvas.palette.colourActions": "{colour} actions",
44
+ "paintCanvas.palette.deleteColour": "Delete colour",
45
+ "paintCanvas.palette.deleteMessage": "Do you want to delete this colour?",
46
+ "paintCanvas.palette.deleteConfirm": "Yes, delete colour",
47
+ "paintCanvas.palette.import": "Import",
48
+ "paintCanvas.palette.export": "Export",
49
+ "paintCanvas.palette.importFile": "Import colour palette file",
50
+ "paintCanvas.palette.imported.one": "Added {count} colour",
51
+ "paintCanvas.palette.imported.other": "Added {count} colours",
52
+ "paintCanvas.palette.fileIncompatible": "Colour palette JSON file not compatible",
53
+ "paintCanvas.palette.fileReadFailed": "Failed to read colour palette JSON file",
54
+ "paintCanvas.palette.exportFailed": "Error exporting colour palette JSON file",
28
55
  "paintCanvas.toolbar.label": "Tools",
29
- "paintCanvas.toolbar.currentColour": "Current colour",
30
56
  "paintCanvas.toolbar.layers": "Layers",
31
57
  "paintCanvas.toolbar.menu": "Menu",
32
58
  "paintCanvas.toolbar.undoWithShortcut": "Undo ({shortcut})",
@@ -167,6 +193,66 @@
167
193
  "paintCanvas.autosave.elsewhereMessage": "This drawing is open in another window or tab, and only one can draw on it at a time. Choose \"Draw here instead\" to continue in this window; the other one stops.",
168
194
  "paintCanvas.autosave.takeOver": "Draw here instead",
169
195
  "paintCanvas.autosave.failed": "Couldn't keep the drawing in this browser",
196
+ "paintCanvas.settings.saveFailed": "Couldn't keep your settings in this browser",
197
+ "paintCanvas.shortcuts.title": "Keyboard shortcuts",
198
+ "paintCanvas.shortcuts.recordHint": "Press the keys to use",
199
+ "paintCanvas.shortcuts.none": "None",
200
+ "paintCanvas.shortcuts.remove": "Remove the {action} shortcut",
201
+ "paintCanvas.shortcuts.fixed": "Can't be changed",
202
+ "paintCanvas.shortcuts.fixedUsed": "{keys} is used by {action}, which can't be changed",
203
+ "paintCanvas.shortcuts.moved": "{keys} moved from {from} to {to}",
204
+ "paintCanvas.shortcuts.reset": "Reset to defaults",
205
+ "paintCanvas.shortcuts.wasReset": "Keyboard shortcuts reset to defaults",
206
+ "paintCanvas.shortcuts.group.tools": "Tools",
207
+ "paintCanvas.shortcuts.group.brushes": "Brushes & erasers",
208
+ "paintCanvas.shortcuts.group.clipboard": "Clipboard",
209
+ "paintCanvas.shortcuts.group.masking": "Masking",
210
+ "paintCanvas.shortcuts.group.fills": "Fills and colours",
211
+ "paintCanvas.shortcuts.group.viewport": "View",
212
+ "paintCanvas.shortcuts.group.layers": "Layers",
213
+ "paintCanvas.shortcuts.group.history": "History",
214
+ "paintCanvas.shortcuts.group.general": "General",
215
+ "paintCanvas.shortcuts.pan": "Pan while held (back to the last tool when let go)",
216
+ "paintCanvas.shortcuts.tool-move": "Move",
217
+ "paintCanvas.shortcuts.tool-brush": "Brush",
218
+ "paintCanvas.shortcuts.tool-eraser": "Eraser",
219
+ "paintCanvas.shortcuts.tool-rectangle-mask": "Rectangle mask",
220
+ "paintCanvas.shortcuts.tool-circle-mask": "Circle mask",
221
+ "paintCanvas.shortcuts.tool-polygon-mask": "Polygon mask",
222
+ "paintCanvas.shortcuts.tool-freehand-mask": "Freehand mask",
223
+ "paintCanvas.shortcuts.tool-colour-sample": "Colour sampler",
224
+ "paintCanvas.shortcuts.tool-zoom": "Zoom",
225
+ "paintCanvas.shortcuts.brush-bigger": "Increase size",
226
+ "paintCanvas.shortcuts.brush-smaller": "Decrease size",
227
+ "paintCanvas.shortcuts.brush-more-opaque": "Increase opacity",
228
+ "paintCanvas.shortcuts.brush-less-opaque": "Decrease opacity",
229
+ "paintCanvas.shortcuts.cut": "Cut",
230
+ "paintCanvas.shortcuts.copy": "Copy",
231
+ "paintCanvas.shortcuts.paste": "Paste",
232
+ "paintCanvas.shortcuts.select-all": "Select all",
233
+ "paintCanvas.shortcuts.invert-selection": "Invert selection",
234
+ "paintCanvas.shortcuts.deselect": "Deselect",
235
+ "paintCanvas.shortcuts.fill-foreground": "Fill with foreground colour",
236
+ "paintCanvas.shortcuts.fill-background": "Fill with background colour",
237
+ "paintCanvas.shortcuts.swap-colours": "Swap foreground and background colours",
238
+ "paintCanvas.shortcuts.zoom-in": "Zoom in",
239
+ "paintCanvas.shortcuts.zoom-out": "Zoom out",
240
+ "paintCanvas.shortcuts.reset-zoom": "Zoom to 100%",
241
+ "paintCanvas.shortcuts.toggle-interface": "Show or hide the interface",
242
+ "paintCanvas.shortcuts.save": "Save as PNG",
243
+ "paintCanvas.shortcuts.undo": "Undo",
244
+ "paintCanvas.shortcuts.redo": "Redo",
245
+ "paintCanvas.shortcuts.delete": "Delete the masked area",
246
+ "paintCanvas.shortcuts.cancel": "Cancel",
247
+ "paintCanvas.shortcuts.commit": "Apply",
248
+ "paintCanvas.shortcuts.layerOpacity": "Set layer opacity to {percent}%",
249
+ "paintCanvas.settings.import": "Import settings",
250
+ "paintCanvas.settings.export": "Export settings",
251
+ "paintCanvas.settings.importFile": "Import settings file",
252
+ "paintCanvas.settings.imported": "Settings imported",
253
+ "paintCanvas.settings.fileIncompatible": "Settings JSON file not compatible",
254
+ "paintCanvas.settings.fileReadFailed": "Failed to read settings JSON file",
255
+ "paintCanvas.settings.exportFailed": "Error exporting settings JSON file",
170
256
  "paintCanvas.stats.label": "Canvas details",
171
257
  "paintCanvas.stats.size": "Canvas: {width} × {height} px",
172
258
  "paintCanvas.stats.zoom": "Zoom: {zoom}",
@@ -25,8 +25,34 @@
25
25
  "paintCanvas.tool.zoom": "Zoom",
26
26
  "paintCanvas.tool.colourSample": "Color sample",
27
27
  "paintCanvas.tool.withShortcut": "{tool} ({shortcut})",
28
+ "paintCanvas.colours.foreground": "Foreground color ({colour})",
29
+ "paintCanvas.colours.background": "Background color ({colour})",
30
+ "paintCanvas.palette.label": "Color palette",
31
+ "paintCanvas.palette.hex": "Hex color",
32
+ "paintCanvas.palette.model": "Color model",
33
+ "paintCanvas.palette.rgb": "RGB",
34
+ "paintCanvas.palette.hsl": "HSL",
35
+ "paintCanvas.palette.red": "Red",
36
+ "paintCanvas.palette.green": "Green",
37
+ "paintCanvas.palette.blue": "Blue",
38
+ "paintCanvas.palette.hue": "Hue",
39
+ "paintCanvas.palette.saturation": "Saturation",
40
+ "paintCanvas.palette.lightness": "Lightness",
41
+ "paintCanvas.palette.saved": "Saved colors",
42
+ "paintCanvas.palette.add": "Save {colour} to the palette",
43
+ "paintCanvas.palette.colourActions": "{colour} actions",
44
+ "paintCanvas.palette.deleteColour": "Delete color",
45
+ "paintCanvas.palette.deleteMessage": "Do you want to delete this color?",
46
+ "paintCanvas.palette.deleteConfirm": "Yes, delete color",
47
+ "paintCanvas.palette.import": "Import",
48
+ "paintCanvas.palette.export": "Export",
49
+ "paintCanvas.palette.importFile": "Import color palette file",
50
+ "paintCanvas.palette.imported.one": "Added {count} color",
51
+ "paintCanvas.palette.imported.other": "Added {count} colors",
52
+ "paintCanvas.palette.fileIncompatible": "Color palette JSON file not compatible",
53
+ "paintCanvas.palette.fileReadFailed": "Failed to read color palette JSON file",
54
+ "paintCanvas.palette.exportFailed": "Error exporting color palette JSON file",
28
55
  "paintCanvas.toolbar.label": "Tools",
29
- "paintCanvas.toolbar.currentColour": "Current color",
30
56
  "paintCanvas.toolbar.layers": "Layers",
31
57
  "paintCanvas.toolbar.menu": "Menu",
32
58
  "paintCanvas.toolbar.undoWithShortcut": "Undo ({shortcut})",
@@ -167,6 +193,66 @@
167
193
  "paintCanvas.autosave.elsewhereMessage": "This drawing is open in another window or tab, and only one can draw on it at a time. Choose \"Draw here instead\" to continue in this window; the other one stops.",
168
194
  "paintCanvas.autosave.takeOver": "Draw here instead",
169
195
  "paintCanvas.autosave.failed": "Couldn't keep the drawing in this browser",
196
+ "paintCanvas.settings.saveFailed": "Couldn't keep your settings in this browser",
197
+ "paintCanvas.shortcuts.title": "Keyboard shortcuts",
198
+ "paintCanvas.shortcuts.recordHint": "Press the keys to use",
199
+ "paintCanvas.shortcuts.none": "None",
200
+ "paintCanvas.shortcuts.remove": "Remove the {action} shortcut",
201
+ "paintCanvas.shortcuts.fixed": "Can't be changed",
202
+ "paintCanvas.shortcuts.fixedUsed": "{keys} is used by {action}, which can't be changed",
203
+ "paintCanvas.shortcuts.moved": "{keys} moved from {from} to {to}",
204
+ "paintCanvas.shortcuts.reset": "Reset to defaults",
205
+ "paintCanvas.shortcuts.wasReset": "Keyboard shortcuts reset to defaults",
206
+ "paintCanvas.shortcuts.group.tools": "Tools",
207
+ "paintCanvas.shortcuts.group.brushes": "Brushes & erasers",
208
+ "paintCanvas.shortcuts.group.clipboard": "Clipboard",
209
+ "paintCanvas.shortcuts.group.masking": "Masking",
210
+ "paintCanvas.shortcuts.group.fills": "Fills and colors",
211
+ "paintCanvas.shortcuts.group.viewport": "View",
212
+ "paintCanvas.shortcuts.group.layers": "Layers",
213
+ "paintCanvas.shortcuts.group.history": "History",
214
+ "paintCanvas.shortcuts.group.general": "General",
215
+ "paintCanvas.shortcuts.pan": "Pan while held (back to the last tool when let go)",
216
+ "paintCanvas.shortcuts.tool-move": "Move",
217
+ "paintCanvas.shortcuts.tool-brush": "Brush",
218
+ "paintCanvas.shortcuts.tool-eraser": "Eraser",
219
+ "paintCanvas.shortcuts.tool-rectangle-mask": "Rectangle mask",
220
+ "paintCanvas.shortcuts.tool-circle-mask": "Circle mask",
221
+ "paintCanvas.shortcuts.tool-polygon-mask": "Polygon mask",
222
+ "paintCanvas.shortcuts.tool-freehand-mask": "Freehand mask",
223
+ "paintCanvas.shortcuts.tool-colour-sample": "Color sampler",
224
+ "paintCanvas.shortcuts.tool-zoom": "Zoom",
225
+ "paintCanvas.shortcuts.brush-bigger": "Increase size",
226
+ "paintCanvas.shortcuts.brush-smaller": "Decrease size",
227
+ "paintCanvas.shortcuts.brush-more-opaque": "Increase opacity",
228
+ "paintCanvas.shortcuts.brush-less-opaque": "Decrease opacity",
229
+ "paintCanvas.shortcuts.cut": "Cut",
230
+ "paintCanvas.shortcuts.copy": "Copy",
231
+ "paintCanvas.shortcuts.paste": "Paste",
232
+ "paintCanvas.shortcuts.select-all": "Select all",
233
+ "paintCanvas.shortcuts.invert-selection": "Invert selection",
234
+ "paintCanvas.shortcuts.deselect": "Deselect",
235
+ "paintCanvas.shortcuts.fill-foreground": "Fill with foreground color",
236
+ "paintCanvas.shortcuts.fill-background": "Fill with background color",
237
+ "paintCanvas.shortcuts.swap-colours": "Swap foreground and background colors",
238
+ "paintCanvas.shortcuts.zoom-in": "Zoom in",
239
+ "paintCanvas.shortcuts.zoom-out": "Zoom out",
240
+ "paintCanvas.shortcuts.reset-zoom": "Zoom to 100%",
241
+ "paintCanvas.shortcuts.toggle-interface": "Show or hide the interface",
242
+ "paintCanvas.shortcuts.save": "Save as PNG",
243
+ "paintCanvas.shortcuts.undo": "Undo",
244
+ "paintCanvas.shortcuts.redo": "Redo",
245
+ "paintCanvas.shortcuts.delete": "Delete the masked area",
246
+ "paintCanvas.shortcuts.cancel": "Cancel",
247
+ "paintCanvas.shortcuts.commit": "Apply",
248
+ "paintCanvas.shortcuts.layerOpacity": "Set layer opacity to {percent}%",
249
+ "paintCanvas.settings.import": "Import settings",
250
+ "paintCanvas.settings.export": "Export settings",
251
+ "paintCanvas.settings.importFile": "Import settings file",
252
+ "paintCanvas.settings.imported": "Settings imported",
253
+ "paintCanvas.settings.fileIncompatible": "Settings JSON file not compatible",
254
+ "paintCanvas.settings.fileReadFailed": "Failed to read settings JSON file",
255
+ "paintCanvas.settings.exportFailed": "Error exporting settings JSON file",
170
256
  "paintCanvas.stats.label": "Canvas details",
171
257
  "paintCanvas.stats.size": "Canvas: {width} × {height} px",
172
258
  "paintCanvas.stats.zoom": "Zoom: {zoom}",
package/locales/fr.json CHANGED
@@ -25,8 +25,34 @@
25
25
  "paintCanvas.tool.zoom": "Zoom",
26
26
  "paintCanvas.tool.colourSample": "Pipette",
27
27
  "paintCanvas.tool.withShortcut": "{tool} ({shortcut})",
28
+ "paintCanvas.colours.foreground": "Couleur de premier plan ({colour})",
29
+ "paintCanvas.colours.background": "Couleur d'arrière-plan ({colour})",
30
+ "paintCanvas.palette.label": "Palette de couleurs",
31
+ "paintCanvas.palette.hex": "Couleur hexadécimale",
32
+ "paintCanvas.palette.model": "Modèle de couleur",
33
+ "paintCanvas.palette.rgb": "RVB",
34
+ "paintCanvas.palette.hsl": "TSL",
35
+ "paintCanvas.palette.red": "Rouge",
36
+ "paintCanvas.palette.green": "Vert",
37
+ "paintCanvas.palette.blue": "Bleu",
38
+ "paintCanvas.palette.hue": "Teinte",
39
+ "paintCanvas.palette.saturation": "Saturation",
40
+ "paintCanvas.palette.lightness": "Luminosité",
41
+ "paintCanvas.palette.saved": "Couleurs enregistrées",
42
+ "paintCanvas.palette.add": "Enregistrer {colour} dans la palette",
43
+ "paintCanvas.palette.colourActions": "Actions pour {colour}",
44
+ "paintCanvas.palette.deleteColour": "Supprimer la couleur",
45
+ "paintCanvas.palette.deleteMessage": "Voulez-vous supprimer cette couleur ?",
46
+ "paintCanvas.palette.deleteConfirm": "Oui, supprimer la couleur",
47
+ "paintCanvas.palette.import": "Importer",
48
+ "paintCanvas.palette.export": "Exporter",
49
+ "paintCanvas.palette.importFile": "Importer un fichier de palette de couleurs",
50
+ "paintCanvas.palette.imported.one": "{count} couleur ajoutée",
51
+ "paintCanvas.palette.imported.other": "{count} couleurs ajoutées",
52
+ "paintCanvas.palette.fileIncompatible": "Fichier JSON de palette de couleurs incompatible",
53
+ "paintCanvas.palette.fileReadFailed": "Échec de la lecture du fichier JSON de palette de couleurs",
54
+ "paintCanvas.palette.exportFailed": "Erreur lors de l'exportation du fichier JSON de palette de couleurs",
28
55
  "paintCanvas.toolbar.label": "Outils",
29
- "paintCanvas.toolbar.currentColour": "Couleur actuelle",
30
56
  "paintCanvas.toolbar.layers": "Calques",
31
57
  "paintCanvas.toolbar.menu": "Menu",
32
58
  "paintCanvas.toolbar.undoWithShortcut": "Annuler ({shortcut})",
@@ -167,6 +193,66 @@
167
193
  "paintCanvas.autosave.elsewhereMessage": "Ce dessin est ouvert dans une autre fenêtre ou un autre onglet, et un seul peut dessiner dessus à la fois. Choisissez « Dessiner ici » pour continuer dans cette fenêtre ; l’autre s’arrête.",
168
194
  "paintCanvas.autosave.takeOver": "Dessiner ici",
169
195
  "paintCanvas.autosave.failed": "Impossible de conserver le dessin dans ce navigateur",
196
+ "paintCanvas.settings.saveFailed": "Impossible de conserver vos réglages dans ce navigateur",
197
+ "paintCanvas.shortcuts.title": "Raccourcis clavier",
198
+ "paintCanvas.shortcuts.recordHint": "Appuyez sur les touches à utiliser",
199
+ "paintCanvas.shortcuts.none": "Aucun",
200
+ "paintCanvas.shortcuts.remove": "Supprimer le raccourci de {action}",
201
+ "paintCanvas.shortcuts.fixed": "Non modifiable",
202
+ "paintCanvas.shortcuts.fixedUsed": "{keys} est utilisé par {action}, qui n'est pas modifiable",
203
+ "paintCanvas.shortcuts.moved": "{keys} déplacé de {from} vers {to}",
204
+ "paintCanvas.shortcuts.reset": "Rétablir les valeurs par défaut",
205
+ "paintCanvas.shortcuts.wasReset": "Raccourcis clavier rétablis",
206
+ "paintCanvas.shortcuts.group.tools": "Outils",
207
+ "paintCanvas.shortcuts.group.brushes": "Pinceaux et gommes",
208
+ "paintCanvas.shortcuts.group.clipboard": "Presse-papiers",
209
+ "paintCanvas.shortcuts.group.masking": "Masques",
210
+ "paintCanvas.shortcuts.group.fills": "Remplissages et couleurs",
211
+ "paintCanvas.shortcuts.group.viewport": "Affichage",
212
+ "paintCanvas.shortcuts.group.layers": "Calques",
213
+ "paintCanvas.shortcuts.group.history": "Historique",
214
+ "paintCanvas.shortcuts.group.general": "Général",
215
+ "paintCanvas.shortcuts.pan": "Déplacer la vue tant que maintenu (retour à l'outil précédent au relâchement)",
216
+ "paintCanvas.shortcuts.tool-move": "Déplacer",
217
+ "paintCanvas.shortcuts.tool-brush": "Pinceau",
218
+ "paintCanvas.shortcuts.tool-eraser": "Gomme",
219
+ "paintCanvas.shortcuts.tool-rectangle-mask": "Masque rectangulaire",
220
+ "paintCanvas.shortcuts.tool-circle-mask": "Masque circulaire",
221
+ "paintCanvas.shortcuts.tool-polygon-mask": "Masque polygonal",
222
+ "paintCanvas.shortcuts.tool-freehand-mask": "Masque à main levée",
223
+ "paintCanvas.shortcuts.tool-colour-sample": "Pipette",
224
+ "paintCanvas.shortcuts.tool-zoom": "Zoom",
225
+ "paintCanvas.shortcuts.brush-bigger": "Augmenter la taille",
226
+ "paintCanvas.shortcuts.brush-smaller": "Réduire la taille",
227
+ "paintCanvas.shortcuts.brush-more-opaque": "Augmenter l'opacité",
228
+ "paintCanvas.shortcuts.brush-less-opaque": "Réduire l'opacité",
229
+ "paintCanvas.shortcuts.cut": "Couper",
230
+ "paintCanvas.shortcuts.copy": "Copier",
231
+ "paintCanvas.shortcuts.paste": "Coller",
232
+ "paintCanvas.shortcuts.select-all": "Tout sélectionner",
233
+ "paintCanvas.shortcuts.invert-selection": "Inverser la sélection",
234
+ "paintCanvas.shortcuts.deselect": "Désélectionner",
235
+ "paintCanvas.shortcuts.fill-foreground": "Remplir avec la couleur de premier plan",
236
+ "paintCanvas.shortcuts.fill-background": "Remplir avec la couleur d'arrière-plan",
237
+ "paintCanvas.shortcuts.swap-colours": "Inverser les couleurs de premier plan et d'arrière-plan",
238
+ "paintCanvas.shortcuts.zoom-in": "Zoom avant",
239
+ "paintCanvas.shortcuts.zoom-out": "Zoom arrière",
240
+ "paintCanvas.shortcuts.reset-zoom": "Zoom à 100 %",
241
+ "paintCanvas.shortcuts.toggle-interface": "Afficher ou masquer l'interface",
242
+ "paintCanvas.shortcuts.save": "Enregistrer en PNG",
243
+ "paintCanvas.shortcuts.undo": "Annuler",
244
+ "paintCanvas.shortcuts.redo": "Rétablir",
245
+ "paintCanvas.shortcuts.delete": "Supprimer la zone masquée",
246
+ "paintCanvas.shortcuts.cancel": "Annuler l'action en cours",
247
+ "paintCanvas.shortcuts.commit": "Appliquer",
248
+ "paintCanvas.shortcuts.layerOpacity": "Régler l'opacité du calque à {percent} %",
249
+ "paintCanvas.settings.import": "Importer les réglages",
250
+ "paintCanvas.settings.export": "Exporter les réglages",
251
+ "paintCanvas.settings.importFile": "Importer un fichier de réglages",
252
+ "paintCanvas.settings.imported": "Réglages importés",
253
+ "paintCanvas.settings.fileIncompatible": "Fichier JSON de réglages incompatible",
254
+ "paintCanvas.settings.fileReadFailed": "Échec de la lecture du fichier JSON de réglages",
255
+ "paintCanvas.settings.exportFailed": "Erreur lors de l'exportation du fichier JSON de réglages",
170
256
  "paintCanvas.stats.label": "Détails de la toile",
171
257
  "paintCanvas.stats.size": "Toile : {width} × {height} px",
172
258
  "paintCanvas.stats.zoom": "Zoom : {zoom}",