react-dialogger 1.1.141 → 1.1.143

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.
@@ -64,7 +64,6 @@ var jsx_runtime_1 = require("react/jsx-runtime");
64
64
  var react_draggable_1 = __importDefault(require("react-draggable"));
65
65
  var _helpers_1 = require("../helpers/index.js");
66
66
  var React = __importStar(require("react"));
67
- var _icons_1 = require("../icons/index.js");
68
67
  var notistack_1 = require("notistack");
69
68
  var _1 = require("./");
70
69
  var react_1 = require("react");
@@ -73,6 +72,7 @@ var _context_1 = require("../context/index.js");
73
72
  var appLogger_1 = require("../helpers/appLogger");
74
73
  var PlusIcon_1 = __importDefault(require("../icons/PlusIcon"));
75
74
  var MinusIcon_1 = __importDefault(require("../icons/MinusIcon"));
75
+ var go_1 = require("react-icons/go");
76
76
  var DialogContent = function (props) {
77
77
  var _a, _b, _c, _d, _e, _f, _g, _h, _j;
78
78
  var firstUpdate = React.useRef(true);
@@ -81,9 +81,10 @@ var DialogContent = function (props) {
81
81
  var baseOptions = dialogOptions.base;
82
82
  var _l = React.useState(false), fullscreenMode = _l[0], setFullscreenMode = _l[1];
83
83
  var _m = React.useState(null), rect = _m[0], setRect = _m[1];
84
+ var _o = React.useState(!!(baseOptions === null || baseOptions === void 0 ? void 0 : baseOptions.resizeable)), showResizeHint = _o[0], setShowResizeHint = _o[1];
84
85
  var bounds = ((_a = dialog.dialogOptions.base) === null || _a === void 0 ? void 0 : _a.memoBounds) ? (0, _helpers_1.getDialogBounds)(dialog.dialogOptions.base.id) : null;
85
86
  var domZIndex = window.getComputedStyle(dialog.getDom()).zIndex;
86
- var _o = React.useState(((_b = bounds === null || bounds === void 0 ? void 0 : bounds.scale) !== null && _b !== void 0 ? _b : ((_c = dialogOptions === null || dialogOptions === void 0 ? void 0 : dialogOptions.scale) !== null && _c !== void 0 ? _c : 1))), zoom = _o[0], setZoom = _o[1];
87
+ var _p = React.useState(((_b = bounds === null || bounds === void 0 ? void 0 : bounds.scale) !== null && _b !== void 0 ? _b : ((_c = dialogOptions === null || dialogOptions === void 0 ? void 0 : dialogOptions.scale) !== null && _c !== void 0 ? _c : 1))), zoom = _p[0], setZoom = _p[1];
87
88
  var positionSelector = function () {
88
89
  var _a;
89
90
  var _b;
@@ -123,6 +124,13 @@ var DialogContent = function (props) {
123
124
  (0, jumper_animate_1.jumperAnimate)(dialogRef.current);
124
125
  }
125
126
  }, []);
127
+ // Resize hint — auto-hide after animation completes (3.2s lifecycle)
128
+ (0, react_1.useEffect)(function () {
129
+ if (!showResizeHint)
130
+ return;
131
+ var t = setTimeout(function () { return setShowResizeHint(false); }, 3200);
132
+ return function () { return clearTimeout(t); };
133
+ }, []);
126
134
  // Set Rect
127
135
  (0, react_1.useEffect)(function () {
128
136
  setRect(positionSelector());
@@ -220,6 +228,6 @@ var DialogContent = function (props) {
220
228
  setTimeout(function () {
221
229
  event.clientX;
222
230
  });
223
- }, children: (0, jsx_runtime_1.jsx)(MinusIcon_1.default, { size: 22 }) })] }), (0, jsx_runtime_1.jsxs)("span", { className: 'dialog-zoom-label', children: [(Math.round(zoom * 100)), "%"] })] }), (dialog.props.header || dialogOptions.slot.header) && ((0, jsx_runtime_1.jsx)(_1.DialogContentHeader, { ref: headerRef, header: dialog.props.header, bounds: bounds })), (0, jsx_runtime_1.jsx)(_1.DialogContentBody, { ref: bodyRef, body: body }), (0, jsx_runtime_1.jsx)(_1.DialogContentFooter, { ref: footerRef }), (baseOptions.resizeable) && (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: "resize-handle resize-n", style: { zIndex: parseInt(domZIndex) + 1 }, onMouseDown: resizeableObject === null || resizeableObject === void 0 ? void 0 : resizeableObject.resizeHandleMouseDown('n') }), (0, jsx_runtime_1.jsx)("div", { className: "resize-handle resize-s", style: { zIndex: parseInt(domZIndex) + 1 }, onMouseDown: resizeableObject === null || resizeableObject === void 0 ? void 0 : resizeableObject.resizeHandleMouseDown('s') }), (0, jsx_runtime_1.jsx)("div", { className: "resize-handle resize-e", style: { zIndex: parseInt(domZIndex) + 1 }, onMouseDown: resizeableObject === null || resizeableObject === void 0 ? void 0 : resizeableObject.resizeHandleMouseDown('e') }), (0, jsx_runtime_1.jsx)("div", { className: "resize-handle resize-w", style: { zIndex: parseInt(domZIndex) + 1 }, onMouseDown: resizeableObject === null || resizeableObject === void 0 ? void 0 : resizeableObject.resizeHandleMouseDown('w') }), (0, jsx_runtime_1.jsx)("div", { className: "resize-handle resize-nw", style: { zIndex: parseInt(domZIndex) + 2 }, onMouseDown: resizeableObject === null || resizeableObject === void 0 ? void 0 : resizeableObject.resizeHandleMouseDown('nw') }), (0, jsx_runtime_1.jsx)("div", { className: "resize-handle resize-ne", style: { zIndex: parseInt(domZIndex) + 2 }, onMouseDown: resizeableObject === null || resizeableObject === void 0 ? void 0 : resizeableObject.resizeHandleMouseDown('ne') }), (0, jsx_runtime_1.jsx)("div", { className: "resize-handle resize-sw", style: { zIndex: parseInt(domZIndex) + 2 }, onMouseDown: resizeableObject === null || resizeableObject === void 0 ? void 0 : resizeableObject.resizeHandleMouseDown('sw') }), (0, jsx_runtime_1.jsx)("div", { className: "resize-handle resize-se", style: { zIndex: parseInt(domZIndex) + 2 }, onMouseDown: resizeableObject === null || resizeableObject === void 0 ? void 0 : resizeableObject.resizeHandleMouseDown('se'), children: (0, jsx_runtime_1.jsx)(_icons_1.ResizeIcon, { color: '#286e94' }) })] })] }) }) });
231
+ }, children: (0, jsx_runtime_1.jsx)(MinusIcon_1.default, { size: 22 }) })] }), (0, jsx_runtime_1.jsxs)("span", { className: 'dialog-zoom-label', children: [(Math.round(zoom * 100)), "%"] })] }), (dialog.props.header || dialogOptions.slot.header) && ((0, jsx_runtime_1.jsx)(_1.DialogContentHeader, { ref: headerRef, header: dialog.props.header, bounds: bounds })), (0, jsx_runtime_1.jsx)(_1.DialogContentBody, { ref: bodyRef, body: body }), (0, jsx_runtime_1.jsx)(_1.DialogContentFooter, { ref: footerRef }), (baseOptions.resizeable && showResizeHint) && ((0, jsx_runtime_1.jsxs)("div", { className: "resize-hint-overlay", "aria-hidden": "true", children: [(0, jsx_runtime_1.jsx)("div", { className: "rh rh-n", children: (0, jsx_runtime_1.jsx)(go_1.GoArrowUp, { size: 16 }) }), (0, jsx_runtime_1.jsx)("div", { className: "rh rh-ne", children: (0, jsx_runtime_1.jsx)(go_1.GoArrowUpRight, { size: 16 }) }), (0, jsx_runtime_1.jsx)("div", { className: "rh rh-e", children: (0, jsx_runtime_1.jsx)(go_1.GoArrowRight, { size: 16 }) }), (0, jsx_runtime_1.jsx)("div", { className: "rh rh-se", children: (0, jsx_runtime_1.jsx)(go_1.GoArrowDownRight, { size: 16 }) }), (0, jsx_runtime_1.jsx)("div", { className: "rh rh-s", children: (0, jsx_runtime_1.jsx)(go_1.GoArrowDown, { size: 16 }) }), (0, jsx_runtime_1.jsx)("div", { className: "rh rh-sw", children: (0, jsx_runtime_1.jsx)(go_1.GoArrowDownLeft, { size: 16 }) }), (0, jsx_runtime_1.jsx)("div", { className: "rh rh-w", children: (0, jsx_runtime_1.jsx)(go_1.GoArrowLeft, { size: 16 }) }), (0, jsx_runtime_1.jsx)("div", { className: "rh rh-nw", children: (0, jsx_runtime_1.jsx)(go_1.GoArrowUpLeft, { size: 16 }) })] })), (baseOptions.resizeable) && (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: "resize-handle resize-n", style: { zIndex: parseInt(domZIndex) + 1 }, onMouseDown: resizeableObject === null || resizeableObject === void 0 ? void 0 : resizeableObject.resizeHandleMouseDown('n') }), (0, jsx_runtime_1.jsx)("div", { className: "resize-handle resize-s", style: { zIndex: parseInt(domZIndex) + 1 }, onMouseDown: resizeableObject === null || resizeableObject === void 0 ? void 0 : resizeableObject.resizeHandleMouseDown('s') }), (0, jsx_runtime_1.jsx)("div", { className: "resize-handle resize-e", style: { zIndex: parseInt(domZIndex) + 1 }, onMouseDown: resizeableObject === null || resizeableObject === void 0 ? void 0 : resizeableObject.resizeHandleMouseDown('e') }), (0, jsx_runtime_1.jsx)("div", { className: "resize-handle resize-w", style: { zIndex: parseInt(domZIndex) + 1 }, onMouseDown: resizeableObject === null || resizeableObject === void 0 ? void 0 : resizeableObject.resizeHandleMouseDown('w') }), (0, jsx_runtime_1.jsx)("div", { className: "resize-handle resize-nw", style: { zIndex: parseInt(domZIndex) + 2 }, onMouseDown: resizeableObject === null || resizeableObject === void 0 ? void 0 : resizeableObject.resizeHandleMouseDown('nw') }), (0, jsx_runtime_1.jsx)("div", { className: "resize-handle resize-ne", style: { zIndex: parseInt(domZIndex) + 2 }, onMouseDown: resizeableObject === null || resizeableObject === void 0 ? void 0 : resizeableObject.resizeHandleMouseDown('ne') }), (0, jsx_runtime_1.jsx)("div", { className: "resize-handle resize-sw", style: { zIndex: parseInt(domZIndex) + 2 }, onMouseDown: resizeableObject === null || resizeableObject === void 0 ? void 0 : resizeableObject.resizeHandleMouseDown('sw') }), (0, jsx_runtime_1.jsx)("div", { className: "resize-handle resize-se", style: { zIndex: parseInt(domZIndex) + 2 }, onMouseDown: resizeableObject === null || resizeableObject === void 0 ? void 0 : resizeableObject.resizeHandleMouseDown('se') })] })] }) }) });
224
232
  };
