@codingfactory/mediables-vue 2.18.0 → 2.18.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.
@@ -1364,3 +1364,154 @@
1364
1364
  transition: none;
1365
1365
  }
1366
1366
  }
1367
+
1368
+ /* ==================== Toolbar: labeled Save button ==================== */
1369
+ /* The Save button carries an explicit "Save" label next to the icon so it
1370
+ reads as the primary action at a glance, on both desktop and mobile. */
1371
+ .vanilla-image-editor-v2 .toolbar-save-labeled {
1372
+ width: auto;
1373
+ min-height: 36px;
1374
+ padding: 0 14px;
1375
+ gap: 6px;
1376
+ font-size: 13px;
1377
+ font-weight: 600;
1378
+ letter-spacing: 0.02em;
1379
+ background: var(--editor-primary);
1380
+ color: #ffffff;
1381
+ border-color: var(--editor-primary);
1382
+ white-space: nowrap;
1383
+ }
1384
+ .vanilla-image-editor-v2 .toolbar-save-labeled:hover:not(:disabled) {
1385
+ background: var(--editor-primary-hover);
1386
+ border-color: var(--editor-primary-hover);
1387
+ }
1388
+ .vanilla-image-editor-v2 .toolbar-save-labeled .btn-icon {
1389
+ display: inline-flex;
1390
+ align-items: center;
1391
+ justify-content: center;
1392
+ }
1393
+ .vanilla-image-editor-v2 .toolbar-save-labeled .btn-icon svg {
1394
+ width: 18px;
1395
+ height: 18px;
1396
+ color: #ffffff;
1397
+ }
1398
+
1399
+ /* Let the toolbar wrap on very narrow widths so Save can never be pushed
1400
+ off the right edge. */
1401
+ .vanilla-image-editor-v2 .editor-toolbar {
1402
+ flex-wrap: wrap;
1403
+ row-gap: var(--editor-spacing-sm);
1404
+ }
1405
+
1406
+ /* ==================== Canvas zoom overlay ==================== */
1407
+ /* Floats over the canvas in the bottom-right corner. Subtle by default so it
1408
+ doesn't obscure the image; lifts on hover/focus. */
1409
+ .vanilla-image-editor-v2 .canvas-zoom-overlay {
1410
+ position: absolute;
1411
+ right: 10px;
1412
+ bottom: 10px;
1413
+ display: inline-flex;
1414
+ align-items: center;
1415
+ gap: 2px;
1416
+ padding: 4px;
1417
+ border-radius: 999px;
1418
+ background: color-mix(in oklab, var(--editor-surface) 82%, transparent);
1419
+ border: 1px solid var(--editor-border-light);
1420
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);
1421
+ backdrop-filter: saturate(1.2) blur(6px);
1422
+ -webkit-backdrop-filter: saturate(1.2) blur(6px);
1423
+ z-index: 25;
1424
+ opacity: 0.85;
1425
+ transition: opacity 0.15s ease;
1426
+ }
1427
+ .vanilla-image-editor-v2 .canvas-zoom-overlay:hover,
1428
+ .vanilla-image-editor-v2 .canvas-zoom-overlay:focus-within {
1429
+ opacity: 1;
1430
+ }
1431
+ .vanilla-image-editor-v2 .canvas-zoom-btn {
1432
+ width: 30px;
1433
+ height: 30px;
1434
+ border-radius: 999px;
1435
+ background: transparent;
1436
+ border: none;
1437
+ }
1438
+ .vanilla-image-editor-v2 .canvas-zoom-btn:hover:not(:disabled) {
1439
+ background: var(--editor-surface-2);
1440
+ }
1441
+ .vanilla-image-editor-v2 .canvas-zoom-btn svg {
1442
+ width: 16px;
1443
+ height: 16px;
1444
+ }
1445
+ .vanilla-image-editor-v2 .canvas-zoom-label {
1446
+ font-size: 11px;
1447
+ font-weight: 600;
1448
+ color: var(--editor-text-muted);
1449
+ min-width: 38px;
1450
+ padding: 0 4px;
1451
+ text-align: center;
1452
+ user-select: none;
1453
+ }
1454
+
1455
+ /* The canvas section is the positioning context for the overlay. */
1456
+ .vanilla-image-editor-v2 .editor-v2-canvas {
1457
+ position: relative;
1458
+ }
1459
+
1460
+ /* ==================== Mobile sticky Save bar ==================== */
1461
+ /* Hidden on desktop — the toolbar's labeled Save is the primary affordance
1462
+ there. On mobile, this wide blue bar sits below the filter drawer so Save
1463
+ is always thumb-reachable regardless of which mode/category is open. */
1464
+ .vanilla-image-editor-v2 .editor-v2-mobile-save-bar {
1465
+ display: none;
1466
+ }
1467
+
1468
+ @media (max-width: 900px) {
1469
+ .vanilla-image-editor-v2 .editor-v2-mobile-save-bar {
1470
+ display: flex;
1471
+ flex: 0 0 auto;
1472
+ padding: 10px 12px calc(10px + env(safe-area-inset-bottom, 0px));
1473
+ background: var(--editor-surface);
1474
+ border-top: 1px solid var(--editor-border);
1475
+ box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.06);
1476
+ position: relative;
1477
+ z-index: 5;
1478
+ }
1479
+
1480
+ .vanilla-image-editor-v2 .editor-v2-mobile-save-bar .mobile-save-btn {
1481
+ flex: 1 1 auto;
1482
+ height: 48px;
1483
+ border-radius: 12px;
1484
+ border: none;
1485
+ background: var(--editor-primary);
1486
+ color: #ffffff;
1487
+ font-size: 16px;
1488
+ font-weight: 600;
1489
+ letter-spacing: 0.02em;
1490
+ display: inline-flex;
1491
+ align-items: center;
1492
+ justify-content: center;
1493
+ gap: 8px;
1494
+ cursor: pointer;
1495
+ transition: background 0.15s ease, transform 0.05s ease;
1496
+ }
1497
+ .vanilla-image-editor-v2 .editor-v2-mobile-save-bar .mobile-save-btn:hover:not(:disabled) {
1498
+ background: var(--editor-primary-hover);
1499
+ }
1500
+ .vanilla-image-editor-v2 .editor-v2-mobile-save-bar .mobile-save-btn:active:not(:disabled) {
1501
+ transform: translateY(1px);
1502
+ }
1503
+ .vanilla-image-editor-v2 .editor-v2-mobile-save-bar .mobile-save-btn:disabled {
1504
+ opacity: 0.5;
1505
+ cursor: not-allowed;
1506
+ }
1507
+ .vanilla-image-editor-v2 .editor-v2-mobile-save-bar .mobile-save-icon {
1508
+ display: inline-flex;
1509
+ align-items: center;
1510
+ justify-content: center;
1511
+ }
1512
+ .vanilla-image-editor-v2 .editor-v2-mobile-save-bar .mobile-save-icon svg {
1513
+ width: 20px;
1514
+ height: 20px;
1515
+ color: #ffffff;
1516
+ }
1517
+ }
@@ -13,7 +13,6 @@ export class Toolbar {
13
13
  * @returns {HTMLElement}
14
14
  */
15
15
  render(): HTMLElement;
16
- _zoomLabel: HTMLElement | undefined;
17
16
  _themeBtn: HTMLElement | undefined;
18
17
  _cropBtn: HTMLElement | undefined;
19
18
  /**
@@ -23,11 +22,6 @@ export class Toolbar {
23
22
  _canRemoveBackground(): any;
24
23
  _updateRemoveBgButton(): void;
25
24
  _setRemoveBgStatus(message: any): void;
26
- /**
27
- * Update zoom display
28
- * @param {number} zoom
29
- */
30
- updateZoom(zoom: number): void;
31
25
  /**
32
26
  * Clean up
33
27
  */
@@ -42,6 +42,7 @@ export class SplitPanelLayout {
42
42
  canvasContainer: HTMLElement;
43
43
  cropOverlay: HTMLElement;
44
44
  };
45
+ _zoomOverlay: HTMLElement | undefined;
45
46
  /**
46
47
  * Accept the externally-constructed crop controls element.
47
48
  * The layout re-parents it into the active shell's crop slot.
@@ -56,6 +57,7 @@ export class SplitPanelLayout {
56
57
  _mountCropControlsInActiveShell(): void;
57
58
  _handleDesktopCategoryChange(): void;
58
59
  _applyMode(mode: any): void;
60
+ _buildCanvasZoomOverlay(): HTMLElement;
59
61
  destroy(): void;
60
62
  }
61
63
  import { CategoryTabs } from './CategoryTabs.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codingfactory/mediables-vue",
3
- "version": "2.18.0",
3
+ "version": "2.18.2",
4
4
  "publishConfig": {
5
5
  "access": "restricted"
6
6
  },