tokimeki-image-editor 0.1.1 → 0.1.2

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 (39) hide show
  1. package/dist/components/AdjustTool.svelte +317 -0
  2. package/dist/components/AdjustTool.svelte.d.ts +9 -0
  3. package/dist/components/BlurTool.svelte +613 -0
  4. package/dist/components/BlurTool.svelte.d.ts +15 -0
  5. package/dist/components/Canvas.svelte +214 -0
  6. package/dist/components/Canvas.svelte.d.ts +17 -0
  7. package/dist/components/CropTool.svelte +942 -0
  8. package/dist/components/CropTool.svelte.d.ts +14 -0
  9. package/dist/components/ExportTool.svelte +191 -0
  10. package/dist/components/ExportTool.svelte.d.ts +10 -0
  11. package/dist/components/FilterTool.svelte +492 -0
  12. package/dist/components/FilterTool.svelte.d.ts +12 -0
  13. package/dist/components/ImageEditor.svelte +735 -0
  14. package/dist/components/ImageEditor.svelte.d.ts +12 -0
  15. package/dist/components/RotateTool.svelte +157 -0
  16. package/dist/components/RotateTool.svelte.d.ts +9 -0
  17. package/dist/components/StampTool.svelte +678 -0
  18. package/dist/components/StampTool.svelte.d.ts +15 -0
  19. package/dist/components/Toolbar.svelte +136 -0
  20. package/dist/components/Toolbar.svelte.d.ts +10 -0
  21. package/dist/config/stamps.d.ts +2 -0
  22. package/dist/config/stamps.js +22 -0
  23. package/dist/i18n/index.d.ts +1 -0
  24. package/dist/i18n/index.js +9 -0
  25. package/dist/i18n/locales/en.json +68 -0
  26. package/dist/i18n/locales/ja.json +68 -0
  27. package/dist/index.d.ts +4 -0
  28. package/dist/index.js +5 -0
  29. package/dist/types.d.ts +97 -0
  30. package/dist/types.js +1 -0
  31. package/dist/utils/adjustments.d.ts +26 -0
  32. package/dist/utils/adjustments.js +525 -0
  33. package/dist/utils/canvas.d.ts +30 -0
  34. package/dist/utils/canvas.js +293 -0
  35. package/dist/utils/filters.d.ts +18 -0
  36. package/dist/utils/filters.js +114 -0
  37. package/dist/utils/history.d.ts +15 -0
  38. package/dist/utils/history.js +67 -0
  39. package/package.json +1 -1