225
233
  exports.DialogContent = DialogContent;
@@ -20,19 +20,14 @@ declare class Resizeable {
20
20
  private _startVisualHeight;
21
21
  private _startCssLeft;
22
22
  private _startCssTop;
23
+ private _anchorRight;
24
+ private _anchorBottom;
25
+ private _translateX;
26
+ private _translateY;
23
27
  constructor();
24
28
  setContainer: (container: React.RefObject<HTMLDivElement>, options: DialogOptionsType) => void;
25
- /**
26
- * Read the Draggable component's current CSS transform translation.
27
- * react-draggable applies transform: translate(x, y) to the element.
28
- * We need this to correctly compute absolute CSS position from visual position.
29
- */
30
29
  private getDraggableTranslate;
31
30
  private resizeHandleMouseUp;
32
- /**
33
- * Returns a mousedown handler for the given resize direction.
34
- * Captures start position and visual bounds so mousemove can compute deltas.
35
- */
36
31
  resizeHandleMouseDown: (direction: ResizeDirection) => (e: React.MouseEvent) => void;
37
32
  resizeHandleMouseMove: (e: MouseEvent) => void;
38
33
  init: () => void;
@@ -20,7 +20,6 @@ var Resizeable = /** @class */ (function () {
20
20
  this.onResizeListener = function (callbackFn) {
21
21
  _this._onResizeListener = callbackFn;
22
22
  };
23
- // Multi-direction resize state
24
23
  this._direction = 'se';
25
24
  this._startMouseX = 0;
26
25
  this._startMouseY = 0;
@@ -28,15 +27,14 @@ var Resizeable = /** @class */ (function () {
28
27
  this._startVisualHeight = 0;
29
28
  this._startCssLeft = 0;
30
29
  this._startCssTop = 0;
30
+ this._anchorRight = 0;
31
+ this._anchorBottom = 0;
32
+ this._translateX = 0;
33
+ this._translateY = 0;
31
34
  this.setContainer = function (container, options) {
32
35
  _this._container = container;
33
36
  _this._dialogOptions = options;
34
37
  };
35
- /**
36
- * Read the Draggable component's current CSS transform translation.
37
- * react-draggable applies transform: translate(x, y) to the element.
38
- * We need this to correctly compute absolute CSS position from visual position.
39
- */
40
38
  this.getDraggableTranslate = function () {
41
39
  var _a;
42
40
  var el = (_a = _this._container) === null || _a === void 0 ? void 0 : _a.current;
@@ -56,10 +54,6 @@ var Resizeable = /** @class */ (function () {
56
54
  (0, appLogger_1.appLog)('resizeHandleMouseUp', container === null || container === void 0 ? void 0 : container.getBoundingClientRect().toJSON());
57
55
  (0, _helpers_1.setDialogBounds)(_this._dialogOptions.base.id, __assign(__assign({}, container === null || container === void 0 ? void 0 : container.getBoundingClientRect().toJSON()), { fullscreen: false }), _this._container);
58
56
  };
59
- /**
60
- * Returns a mousedown handler for the given resize direction.
61
- * Captures start position and visual bounds so mousemove can compute deltas.
62
- */
63
57
  this.resizeHandleMouseDown = function (direction) { return function (e) {
64
58
  e.preventDefault();
65
59
  e.stopPropagation();
@@ -67,15 +61,23 @@ var Resizeable = /** @class */ (function () {
67
61
  _this._isResizing = true;
68
62
  _this._startMouseX = e.clientX;
69
63
  _this._startMouseY = e.clientY;
70
- var rect = _this._container.current.getBoundingClientRect();
64
+ var container = _this._container.current;
65
+ var rect = container.getBoundingClientRect();
71
66
  var translate = _this.getDraggableTranslate();
72
- // Visual dimensions from getBoundingClientRect (screen pixels, zoom accounted)
73
67
  _this._startVisualWidth = rect.width;
74
68
  _this._startVisualHeight = rect.height;
75
- // CSS position = visual position minus Draggable's transform offset
69
+ _this._translateX = translate.x;
70
+ _this._translateY = translate.y;
76
71
  _this._startCssLeft = rect.left - translate.x;
77
72
  _this._startCssTop = rect.top - translate.y;
78
- _this._container.current.classList.add('no-select-on-resize');
73
+ _this._anchorRight = rect.right - translate.x;
74
+ _this._anchorBottom = rect.bottom - translate.y;
75
+ // Pin position so justify-self / margin centering cannot shift
76
+ // the left/top edge while resizing from the right or bottom.
77
+ container.style.position = 'absolute';
78
+ container.style.left = _this._startCssLeft + 'px';
79
+ container.style.top = _this._startCssTop + 'px';
80
+ container.classList.add('no-select-on-resize');
79
81
  _this.init();
80
82
  }; };
81
83
  this.resizeHandleMouseMove = function (e) {
@@ -87,43 +89,35 @@ var Resizeable = /** @class */ (function () {
87
89
  var dx = e.clientX - _this._startMouseX;
88
90
  var dy = e.clientY - _this._startMouseY;
89
91
  var dir = _this._direction;
90
- var MIN_SIZE = 100; // screen pixels
92
+ var MIN_SIZE = 100;
91
93
  var newVisualWidth = _this._startVisualWidth;
92
94
  var newVisualHeight = _this._startVisualHeight;
93
95
  var newCssLeft = _this._startCssLeft;
94
96
  var newCssTop = _this._startCssTop;
95
- // East — grow/shrink from the right edge
96
- if (dir.includes('e')) {
97
+ if (dir.includes('e'))
97
98
  newVisualWidth = Math.max(MIN_SIZE, _this._startVisualWidth + dx);
98
- }
99
- // West — grow/shrink from the left edge, compensate position
100
- if (dir.includes('w')) {
101
- newVisualWidth = Math.max(MIN_SIZE, _this._startVisualWidth - dx);
102
- // left edge moves by the amount width actually changed
103
- newCssLeft = _this._startCssLeft + (_this._startVisualWidth - newVisualWidth);
104
- }
105
- // South — grow/shrink from the bottom edge
106
- if (dir.includes('s')) {
99
+ if (dir.includes('s'))
107
100
  newVisualHeight = Math.max(MIN_SIZE, _this._startVisualHeight + dy);
101
+ if (dir.includes('w')) {
102
+ newCssLeft = e.clientX - _this._translateX;
103
+ newVisualWidth = Math.max(MIN_SIZE, _this._anchorRight - newCssLeft);
104
+ newCssLeft = _this._anchorRight - newVisualWidth;
108
105
  }
109
- // North — grow/shrink from the top edge, compensate position
110
106
  if (dir.includes('n')) {
111
- newVisualHeight = Math.max(MIN_SIZE, _this._startVisualHeight - dy);
112
- // top edge moves by the amount height actually changed, clamped to 0
113
- newCssTop = Math.max(0, _this._startCssTop + (_this._startVisualHeight - newVisualHeight));
107
+ newCssTop = e.clientY - _this._translateY;
108
+ newVisualHeight = Math.max(MIN_SIZE, _this._anchorBottom - newCssTop);
109
+ newCssTop = _this._anchorBottom - newVisualHeight;
114
110
  }
115
- // Apply size (divide by scale to get CSS pixels from visual pixels)
116
111
  container.style.width = (newVisualWidth / scale) + 'px';
117
112
  container.style.height = (newVisualHeight / scale) + 'px';
118
- // Apply position for n/w directions
119
113
  if (dir.includes('w') || dir.includes('n')) {
120
114
  container.style.position = 'absolute';
121
115
  container.style.left = newCssLeft + 'px';
122
- container.style.top = Math.max(0, newCssTop) + 'px';
116
+ container.style.top = newCssTop + 'px';
123
117
  }
124
118
  _this._width = newVisualWidth / scale;
125
119
  _this._height = newVisualHeight / scale;
126
- if (typeof _this._onResizeListener === "function") {
120
+ if (typeof _this._onResizeListener === 'function') {
127
121
  _this._onResizeListener(_this._width, _this._height, container.getBoundingClientRect());
128
122
  }
129
123
  };
@@ -147,26 +141,18 @@ var Resizeable = /** @class */ (function () {
147
141
  this._isResizing = false;
148
142
  }
149
143
  Object.defineProperty(Resizeable.prototype, "width", {
150
- get: function () {
151
- return this._width;
152
- },
144
+ get: function () { return this._width; },
153
145
  enumerable: false,
154
146
  configurable: true
155
147
  });
156
148
  Object.defineProperty(Resizeable.prototype, "height", {
157
- get: function () {
158
- return this._height;
159
- },
149
+ get: function () { return this._height; },
160
150
  enumerable: false,
161
151
  configurable: true
162
152
  });
163
153
  Object.defineProperty(Resizeable.prototype, "isResizing", {
164
- get: function () {
165
- return this._isResizing;
166
- },
167
- set: function (value) {
168
- this._isResizing = value;
169
- },
154
+ get: function () { return this._isResizing; },
155
+ set: function (value) { this._isResizing = value; },
170
156
  enumerable: false,
171
157
  configurable: true
172
158
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-dialogger",
3
- "version": "1.1.141",
3
+ "version": "1.1.143",
4
4
  "description": "This package is a continuation of the react-araci package. Due to an error, react-araci was removed, and it has been decided to continue under the new package name react-dialogger",
5
5
  "main": "index.js",
6
6
  "author": "Sueleyman Topaloglu",
@@ -12,7 +12,8 @@
12
12
  "notistack": "^3.0.2",
13
13
  "react": "^18.2.0",
14
14
  "react-dom": "^18.2.0",
15
- "react-draggable": "^4.4.6"
15
+ "react-draggable": "^4.4.6",
16
+ "react-icons": "^5.6.0"
16
17
  },
17
18
  "maintainers": [
18
19
  {
package/styles/dialog.css CHANGED
@@ -322,6 +322,64 @@
322
322
  flex: 0;
323
323
  overflow: hidden;
324
324
  }
325
+ .dialog-main .resize-hint-overlay {
326
+ position: absolute;
327
+ inset: 0;
328
+ pointer-events: none;
329
+ z-index: 500;
330
+ animation: resizeHintFade 3.2s ease-in-out forwards;
331
+ }
332
+ .dialog-main .rh {
333
+ position: absolute;
334
+ pointer-events: none;
335
+ }
336
+ .dialog-main .rh.rh-n {
337
+ top: 8px;
338
+ left: 50%;
339
+ translate: -50% 0;
340
+ animation: rhBounce-n 0.65s ease-in-out 0.5s 3 alternate;
341
+ }
342
+ .dialog-main .rh.rh-s {
343
+ bottom: 8px;
344
+ left: 50%;
345
+ translate: -50% 0;
346
+ animation: rhBounce-s 0.65s ease-in-out 0.5s 3 alternate;
347
+ }
348
+ .dialog-main .rh.rh-e {
349
+ right: 8px;
350
+ top: 50%;
351
+ translate: 0 -50%;
352
+ animation: rhBounce-e 0.65s ease-in-out 0.5s 3 alternate;
353
+ }
354
+ .dialog-main .rh.rh-w {
355
+ left: 8px;
356
+ top: 50%;
357
+ translate: 0 -50%;
358
+ animation: rhBounce-w 0.65s ease-in-out 0.5s 3 alternate;
359
+ }
360
+ .dialog-main .rh.rh-nw {
361
+ top: 8px;
362
+ left: 8px;
363
+ animation: rhBounce-nw 0.65s ease-in-out 0.5s 3 alternate;
364
+ }
365
+ .dialog-main .rh.rh-ne {
366
+ top: 8px;
367
+ right: 8px;
368
+ animation: rhBounce-ne 0.65s ease-in-out 0.5s 3 alternate;
369
+ }
370
+ .dialog-main .rh.rh-sw {
371
+ bottom: 8px;
372
+ left: 8px;
373
+ animation: rhBounce-sw 0.65s ease-in-out 0.5s 3 alternate;
374
+ }
375
+ .dialog-main .rh.rh-se {
376
+ bottom: 8px;
377
+ right: 8px;
378
+ animation: rhBounce-se 0.65s ease-in-out 0.5s 3 alternate;
379
+ }
380
+ .dialog-main .rh svg {
381
+ color: rgba(40, 110, 148, 0.85);
382
+ }
325
383
  .dialog-main .resize-handle {
326
384
  position: absolute;
327
385
  user-select: none;
@@ -391,6 +449,60 @@
391
449
  bottom: 0;
392
450
  }
393
451
 
452
+ @keyframes resizeHintFade {
453
+ 0% {
454
+ opacity: 0;
455
+ }
456
+ 12% {
457
+ opacity: 1;
458
+ }
459
+ 78% {
460
+ opacity: 1;
461
+ }
462
+ 100% {
463
+ opacity: 0;
464
+ }
465
+ }
466
+ @keyframes rhBounce-n {
467
+ to {
468
+ transform: translateY(-5px);
469
+ }
470
+ }
471
+ @keyframes rhBounce-s {
472
+ to {
473
+ transform: translateY(5px);
474
+ }
475
+ }
476
+ @keyframes rhBounce-e {
477
+ to {
478
+ transform: translateX(5px);
479
+ }
480
+ }
481
+ @keyframes rhBounce-w {
482
+ to {
483
+ transform: translateX(-5px);
484
+ }
485
+ }
486
+ @keyframes rhBounce-nw {
487
+ to {
488
+ transform: translate(-4px, -4px);
489
+ }
490
+ }
491
+ @keyframes rhBounce-ne {
492
+ to {
493
+ transform: translate(4px, -4px);
494
+ }
495
+ }
496
+ @keyframes rhBounce-sw {
497
+ to {
498
+ transform: translate(-4px, 4px);
499
+ }
500
+ }
501
+ @keyframes rhBounce-se {
502
+ to {
503
+ transform: translate(4px, 4px);
504
+ }
505
+ }
394
506
  .fullscreen {
395
507
  -webkit-transform: inherit !important;
396
508
  -moz-transform: inherit !important;