/
0 ? -0.25 : 0.25;
const oldScale = zoomScale;
zoomScale = Math.max(1, Math.min(zoomMaxScale, zoomScale + delta));
if (oldScale === 1 && zoomScale > 1) {
const r = $el.getBoundingClientRect();
const cx = $event.clientX - (r.left + r.width/2);
const cy = $event.clientY - (r.top + r.height/2);
zoomPanX = -cx * (zoomScale-1)/zoomScale;
zoomPanY = -cy * (zoomScale-1)/zoomScale;
} else if (zoomScale > 1) {
zoomPanX = zoomPanX * (zoomScale / oldScale);
zoomPanY = zoomPanY * (zoomScale / oldScale);
}
if (zoomScale <= 1) { resetZoom(); } else { clampPan(); }
"
class="relative w-full h-full flex items-center justify-center p-4 [touch-action:none]"
:class="zoomScale > 1 ? (zoomPanning ? 'cursor-grabbing' : 'cursor-grab') : (modalTotal > 1 ? (modalDragging ? 'cursor-grabbing' : 'cursor-grab') : '')"
@mousedown="modalDragStart($event)"
@mousemove="modalDragMove($event)"
@mouseup="modalDragEnd($event)"
@mouseleave="modalDragEnd($event)"
@touchstart="modalDragStart($event)"
@touchmove="modalDragMove($event)"
@touchend="modalDragEnd($event)"
:style="modalDragOffset ? `transform: translateX(${modalDragOffset}px); transition: none;` : 'transition: transform 0.2s ease-out;'">
measureZoomCeiling($el))"
@click.stop
@dblclick.stop.prevent="if (lastInputWasTouch) return; zoomAnimating = true; if (zoomScale > 1) { resetZoom(); } else { const r = $el.getBoundingClientRect(); const cx = $event.clientX - (r.left + r.width/2); const cy = $event.clientY - (r.top + r.height/2); zoomScale = Math.min(2.5, zoomMaxScale); zoomPanX = -cx * (zoomScale-1)/zoomScale; zoomPanY = -cy * (zoomScale-1)/zoomScale; clampPan(); } setTimeout(() => { zoomAnimating = false; }, 300);"
draggable="false"
:style="modalActive === largeIdx
? 'position:relative;transform: scale(' + zoomScale + ') translate(' + (zoomPanX / zoomScale) + 'px, ' + (zoomPanY / zoomScale) + 'px); transform-origin: center center; will-change: transform; transition: ' + (zoomAnimating ? 'transform 0.3s ease-out' : (zoomScale > 1 ? 'none' : 'transform 0.2s ease-out')) + ';'
: ''" />
I Am Not Okay
📚English books (pdf)
€ 2.99
A gentle guide helping children understand their feelings, express their emotions, and know when to ask for help
I Am Not Okay
Feelings are a natural part of life. Sometimes we feel happy, and sometimes we feel sad, angry, afraid, worried, or overwhelmed. Every feeling matters, and every child deserves to feel safe expressing what is inside.
I Am Not Okayis a gentle and age-appropriate book that helps children and young readers understand their emotions and express their feelings in a safe and healthy way—without shame or fear of being judged.
Through simple and meaningful guidance, readers learn to recognize their feelings, listen to what those feelings are telling them, talk about what they are experiencing, and know when it is important to ask for help from a trusted adult.
The book also gives parents and caregivers an opportunity to start honest, supportive conversations about emotions and emotional well-being.
Because saying I Am Not Okay is not a sign of weakness. Sometimes, it is the first brave step toward feeling okay again.
Format:Paperback
Pages:25
Language: English
Age: Children & Young Readers
The book is also available in paperback on Amazon.
https://a.co/d/0a0pJ0Po| Category | 📚English books (pdf) |
|---|---|
| Author | Maysan Hatem |
| Number of Pages | 25 |
No reviews yet. Be the first to review this product!
Login to write a review
Related Products
€ 2.99