@@ -0,0 +1,317 @@
1
+ <script lang="ts">import { _ } from 'svelte-i18n';
2
+ import { X } from 'lucide-svelte';
3
+ let { adjustments, onChange, onClose } = $props();
4
+ function handleChange(key, value) {
5
+ onChange({ [key]: value });
6
+ }
7
+ function resetAll() {
8
+ onChange({
9
+ exposure: 0,
10
+ contrast: 0,
11
+ highlights: 0,
12
+ shadows: 0,
13
+ brightness: 0,
14
+ saturation: 0,
15
+ hue: 0,
16
+ vignette: 0,
17
+ sepia: 0,
18
+ grayscale: 0
19
+ });
20
+ }
21
+ </script>
22
+
23
+ <div class="adjust-tool">
24
+ <div class="tool-header">
25
+ <h3>{$_('editor.adjust')}</h3>
26
+ <button class="close-btn" onclick={onClose} title={$_('editor.close')}>
27
+ <X size={20} />
28
+ </button>
29
+ </div>
30
+
31
+ <div class="adjustments-grid">
32
+ <!-- Exposure -->
33
+ <div class="adjustment-control">
34
+ <label for="exposure">
35
+ <span>{$_('adjustments.exposure')}</span>
36
+ <span class="value">{adjustments.exposure}</span>
37
+ </label>
38
+ <input
39
+ id="exposure"
40
+ type="range"
41
+ min="-100"
42
+ max="100"
43
+ value={adjustments.exposure}
44
+ oninput={(e) => handleChange('exposure', Number(e.currentTarget.value))}
45
+ />
46
+ </div>
47
+
48
+ <!-- Brightness -->
49
+ <div class="adjustment-control">
50
+ <label for="brightness">
51
+ <span>{$_('adjustments.brightness')}</span>
52
+ <span class="value">{adjustments.brightness}</span>
53
+ </label>
54
+ <input
55
+ id="brightness"
56
+ type="range"
57
+ min="-100"
58
+ max="100"
59
+ value={adjustments.brightness}
60
+ oninput={(e) => handleChange('brightness', Number(e.currentTarget.value))}
61
+ />
62
+ </div>
63
+
64
+ <!-- Contrast -->
65
+ <div class="adjustment-control">
66
+ <label for="contrast">
67
+ <span>{$_('adjustments.contrast')}</span>
68
+ <span class="value">{adjustments.contrast}</span>
69
+ </label>
70
+ <input
71
+ id="contrast"
72
+ type="range"
73
+ min="-100"
74
+ max="100"
75
+ value={adjustments.contrast}
76
+ oninput={(e) => handleChange('contrast', Number(e.currentTarget.value))}
77
+ />
78
+ </div>
79
+
80
+ <!-- Highlights -->
81
+ <div class="adjustment-control">
82
+ <label for="highlights">
83
+ <span>{$_('adjustments.highlights')}</span>
84
+ <span class="value">{adjustments.highlights}</span>
85
+ </label>
86
+ <input
87
+ id="highlights"
88
+ type="range"
89
+ min="-100"
90
+ max="100"
91
+ value={adjustments.highlights}
92
+ oninput={(e) => handleChange('highlights', Number(e.currentTarget.value))}
93
+ />
94
+ </div>
95
+
96
+ <!-- Shadows -->
97
+ <div class="adjustment-control">
98
+ <label for="shadows">
99
+ <span>{$_('adjustments.shadows')}</span>
100
+ <span class="value">{adjustments.shadows}</span>
101
+ </label>
102
+ <input
103
+ id="shadows"
104
+ type="range"
105
+ min="-100"
106
+ max="100"
107
+ value={adjustments.shadows}
108
+ oninput={(e) => handleChange('shadows', Number(e.currentTarget.value))}
109
+ />
110
+ </div>
111
+
112
+ <!-- Saturation -->
113
+ <div class="adjustment-control">
114
+ <label for="saturation">
115
+ <span>{$_('adjustments.saturation')}</span>
116
+ <span class="value">{adjustments.saturation}</span>
117
+ </label>
118
+ <input
119
+ id="saturation"
120
+ type="range"
121
+ min="-100"
122
+ max="100"
123
+ value={adjustments.saturation}
124
+ oninput={(e) => handleChange('saturation', Number(e.currentTarget.value))}
125
+ />
126
+ </div>
127
+
128
+ <!-- Hue -->
129
+ <div class="adjustment-control">
130
+ <label for="hue">
131
+ <span>{$_('adjustments.hue')}</span>
132
+ <span class="value">{adjustments.hue}°</span>
133
+ </label>
134
+ <input
135
+ id="hue"
136
+ type="range"
137
+ min="-180"
138
+ max="180"
139
+ value={adjustments.hue}
140
+ oninput={(e) => handleChange('hue', Number(e.currentTarget.value))}
141
+ />
142
+ </div>
143
+
144
+ <!-- Vignette -->
145
+ <div class="adjustment-control">
146
+ <label for="vignette">
147
+ <span>{$_('adjustments.vignette')}</span>
148
+ <span class="value">{adjustments.vignette}</span>
149
+ </label>
150
+ <input
151
+ id="vignette"
152
+ type="range"
153
+ min="-100"
154
+ max="100"
155
+ value={adjustments.vignette}
156
+ oninput={(e) => handleChange('vignette', Number(e.currentTarget.value))}
157
+ />
158
+ </div>
159
+ </div>
160
+
161
+ <div class="tool-actions">
162
+ <button class="btn btn-secondary" onclick={resetAll}>
163
+ {$_('editor.reset')}
164
+ </button>
165
+ </div>
166
+ </div>
167
+
168
+ <style>
169
+ .adjust-tool {
170
+ display: flex;
171
+ flex-direction: column;
172
+ gap: 1rem;
173
+ }
174
+
175
+ .tool-header {
176
+ display: flex;
177
+ justify-content: space-between;
178
+ align-items: center;
179
+ }
180
+
181
+ .tool-header h3 {
182
+ margin: 0;
183
+ font-size: 1.1rem;
184
+ color: #fff;
185
+ }
186
+
187
+ .close-btn {
188
+ display: flex;
189
+ align-items: center;
190
+ justify-content: center;
191
+ padding: 0.25rem;
192
+ background: transparent;
193
+ border: none;
194
+ color: #999;
195
+ cursor: pointer;
196
+ border-radius: 4px;
197
+ transition: all 0.2s;
198
+ }
199
+
200
+ .close-btn:hover {
201
+ background: #444;
202
+ color: #fff;
203
+ }
204
+
205
+ .adjustments-grid {
206
+ display: grid;
207
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
208
+ gap: 1rem;
209
+ }
210
+
211
+ @media (max-width: 767px) {
212
+
213
+ .adjustments-grid {
214
+ grid-template-columns: 1fr;
215
+ gap: 0.75rem;
216
+ max-height: 35vh;
217
+ overflow-y: auto
218
+ }
219
+ }
220
+
221
+ .adjustment-control {
222
+ display: flex;
223
+ flex-direction: column;
224
+ gap: 0.5rem;
225
+ }
226
+
227
+ @media (max-width: 767px) {
228
+
229
+ .adjustment-control {
230
+ gap: 0.3rem
231
+ }
232
+ }
233
+
234
+ .adjustment-control label {
235
+ display: flex;
236
+ justify-content: space-between;
237
+ align-items: center;
238
+ font-size: 0.85rem;
239
+ color: #ccc;
240
+ }
241
+
242
+ @media (max-width: 767px) {
243
+
244
+ .adjustment-control label {
245
+ font-size: 0.8rem
246
+ }
247
+ }
248
+
249
+ .adjustment-control .value {
250
+ color: var(--primary-color, #63b97b);
251
+ font-weight: 600;
252
+ min-width: 3rem;
253
+ text-align: right;
254
+ }
255
+
256
+ .adjustment-control input[type='range'] {
257
+ width: 100%;
258
+ height: 6px;
259
+ background: #444;
260
+ border-radius: 3px;
261
+ outline: none;
262
+ cursor: pointer;
263
+ }
264
+
265
+ .adjustment-control input[type='range']::-webkit-slider-thumb {
266
+ appearance: none;
267
+ width: 16px;
268
+ height: 16px;
269
+ background: var(--primary-color, #63b97b);
270
+ border-radius: 50%;
271
+ cursor: pointer;
272
+ transition: all 0.2s;
273
+ }
274
+
275
+ .adjustment-control input[type='range']::-webkit-slider-thumb:hover {
276
+ background: var(--primary-color, #63b97b);
277
+ transform: scale(1.1);
278
+ }
279
+
280
+ .adjustment-control input[type='range']::-moz-range-thumb {
281
+ width: 16px;
282
+ height: 16px;
283
+ background: var(--primary-color, #63b97b);
284
+ border: none;
285
+ border-radius: 50%;
286
+ cursor: pointer;
287
+ transition: all 0.2s;
288
+ }
289
+
290
+ .adjustment-control input[type='range']::-moz-range-thumb:hover {
291
+ background: var(--primary-color, #63b97b);
292
+ transform: scale(1.1);
293
+ }
294
+
295
+ .tool-actions {
296
+ display: flex;
297
+ justify-content: flex-end;
298
+ gap: 0.5rem;
299
+ }
300
+
301
+ .btn {
302
+ padding: 0.5rem 1rem;
303
+ border: none;
304
+ border-radius: 4px;
305
+ cursor: pointer;
306
+ font-size: 0.9rem;
307
+ transition: all 0.2s;
308
+ }
309
+
310
+ .btn-secondary {
311
+ background: #666;
312
+ color: #fff;
313
+ }
314
+
315
+ .btn-secondary:hover {
316
+ background: #777;
317
+ }</style>
@@ -0,0 +1,9 @@
1
+ import type { AdjustmentsState } from '../types';
2
+ interface Props {
3
+ adjustments: AdjustmentsState;
4
+ onChange: (adjustments: Partial<AdjustmentsState>) => void;
5
+ onClose: () => void;
6
+ }
7
+ declare const AdjustTool: import("svelte").Component<Props, {}, "">;
8
+ type AdjustTool = ReturnType<typeof AdjustTool>;
9
+ export default AdjustTool;