Julian Bilcke
commited on
Commit
Β·
a40bf40
1
Parent(s):
aa15a35
print test
Browse files- src/app/globals.css +6 -0
- src/app/interface/bottom-bar/index.tsx +13 -7
- src/app/interface/panel/index.tsx +1 -0
- src/app/interface/top-menu/index.tsx +1 -0
- src/app/interface/zoom/index.tsx +1 -0
- src/app/main.tsx +6 -1
- tailwind.config.js +3 -0
src/app/globals.css
CHANGED
|
@@ -25,3 +25,9 @@ body {
|
|
| 25 |
)
|
| 26 |
rgb(var(--background-start-rgb));
|
| 27 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 25 |
)
|
| 26 |
rgb(var(--background-start-rgb));
|
| 27 |
}
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
/* this is the trick to bypass the style={{}} attribute when printing */
|
| 31 |
+
@media print {
|
| 32 |
+
.comic-page[style] { width: 100vw !important; }
|
| 33 |
+
}
|
src/app/interface/bottom-bar/index.tsx
CHANGED
|
@@ -3,26 +3,32 @@ import { Button } from "@/components/ui/button"
|
|
| 3 |
import { cn } from "@/lib/utils"
|
| 4 |
|
| 5 |
export function BottomBar() {
|
| 6 |
-
const download = useStore(state => state.download)
|
| 7 |
const isGeneratingStory = useStore(state => state.isGeneratingStory)
|
| 8 |
const prompt = useStore(state => state.prompt)
|
| 9 |
const panelGenerationStatus = useStore(state => state.panelGenerationStatus)
|
| 10 |
|
| 11 |
-
const
|
|
|
|
| 12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
return (
|
| 14 |
<div className={cn(
|
| 15 |
-
`
|
|
|
|
| 16 |
`flex flex-row`,
|
| 17 |
`animation-all duration-300 ease-in-out`,
|
| 18 |
isGeneratingStory ? `scale-0 opacity-0` : ``,
|
| 19 |
)}>
|
| 20 |
<div>
|
| 21 |
-
<Button
|
| 22 |
-
|
| 23 |
-
disabled
|
| 24 |
>{
|
| 25 |
-
remainingImages ?
|
| 26 |
}</Button>
|
| 27 |
</div>
|
| 28 |
</div>
|
|
|
|
| 3 |
import { cn } from "@/lib/utils"
|
| 4 |
|
| 5 |
export function BottomBar() {
|
| 6 |
+
// const download = useStore(state => state.download)
|
| 7 |
const isGeneratingStory = useStore(state => state.isGeneratingStory)
|
| 8 |
const prompt = useStore(state => state.prompt)
|
| 9 |
const panelGenerationStatus = useStore(state => state.panelGenerationStatus)
|
| 10 |
|
| 11 |
+
const allStatus = Object.values(panelGenerationStatus)
|
| 12 |
+
const remainingImages = allStatus.reduce((acc, s) => (acc + (s ? 1 : 0)), 0)
|
| 13 |
|
| 14 |
+
|
| 15 |
+
const handlePrint = () => {
|
| 16 |
+
window.print()
|
| 17 |
+
}
|
| 18 |
return (
|
| 19 |
<div className={cn(
|
| 20 |
+
`print:hidden`,
|
| 21 |
+
`fixed bottom-6 right-6`,
|
| 22 |
`flex flex-row`,
|
| 23 |
`animation-all duration-300 ease-in-out`,
|
| 24 |
isGeneratingStory ? `scale-0 opacity-0` : ``,
|
| 25 |
)}>
|
| 26 |
<div>
|
| 27 |
+
<Button
|
| 28 |
+
onClick={handlePrint}
|
| 29 |
+
disabled={!prompt?.length}
|
| 30 |
>{
|
| 31 |
+
remainingImages ? `Print (${allStatus.length - remainingImages}/4 in HD β)` : `Print (in HD)`
|
| 32 |
}</Button>
|
| 33 |
</div>
|
| 34 |
</div>
|
src/app/interface/panel/index.tsx
CHANGED
|
@@ -170,6 +170,7 @@ export function Panel({
|
|
| 170 |
`shadow-sm`,
|
| 171 |
`rounded-sm`,
|
| 172 |
`overflow-hidden`,
|
|
|
|
| 173 |
)
|
| 174 |
|
| 175 |
if (prompt && !rendered.assetUrl) {
|
|
|
|
| 170 |
`shadow-sm`,
|
| 171 |
`rounded-sm`,
|
| 172 |
`overflow-hidden`,
|
| 173 |
+
`print:shadow-none`,
|
| 174 |
)
|
| 175 |
|
| 176 |
if (prompt && !rendered.assetUrl) {
|
src/app/interface/top-menu/index.tsx
CHANGED
|
@@ -34,6 +34,7 @@ export function TopMenu() {
|
|
| 34 |
const [draft, setDraft] = useState("")
|
| 35 |
return (
|
| 36 |
<div className={cn(
|
|
|
|
| 37 |
`z-10 fixed top-0 left-0 right-0`,
|
| 38 |
`flex flex-col md:flex-row w-full justify-between items-center`,
|
| 39 |
`backdrop-blur-xl`,
|
|
|
|
| 34 |
const [draft, setDraft] = useState("")
|
| 35 |
return (
|
| 36 |
<div className={cn(
|
| 37 |
+
`print:hidden`,
|
| 38 |
`z-10 fixed top-0 left-0 right-0`,
|
| 39 |
`flex flex-col md:flex-row w-full justify-between items-center`,
|
| 40 |
`backdrop-blur-xl`,
|
src/app/interface/zoom/index.tsx
CHANGED
|
@@ -9,6 +9,7 @@ export function Zoom() {
|
|
| 9 |
|
| 10 |
return (
|
| 11 |
<div className={cn(
|
|
|
|
| 12 |
// `fixed flex items-center justify-center bottom-8 top-32 right-8 z-10 h-screen`,
|
| 13 |
`fixed flex flex-col items-center bottom-8 top-32 md:top-20 right-6 z-10`,
|
| 14 |
`animation-all duration-300 ease-in-out`,
|
|
|
|
| 9 |
|
| 10 |
return (
|
| 11 |
<div className={cn(
|
| 12 |
+
`print:hidden`,
|
| 13 |
// `fixed flex items-center justify-center bottom-8 top-32 right-8 z-10 h-screen`,
|
| 14 |
`fixed flex flex-col items-center bottom-8 top-32 md:top-20 right-6 z-10`,
|
| 15 |
`animation-all duration-300 ease-in-out`,
|
src/app/main.tsx
CHANGED
|
@@ -108,6 +108,7 @@ export default function Main() {
|
|
| 108 |
<div className={cn(
|
| 109 |
`flex items-start w-screen h-screen pt-[120px] px-16 md:pt-[72px] overflow-y-scroll`,
|
| 110 |
`transition-all duration-200 ease-in-out`,
|
|
|
|
| 111 |
|
| 112 |
fonts.actionman.className
|
| 113 |
)}>
|
|
@@ -115,6 +116,7 @@ export default function Main() {
|
|
| 115 |
<div
|
| 116 |
ref={pageRef}
|
| 117 |
className={cn(
|
|
|
|
| 118 |
`flex flex-col items-center justify-start`,
|
| 119 |
|
| 120 |
// we are trying to reach a "book" look
|
|
@@ -124,7 +126,9 @@ export default function Main() {
|
|
| 124 |
|
| 125 |
`transition-all duration-100 ease-in-out`,
|
| 126 |
`border border-stone-200`,
|
| 127 |
-
`shadow-2xl
|
|
|
|
|
|
|
| 128 |
)}
|
| 129 |
style={{
|
| 130 |
width: `${zoomLevel}%`,
|
|
@@ -138,6 +142,7 @@ export default function Main() {
|
|
| 138 |
<Zoom />
|
| 139 |
<BottomBar />
|
| 140 |
<div className={cn(
|
|
|
|
| 141 |
`z-20 fixed inset-0`,
|
| 142 |
`flex flex-row items-center justify-center`,
|
| 143 |
`transition-all duration-300 ease-in-out`,
|
|
|
|
| 108 |
<div className={cn(
|
| 109 |
`flex items-start w-screen h-screen pt-[120px] px-16 md:pt-[72px] overflow-y-scroll`,
|
| 110 |
`transition-all duration-200 ease-in-out`,
|
| 111 |
+
`print:pt-2 print:px-2`,
|
| 112 |
|
| 113 |
fonts.actionman.className
|
| 114 |
)}>
|
|
|
|
| 116 |
<div
|
| 117 |
ref={pageRef}
|
| 118 |
className={cn(
|
| 119 |
+
`comic-page`,
|
| 120 |
`flex flex-col items-center justify-start`,
|
| 121 |
|
| 122 |
// we are trying to reach a "book" look
|
|
|
|
| 126 |
|
| 127 |
`transition-all duration-100 ease-in-out`,
|
| 128 |
`border border-stone-200`,
|
| 129 |
+
`shadow-2xl`,
|
| 130 |
+
`print:shadow-none`,
|
| 131 |
+
`print:width-screen`
|
| 132 |
)}
|
| 133 |
style={{
|
| 134 |
width: `${zoomLevel}%`,
|
|
|
|
| 142 |
<Zoom />
|
| 143 |
<BottomBar />
|
| 144 |
<div className={cn(
|
| 145 |
+
`print:hidden`,
|
| 146 |
`z-20 fixed inset-0`,
|
| 147 |
`flex flex-row items-center justify-center`,
|
| 148 |
`transition-all duration-300 ease-in-out`,
|
tailwind.config.js
CHANGED
|
@@ -47,6 +47,9 @@ module.exports = {
|
|
| 47 |
"accordion-down": "accordion-down 0.2s ease-out",
|
| 48 |
"accordion-up": "accordion-up 0.2s ease-out",
|
| 49 |
},
|
|
|
|
|
|
|
|
|
|
| 50 |
},
|
| 51 |
},
|
| 52 |
plugins: [require("tailwindcss-animate")],
|
|
|
|
| 47 |
"accordion-down": "accordion-down 0.2s ease-out",
|
| 48 |
"accordion-up": "accordion-up 0.2s ease-out",
|
| 49 |
},
|
| 50 |
+
screens: {
|
| 51 |
+
'print': { 'raw': 'print' },
|
| 52 |
+
}
|
| 53 |
},
|
| 54 |
},
|
| 55 |
plugins: [require("tailwindcss-animate")],
|