@vishu1301/script-writing 1.6.1 → 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 +257 -196
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +258 -197
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -3114,6 +3114,9 @@ function useScreenplayEditor(options) {
|
|
|
3114
3114
|
}
|
|
3115
3115
|
}
|
|
3116
3116
|
}
|
|
3117
|
+
if (onSaveRef.current && !isInitialLoad) {
|
|
3118
|
+
onSaveRef.current(finalizedBlocks);
|
|
3119
|
+
}
|
|
3117
3120
|
setTimeout(() => {
|
|
3118
3121
|
var _a2;
|
|
3119
3122
|
const firstId = parsedBlocks[0].id;
|
|
@@ -4314,12 +4317,12 @@ function ScriptBreakdownSceneView({
|
|
|
4314
4317
|
))
|
|
4315
4318
|
}
|
|
4316
4319
|
),
|
|
4317
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative bg-[#fdfdfc] shadow-
|
|
4318
|
-
/* @__PURE__ */ jsxRuntime.jsxs("h3", { className: "text-xs font-
|
|
4319
|
-
/* @__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" }) }),
|
|
4320
4323
|
"Scene Brief"
|
|
4321
4324
|
] }),
|
|
4322
|
-
/* @__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: [
|
|
4323
4326
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4324
4327
|
"textarea",
|
|
4325
4328
|
{
|
|
@@ -4337,7 +4340,7 @@ function ScriptBreakdownSceneView({
|
|
|
4337
4340
|
{
|
|
4338
4341
|
onClick: onUpdateBrief,
|
|
4339
4342
|
disabled: !sceneBrief || sceneBrief.trim() === "",
|
|
4340
|
-
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",
|
|
4341
4344
|
children: "Update"
|
|
4342
4345
|
}
|
|
4343
4346
|
) })
|
|
@@ -4348,41 +4351,54 @@ function ScriptBreakdownSceneView({
|
|
|
4348
4351
|
"button",
|
|
4349
4352
|
{
|
|
4350
4353
|
onClick: () => setIsSidebarOpen(true),
|
|
4351
|
-
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",
|
|
4352
4355
|
children: [
|
|
4353
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Tags, { className: "h-
|
|
4354
|
-
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 })
|
|
4355
4358
|
]
|
|
4356
4359
|
}
|
|
4357
4360
|
),
|
|
4358
4361
|
isSidebarOpen && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4359
4362
|
"div",
|
|
4360
4363
|
{
|
|
4361
|
-
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",
|
|
4362
4365
|
onClick: () => setIsSidebarOpen(false)
|
|
4363
4366
|
}
|
|
4364
4367
|
),
|
|
4365
4368
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4366
4369
|
"div",
|
|
4367
4370
|
{
|
|
4368
|
-
className: `fixed xl:absolute top-0 right-0 z-50 h-full w-
|
|
4369
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sticky top-0 flex h-[100dvh] max-h-screen w-full flex-col border-l border-
|
|
4370
|
-
!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(
|
|
4371
4374
|
summarize_button_default,
|
|
4372
4375
|
{
|
|
4373
4376
|
isSummarizing,
|
|
4374
4377
|
onSummarize
|
|
4375
4378
|
}
|
|
4376
|
-
),
|
|
4377
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex flex-col gap-3 py-
|
|
4378
|
-
/* @__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: [
|
|
4379
4382
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
4380
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative flex h-
|
|
4381
|
-
/* @__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
|
+
] })
|
|
4382
4388
|
] }),
|
|
4383
|
-
/* @__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
|
+
] })
|
|
4384
4400
|
] }),
|
|
4385
|
-
/* @__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) => {
|
|
4386
4402
|
const catTags = tags.filter((t) => t.category_id === cat.id);
|
|
4387
4403
|
if (!catTags.length) return null;
|
|
4388
4404
|
const isExpanded = expandedCategories[cat.id];
|
|
@@ -4393,114 +4409,145 @@ function ScriptBreakdownSceneView({
|
|
|
4393
4409
|
);
|
|
4394
4410
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
4395
4411
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
4396
|
-
"
|
|
4412
|
+
"button",
|
|
4397
4413
|
{
|
|
4398
4414
|
onClick: () => setExpandedCategories((prev) => ({
|
|
4399
4415
|
[cat.id]: !prev[cat.id]
|
|
4400
4416
|
})),
|
|
4401
|
-
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",
|
|
4402
4418
|
style: {
|
|
4403
|
-
|
|
4404
|
-
|
|
4405
|
-
border: `1px solid ${cat.hex}50`
|
|
4419
|
+
borderColor: `${cat.color}25`,
|
|
4420
|
+
background: `linear-gradient(135deg, #ffffff, ${cat.color}08)`
|
|
4406
4421
|
},
|
|
4407
4422
|
children: [
|
|
4408
4423
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4409
4424
|
"div",
|
|
4410
4425
|
{
|
|
4411
|
-
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",
|
|
4412
4427
|
style: {
|
|
4413
|
-
background: `radial-gradient(circle at
|
|
4428
|
+
background: `radial-gradient(circle at 12% 50%, ${cat.color}15, transparent 40%)`
|
|
4414
4429
|
}
|
|
4415
4430
|
}
|
|
4416
4431
|
),
|
|
4417
4432
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4418
4433
|
"div",
|
|
4419
4434
|
{
|
|
4420
|
-
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",
|
|
4421
4436
|
style: {
|
|
4422
|
-
background: `linear-gradient(135deg, ${cat.color}
|
|
4423
|
-
|
|
4437
|
+
background: `linear-gradient(135deg, ${cat.color}12, ${cat.color}05)`,
|
|
4438
|
+
borderColor: `${cat.color}20`
|
|
4424
4439
|
},
|
|
4425
|
-
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 } })
|
|
4426
4441
|
}
|
|
4427
4442
|
),
|
|
4428
4443
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4429
4444
|
"span",
|
|
4430
4445
|
{
|
|
4431
|
-
className: "relative text-
|
|
4446
|
+
className: "relative text-xs font-bold tracking-wide transition-colors duration-200",
|
|
4432
4447
|
style: { color: cat.color },
|
|
4433
4448
|
children: cat.label
|
|
4434
4449
|
}
|
|
4435
4450
|
),
|
|
4436
|
-
/* @__PURE__ */ jsxRuntime.
|
|
4437
|
-
|
|
4438
|
-
|
|
4439
|
-
|
|
4440
|
-
|
|
4441
|
-
|
|
4442
|
-
|
|
4443
|
-
|
|
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
|
+
] })
|
|
4444
4473
|
]
|
|
4445
4474
|
}
|
|
4446
4475
|
),
|
|
4447
4476
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4448
4477
|
"div",
|
|
4449
4478
|
{
|
|
4450
|
-
className: `grid transition-all duration-500 ease-[cubic-bezier(0.22,1,0.36,1)] ${isExpanded ? "grid-rows-[1fr] opacity-100 mt-
|
|
4451
|
-
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(
|
|
4452
4481
|
"div",
|
|
4453
4482
|
{
|
|
4454
|
-
className: "
|
|
4455
|
-
|
|
4456
|
-
|
|
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",
|
|
4457
4487
|
{
|
|
4458
|
-
|
|
4459
|
-
|
|
4460
|
-
|
|
4461
|
-
|
|
4462
|
-
|
|
4463
|
-
|
|
4464
|
-
|
|
4465
|
-
|
|
4466
|
-
|
|
4467
|
-
|
|
4468
|
-
|
|
4469
|
-
|
|
4470
|
-
|
|
4471
|
-
|
|
4472
|
-
|
|
4473
|
-
|
|
4474
|
-
|
|
4475
|
-
|
|
4476
|
-
|
|
4477
|
-
|
|
4478
|
-
|
|
4479
|
-
|
|
4480
|
-
|
|
4481
|
-
|
|
4482
|
-
|
|
4483
|
-
|
|
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
|
+
]
|
|
4484
4544
|
}
|
|
4485
|
-
|
|
4486
|
-
|
|
4487
|
-
|
|
4488
|
-
|
|
4489
|
-
|
|
4490
|
-
|
|
4491
|
-
},
|
|
4492
|
-
children: [
|
|
4493
|
-
tag.name,
|
|
4494
|
-
(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: [
|
|
4495
|
-
"x",
|
|
4496
|
-
tag.quantity
|
|
4497
|
-
] }) : null
|
|
4498
|
-
]
|
|
4499
|
-
}
|
|
4500
|
-
)
|
|
4501
|
-
},
|
|
4502
|
-
index
|
|
4503
|
-
)) }) })
|
|
4545
|
+
)
|
|
4546
|
+
},
|
|
4547
|
+
index
|
|
4548
|
+
))
|
|
4549
|
+
}
|
|
4550
|
+
) })
|
|
4504
4551
|
}
|
|
4505
4552
|
)
|
|
4506
4553
|
] }, cat.id);
|
|
@@ -4514,7 +4561,7 @@ function ScriptBreakdownSceneView({
|
|
|
4514
4561
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4515
4562
|
"div",
|
|
4516
4563
|
{
|
|
4517
|
-
className: "fixed inset-0 z-[100]",
|
|
4564
|
+
className: "fixed inset-0 z-[100] bg-blumine-950/5 backdrop-blur-[1px]",
|
|
4518
4565
|
onClick: (e) => {
|
|
4519
4566
|
e.stopPropagation();
|
|
4520
4567
|
setEditingTagData(null);
|
|
@@ -4524,7 +4571,7 @@ function ScriptBreakdownSceneView({
|
|
|
4524
4571
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
4525
4572
|
"div",
|
|
4526
4573
|
{
|
|
4527
|
-
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`,
|
|
4528
4575
|
style: {
|
|
4529
4576
|
top: popupPlacement.alignBottom ? "auto" : editingTagData.rect.bottom + 8,
|
|
4530
4577
|
bottom: popupPlacement.alignBottom ? window.innerHeight - editingTagData.rect.top + 8 : "auto",
|
|
@@ -4533,19 +4580,19 @@ function ScriptBreakdownSceneView({
|
|
|
4533
4580
|
},
|
|
4534
4581
|
onClick: (e) => e.stopPropagation(),
|
|
4535
4582
|
children: [
|
|
4536
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between items-center mb-3 border-b border-
|
|
4537
|
-
/* @__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" }),
|
|
4538
4585
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4539
4586
|
"button",
|
|
4540
4587
|
{
|
|
4541
4588
|
onClick: () => setEditingTagData(null),
|
|
4542
|
-
className: "hover:bg-
|
|
4543
|
-
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" })
|
|
4544
4591
|
}
|
|
4545
4592
|
)
|
|
4546
4593
|
] }),
|
|
4547
4594
|
(editingTagData.catId === "PROP" || editingTagData.catId === "SET_PROP") && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
4548
|
-
/* @__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" }),
|
|
4549
4596
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4550
4597
|
"input",
|
|
4551
4598
|
{
|
|
@@ -4558,13 +4605,13 @@ function ScriptBreakdownSceneView({
|
|
|
4558
4605
|
quantity: val
|
|
4559
4606
|
}));
|
|
4560
4607
|
},
|
|
4561
|
-
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"
|
|
4562
4609
|
}
|
|
4563
4610
|
)
|
|
4564
4611
|
] }),
|
|
4565
4612
|
editingTagData.catId === "CAST" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-3", children: [
|
|
4566
4613
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
4567
|
-
/* @__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" }),
|
|
4568
4615
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4569
4616
|
"input",
|
|
4570
4617
|
{
|
|
@@ -4576,12 +4623,12 @@ function ScriptBreakdownSceneView({
|
|
|
4576
4623
|
look: e.target.value
|
|
4577
4624
|
}));
|
|
4578
4625
|
},
|
|
4579
|
-
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"
|
|
4580
4627
|
}
|
|
4581
4628
|
)
|
|
4582
4629
|
] }),
|
|
4583
4630
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
4584
|
-
/* @__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" }),
|
|
4585
4632
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4586
4633
|
"input",
|
|
4587
4634
|
{
|
|
@@ -4602,7 +4649,7 @@ function ScriptBreakdownSceneView({
|
|
|
4602
4649
|
age: val.toString()
|
|
4603
4650
|
}));
|
|
4604
4651
|
},
|
|
4605
|
-
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"
|
|
4606
4653
|
}
|
|
4607
4654
|
)
|
|
4608
4655
|
] })
|
|
@@ -4642,7 +4689,7 @@ function ScriptBreakdownSceneView({
|
|
|
4642
4689
|
}
|
|
4643
4690
|
setEditingTagData(null);
|
|
4644
4691
|
},
|
|
4645
|
-
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]",
|
|
4646
4693
|
children: "Update Details"
|
|
4647
4694
|
}
|
|
4648
4695
|
) })
|
|
@@ -4725,72 +4772,80 @@ function useScriptBreakdownScene(options) {
|
|
|
4725
4772
|
}, [blocks]);
|
|
4726
4773
|
const handleAISummarize = async () => {
|
|
4727
4774
|
var _a;
|
|
4775
|
+
if (!scene || !scene.content) {
|
|
4776
|
+
console.error("Cannot summarize scene: Scene data is not loaded yet.");
|
|
4777
|
+
return;
|
|
4778
|
+
}
|
|
4728
4779
|
setIsSummarizing(true);
|
|
4729
|
-
|
|
4730
|
-
|
|
4731
|
-
|
|
4732
|
-
|
|
4733
|
-
|
|
4734
|
-
|
|
4735
|
-
try {
|
|
4736
|
-
const normalData = JSON.parse(data.data);
|
|
4737
|
-
if (Array.isArray(normalData)) {
|
|
4738
|
-
parsedData = Array.isArray(normalData[0]) ? normalData[0] : [];
|
|
4739
|
-
const summary = Array.isArray(normalData[1]) ? normalData[1] : [];
|
|
4740
|
-
parsedSummaryData = summary[0] || {};
|
|
4741
|
-
}
|
|
4742
|
-
} catch (error2) {
|
|
4743
|
-
console.error("Error parsing AI summary data:", error2);
|
|
4744
|
-
}
|
|
4745
|
-
setSceneBrief(parsedSummaryData.summarise || "");
|
|
4746
|
-
const newTags = [];
|
|
4747
|
-
parsedData.forEach((aiTag) => {
|
|
4748
|
-
if (!aiTag.block_id || !aiTag.category_id || typeof aiTag.start_index !== "number" || typeof aiTag.end_index !== "number") {
|
|
4749
|
-
return;
|
|
4750
|
-
}
|
|
4751
|
-
const newTag = {
|
|
4752
|
-
id: aiTag.id || uuid(),
|
|
4753
|
-
block_id: String(aiTag.block_id).startsWith("par") ? String(aiTag.block_id).substring(3) : String(aiTag.block_id),
|
|
4754
|
-
category_id: aiTag.category_id,
|
|
4755
|
-
name: aiTag.name,
|
|
4756
|
-
start_index: aiTag.start_index,
|
|
4757
|
-
end_index: aiTag.end_index
|
|
4758
|
-
};
|
|
4759
|
-
if (aiTag.category_id === "PROP" || aiTag.category_id === "SET_PROP") {
|
|
4760
|
-
newTag.quantity = 1;
|
|
4761
|
-
} else if (aiTag.category_id === "CAST") {
|
|
4762
|
-
newTag.look = "";
|
|
4763
|
-
newTag.age = "";
|
|
4764
|
-
}
|
|
4765
|
-
newTags.push(newTag);
|
|
4766
|
-
});
|
|
4767
|
-
if (newTags.length > 0) {
|
|
4768
|
-
const originalTags = tags;
|
|
4769
|
-
setTags((prev) => {
|
|
4770
|
-
const merged = [...prev];
|
|
4771
|
-
newTags.forEach((newTag) => {
|
|
4772
|
-
const isOverlapping = merged.some(
|
|
4773
|
-
(t) => t.block_id === newTag.block_id && newTag.end_index > t.start_index && newTag.start_index < t.end_index
|
|
4774
|
-
);
|
|
4775
|
-
if (!isOverlapping) {
|
|
4776
|
-
merged.push(newTag);
|
|
4777
|
-
}
|
|
4778
|
-
});
|
|
4779
|
-
return merged;
|
|
4780
|
-
});
|
|
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 = {};
|
|
4781
4786
|
try {
|
|
4782
|
-
|
|
4783
|
-
|
|
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] || {};
|
|
4784
4792
|
}
|
|
4785
4793
|
} catch (error2) {
|
|
4786
|
-
console.error("
|
|
4787
|
-
setTags(originalTags);
|
|
4794
|
+
console.error("Error parsing AI summary data:", error2);
|
|
4788
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);
|
|
4789
4844
|
}
|
|
4790
|
-
|
|
4791
|
-
|
|
4845
|
+
} catch (error2) {
|
|
4846
|
+
console.error("An error occurred during scene summarization:", error2);
|
|
4847
|
+
} finally {
|
|
4792
4848
|
setIsSummarizing(false);
|
|
4793
|
-
console.error("Failed to summarize scene:", res);
|
|
4794
4849
|
}
|
|
4795
4850
|
};
|
|
4796
4851
|
const bulkCreateTags = React4.useCallback(async () => {
|
|
@@ -6411,39 +6466,39 @@ function ShotBreakdownView({
|
|
|
6411
6466
|
"button",
|
|
6412
6467
|
{
|
|
6413
6468
|
onClick: () => setIsSidebarOpen(true),
|
|
6414
|
-
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",
|
|
6415
6470
|
children: [
|
|
6416
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Video, { className: "h-
|
|
6417
|
-
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 })
|
|
6418
6473
|
]
|
|
6419
6474
|
}
|
|
6420
6475
|
),
|
|
6421
6476
|
isSidebarOpen && /* @__PURE__ */ jsxRuntime.jsx(
|
|
6422
6477
|
"div",
|
|
6423
6478
|
{
|
|
6424
|
-
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",
|
|
6425
6480
|
onClick: () => setIsSidebarOpen(false)
|
|
6426
6481
|
}
|
|
6427
6482
|
),
|
|
6428
6483
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6429
6484
|
"div",
|
|
6430
6485
|
{
|
|
6431
|
-
className: `fixed xl:absolute top-0 right-0 z-50 h-full w-
|
|
6432
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sticky top-0 flex h-[100dvh] max-h-screen w-full flex-col border-l border-
|
|
6433
|
-
!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(
|
|
6434
6489
|
summarize_button_default,
|
|
6435
6490
|
{
|
|
6436
6491
|
onSummarize: handleAISummarize,
|
|
6437
6492
|
isSummarizing
|
|
6438
6493
|
}
|
|
6439
|
-
),
|
|
6440
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex flex-col gap-3 py-
|
|
6441
|
-
/* @__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: [
|
|
6442
6497
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
6443
|
-
/* @__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 }) }),
|
|
6444
6499
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col", children: [
|
|
6445
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-[
|
|
6446
|
-
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 })
|
|
6447
6502
|
] })
|
|
6448
6503
|
] }),
|
|
6449
6504
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
@@ -6451,19 +6506,27 @@ function ShotBreakdownView({
|
|
|
6451
6506
|
"button",
|
|
6452
6507
|
{
|
|
6453
6508
|
onClick: () => setIsInitModalOpen(true),
|
|
6454
|
-
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",
|
|
6455
6510
|
title: "Project Setup",
|
|
6456
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Settings2, { className: "h-
|
|
6511
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Settings2, { className: "h-4 w-4", strokeWidth: 1.5 })
|
|
6457
6512
|
}
|
|
6458
6513
|
),
|
|
6459
|
-
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
|
+
)
|
|
6460
6523
|
] })
|
|
6461
6524
|
] }),
|
|
6462
|
-
shots.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center py-
|
|
6463
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-
|
|
6464
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-
|
|
6465
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[11px] text-
|
|
6466
|
-
] }) : /* @__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) => {
|
|
6467
6530
|
const isActive = toggledShotId === shot.id;
|
|
6468
6531
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6469
6532
|
"div",
|
|
@@ -6472,48 +6535,46 @@ function ShotBreakdownView({
|
|
|
6472
6535
|
var _a2;
|
|
6473
6536
|
return setToggledShotId(isActive ? null : (_a2 = shot.id) != null ? _a2 : null);
|
|
6474
6537
|
},
|
|
6475
|
-
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)]"}`,
|
|
6476
6539
|
children: [
|
|
6477
6540
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6478
6541
|
"div",
|
|
6479
6542
|
{
|
|
6480
|
-
className: `absolute left-0 top-0 h-full w-[3px] transition-all duration-300
|
|
6481
|
-
${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"}`
|
|
6482
6544
|
}
|
|
6483
6545
|
),
|
|
6484
|
-
/* @__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: [
|
|
6485
6547
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between", children: [
|
|
6486
6548
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col", children: [
|
|
6487
6549
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
6488
6550
|
"span",
|
|
6489
6551
|
{
|
|
6490
|
-
className: `text-[
|
|
6491
|
-
${isActive ? "text-slate-900" : "text-slate-500"}`,
|
|
6552
|
+
className: `text-[10px] font-bold tracking-wider uppercase ${isActive ? "text-blumine-500" : "text-blumine-400"}`,
|
|
6492
6553
|
children: [
|
|
6493
6554
|
"Shot ",
|
|
6494
6555
|
shot.shot_number
|
|
6495
6556
|
]
|
|
6496
6557
|
}
|
|
6497
6558
|
),
|
|
6498
|
-
/* @__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" })
|
|
6499
6560
|
] }),
|
|
6500
6561
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6501
6562
|
"span",
|
|
6502
6563
|
{
|
|
6503
|
-
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"}`,
|
|
6504
6565
|
children: shot.shot_type
|
|
6505
6566
|
}
|
|
6506
6567
|
)
|
|
6507
6568
|
] }),
|
|
6508
|
-
/* @__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: [
|
|
6509
6570
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: shot.lens_mm ? `${shot.lens_mm}mm Lens` : "\u2014" }),
|
|
6510
|
-
/* @__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" })
|
|
6511
6572
|
] }),
|
|
6512
6573
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6513
6574
|
"div",
|
|
6514
6575
|
{
|
|
6515
|
-
className: `grid transition-all duration-300 ease-in-out ${isActive ? "grid-rows-[1fr] opacity-100 mt-
|
|
6516
|
-
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: [
|
|
6517
6578
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
6518
6579
|
"button",
|
|
6519
6580
|
{
|
|
@@ -6522,7 +6583,7 @@ function ShotBreakdownView({
|
|
|
6522
6583
|
e.stopPropagation();
|
|
6523
6584
|
setViewingShotId((_a2 = shot.id) != null ? _a2 : null);
|
|
6524
6585
|
},
|
|
6525
|
-
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]",
|
|
6526
6587
|
children: [
|
|
6527
6588
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Eye, { className: "h-3.5 w-3.5" }),
|
|
6528
6589
|
"View"
|
|
@@ -6537,7 +6598,7 @@ function ShotBreakdownView({
|
|
|
6537
6598
|
e.stopPropagation();
|
|
6538
6599
|
setUpdatingShotId((_a2 = shot.id) != null ? _a2 : null);
|
|
6539
6600
|
},
|
|
6540
|
-
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]",
|
|
6541
6602
|
children: [
|
|
6542
6603
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pencil, { className: "h-3.5 w-3.5" }),
|
|
6543
6604
|
"Edit"
|