@vishu1301/script-writing 1.6.2 → 1.6.3
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.
- package/dist/index.cjs +254 -196
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +255 -197
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -4317,12 +4317,12 @@ function ScriptBreakdownSceneView({
|
|
|
4317
4317
|
))
|
|
4318
4318
|
}
|
|
4319
4319
|
),
|
|
4320
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative bg-[#fdfdfc] shadow-
|
|
4321
|
-
/* @__PURE__ */ jsxRuntime.jsxs("h3", { className: "text-xs font-
|
|
4322
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex items-center justify-center w-8 h-8 rounded-
|
|
4320
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative bg-[#fdfdfc] shadow-2xl shadow-zinc-300/50 border border-zinc-100/80 rounded-sm md:rounded-md flex flex-col w-[210mm] shrink-0 p-8 md:p-12 lg:p-16", children: [
|
|
4321
|
+
/* @__PURE__ */ jsxRuntime.jsxs("h3", { className: "text-xs font-bold text-blumine-800 uppercase tracking-widest mb-6 flex items-center gap-3 font-sans", children: [
|
|
4322
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex items-center justify-center w-8 h-8 rounded-xl bg-gradient-to-b from-white to-blumine-50/60 shadow-inner border border-blumine-200/50 text-blumine-600", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlignLeft, { className: "w-4 h-4" }) }),
|
|
4323
4323
|
"Scene Brief"
|
|
4324
4324
|
] }),
|
|
4325
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative bg-zinc-50/
|
|
4325
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative bg-zinc-50/30 border border-zinc-200/50 rounded-xl p-4 md:p-6 shadow-[inset_0_1.5px_3px_rgba(0,0,0,0.02)] focus-within:bg-white focus-within:border-blumine-300/70 focus-within:shadow-[0_8px_30px_rgba(16,43,60,0.03)] transition-all duration-300", children: [
|
|
4326
4326
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4327
4327
|
"textarea",
|
|
4328
4328
|
{
|
|
@@ -4340,7 +4340,7 @@ function ScriptBreakdownSceneView({
|
|
|
4340
4340
|
{
|
|
4341
4341
|
onClick: onUpdateBrief,
|
|
4342
4342
|
disabled: !sceneBrief || sceneBrief.trim() === "",
|
|
4343
|
-
className: "rounded-
|
|
4343
|
+
className: "rounded-xl bg-gradient-to-b from-blumine-500 to-blumine-600 px-6 py-2.5 text-[13px] font-bold text-white shadow-md shadow-blumine-500/10 transition-all hover:from-blumine-600 hover:to-blumine-700 active:scale-95 disabled:from-zinc-100 disabled:to-zinc-200 disabled:text-zinc-400 disabled:border-zinc-200/50 disabled:shadow-none disabled:cursor-not-allowed cursor-pointer",
|
|
4344
4344
|
children: "Update"
|
|
4345
4345
|
}
|
|
4346
4346
|
) })
|
|
@@ -4351,41 +4351,54 @@ function ScriptBreakdownSceneView({
|
|
|
4351
4351
|
"button",
|
|
4352
4352
|
{
|
|
4353
4353
|
onClick: () => setIsSidebarOpen(true),
|
|
4354
|
-
className: "fixed bottom-6 right-6 z-40 flex h-14 w-14 items-center justify-center rounded-full bg-
|
|
4354
|
+
className: "fixed bottom-6 right-6 z-40 flex h-14 w-14 items-center justify-center rounded-full bg-gradient-to-b from-blumine-500 to-blumine-600 text-white shadow-[0_8px_30px_rgba(32,146,186,0.35)] transition-all duration-200 hover:scale-105 active:scale-95 hover:shadow-[0_10px_35px_rgba(32,146,186,0.45)] xl:hidden border border-white/10",
|
|
4355
4355
|
children: [
|
|
4356
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Tags, { className: "h-
|
|
4357
|
-
tags.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute -top-1 -right-1 flex h-5 w-5 items-center justify-center rounded-full bg-rose-500 text-[10px] font-bold text-white shadow-
|
|
4356
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Tags, { className: "h-5.5 w-5.5", strokeWidth: 2 }),
|
|
4357
|
+
tags.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute -top-1 -right-1 flex h-5 w-5 items-center justify-center rounded-full bg-rose-500 text-[10px] font-bold text-white shadow-md border-2 border-white animate-pulse", children: tags.length })
|
|
4358
4358
|
]
|
|
4359
4359
|
}
|
|
4360
4360
|
),
|
|
4361
4361
|
isSidebarOpen && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4362
4362
|
"div",
|
|
4363
4363
|
{
|
|
4364
|
-
className: "fixed inset-0 z-40 bg-
|
|
4364
|
+
className: "fixed inset-0 z-40 bg-blumine-950/20 backdrop-blur-xs transition-all duration-300 xl:hidden",
|
|
4365
4365
|
onClick: () => setIsSidebarOpen(false)
|
|
4366
4366
|
}
|
|
4367
4367
|
),
|
|
4368
4368
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4369
4369
|
"div",
|
|
4370
4370
|
{
|
|
4371
|
-
className: `fixed xl:absolute top-0 right-0 z-50 h-full w-
|
|
4372
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sticky top-0 flex h-[100dvh] max-h-screen w-full flex-col border-l border-
|
|
4373
|
-
!aiSummarized && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4371
|
+
className: `fixed xl:absolute top-0 right-0 z-50 h-full w-80 transform transition-transform duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] xl:translate-x-0 ${isSidebarOpen ? "translate-x-0 shadow-[-10px_0_40px_rgba(16,43,60,0.08)]" : "translate-x-full"}`,
|
|
4372
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sticky top-0 flex h-[100dvh] max-h-screen w-full flex-col border-l border-blumine-100/50 bg-white/95 backdrop-blur-xl p-4 py-6", children: [
|
|
4373
|
+
!aiSummarized && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-4 shrink-0 flex justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4374
4374
|
summarize_button_default,
|
|
4375
4375
|
{
|
|
4376
4376
|
isSummarizing,
|
|
4377
4377
|
onSummarize
|
|
4378
4378
|
}
|
|
4379
|
-
),
|
|
4380
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex flex-col gap-3 py-
|
|
4381
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex items-center justify-between mb-
|
|
4379
|
+
) }),
|
|
4380
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex flex-col gap-3 py-4 border-t border-blumine-100/40 flex-1 overflow-hidden", children: [
|
|
4381
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex items-center justify-between mb-4 shrink-0 px-1", children: [
|
|
4382
4382
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
4383
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative flex h-
|
|
4384
|
-
/* @__PURE__ */ jsxRuntime.
|
|
4383
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative flex h-10 w-10 items-center justify-center rounded-xl border border-blumine-200/60 bg-gradient-to-b from-white to-blumine-50/50 shadow-inner", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Tags, { className: "h-5 w-5 text-blumine-600", strokeWidth: 1.5 }) }),
|
|
4384
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
4385
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-[14px] font-bold uppercase tracking-wider text-blumine-800 leading-none", children: "Breakdown" }),
|
|
4386
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[11px] text-blumine-400 mt-1 font-medium", children: "Scene element tags" })
|
|
4387
|
+
] })
|
|
4385
4388
|
] }),
|
|
4386
|
-
/* @__PURE__ */ jsxRuntime.
|
|
4389
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
4390
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full border border-blumine-200/50 bg-blumine-50/80 px-2.5 py-0.5 text-[11px] font-bold text-blumine-700 shadow-sm", children: tags.length }),
|
|
4391
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4392
|
+
"button",
|
|
4393
|
+
{
|
|
4394
|
+
onClick: () => setIsSidebarOpen(false),
|
|
4395
|
+
className: "flex xl:hidden h-8 w-8 items-center justify-center rounded-lg text-blumine-400 hover:bg-blumine-100 hover:text-blumine-700 transition duration-150 active:scale-95",
|
|
4396
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-4 w-4" })
|
|
4397
|
+
}
|
|
4398
|
+
)
|
|
4399
|
+
] })
|
|
4387
4400
|
] }),
|
|
4388
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-
|
|
4401
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-3.5 overflow-y-auto overflow-x-hidden pb-4 pr-1 custom-scrollbar", children: CATEGORIES.map((cat) => {
|
|
4389
4402
|
const catTags = tags.filter((t) => t.category_id === cat.id);
|
|
4390
4403
|
if (!catTags.length) return null;
|
|
4391
4404
|
const isExpanded = expandedCategories[cat.id];
|
|
@@ -4396,114 +4409,145 @@ function ScriptBreakdownSceneView({
|
|
|
4396
4409
|
);
|
|
4397
4410
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
4398
4411
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
4399
|
-
"
|
|
4412
|
+
"button",
|
|
4400
4413
|
{
|
|
4401
4414
|
onClick: () => setExpandedCategories((prev) => ({
|
|
4402
4415
|
[cat.id]: !prev[cat.id]
|
|
4403
4416
|
})),
|
|
4404
|
-
className: "group relative flex cursor-pointer items-center gap-3 overflow-hidden rounded-
|
|
4417
|
+
className: "w-full group relative flex cursor-pointer items-center gap-3 overflow-hidden rounded-2xl border px-4 py-3 transition-all duration-300 hover:-translate-y-[1px] hover:shadow-md active:scale-[0.98] text-left outline-none",
|
|
4405
4418
|
style: {
|
|
4406
|
-
|
|
4407
|
-
|
|
4408
|
-
border: `1px solid ${cat.hex}50`
|
|
4419
|
+
borderColor: `${cat.color}25`,
|
|
4420
|
+
background: `linear-gradient(135deg, #ffffff, ${cat.color}08)`
|
|
4409
4421
|
},
|
|
4410
4422
|
children: [
|
|
4411
4423
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4412
4424
|
"div",
|
|
4413
4425
|
{
|
|
4414
|
-
className: "absolute inset-0 opacity-0 transition-opacity duration-300
|
|
4426
|
+
className: "absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none",
|
|
4415
4427
|
style: {
|
|
4416
|
-
background: `radial-gradient(circle at
|
|
4428
|
+
background: `radial-gradient(circle at 12% 50%, ${cat.color}15, transparent 40%)`
|
|
4417
4429
|
}
|
|
4418
4430
|
}
|
|
4419
4431
|
),
|
|
4420
4432
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4421
4433
|
"div",
|
|
4422
4434
|
{
|
|
4423
|
-
className: "relative flex h-
|
|
4435
|
+
className: "relative flex h-8 w-8 shrink-0 items-center justify-center rounded-xl border border-white/80 shadow-inner transition-transform duration-300 group-hover:scale-105",
|
|
4424
4436
|
style: {
|
|
4425
|
-
background: `linear-gradient(135deg, ${cat.color}
|
|
4426
|
-
|
|
4437
|
+
background: `linear-gradient(135deg, ${cat.color}12, ${cat.color}05)`,
|
|
4438
|
+
borderColor: `${cat.color}20`
|
|
4427
4439
|
},
|
|
4428
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(cat.icon, { className: "h-4 w-4", color: cat.color })
|
|
4440
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(cat.icon, { className: "h-4 w-4", style: { color: cat.color } })
|
|
4429
4441
|
}
|
|
4430
4442
|
),
|
|
4431
4443
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4432
4444
|
"span",
|
|
4433
4445
|
{
|
|
4434
|
-
className: "relative text-
|
|
4446
|
+
className: "relative text-xs font-bold tracking-wide transition-colors duration-200",
|
|
4435
4447
|
style: { color: cat.color },
|
|
4436
4448
|
children: cat.label
|
|
4437
4449
|
}
|
|
4438
4450
|
),
|
|
4439
|
-
/* @__PURE__ */ jsxRuntime.
|
|
4440
|
-
|
|
4441
|
-
|
|
4442
|
-
|
|
4443
|
-
|
|
4444
|
-
|
|
4445
|
-
|
|
4446
|
-
|
|
4451
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ml-auto flex items-center gap-1.5 relative", children: [
|
|
4452
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4453
|
+
"span",
|
|
4454
|
+
{
|
|
4455
|
+
className: "rounded-full px-2 py-0.5 text-[10px] font-bold transition-all duration-200",
|
|
4456
|
+
style: {
|
|
4457
|
+
color: cat.color,
|
|
4458
|
+
backgroundColor: `${cat.color}10`,
|
|
4459
|
+
border: `1px solid ${cat.color}15`
|
|
4460
|
+
},
|
|
4461
|
+
children: catTags.length
|
|
4462
|
+
}
|
|
4463
|
+
),
|
|
4464
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4465
|
+
lucideReact.ChevronDown,
|
|
4466
|
+
{
|
|
4467
|
+
className: `h-3.5 w-3.5 transition-transform duration-300 ease-[cubic-bezier(0.2,0,0,1)] ${isExpanded ? "rotate-180" : ""}`,
|
|
4468
|
+
style: { color: cat.color },
|
|
4469
|
+
strokeWidth: 2.5
|
|
4470
|
+
}
|
|
4471
|
+
)
|
|
4472
|
+
] })
|
|
4447
4473
|
]
|
|
4448
4474
|
}
|
|
4449
4475
|
),
|
|
4450
4476
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4451
4477
|
"div",
|
|
4452
4478
|
{
|
|
4453
|
-
className: `grid transition-all duration-500 ease-[cubic-bezier(0.22,1,0.36,1)] ${isExpanded ? "grid-rows-[1fr] opacity-100 mt-
|
|
4454
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4479
|
+
className: `grid transition-all duration-500 ease-[cubic-bezier(0.22,1,0.36,1)] ${isExpanded ? "grid-rows-[1fr] opacity-100 mt-2.5" : "grid-rows-[0fr] opacity-0"}`,
|
|
4480
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4455
4481
|
"div",
|
|
4456
4482
|
{
|
|
4457
|
-
className: "
|
|
4458
|
-
|
|
4459
|
-
|
|
4483
|
+
className: "flex flex-wrap justify-start gap-2 py-2 pl-3 border-l ml-4",
|
|
4484
|
+
style: { borderColor: `${cat.color}18` },
|
|
4485
|
+
children: uniqueTags.map((tag, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
4486
|
+
"div",
|
|
4460
4487
|
{
|
|
4461
|
-
|
|
4462
|
-
|
|
4463
|
-
|
|
4464
|
-
|
|
4465
|
-
|
|
4466
|
-
|
|
4467
|
-
|
|
4468
|
-
|
|
4469
|
-
|
|
4470
|
-
|
|
4471
|
-
|
|
4472
|
-
|
|
4473
|
-
|
|
4474
|
-
|
|
4475
|
-
|
|
4476
|
-
|
|
4477
|
-
|
|
4478
|
-
|
|
4479
|
-
|
|
4480
|
-
|
|
4481
|
-
|
|
4482
|
-
|
|
4483
|
-
|
|
4484
|
-
|
|
4485
|
-
|
|
4486
|
-
|
|
4488
|
+
className: "relative flex flex-col items-start max-w-full",
|
|
4489
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4490
|
+
"span",
|
|
4491
|
+
{
|
|
4492
|
+
title: tag.name,
|
|
4493
|
+
onClick: (e) => {
|
|
4494
|
+
e.stopPropagation();
|
|
4495
|
+
if (cat.id !== "PROP" && cat.id !== "SET_PROP" && cat.id !== "CAST" && cat.id !== "EXTRA")
|
|
4496
|
+
return;
|
|
4497
|
+
if ((editingTagData == null ? void 0 : editingTagData.tag.id) === tag.id) {
|
|
4498
|
+
setEditingTagData(null);
|
|
4499
|
+
} else {
|
|
4500
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
4501
|
+
setPopupPlacement({
|
|
4502
|
+
alignRight: rect.left > window.innerWidth - 240,
|
|
4503
|
+
alignBottom: rect.bottom > window.innerHeight - 250
|
|
4504
|
+
});
|
|
4505
|
+
setTagForm({
|
|
4506
|
+
quantity: tag.quantity || 1,
|
|
4507
|
+
look: tag.look || "",
|
|
4508
|
+
age: tag.age || "",
|
|
4509
|
+
age_range: tag.age_range || [],
|
|
4510
|
+
crowd_type: tag.crowd_type || []
|
|
4511
|
+
});
|
|
4512
|
+
setEditingTagData({
|
|
4513
|
+
tag,
|
|
4514
|
+
catId: cat.id,
|
|
4515
|
+
catColor: cat.color,
|
|
4516
|
+
rect
|
|
4517
|
+
});
|
|
4518
|
+
}
|
|
4519
|
+
},
|
|
4520
|
+
className: `inline-block max-w-full truncate text-[11px] font-bold px-3 py-1.5 rounded-full border transition-all duration-200 select-none ${cat.id === "PROP" || cat.id === "SET_PROP" || cat.id === "CAST" || cat.id === "EXTRA" ? "cursor-pointer hover:scale-[1.03] hover:shadow-sm" : "cursor-default"}`,
|
|
4521
|
+
style: {
|
|
4522
|
+
color: cat.color,
|
|
4523
|
+
background: `linear-gradient(135deg, ${cat.color}08, ${cat.color}03)`,
|
|
4524
|
+
borderColor: `${cat.color}18`
|
|
4525
|
+
},
|
|
4526
|
+
children: [
|
|
4527
|
+
tag.name,
|
|
4528
|
+
(cat.id === "PROP" || cat.id === "SET_PROP") && tag.quantity && tag.quantity > 1 ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4529
|
+
"span",
|
|
4530
|
+
{
|
|
4531
|
+
className: "ml-1.5 font-extrabold px-1 py-0.5 rounded text-[9px] border inline-block",
|
|
4532
|
+
style: {
|
|
4533
|
+
color: cat.color,
|
|
4534
|
+
backgroundColor: `${cat.color}10`,
|
|
4535
|
+
borderColor: `${cat.color}15`
|
|
4536
|
+
},
|
|
4537
|
+
children: [
|
|
4538
|
+
"x",
|
|
4539
|
+
tag.quantity
|
|
4540
|
+
]
|
|
4541
|
+
}
|
|
4542
|
+
) : null
|
|
4543
|
+
]
|
|
4487
4544
|
}
|
|
4488
|
-
|
|
4489
|
-
|
|
4490
|
-
|
|
4491
|
-
|
|
4492
|
-
|
|
4493
|
-
|
|
4494
|
-
},
|
|
4495
|
-
children: [
|
|
4496
|
-
tag.name,
|
|
4497
|
-
(cat.id === "PROP" || cat.id === "SET_PROP") && tag.quantity && tag.quantity > 1 ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ml-1.5 opacity-80 font-bold", children: [
|
|
4498
|
-
"x",
|
|
4499
|
-
tag.quantity
|
|
4500
|
-
] }) : null
|
|
4501
|
-
]
|
|
4502
|
-
}
|
|
4503
|
-
)
|
|
4504
|
-
},
|
|
4505
|
-
index
|
|
4506
|
-
)) }) })
|
|
4545
|
+
)
|
|
4546
|
+
},
|
|
4547
|
+
index
|
|
4548
|
+
))
|
|
4549
|
+
}
|
|
4550
|
+
) })
|
|
4507
4551
|
}
|
|
4508
4552
|
)
|
|
4509
4553
|
] }, cat.id);
|
|
@@ -4517,7 +4561,7 @@ function ScriptBreakdownSceneView({
|
|
|
4517
4561
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4518
4562
|
"div",
|
|
4519
4563
|
{
|
|
4520
|
-
className: "fixed inset-0 z-[100]",
|
|
4564
|
+
className: "fixed inset-0 z-[100] bg-blumine-950/5 backdrop-blur-[1px]",
|
|
4521
4565
|
onClick: (e) => {
|
|
4522
4566
|
e.stopPropagation();
|
|
4523
4567
|
setEditingTagData(null);
|
|
@@ -4527,7 +4571,7 @@ function ScriptBreakdownSceneView({
|
|
|
4527
4571
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
4528
4572
|
"div",
|
|
4529
4573
|
{
|
|
4530
|
-
className: `p-3.5 bg-white/90 backdrop-blur-2xl rounded-[1.25rem] shadow-[
|
|
4574
|
+
className: `p-3.5 bg-white/90 backdrop-blur-2xl rounded-[1.25rem] shadow-[0_10px_40px_rgba(16,43,60,0.12)] border border-blumine-100/40 z-[101] w-56 animate-in fade-in zoom-in-95 duration-200 ease-out fixed`,
|
|
4531
4575
|
style: {
|
|
4532
4576
|
top: popupPlacement.alignBottom ? "auto" : editingTagData.rect.bottom + 8,
|
|
4533
4577
|
bottom: popupPlacement.alignBottom ? window.innerHeight - editingTagData.rect.top + 8 : "auto",
|
|
@@ -4536,19 +4580,19 @@ function ScriptBreakdownSceneView({
|
|
|
4536
4580
|
},
|
|
4537
4581
|
onClick: (e) => e.stopPropagation(),
|
|
4538
4582
|
children: [
|
|
4539
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between items-center mb-3 border-b border-
|
|
4540
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] font-extrabold text-
|
|
4583
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between items-center mb-3 border-b border-blumine-100/30 pb-2.5", children: [
|
|
4584
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] font-extrabold text-blumine-400 uppercase tracking-widest drop-shadow-sm", children: "Details" }),
|
|
4541
4585
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4542
4586
|
"button",
|
|
4543
4587
|
{
|
|
4544
4588
|
onClick: () => setEditingTagData(null),
|
|
4545
|
-
className: "hover:bg-
|
|
4546
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "w-3.5 h-3.5
|
|
4589
|
+
className: "hover:bg-blumine-100/40 p-1.5 rounded-full transition-colors active:scale-95 text-blumine-500",
|
|
4590
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "w-3.5 h-3.5" })
|
|
4547
4591
|
}
|
|
4548
4592
|
)
|
|
4549
4593
|
] }),
|
|
4550
4594
|
(editingTagData.catId === "PROP" || editingTagData.catId === "SET_PROP") && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
4551
|
-
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-[11px] font-bold text-
|
|
4595
|
+
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-[11px] font-bold text-blumine-700 ml-1", children: "Quantity" }),
|
|
4552
4596
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4553
4597
|
"input",
|
|
4554
4598
|
{
|
|
@@ -4561,13 +4605,13 @@ function ScriptBreakdownSceneView({
|
|
|
4561
4605
|
quantity: val
|
|
4562
4606
|
}));
|
|
4563
4607
|
},
|
|
4564
|
-
className: "w-full text-[13px] px-3 py-2 rounded-xl border border-
|
|
4608
|
+
className: "w-full text-[13px] px-3 py-2 rounded-xl border border-blumine-100 bg-zinc-50/30 outline-none focus:border-blumine-400 focus:bg-white focus:ring-2 focus:ring-blumine-500/10 transition-all font-semibold text-blumine-800"
|
|
4565
4609
|
}
|
|
4566
4610
|
)
|
|
4567
4611
|
] }),
|
|
4568
4612
|
editingTagData.catId === "CAST" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-3", children: [
|
|
4569
4613
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
4570
|
-
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-[11px] font-bold text-
|
|
4614
|
+
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-[11px] font-bold text-blumine-700 ml-1", children: "Look" }),
|
|
4571
4615
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4572
4616
|
"input",
|
|
4573
4617
|
{
|
|
@@ -4579,12 +4623,12 @@ function ScriptBreakdownSceneView({
|
|
|
4579
4623
|
look: e.target.value
|
|
4580
4624
|
}));
|
|
4581
4625
|
},
|
|
4582
|
-
className: "w-full text-[13px] px-3 py-2 rounded-xl border border-
|
|
4626
|
+
className: "w-full text-[13px] px-3 py-2 rounded-xl border border-blumine-100 bg-zinc-50/30 outline-none focus:border-blumine-400 focus:bg-white focus:ring-2 focus:ring-blumine-500/10 transition-all font-semibold text-blumine-800 placeholder:text-blumine-300 placeholder:font-normal"
|
|
4583
4627
|
}
|
|
4584
4628
|
)
|
|
4585
4629
|
] }),
|
|
4586
4630
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
4587
|
-
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-[11px] font-bold text-
|
|
4631
|
+
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-[11px] font-bold text-blumine-700 ml-1", children: "Age" }),
|
|
4588
4632
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4589
4633
|
"input",
|
|
4590
4634
|
{
|
|
@@ -4605,7 +4649,7 @@ function ScriptBreakdownSceneView({
|
|
|
4605
4649
|
age: val.toString()
|
|
4606
4650
|
}));
|
|
4607
4651
|
},
|
|
4608
|
-
className: "w-full text-[13px] px-3 py-2 rounded-xl border border-
|
|
4652
|
+
className: "w-full text-[13px] px-3 py-2 rounded-xl border border-blumine-100 bg-zinc-50/30 outline-none focus:border-blumine-400 focus:bg-white focus:ring-2 focus:ring-blumine-500/10 transition-all font-semibold text-blumine-800"
|
|
4609
4653
|
}
|
|
4610
4654
|
)
|
|
4611
4655
|
] })
|
|
@@ -4645,7 +4689,7 @@ function ScriptBreakdownSceneView({
|
|
|
4645
4689
|
}
|
|
4646
4690
|
setEditingTagData(null);
|
|
4647
4691
|
},
|
|
4648
|
-
className: "w-full bg-
|
|
4692
|
+
className: "w-full bg-gradient-to-b from-blumine-500 to-blumine-600 hover:from-blumine-600 hover:to-blumine-700 text-white text-[12px] font-bold py-2.5 rounded-xl transition-all shadow-[0_4px_12px_rgba(32,146,186,0.2)] hover:shadow-[0_6px_16px_rgba(32,146,186,0.3)] active:scale-[0.98]",
|
|
4649
4693
|
children: "Update Details"
|
|
4650
4694
|
}
|
|
4651
4695
|
) })
|
|
@@ -4728,72 +4772,80 @@ function useScriptBreakdownScene(options) {
|
|
|
4728
4772
|
}, [blocks]);
|
|
4729
4773
|
const handleAISummarize = async () => {
|
|
4730
4774
|
var _a;
|
|
4775
|
+
if (!scene || !scene.content) {
|
|
4776
|
+
console.error("Cannot summarize scene: Scene data is not loaded yet.");
|
|
4777
|
+
return;
|
|
4778
|
+
}
|
|
4731
4779
|
setIsSummarizing(true);
|
|
4732
|
-
|
|
4733
|
-
|
|
4734
|
-
|
|
4735
|
-
|
|
4736
|
-
|
|
4737
|
-
|
|
4738
|
-
try {
|
|
4739
|
-
const normalData = JSON.parse(data.data);
|
|
4740
|
-
if (Array.isArray(normalData)) {
|
|
4741
|
-
parsedData = Array.isArray(normalData[0]) ? normalData[0] : [];
|
|
4742
|
-
const summary = Array.isArray(normalData[1]) ? normalData[1] : [];
|
|
4743
|
-
parsedSummaryData = summary[0] || {};
|
|
4744
|
-
}
|
|
4745
|
-
} catch (error2) {
|
|
4746
|
-
console.error("Error parsing AI summary data:", error2);
|
|
4747
|
-
}
|
|
4748
|
-
setSceneBrief(parsedSummaryData.summarise || "");
|
|
4749
|
-
const newTags = [];
|
|
4750
|
-
parsedData.forEach((aiTag) => {
|
|
4751
|
-
if (!aiTag.block_id || !aiTag.category_id || typeof aiTag.start_index !== "number" || typeof aiTag.end_index !== "number") {
|
|
4752
|
-
return;
|
|
4753
|
-
}
|
|
4754
|
-
const newTag = {
|
|
4755
|
-
id: aiTag.id || uuid(),
|
|
4756
|
-
block_id: String(aiTag.block_id).startsWith("par") ? String(aiTag.block_id).substring(3) : String(aiTag.block_id),
|
|
4757
|
-
category_id: aiTag.category_id,
|
|
4758
|
-
name: aiTag.name,
|
|
4759
|
-
start_index: aiTag.start_index,
|
|
4760
|
-
end_index: aiTag.end_index
|
|
4761
|
-
};
|
|
4762
|
-
if (aiTag.category_id === "PROP" || aiTag.category_id === "SET_PROP") {
|
|
4763
|
-
newTag.quantity = 1;
|
|
4764
|
-
} else if (aiTag.category_id === "CAST") {
|
|
4765
|
-
newTag.look = "";
|
|
4766
|
-
newTag.age = "";
|
|
4767
|
-
}
|
|
4768
|
-
newTags.push(newTag);
|
|
4769
|
-
});
|
|
4770
|
-
if (newTags.length > 0) {
|
|
4771
|
-
const originalTags = tags;
|
|
4772
|
-
setTags((prev) => {
|
|
4773
|
-
const merged = [...prev];
|
|
4774
|
-
newTags.forEach((newTag) => {
|
|
4775
|
-
const isOverlapping = merged.some(
|
|
4776
|
-
(t) => t.block_id === newTag.block_id && newTag.end_index > t.start_index && newTag.start_index < t.end_index
|
|
4777
|
-
);
|
|
4778
|
-
if (!isOverlapping) {
|
|
4779
|
-
merged.push(newTag);
|
|
4780
|
-
}
|
|
4781
|
-
});
|
|
4782
|
-
return merged;
|
|
4783
|
-
});
|
|
4780
|
+
try {
|
|
4781
|
+
const res = await ((_a = options.onAISummarize) == null ? void 0 : _a.call(options, scene.content));
|
|
4782
|
+
if (res && res.ok) {
|
|
4783
|
+
const data = await res.json();
|
|
4784
|
+
let parsedData = [];
|
|
4785
|
+
let parsedSummaryData = {};
|
|
4784
4786
|
try {
|
|
4785
|
-
|
|
4786
|
-
|
|
4787
|
+
const normalData = JSON.parse(data.data);
|
|
4788
|
+
if (Array.isArray(normalData)) {
|
|
4789
|
+
parsedData = Array.isArray(normalData[0]) ? normalData[0] : [];
|
|
4790
|
+
const summary = Array.isArray(normalData[1]) ? normalData[1] : [];
|
|
4791
|
+
parsedSummaryData = summary[0] || {};
|
|
4787
4792
|
}
|
|
4788
4793
|
} catch (error2) {
|
|
4789
|
-
console.error("
|
|
4790
|
-
setTags(originalTags);
|
|
4794
|
+
console.error("Error parsing AI summary data:", error2);
|
|
4791
4795
|
}
|
|
4796
|
+
setSceneBrief(parsedSummaryData.summarise || "");
|
|
4797
|
+
const newTags = [];
|
|
4798
|
+
parsedData.forEach((aiTag) => {
|
|
4799
|
+
if (!aiTag.block_id || !aiTag.category_id || typeof aiTag.start_index !== "number" || typeof aiTag.end_index !== "number") {
|
|
4800
|
+
return;
|
|
4801
|
+
}
|
|
4802
|
+
const newTag = {
|
|
4803
|
+
id: aiTag.id || uuid(),
|
|
4804
|
+
block_id: String(aiTag.block_id).startsWith("par") ? String(aiTag.block_id).substring(3) : String(aiTag.block_id),
|
|
4805
|
+
category_id: aiTag.category_id,
|
|
4806
|
+
name: aiTag.name,
|
|
4807
|
+
start_index: aiTag.start_index,
|
|
4808
|
+
end_index: aiTag.end_index
|
|
4809
|
+
};
|
|
4810
|
+
if (aiTag.category_id === "PROP" || aiTag.category_id === "SET_PROP") {
|
|
4811
|
+
newTag.quantity = 1;
|
|
4812
|
+
} else if (aiTag.category_id === "CAST") {
|
|
4813
|
+
newTag.look = "";
|
|
4814
|
+
newTag.age = "";
|
|
4815
|
+
}
|
|
4816
|
+
newTags.push(newTag);
|
|
4817
|
+
});
|
|
4818
|
+
if (newTags.length > 0) {
|
|
4819
|
+
const originalTags = tags;
|
|
4820
|
+
setTags((prev) => {
|
|
4821
|
+
const merged = [...prev];
|
|
4822
|
+
newTags.forEach((newTag) => {
|
|
4823
|
+
const isOverlapping = merged.some(
|
|
4824
|
+
(t) => t.block_id === newTag.block_id && newTag.end_index > t.start_index && newTag.start_index < t.end_index
|
|
4825
|
+
);
|
|
4826
|
+
if (!isOverlapping) {
|
|
4827
|
+
merged.push(newTag);
|
|
4828
|
+
}
|
|
4829
|
+
});
|
|
4830
|
+
return merged;
|
|
4831
|
+
});
|
|
4832
|
+
try {
|
|
4833
|
+
if (options.onTagsBulkAdded) {
|
|
4834
|
+
await options.onTagsBulkAdded(newTags, parsedSummaryData.summarise);
|
|
4835
|
+
}
|
|
4836
|
+
} catch (error2) {
|
|
4837
|
+
console.error("Failed to bulk add AI-generated tags:", error2);
|
|
4838
|
+
setTags(originalTags);
|
|
4839
|
+
}
|
|
4840
|
+
}
|
|
4841
|
+
return data;
|
|
4842
|
+
} else {
|
|
4843
|
+
console.error("Failed to summarize scene:", res);
|
|
4792
4844
|
}
|
|
4793
|
-
|
|
4794
|
-
|
|
4845
|
+
} catch (error2) {
|
|
4846
|
+
console.error("An error occurred during scene summarization:", error2);
|
|
4847
|
+
} finally {
|
|
4795
4848
|
setIsSummarizing(false);
|
|
4796
|
-
console.error("Failed to summarize scene:", res);
|
|
4797
4849
|
}
|
|
4798
4850
|
};
|
|
4799
4851
|
const bulkCreateTags = React4.useCallback(async () => {
|
|
@@ -6414,39 +6466,39 @@ function ShotBreakdownView({
|
|
|
6414
6466
|
"button",
|
|
6415
6467
|
{
|
|
6416
6468
|
onClick: () => setIsSidebarOpen(true),
|
|
6417
|
-
className: "fixed bottom-6 right-6 z-40 flex h-14 w-14 items-center justify-center rounded-full bg-
|
|
6469
|
+
className: "fixed bottom-6 right-6 z-40 flex h-14 w-14 items-center justify-center rounded-full bg-gradient-to-b from-blumine-500 to-blumine-600 text-white shadow-[0_8px_30px_rgba(32,146,186,0.35)] transition-all duration-200 hover:scale-105 active:scale-95 hover:shadow-[0_10px_35px_rgba(32,146,186,0.45)] xl:hidden border border-white/10",
|
|
6418
6470
|
children: [
|
|
6419
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Video, { className: "h-
|
|
6420
|
-
shots.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute -top-1 -right-1 flex h-5 w-5 items-center justify-center rounded-full bg-rose-500 text-[10px] font-bold text-white shadow-
|
|
6471
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Video, { className: "h-5.5 w-5.5", strokeWidth: 2 }),
|
|
6472
|
+
shots.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute -top-1 -right-1 flex h-5 w-5 items-center justify-center rounded-full bg-rose-500 text-[10px] font-bold text-white shadow-md border-2 border-white animate-pulse", children: shots.length })
|
|
6421
6473
|
]
|
|
6422
6474
|
}
|
|
6423
6475
|
),
|
|
6424
6476
|
isSidebarOpen && /* @__PURE__ */ jsxRuntime.jsx(
|
|
6425
6477
|
"div",
|
|
6426
6478
|
{
|
|
6427
|
-
className: "fixed inset-0 z-40 bg-
|
|
6479
|
+
className: "fixed inset-0 z-40 bg-blumine-950/20 backdrop-blur-xs transition-all duration-300 xl:hidden",
|
|
6428
6480
|
onClick: () => setIsSidebarOpen(false)
|
|
6429
6481
|
}
|
|
6430
6482
|
),
|
|
6431
6483
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6432
6484
|
"div",
|
|
6433
6485
|
{
|
|
6434
|
-
className: `fixed xl:absolute top-0 right-0 z-50 h-full w-
|
|
6435
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sticky top-0 flex h-[100dvh] max-h-screen w-full flex-col border-l border-
|
|
6436
|
-
!aiSummarized && /* @__PURE__ */ jsxRuntime.jsx(
|
|
6486
|
+
className: `fixed xl:absolute top-0 right-0 z-50 h-full w-80 transform transition-transform duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] xl:translate-x-0 ${isSidebarOpen ? "translate-x-0 shadow-[-10px_0_40px_rgba(16,43,60,0.08)]" : "translate-x-full"}`,
|
|
6487
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sticky top-0 flex h-[100dvh] max-h-screen w-full flex-col border-l border-blumine-100/50 bg-white/95 backdrop-blur-xl p-4 py-6", children: [
|
|
6488
|
+
!aiSummarized && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-4 shrink-0 flex justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6437
6489
|
summarize_button_default,
|
|
6438
6490
|
{
|
|
6439
6491
|
onSummarize: handleAISummarize,
|
|
6440
6492
|
isSummarizing
|
|
6441
6493
|
}
|
|
6442
|
-
),
|
|
6443
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex flex-col gap-3 py-
|
|
6444
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex items-center justify-between mb-
|
|
6494
|
+
) }),
|
|
6495
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex flex-col gap-3 py-4 border-t border-blumine-100/40 flex-1 overflow-hidden", children: [
|
|
6496
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex items-center justify-between mb-4 shrink-0 px-1", children: [
|
|
6445
6497
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
6446
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative flex h-
|
|
6498
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative flex h-10 w-10 items-center justify-center rounded-xl border border-blumine-200/60 bg-gradient-to-b from-white to-blumine-50/50 shadow-inner", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Video, { className: "h-5 w-5 text-blumine-600", strokeWidth: 1.5 }) }),
|
|
6447
6499
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col", children: [
|
|
6448
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-[
|
|
6449
|
-
sceneType && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[9px] font-bold text-
|
|
6500
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-[14px] font-bold uppercase tracking-wider text-blumine-800 leading-none", children: "Shots" }),
|
|
6501
|
+
sceneType && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[9px] font-bold text-blumine-500 uppercase tracking-wide opacity-80 mt-1", children: sceneType })
|
|
6450
6502
|
] })
|
|
6451
6503
|
] }),
|
|
6452
6504
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
@@ -6454,19 +6506,27 @@ function ShotBreakdownView({
|
|
|
6454
6506
|
"button",
|
|
6455
6507
|
{
|
|
6456
6508
|
onClick: () => setIsInitModalOpen(true),
|
|
6457
|
-
className: "flex h-
|
|
6509
|
+
className: "flex h-8 w-8 items-center justify-center rounded-lg border border-blumine-200/60 bg-gradient-to-b from-white to-blumine-50/50 text-blumine-600 shadow-sm transition duration-150 active:scale-95 hover:bg-blumine-100/60 hover:text-blumine-700",
|
|
6458
6510
|
title: "Project Setup",
|
|
6459
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Settings2, { className: "h-
|
|
6511
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Settings2, { className: "h-4 w-4", strokeWidth: 1.5 })
|
|
6460
6512
|
}
|
|
6461
6513
|
),
|
|
6462
|
-
shots.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-
|
|
6514
|
+
shots.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full border border-blumine-200/50 bg-blumine-50/80 px-2.5 py-0.5 text-[11px] font-bold text-blumine-700 shadow-sm", children: shots.length }),
|
|
6515
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6516
|
+
"button",
|
|
6517
|
+
{
|
|
6518
|
+
onClick: () => setIsSidebarOpen(false),
|
|
6519
|
+
className: "flex xl:hidden h-8 w-8 items-center justify-center rounded-lg text-blumine-400 hover:bg-blumine-100 hover:text-blumine-700 transition duration-150 active:scale-95",
|
|
6520
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-4 w-4" })
|
|
6521
|
+
}
|
|
6522
|
+
)
|
|
6463
6523
|
] })
|
|
6464
6524
|
] }),
|
|
6465
|
-
shots.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center py-
|
|
6466
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-
|
|
6467
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-
|
|
6468
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[11px] text-
|
|
6469
|
-
] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full max-h-[calc(100vh-200px)] flex-col gap-
|
|
6525
|
+
shots.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center py-12 px-4 text-center", children: [
|
|
6526
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-12 w-12 items-center justify-center rounded-xl bg-gradient-to-b from-white to-blumine-50/30 border border-blumine-100/60 shadow-inner mb-4", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Video, { className: "h-5 w-5 text-blumine-400", strokeWidth: 1.5 }) }),
|
|
6527
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-bold text-blumine-800 tracking-wide", children: "No Shots Created Yet" }),
|
|
6528
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[11px] text-blumine-400 mt-2 max-w-[180px] leading-relaxed font-medium", children: "Highlight text in the screenplay to add your first camera shot." })
|
|
6529
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full max-h-[calc(100vh-200px)] flex-col gap-3 overflow-y-auto overflow-x-hidden pb-4 pr-1 custom-scrollbar", children: shots.map((shot) => {
|
|
6470
6530
|
const isActive = toggledShotId === shot.id;
|
|
6471
6531
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6472
6532
|
"div",
|
|
@@ -6475,48 +6535,46 @@ function ShotBreakdownView({
|
|
|
6475
6535
|
var _a2;
|
|
6476
6536
|
return setToggledShotId(isActive ? null : (_a2 = shot.id) != null ? _a2 : null);
|
|
6477
6537
|
},
|
|
6478
|
-
className: `group relative flex-shrink-0 cursor-pointer rounded-
|
|
6538
|
+
className: `group relative flex-shrink-0 cursor-pointer rounded-2xl border transition-all duration-300 overflow-hidden ${isActive ? "border-blumine-500 bg-blumine-50/30 shadow-[0_6px_20px_rgba(16,43,60,0.06)]" : "border-blumine-100/50 bg-white hover:border-blumine-300 hover:shadow-[0_4px_14px_rgba(16,43,60,0.03)]"}`,
|
|
6479
6539
|
children: [
|
|
6480
6540
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6481
6541
|
"div",
|
|
6482
6542
|
{
|
|
6483
|
-
className: `absolute left-0 top-0 h-full w-[3px] transition-all duration-300
|
|
6484
|
-
${isActive ? "bg-slate-900" : "bg-transparent group-hover:bg-slate-300"}`
|
|
6543
|
+
className: `absolute left-0 top-0 h-full w-[3px] transition-all duration-300 ${isActive ? "bg-blumine-500" : "bg-transparent group-hover:bg-blumine-300"}`
|
|
6485
6544
|
}
|
|
6486
6545
|
),
|
|
6487
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2 px-4 py-3.5", children: [
|
|
6546
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2.5 px-4 py-3.5", children: [
|
|
6488
6547
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between", children: [
|
|
6489
6548
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col", children: [
|
|
6490
6549
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
6491
6550
|
"span",
|
|
6492
6551
|
{
|
|
6493
|
-
className: `text-[
|
|
6494
|
-
${isActive ? "text-slate-900" : "text-slate-500"}`,
|
|
6552
|
+
className: `text-[10px] font-bold tracking-wider uppercase ${isActive ? "text-blumine-500" : "text-blumine-400"}`,
|
|
6495
6553
|
children: [
|
|
6496
6554
|
"Shot ",
|
|
6497
6555
|
shot.shot_number
|
|
6498
6556
|
]
|
|
6499
6557
|
}
|
|
6500
6558
|
),
|
|
6501
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
6559
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-extrabold text-blumine-800 leading-tight mt-1", children: shot.camera_name || "Unknown Camera" })
|
|
6502
6560
|
] }),
|
|
6503
6561
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6504
6562
|
"span",
|
|
6505
6563
|
{
|
|
6506
|
-
className: `rounded-
|
|
6564
|
+
className: `rounded-lg px-2.5 py-1 text-[9px] font-bold uppercase tracking-wider transition-colors duration-200 ${isActive ? "bg-blumine-600 text-white shadow-sm" : "bg-blumine-50/60 text-blumine-600 group-hover:bg-blumine-100"}`,
|
|
6507
6565
|
children: shot.shot_type
|
|
6508
6566
|
}
|
|
6509
6567
|
)
|
|
6510
6568
|
] }),
|
|
6511
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-[11px] text-
|
|
6569
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-[11px] font-medium text-blumine-400", children: [
|
|
6512
6570
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: shot.lens_mm ? `${shot.lens_mm}mm Lens` : "\u2014" }),
|
|
6513
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "opacity-
|
|
6571
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] font-bold text-blumine-300 opacity-0 group-hover:opacity-100 transition-opacity duration-200", children: "Tap to expand" })
|
|
6514
6572
|
] }),
|
|
6515
6573
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6516
6574
|
"div",
|
|
6517
6575
|
{
|
|
6518
|
-
className: `grid transition-all duration-300 ease-in-out ${isActive ? "grid-rows-[1fr] opacity-100 mt-
|
|
6519
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "
|
|
6576
|
+
className: `grid transition-all duration-300 ease-in-out ${isActive ? "grid-rows-[1fr] opacity-100 mt-1" : "grid-rows-[0fr] opacity-0"}`,
|
|
6577
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pt-3 pb-1 border-t border-blumine-100/50 flex gap-2", children: [
|
|
6520
6578
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
6521
6579
|
"button",
|
|
6522
6580
|
{
|
|
@@ -6525,7 +6583,7 @@ function ShotBreakdownView({
|
|
|
6525
6583
|
e.stopPropagation();
|
|
6526
6584
|
setViewingShotId((_a2 = shot.id) != null ? _a2 : null);
|
|
6527
6585
|
},
|
|
6528
|
-
className: "flex flex-1 items-center justify-center gap-1.5 rounded-
|
|
6586
|
+
className: "flex flex-1 items-center justify-center gap-1.5 rounded-xl border border-blumine-200/60 bg-white py-2 text-[11px] font-bold text-blumine-700 transition-all hover:bg-blumine-50 hover:text-blumine-900 shadow-sm active:scale-[0.97]",
|
|
6529
6587
|
children: [
|
|
6530
6588
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Eye, { className: "h-3.5 w-3.5" }),
|
|
6531
6589
|
"View"
|
|
@@ -6540,7 +6598,7 @@ function ShotBreakdownView({
|
|
|
6540
6598
|
e.stopPropagation();
|
|
6541
6599
|
setUpdatingShotId((_a2 = shot.id) != null ? _a2 : null);
|
|
6542
6600
|
},
|
|
6543
|
-
className: "flex flex-1 items-center justify-center gap-1.5 rounded-
|
|
6601
|
+
className: "flex flex-1 items-center justify-center gap-1.5 rounded-xl bg-gradient-to-b from-blumine-500 to-blumine-600 py-2 text-[11px] font-bold text-white transition-all hover:from-blumine-600 hover:to-blumine-700 shadow-md shadow-blumine-500/10 active:scale-[0.97]",
|
|
6544
6602
|
children: [
|
|
6545
6603
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pencil, { className: "h-3.5 w-3.5" }),
|
|
6546
6604
|
"Edit"
|