+
140 ? `border-b-[2px] md:border-b-[4px]` :
+ zoomLevel > 120 ? `border-b-[1.5px] md:border-b-[3px]` :
+ zoomLevel > 90 ? `border-b-[1px] md:border-b-[2px]` :
+ zoomLevel > 40 ? `border-b-[0.5px] md:border-b-[1px]` :
+ `border-transparent md:border-b-[0.5px]`,
+ `print:border-b-[1.5px]`,
+ `truncate`,
+
+ zoomLevel > 200 ? `p-4 md:p-8` :
+ zoomLevel > 180 ? `p-[14px] md:p-8` :
+ zoomLevel > 160 ? `p-[12px] md:p-[28px]` :
+ zoomLevel > 140 ? `p-[10px] md:p-[26px]` :
+ zoomLevel > 120 ? `p-2 md:p-6` :
+ zoomLevel > 100 ? `p-1.5 md:p-[20px]` :
+ zoomLevel > 90 ? `p-1.5 md:p-4` :
+ zoomLevel > 40 ? `p-1 md:p-2` :
+ `p-0.5 md:p-2`,
+
+ zoomLevel > 220 ? `text-xl md:text-4xl` :
+ zoomLevel > 200 ? `text-lg md:text-3xl` :
+ zoomLevel > 180 ? `text-md md:text-2xl` :
+ zoomLevel > 140 ? `text-2xs md:text-2xl` :
+ zoomLevel > 120 ? `text-3xs md:text-xl` :
+ zoomLevel > 100 ? `text-4xs md:text-lg` :
+ zoomLevel > 90 ? `text-5xs md:text-sm` :
+ zoomLevel > 40 ? `md:text-xs` : `md:text-2xs`,
+
+ showCaptions ? (
+ zoomLevel > 90 ? `block` : `hidden md:block`
+ ) : `hidden`,
+ )}
+ >{caption || ""}
+
+ {rendered.assetUrl &&
+

}
+
+ )
+}
\ No newline at end of file
diff --git a/src/app/interface/progress/index.tsx b/src/app/interface/progress/index.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..ce24276a4b241d185fce5bd306a0c3e339835626
--- /dev/null
+++ b/src/app/interface/progress/index.tsx
@@ -0,0 +1,56 @@
+import { useEffect, useRef, useState } from "react"
+
+import { ProgressBar } from "./progress-bar"
+import { cn } from "@/lib/utils"
+
+export function Progress({
+ isLoading,
+ resetKey = "", // when this key change, this will re-spawn the progress bar
+ className = "",
+}: {
+ isLoading: boolean
+ resetKey?: string
+ className?: string
+}) {
+ const timeoutRef = useRef