@braintwopoint0/playback-commons 0.2.5 → 0.2.7

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/ui/index.js CHANGED
@@ -2203,8 +2203,144 @@ function SearchBar({ value, onChange, onClear, className, placeholder = "Search.
2203
2203
  ] });
2204
2204
  }
2205
2205
 
2206
- // src/ui/data-row.tsx
2206
+ // src/ui/multi-select.tsx
2207
+ import * as React25 from "react";
2208
+ import { ChevronDown } from "lucide-react";
2207
2209
  import { jsx as jsx32, jsxs as jsxs17 } from "react/jsx-runtime";
2210
+ function MultiSelect({
2211
+ options,
2212
+ selected,
2213
+ onChange,
2214
+ placeholder = "Select...",
2215
+ searchPlaceholder = "Search...",
2216
+ emptyLabel = "No matches",
2217
+ searchThreshold = 5,
2218
+ clearable = true,
2219
+ className,
2220
+ contentClassName,
2221
+ "aria-label": ariaLabel
2222
+ }) {
2223
+ const [query, setQuery] = React25.useState("");
2224
+ const selectedSet = React25.useMemo(() => new Set(selected), [selected]);
2225
+ const filtered = React25.useMemo(() => {
2226
+ if (!query) return options;
2227
+ const q = query.toLowerCase();
2228
+ return options.filter((o) => o.label.toLowerCase().includes(q));
2229
+ }, [options, query]);
2230
+ function toggle(value) {
2231
+ if (selectedSet.has(value)) {
2232
+ onChange(selected.filter((v) => v !== value));
2233
+ } else {
2234
+ onChange([...selected, value]);
2235
+ }
2236
+ }
2237
+ const triggerLabel = (() => {
2238
+ if (selected.length === 0) return placeholder;
2239
+ if (selected.length === 1) {
2240
+ const match = options.find((o) => o.value === selected[0]);
2241
+ return match?.label ?? placeholder;
2242
+ }
2243
+ return `${selected.length} selected`;
2244
+ })();
2245
+ return /* @__PURE__ */ jsxs17(Popover, { children: [
2246
+ /* @__PURE__ */ jsx32(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs17(
2247
+ "button",
2248
+ {
2249
+ type: "button",
2250
+ "aria-label": ariaLabel,
2251
+ className: cn(
2252
+ "flex items-center justify-between gap-2 min-w-[180px] h-9 px-3 rounded-md",
2253
+ "bg-zinc-800 text-sm text-white border border-zinc-700",
2254
+ "hover:bg-zinc-700/80 transition-colors",
2255
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-white/20",
2256
+ className
2257
+ ),
2258
+ children: [
2259
+ /* @__PURE__ */ jsx32(
2260
+ "span",
2261
+ {
2262
+ className: cn(
2263
+ "truncate text-left",
2264
+ selected.length === 0 && "text-zinc-400"
2265
+ ),
2266
+ children: triggerLabel
2267
+ }
2268
+ ),
2269
+ /* @__PURE__ */ jsx32(ChevronDown, { className: "h-4 w-4 opacity-50 flex-shrink-0" })
2270
+ ]
2271
+ }
2272
+ ) }),
2273
+ /* @__PURE__ */ jsxs17(
2274
+ PopoverContent,
2275
+ {
2276
+ className: cn("w-72 p-0", contentClassName),
2277
+ align: "start",
2278
+ onOpenAutoFocus: (e) => {
2279
+ if (options.length < searchThreshold) e.preventDefault();
2280
+ },
2281
+ children: [
2282
+ options.length >= searchThreshold && /* @__PURE__ */ jsx32("div", { className: "p-2 border-b border-zinc-800", children: /* @__PURE__ */ jsx32(
2283
+ Input,
2284
+ {
2285
+ type: "text",
2286
+ value: query,
2287
+ onChange: (e) => setQuery(e.target.value),
2288
+ placeholder: searchPlaceholder,
2289
+ className: "h-8 text-sm"
2290
+ }
2291
+ ) }),
2292
+ /* @__PURE__ */ jsx32("div", { className: "max-h-64 overflow-auto py-1", children: filtered.length === 0 ? /* @__PURE__ */ jsx32("div", { className: "px-3 py-3 text-xs text-zinc-500 text-center", children: emptyLabel }) : filtered.map((opt) => {
2293
+ const isSelected = selectedSet.has(opt.value);
2294
+ return /* @__PURE__ */ jsxs17(
2295
+ "label",
2296
+ {
2297
+ className: cn(
2298
+ "w-full flex items-center gap-2.5 px-3 py-2 text-sm cursor-pointer transition-colors",
2299
+ "hover:bg-zinc-800/60",
2300
+ isSelected && "bg-zinc-800/40"
2301
+ ),
2302
+ children: [
2303
+ /* @__PURE__ */ jsx32(
2304
+ Checkbox,
2305
+ {
2306
+ checked: isSelected,
2307
+ onCheckedChange: () => toggle(opt.value),
2308
+ "aria-label": opt.label
2309
+ }
2310
+ ),
2311
+ /* @__PURE__ */ jsx32("span", { className: "flex-1 truncate text-zinc-100", children: opt.label }),
2312
+ opt.count !== void 0 && /* @__PURE__ */ jsx32("span", { className: "text-xs text-zinc-500 tabular-nums", children: opt.count })
2313
+ ]
2314
+ },
2315
+ opt.value
2316
+ );
2317
+ }) }),
2318
+ clearable && selected.length > 0 && /* @__PURE__ */ jsxs17("div", { className: "px-3 py-2 border-t border-zinc-800 flex items-center justify-between", children: [
2319
+ /* @__PURE__ */ jsxs17("span", { className: "text-xs text-zinc-500 tabular-nums", children: [
2320
+ selected.length,
2321
+ " selected"
2322
+ ] }),
2323
+ /* @__PURE__ */ jsx32(
2324
+ "button",
2325
+ {
2326
+ type: "button",
2327
+ onClick: () => {
2328
+ onChange([]);
2329
+ setQuery("");
2330
+ },
2331
+ className: "text-xs text-zinc-400 hover:text-white transition-colors",
2332
+ children: "Clear all"
2333
+ }
2334
+ )
2335
+ ] })
2336
+ ]
2337
+ }
2338
+ )
2339
+ ] });
2340
+ }
2341
+
2342
+ // src/ui/data-row.tsx
2343
+ import { jsx as jsx33, jsxs as jsxs18 } from "react/jsx-runtime";
2208
2344
  var statusColors = {
2209
2345
  green: "bg-emerald-400",
2210
2346
  yellow: "bg-amber-400",
@@ -2212,7 +2348,7 @@ var statusColors = {
2212
2348
  gray: "bg-zinc-500"
2213
2349
  };
2214
2350
  function DataRow({ status, primary, secondary, trailing, className, ...props }) {
2215
- return /* @__PURE__ */ jsxs17(
2351
+ return /* @__PURE__ */ jsxs18(
2216
2352
  "div",
2217
2353
  {
2218
2354
  className: cn(
@@ -2221,12 +2357,12 @@ function DataRow({ status, primary, secondary, trailing, className, ...props })
2221
2357
  ),
2222
2358
  ...props,
2223
2359
  children: [
2224
- status && /* @__PURE__ */ jsx32("span", { className: cn("h-2 w-2 shrink-0 rounded-full", statusColors[status]) }),
2225
- /* @__PURE__ */ jsxs17("div", { className: "min-w-0 flex-1", children: [
2226
- /* @__PURE__ */ jsx32("p", { className: "truncate text-sm text-[var(--timberwolf)]", children: primary }),
2227
- secondary && /* @__PURE__ */ jsx32("p", { className: "truncate text-xs text-muted-foreground", children: secondary })
2360
+ status && /* @__PURE__ */ jsx33("span", { className: cn("h-2 w-2 shrink-0 rounded-full", statusColors[status]) }),
2361
+ /* @__PURE__ */ jsxs18("div", { className: "min-w-0 flex-1", children: [
2362
+ /* @__PURE__ */ jsx33("p", { className: "truncate text-sm text-[var(--timberwolf)]", children: primary }),
2363
+ secondary && /* @__PURE__ */ jsx33("p", { className: "truncate text-xs text-muted-foreground", children: secondary })
2228
2364
  ] }),
2229
- trailing && /* @__PURE__ */ jsx32("div", { className: "shrink-0", children: trailing })
2365
+ trailing && /* @__PURE__ */ jsx33("div", { className: "shrink-0", children: trailing })
2230
2366
  ]
2231
2367
  }
2232
2368
  );
@@ -2274,12 +2410,12 @@ var springBounce = {
2274
2410
  var easeSmooth = [0.25, 0.46, 0.45, 0.94];
2275
2411
 
2276
2412
  // src/ui/fade-in.tsx
2277
- import * as React25 from "react";
2278
- import { jsx as jsx33 } from "react/jsx-runtime";
2413
+ import * as React26 from "react";
2414
+ import { jsx as jsx34 } from "react/jsx-runtime";
2279
2415
  function FadeIn({ children, className, delay = 0, direction = "up", ...props }) {
2280
- const ref = React25.useRef(null);
2281
- const [visible, setVisible] = React25.useState(false);
2282
- React25.useEffect(() => {
2416
+ const ref = React26.useRef(null);
2417
+ const [visible, setVisible] = React26.useState(false);
2418
+ React26.useEffect(() => {
2283
2419
  const el = ref.current;
2284
2420
  if (!el) return;
2285
2421
  const observer = new IntersectionObserver(
@@ -2294,7 +2430,7 @@ function FadeIn({ children, className, delay = 0, direction = "up", ...props })
2294
2430
  observer.observe(el);
2295
2431
  return () => observer.disconnect();
2296
2432
  }, []);
2297
- return /* @__PURE__ */ jsx33(
2433
+ return /* @__PURE__ */ jsx34(
2298
2434
  "div",
2299
2435
  {
2300
2436
  ref,
@@ -2311,10 +2447,10 @@ function FadeIn({ children, className, delay = 0, direction = "up", ...props })
2311
2447
  }
2312
2448
 
2313
2449
  // src/ui/luma-spin.tsx
2314
- import { Fragment as Fragment4, jsx as jsx34, jsxs as jsxs18 } from "react/jsx-runtime";
2450
+ import { Fragment as Fragment4, jsx as jsx35, jsxs as jsxs19 } from "react/jsx-runtime";
2315
2451
  function LumaSpin() {
2316
- return /* @__PURE__ */ jsxs18(Fragment4, { children: [
2317
- /* @__PURE__ */ jsx34(
2452
+ return /* @__PURE__ */ jsxs19(Fragment4, { children: [
2453
+ /* @__PURE__ */ jsx35(
2318
2454
  "style",
2319
2455
  {
2320
2456
  dangerouslySetInnerHTML: {
@@ -2334,8 +2470,8 @@ function LumaSpin() {
2334
2470
  }
2335
2471
  }
2336
2472
  ),
2337
- /* @__PURE__ */ jsxs18("div", { style: { position: "relative", width: 65, aspectRatio: "1" }, children: [
2338
- /* @__PURE__ */ jsx34(
2473
+ /* @__PURE__ */ jsxs19("div", { style: { position: "relative", width: 65, aspectRatio: "1" }, children: [
2474
+ /* @__PURE__ */ jsx35(
2339
2475
  "span",
2340
2476
  {
2341
2477
  style: {
@@ -2347,7 +2483,7 @@ function LumaSpin() {
2347
2483
  }
2348
2484
  }
2349
2485
  ),
2350
- /* @__PURE__ */ jsx34(
2486
+ /* @__PURE__ */ jsx35(
2351
2487
  "span",
2352
2488
  {
2353
2489
  style: {
@@ -2364,10 +2500,10 @@ function LumaSpin() {
2364
2500
  }
2365
2501
 
2366
2502
  // src/ui/footer.tsx
2367
- import * as React26 from "react";
2503
+ import * as React27 from "react";
2368
2504
  import Image2 from "next/image";
2369
2505
  import Link2 from "next/link";
2370
- import { jsx as jsx35, jsxs as jsxs19 } from "react/jsx-runtime";
2506
+ import { jsx as jsx36, jsxs as jsxs20 } from "react/jsx-runtime";
2371
2507
  var DEFAULT_SOCIALS = [
2372
2508
  {
2373
2509
  label: "Instagram",
@@ -2393,8 +2529,8 @@ var DEFAULT_SOCIALS = [
2393
2529
  function NewsletterForm({
2394
2530
  onSubmit
2395
2531
  }) {
2396
- const [email, setEmail] = React26.useState("");
2397
- const [state, setState] = React26.useState("idle");
2532
+ const [email, setEmail] = React27.useState("");
2533
+ const [state, setState] = React27.useState("idle");
2398
2534
  const handle = async (e) => {
2399
2535
  e.preventDefault();
2400
2536
  const ok = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email.trim());
@@ -2410,7 +2546,7 @@ function NewsletterForm({
2410
2546
  setState("error");
2411
2547
  }
2412
2548
  };
2413
- return /* @__PURE__ */ jsxs19(
2549
+ return /* @__PURE__ */ jsxs20(
2414
2550
  "form",
2415
2551
  {
2416
2552
  onSubmit: handle,
@@ -2418,7 +2554,7 @@ function NewsletterForm({
2418
2554
  "aria-label": "Subscribe to updates",
2419
2555
  className: "w-full max-w-md",
2420
2556
  children: [
2421
- /* @__PURE__ */ jsx35(
2557
+ /* @__PURE__ */ jsx36(
2422
2558
  "label",
2423
2559
  {
2424
2560
  htmlFor: "footer-newsletter",
@@ -2426,8 +2562,8 @@ function NewsletterForm({
2426
2562
  children: "Stay in the loop"
2427
2563
  }
2428
2564
  ),
2429
- /* @__PURE__ */ jsxs19("div", { className: "flex flex-col sm:flex-row gap-2", children: [
2430
- /* @__PURE__ */ jsx35(
2565
+ /* @__PURE__ */ jsxs20("div", { className: "flex flex-col sm:flex-row gap-2", children: [
2566
+ /* @__PURE__ */ jsx36(
2431
2567
  "input",
2432
2568
  {
2433
2569
  id: "footer-newsletter",
@@ -2450,7 +2586,7 @@ function NewsletterForm({
2450
2586
  )
2451
2587
  }
2452
2588
  ),
2453
- /* @__PURE__ */ jsx35(
2589
+ /* @__PURE__ */ jsx36(
2454
2590
  "button",
2455
2591
  {
2456
2592
  type: "submit",
@@ -2459,7 +2595,7 @@ function NewsletterForm({
2459
2595
  }
2460
2596
  )
2461
2597
  ] }),
2462
- /* @__PURE__ */ jsxs19(
2598
+ /* @__PURE__ */ jsxs20(
2463
2599
  "p",
2464
2600
  {
2465
2601
  id: "footer-newsletter-feedback",
@@ -2484,7 +2620,7 @@ function NewsletterForm({
2484
2620
  function FooterLinkItem({ link }) {
2485
2621
  const classes = "text-[14px] text-[rgba(214,213,201,0.64)] hover:text-[var(--timberwolf)] transition-colors rounded-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--timberwolf)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--surface-0,#0a100d)]";
2486
2622
  if (link.external) {
2487
- return /* @__PURE__ */ jsx35(
2623
+ return /* @__PURE__ */ jsx36(
2488
2624
  "a",
2489
2625
  {
2490
2626
  href: link.href,
@@ -2495,7 +2631,7 @@ function FooterLinkItem({ link }) {
2495
2631
  }
2496
2632
  );
2497
2633
  }
2498
- return /* @__PURE__ */ jsx35(Link2, { href: link.href, className: classes, children: link.label });
2634
+ return /* @__PURE__ */ jsx36(Link2, { href: link.href, className: classes, children: link.label });
2499
2635
  }
2500
2636
  function Footer({
2501
2637
  columns,
@@ -2512,7 +2648,7 @@ function Footer({
2512
2648
  className
2513
2649
  } = {}) {
2514
2650
  const hasColumns = columns && columns.length > 0;
2515
- return /* @__PURE__ */ jsxs19(
2651
+ return /* @__PURE__ */ jsxs20(
2516
2652
  "footer",
2517
2653
  {
2518
2654
  id: "footer",
@@ -2522,12 +2658,12 @@ function Footer({
2522
2658
  ),
2523
2659
  "aria-labelledby": "footer-heading",
2524
2660
  children: [
2525
- /* @__PURE__ */ jsxs19("h2", { id: "footer-heading", className: "sr-only", children: [
2661
+ /* @__PURE__ */ jsxs20("h2", { id: "footer-heading", className: "sr-only", children: [
2526
2662
  siteName,
2527
2663
  " site footer"
2528
2664
  ] }),
2529
- /* @__PURE__ */ jsxs19("div", { className: "mx-auto max-w-[1400px] px-6 sm:px-10", children: [
2530
- /* @__PURE__ */ jsxs19(
2665
+ /* @__PURE__ */ jsxs20("div", { className: "mx-auto max-w-[1400px] px-6 sm:px-10", children: [
2666
+ /* @__PURE__ */ jsxs20(
2531
2667
  "div",
2532
2668
  {
2533
2669
  className: cn(
@@ -2535,14 +2671,14 @@ function Footer({
2535
2671
  newsletter ? "lg:grid-cols-[minmax(0,1fr)_minmax(0,1fr)] lg:items-end" : ""
2536
2672
  ),
2537
2673
  children: [
2538
- /* @__PURE__ */ jsxs19("div", { className: "flex flex-col gap-8", children: [
2539
- /* @__PURE__ */ jsx35(
2674
+ /* @__PURE__ */ jsxs20("div", { className: "flex flex-col gap-8", children: [
2675
+ /* @__PURE__ */ jsx36(
2540
2676
  Link2,
2541
2677
  {
2542
2678
  href: "/",
2543
2679
  className: "inline-flex items-center gap-3 rounded-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--timberwolf)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--night)]",
2544
2680
  "aria-label": `${siteName} home`,
2545
- children: /* @__PURE__ */ jsx35(
2681
+ children: /* @__PURE__ */ jsx36(
2546
2682
  Image2,
2547
2683
  {
2548
2684
  src: logoSrc,
@@ -2554,18 +2690,18 @@ function Footer({
2554
2690
  )
2555
2691
  }
2556
2692
  ),
2557
- showTagline && tagline ? /* @__PURE__ */ jsx35("p", { className: "font-semibold text-[clamp(28px,3.6vw,44px)] leading-[1.05] tracking-[-0.035em] text-[var(--timberwolf)] max-w-[18ch]", children: tagline }) : null
2693
+ showTagline && tagline ? /* @__PURE__ */ jsx36("p", { className: "font-semibold text-[clamp(28px,3.6vw,44px)] leading-[1.05] tracking-[-0.035em] text-[var(--timberwolf)] max-w-[18ch]", children: tagline }) : null
2558
2694
  ] }),
2559
- newsletter ? /* @__PURE__ */ jsx35("div", { className: "lg:justify-self-end w-full lg:max-w-md", children: /* @__PURE__ */ jsx35(NewsletterForm, { onSubmit: newsletterAction }) }) : null
2695
+ newsletter ? /* @__PURE__ */ jsx36("div", { className: "lg:justify-self-end w-full lg:max-w-md", children: /* @__PURE__ */ jsx36(NewsletterForm, { onSubmit: newsletterAction }) }) : null
2560
2696
  ]
2561
2697
  }
2562
2698
  ),
2563
- hasColumns ? /* @__PURE__ */ jsx35("div", { className: "border-t border-[rgba(214,213,201,0.08)] py-14", children: /* @__PURE__ */ jsx35("div", { className: "grid grid-cols-2 gap-x-6 gap-y-10 md:grid-cols-4", children: columns.map((col) => /* @__PURE__ */ jsxs19("nav", { "aria-label": col.title, children: [
2564
- /* @__PURE__ */ jsx35("p", { className: "text-[12px] uppercase tracking-[0.14em] text-[rgba(214,213,201,0.44)] mb-4", children: col.title }),
2565
- /* @__PURE__ */ jsx35("ul", { className: "flex flex-col gap-3", children: col.links.map((link) => /* @__PURE__ */ jsx35("li", { children: /* @__PURE__ */ jsx35(FooterLinkItem, { link }) }, `${col.title}-${link.label}`)) })
2699
+ hasColumns ? /* @__PURE__ */ jsx36("div", { className: "border-t border-[rgba(214,213,201,0.08)] py-14", children: /* @__PURE__ */ jsx36("div", { className: "grid grid-cols-2 gap-x-6 gap-y-10 md:grid-cols-4", children: columns.map((col) => /* @__PURE__ */ jsxs20("nav", { "aria-label": col.title, children: [
2700
+ /* @__PURE__ */ jsx36("p", { className: "text-[12px] uppercase tracking-[0.14em] text-[rgba(214,213,201,0.44)] mb-4", children: col.title }),
2701
+ /* @__PURE__ */ jsx36("ul", { className: "flex flex-col gap-3", children: col.links.map((link) => /* @__PURE__ */ jsx36("li", { children: /* @__PURE__ */ jsx36(FooterLinkItem, { link }) }, `${col.title}-${link.label}`)) })
2566
2702
  ] }, col.title)) }) }) : null,
2567
- /* @__PURE__ */ jsxs19("div", { className: "border-t border-[rgba(214,213,201,0.08)] py-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between", children: [
2568
- /* @__PURE__ */ jsx35("ul", { className: "flex items-center gap-2", children: socials.map(({ label, href, src }) => /* @__PURE__ */ jsx35("li", { children: /* @__PURE__ */ jsx35(
2703
+ /* @__PURE__ */ jsxs20("div", { className: "border-t border-[rgba(214,213,201,0.08)] py-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between", children: [
2704
+ /* @__PURE__ */ jsx36("ul", { className: "flex items-center gap-2", children: socials.map(({ label, href, src }) => /* @__PURE__ */ jsx36("li", { children: /* @__PURE__ */ jsx36(
2569
2705
  "a",
2570
2706
  {
2571
2707
  href,
@@ -2573,7 +2709,7 @@ function Footer({
2573
2709
  rel: "noopener noreferrer",
2574
2710
  "aria-label": `${siteName} on ${label}`,
2575
2711
  className: "inline-flex items-center justify-center h-9 w-9 rounded-full hover:bg-[var(--surface-1,#0f1512)] transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--timberwolf)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--night)]",
2576
- children: /* @__PURE__ */ jsx35(
2712
+ children: /* @__PURE__ */ jsx36(
2577
2713
  Image2,
2578
2714
  {
2579
2715
  src,
@@ -2585,14 +2721,14 @@ function Footer({
2585
2721
  )
2586
2722
  }
2587
2723
  ) }, label)) }),
2588
- /* @__PURE__ */ jsxs19("p", { className: "text-[13px] text-[rgba(214,213,201,0.44)] order-last sm:order-none", children: [
2724
+ /* @__PURE__ */ jsxs20("p", { className: "text-[13px] text-[rgba(214,213,201,0.44)] order-last sm:order-none", children: [
2589
2725
  "\xA9 ",
2590
2726
  (/* @__PURE__ */ new Date()).getFullYear(),
2591
2727
  " ",
2592
2728
  siteName,
2593
2729
  ". All rights reserved."
2594
2730
  ] }),
2595
- /* @__PURE__ */ jsx35(
2731
+ /* @__PURE__ */ jsx36(
2596
2732
  "a",
2597
2733
  {
2598
2734
  href: creditHref,
@@ -2611,7 +2747,7 @@ function Footer({
2611
2747
 
2612
2748
  // src/ui/footer-credits-bar.tsx
2613
2749
  import Image3 from "next/image";
2614
- import { Fragment as Fragment5, jsx as jsx36, jsxs as jsxs20 } from "react/jsx-runtime";
2750
+ import { Fragment as Fragment5, jsx as jsx37, jsxs as jsxs21 } from "react/jsx-runtime";
2615
2751
  var DEFAULT_SOCIALS2 = [
2616
2752
  {
2617
2753
  label: "Instagram",
@@ -2643,7 +2779,7 @@ function FooterCreditsBar({
2643
2779
  className
2644
2780
  } = {}) {
2645
2781
  const year = copyrightYear ?? (/* @__PURE__ */ new Date()).getFullYear();
2646
- return /* @__PURE__ */ jsxs20(
2782
+ return /* @__PURE__ */ jsxs21(
2647
2783
  "div",
2648
2784
  {
2649
2785
  className: cn(
@@ -2652,8 +2788,8 @@ function FooterCreditsBar({
2652
2788
  className
2653
2789
  ),
2654
2790
  children: [
2655
- /* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-4 sm:justify-self-start", children: [
2656
- /* @__PURE__ */ jsx36("ul", { className: "flex items-center gap-2", children: socials.map(({ label, href, src }) => /* @__PURE__ */ jsx36("li", { children: /* @__PURE__ */ jsx36(
2791
+ /* @__PURE__ */ jsxs21("div", { className: "flex items-center gap-4 sm:justify-self-start", children: [
2792
+ /* @__PURE__ */ jsx37("ul", { className: "flex items-center gap-2", children: socials.map(({ label, href, src }) => /* @__PURE__ */ jsx37("li", { children: /* @__PURE__ */ jsx37(
2657
2793
  "a",
2658
2794
  {
2659
2795
  href,
@@ -2665,7 +2801,7 @@ function FooterCreditsBar({
2665
2801
  "hover:bg-[var(--surface-1,#0f1512)] transition-colors",
2666
2802
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--timberwolf)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--night)]"
2667
2803
  ),
2668
- children: /* @__PURE__ */ jsx36(
2804
+ children: /* @__PURE__ */ jsx37(
2669
2805
  Image3,
2670
2806
  {
2671
2807
  src,
@@ -2677,15 +2813,15 @@ function FooterCreditsBar({
2677
2813
  )
2678
2814
  }
2679
2815
  ) }, label)) }),
2680
- showCredit ? /* @__PURE__ */ jsxs20(Fragment5, { children: [
2681
- /* @__PURE__ */ jsx36(
2816
+ showCredit ? /* @__PURE__ */ jsxs21(Fragment5, { children: [
2817
+ /* @__PURE__ */ jsx37(
2682
2818
  "span",
2683
2819
  {
2684
2820
  "aria-hidden": true,
2685
2821
  className: "h-5 w-px bg-[rgba(214,213,201,0.16)] flex-shrink-0"
2686
2822
  }
2687
2823
  ),
2688
- /* @__PURE__ */ jsx36(
2824
+ /* @__PURE__ */ jsx37(
2689
2825
  "a",
2690
2826
  {
2691
2827
  href: creditHref,
@@ -2697,19 +2833,19 @@ function FooterCreditsBar({
2697
2833
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--timberwolf)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--night)]",
2698
2834
  "whitespace-nowrap"
2699
2835
  ),
2700
- children: /* @__PURE__ */ jsxs20("span", { "aria-hidden": true, children: [
2836
+ children: /* @__PURE__ */ jsxs21("span", { "aria-hidden": true, children: [
2701
2837
  "Built by",
2702
2838
  " ",
2703
- /* @__PURE__ */ jsxs20("span", { style: { fontFamily: "AvertaStd-Semibold" }, children: [
2839
+ /* @__PURE__ */ jsxs21("span", { style: { fontFamily: "AvertaStd-Semibold" }, children: [
2704
2840
  "BRAIN",
2705
- /* @__PURE__ */ jsx36("span", { style: { fontFamily: "AvertaStd-Thin" }, children: "2.0" })
2841
+ /* @__PURE__ */ jsx37("span", { style: { fontFamily: "AvertaStd-Thin" }, children: "2.0" })
2706
2842
  ] })
2707
2843
  ] })
2708
2844
  }
2709
2845
  )
2710
2846
  ] }) : null
2711
2847
  ] }),
2712
- /* @__PURE__ */ jsxs20("p", { className: "text-[13px] text-[rgba(214,213,201,0.44)] text-center sm:text-right sm:justify-self-end", children: [
2848
+ /* @__PURE__ */ jsxs21("p", { className: "text-[13px] text-[rgba(214,213,201,0.44)] text-center sm:text-right sm:justify-self-end", children: [
2713
2849
  "\xA9 ",
2714
2850
  year,
2715
2851
  " ",
@@ -2722,8 +2858,8 @@ function FooterCreditsBar({
2722
2858
  }
2723
2859
 
2724
2860
  // src/ui/newsletter-form.tsx
2725
- import * as React27 from "react";
2726
- import { jsx as jsx37, jsxs as jsxs21 } from "react/jsx-runtime";
2861
+ import * as React28 from "react";
2862
+ import { jsx as jsx38, jsxs as jsxs22 } from "react/jsx-runtime";
2727
2863
  function NewsletterForm2({
2728
2864
  endpoint = "/api/newsletter/subscribe",
2729
2865
  source = "footer",
@@ -2734,17 +2870,17 @@ function NewsletterForm2({
2734
2870
  sendingLabel = "Subscribing\u2026",
2735
2871
  className
2736
2872
  }) {
2737
- const [email, setEmail] = React27.useState("");
2738
- const [website, setWebsite] = React27.useState("");
2739
- const [state, setState] = React27.useState("idle");
2740
- const inFlight = React27.useRef(false);
2873
+ const [email, setEmail] = React28.useState("");
2874
+ const [website, setWebsite] = React28.useState("");
2875
+ const [state, setState] = React28.useState("idle");
2876
+ const inFlight = React28.useRef(false);
2741
2877
  const onSubmit = async (e) => {
2742
2878
  e.preventDefault();
2743
2879
  if (inFlight.current) return;
2744
2880
  const trimmed = email.trim();
2745
2881
  const ok = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(trimmed);
2746
2882
  if (!ok) {
2747
- setState("error");
2883
+ setState("invalid_format");
2748
2884
  return;
2749
2885
  }
2750
2886
  inFlight.current = true;
@@ -2765,18 +2901,20 @@ function NewsletterForm2({
2765
2901
  setEmail("");
2766
2902
  } else if (res.status === 429) {
2767
2903
  setState("rate_limited");
2904
+ } else if (res.status === 400) {
2905
+ setState("invalid_format");
2768
2906
  } else {
2769
- setState("error");
2907
+ setState("server_error");
2770
2908
  }
2771
2909
  } catch {
2772
- setState("error");
2910
+ setState("server_error");
2773
2911
  } finally {
2774
2912
  inFlight.current = false;
2775
2913
  }
2776
2914
  };
2777
- const feedbackId = React27.useId();
2778
- const inputId = React27.useId();
2779
- return /* @__PURE__ */ jsxs21(
2915
+ const feedbackId = React28.useId();
2916
+ const inputId = React28.useId();
2917
+ return /* @__PURE__ */ jsxs22(
2780
2918
  "form",
2781
2919
  {
2782
2920
  onSubmit,
@@ -2784,15 +2922,15 @@ function NewsletterForm2({
2784
2922
  "aria-label": ariaLabel,
2785
2923
  className: cn("w-full max-w-md", className),
2786
2924
  children: [
2787
- /* @__PURE__ */ jsx37("label", { htmlFor: inputId, className: "sr-only", children: "Email address" }),
2788
- /* @__PURE__ */ jsxs21(
2925
+ /* @__PURE__ */ jsx38("label", { htmlFor: inputId, className: "sr-only", children: "Email address" }),
2926
+ /* @__PURE__ */ jsxs22(
2789
2927
  "div",
2790
2928
  {
2791
2929
  "aria-hidden": true,
2792
2930
  className: "absolute left-[-10000px] top-auto h-px w-px overflow-hidden",
2793
2931
  children: [
2794
- /* @__PURE__ */ jsx37("label", { htmlFor: `${inputId}-website`, children: "Website" }),
2795
- /* @__PURE__ */ jsx37(
2932
+ /* @__PURE__ */ jsx38("label", { htmlFor: `${inputId}-website`, children: "Website" }),
2933
+ /* @__PURE__ */ jsx38(
2796
2934
  "input",
2797
2935
  {
2798
2936
  type: "text",
@@ -2807,8 +2945,8 @@ function NewsletterForm2({
2807
2945
  ]
2808
2946
  }
2809
2947
  ),
2810
- /* @__PURE__ */ jsxs21("div", { className: "flex flex-col sm:flex-row gap-2", children: [
2811
- /* @__PURE__ */ jsx37(
2948
+ /* @__PURE__ */ jsxs22("div", { className: "flex flex-col sm:flex-row gap-2", children: [
2949
+ /* @__PURE__ */ jsx38(
2812
2950
  "input",
2813
2951
  {
2814
2952
  id: inputId,
@@ -2820,20 +2958,21 @@ function NewsletterForm2({
2820
2958
  value: email,
2821
2959
  onChange: (e) => {
2822
2960
  setEmail(e.target.value);
2823
- if (state === "error" || state === "rate_limited") setState("idle");
2961
+ if (state === "invalid_format" || state === "server_error" || state === "rate_limited")
2962
+ setState("idle");
2824
2963
  },
2825
2964
  placeholder,
2826
- "aria-invalid": state === "error",
2965
+ "aria-invalid": state === "invalid_format",
2827
2966
  "aria-describedby": feedbackId,
2828
2967
  className: cn(
2829
2968
  "w-full sm:flex-1 h-12 sm:h-11 rounded-full bg-[var(--surface-1,#0f1512)] border px-5 text-[16px] sm:text-[14px] text-[var(--timberwolf)] placeholder:text-[rgba(214,213,201,0.44)]",
2830
2969
  "focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--timberwolf)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--night)]",
2831
2970
  "disabled:opacity-60",
2832
- state === "error" ? "border-[rgba(237,106,106,0.5)]" : "border-[rgba(214,213,201,0.08)]"
2971
+ state === "invalid_format" || state === "server_error" ? "border-[rgba(237,106,106,0.5)]" : "border-[rgba(214,213,201,0.08)]"
2833
2972
  )
2834
2973
  }
2835
2974
  ),
2836
- /* @__PURE__ */ jsx37(
2975
+ /* @__PURE__ */ jsx38(
2837
2976
  "button",
2838
2977
  {
2839
2978
  type: "submit",
@@ -2843,7 +2982,7 @@ function NewsletterForm2({
2843
2982
  }
2844
2983
  )
2845
2984
  ] }),
2846
- /* @__PURE__ */ jsxs21(
2985
+ /* @__PURE__ */ jsxs22(
2847
2986
  "p",
2848
2987
  {
2849
2988
  id: feedbackId,
@@ -2851,13 +2990,14 @@ function NewsletterForm2({
2851
2990
  className: cn(
2852
2991
  "mt-2 -ml-0.5 text-[13px] min-h-[1.25rem]",
2853
2992
  state === "sent" && "text-[var(--timberwolf)]",
2854
- (state === "error" || state === "rate_limited") && "text-[rgb(237,106,106)]",
2993
+ (state === "invalid_format" || state === "server_error" || state === "rate_limited") && "text-[rgb(237,106,106)]",
2855
2994
  (state === "idle" || state === "sending") && "text-[rgba(214,213,201,0.44)]"
2856
2995
  ),
2857
- role: state === "error" || state === "rate_limited" ? "alert" : void 0,
2996
+ role: state === "invalid_format" || state === "server_error" || state === "rate_limited" ? "alert" : void 0,
2858
2997
  children: [
2859
2998
  state === "sent" && "Thanks \u2014 we\u2019ll be in touch.",
2860
- state === "error" && "Please enter a valid email address.",
2999
+ state === "invalid_format" && "Please enter a valid email address.",
3000
+ state === "server_error" && "Could not subscribe right now. Please try again in a moment.",
2861
3001
  state === "rate_limited" && "Too many attempts. Try again in a minute."
2862
3002
  ]
2863
3003
  }
@@ -2869,14 +3009,14 @@ function NewsletterForm2({
2869
3009
 
2870
3010
  // src/ui/site-footer.tsx
2871
3011
  import Link3 from "next/link";
2872
- import { jsx as jsx38, jsxs as jsxs22 } from "react/jsx-runtime";
3012
+ import { jsx as jsx39, jsxs as jsxs23 } from "react/jsx-runtime";
2873
3013
  var INK_MUTED = "rgba(214,213,201,0.64)";
2874
3014
  var INK_SUBTLE = "rgba(214,213,201,0.44)";
2875
3015
  var LINE = "rgba(214,213,201,0.08)";
2876
3016
  function FooterLinkItem2({ link }) {
2877
3017
  const classes = "text-[14px] text-[rgba(214,213,201,0.64)] hover:text-[var(--timberwolf)] transition-colors rounded-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--timberwolf)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--night)]";
2878
3018
  if (link.external) {
2879
- return /* @__PURE__ */ jsx38(
3019
+ return /* @__PURE__ */ jsx39(
2880
3020
  "a",
2881
3021
  {
2882
3022
  href: link.href,
@@ -2887,7 +3027,7 @@ function FooterLinkItem2({ link }) {
2887
3027
  }
2888
3028
  );
2889
3029
  }
2890
- return /* @__PURE__ */ jsx38(Link3, { href: link.href, className: classes, children: link.label });
3030
+ return /* @__PURE__ */ jsx39(Link3, { href: link.href, className: classes, children: link.label });
2891
3031
  }
2892
3032
  function SiteFooter({
2893
3033
  columns,
@@ -2898,7 +3038,7 @@ function SiteFooter({
2898
3038
  newsletterTitle = "Updates from the Network.",
2899
3039
  newsletterSubtitle = "Only when relevant. No spam."
2900
3040
  }) {
2901
- return /* @__PURE__ */ jsxs22(
3041
+ return /* @__PURE__ */ jsxs23(
2902
3042
  "footer",
2903
3043
  {
2904
3044
  id: "footer",
@@ -2906,14 +3046,14 @@ function SiteFooter({
2906
3046
  style: { borderTopColor: LINE },
2907
3047
  "aria-labelledby": "site-footer-heading",
2908
3048
  children: [
2909
- /* @__PURE__ */ jsxs22("h2", { id: "site-footer-heading", className: "sr-only", children: [
3049
+ /* @__PURE__ */ jsxs23("h2", { id: "site-footer-heading", className: "sr-only", children: [
2910
3050
  siteName,
2911
3051
  " site footer"
2912
3052
  ] }),
2913
- /* @__PURE__ */ jsxs22("div", { className: "mx-auto max-w-[1400px] px-6 sm:px-10", children: [
2914
- /* @__PURE__ */ jsxs22("div", { className: "flex flex-col gap-6 pt-16 pb-10 md:flex-row md:items-start md:justify-between md:gap-10 md:pt-20", children: [
2915
- /* @__PURE__ */ jsxs22("div", { className: "max-w-[36ch]", children: [
2916
- /* @__PURE__ */ jsx38(
3053
+ /* @__PURE__ */ jsxs23("div", { className: "mx-auto max-w-[1400px] px-6 sm:px-10", children: [
3054
+ /* @__PURE__ */ jsxs23("div", { className: "flex flex-col gap-6 pt-16 pb-10 md:flex-row md:items-start md:justify-between md:gap-10 md:pt-20", children: [
3055
+ /* @__PURE__ */ jsxs23("div", { className: "max-w-[36ch]", children: [
3056
+ /* @__PURE__ */ jsx39(
2917
3057
  "p",
2918
3058
  {
2919
3059
  className: "text-[11px] uppercase tracking-[0.22em] font-semibold",
@@ -2921,8 +3061,8 @@ function SiteFooter({
2921
3061
  children: newsletterLabel
2922
3062
  }
2923
3063
  ),
2924
- /* @__PURE__ */ jsx38("p", { className: "mt-3 text-[17px] md:text-[19px] leading-[1.35] tracking-[-0.01em] text-[var(--timberwolf)]", children: newsletterTitle }),
2925
- /* @__PURE__ */ jsx38(
3064
+ /* @__PURE__ */ jsx39("p", { className: "mt-3 text-[17px] md:text-[19px] leading-[1.35] tracking-[-0.01em] text-[var(--timberwolf)]", children: newsletterTitle }),
3065
+ /* @__PURE__ */ jsx39(
2926
3066
  "p",
2927
3067
  {
2928
3068
  className: "mt-2 text-[13px] leading-[1.5]",
@@ -2931,7 +3071,7 @@ function SiteFooter({
2931
3071
  }
2932
3072
  )
2933
3073
  ] }),
2934
- /* @__PURE__ */ jsx38("div", { className: "w-full md:max-w-md md:pt-1", children: /* @__PURE__ */ jsx38(
3074
+ /* @__PURE__ */ jsx39("div", { className: "w-full md:max-w-md md:pt-1", children: /* @__PURE__ */ jsx39(
2935
3075
  NewsletterForm2,
2936
3076
  {
2937
3077
  endpoint: newsletterEndpoint,
@@ -2939,8 +3079,8 @@ function SiteFooter({
2939
3079
  }
2940
3080
  ) })
2941
3081
  ] }),
2942
- /* @__PURE__ */ jsx38("div", { className: "border-t py-14", style: { borderTopColor: LINE }, children: /* @__PURE__ */ jsx38("div", { className: "grid grid-cols-2 gap-x-6 gap-y-10 md:grid-cols-4", children: columns.map((col) => /* @__PURE__ */ jsxs22("nav", { "aria-label": col.title, children: [
2943
- /* @__PURE__ */ jsx38(
3082
+ /* @__PURE__ */ jsx39("div", { className: "border-t py-14", style: { borderTopColor: LINE }, children: /* @__PURE__ */ jsx39("div", { className: "grid grid-cols-2 gap-x-6 gap-y-10 md:grid-cols-4", children: columns.map((col) => /* @__PURE__ */ jsxs23("nav", { "aria-label": col.title, children: [
3083
+ /* @__PURE__ */ jsx39(
2944
3084
  "p",
2945
3085
  {
2946
3086
  className: "text-[12px] uppercase tracking-[0.14em] mb-4",
@@ -2948,9 +3088,9 @@ function SiteFooter({
2948
3088
  children: col.title
2949
3089
  }
2950
3090
  ),
2951
- /* @__PURE__ */ jsx38("ul", { className: "flex flex-col gap-3", children: col.links.map((link) => /* @__PURE__ */ jsx38("li", { children: /* @__PURE__ */ jsx38(FooterLinkItem2, { link }) }, `${col.title}-${link.label}`)) })
3091
+ /* @__PURE__ */ jsx39("ul", { className: "flex flex-col gap-3", children: col.links.map((link) => /* @__PURE__ */ jsx39("li", { children: /* @__PURE__ */ jsx39(FooterLinkItem2, { link }) }, `${col.title}-${link.label}`)) })
2952
3092
  ] }, col.title)) }) }),
2953
- /* @__PURE__ */ jsx38(FooterCreditsBar, {})
3093
+ /* @__PURE__ */ jsx39(FooterCreditsBar, {})
2954
3094
  ] })
2955
3095
  ]
2956
3096
  }
@@ -2958,7 +3098,7 @@ function SiteFooter({
2958
3098
  }
2959
3099
 
2960
3100
  // src/ui/sign-in-form.tsx
2961
- import * as React28 from "react";
3101
+ import * as React29 from "react";
2962
3102
  import Link4 from "next/link";
2963
3103
  import {
2964
3104
  AlertCircle,
@@ -3025,7 +3165,7 @@ function createClient() {
3025
3165
  }
3026
3166
 
3027
3167
  // src/ui/sign-in-form.tsx
3028
- import { Fragment as Fragment6, jsx as jsx39, jsxs as jsxs23 } from "react/jsx-runtime";
3168
+ import { Fragment as Fragment6, jsx as jsx40, jsxs as jsxs24 } from "react/jsx-runtime";
3029
3169
  var COOLDOWN_THRESHOLD = 3;
3030
3170
  var COOLDOWN_DURATION_MS = 3e4;
3031
3171
  function SignInForm({
@@ -3037,15 +3177,15 @@ function SignInForm({
3037
3177
  title = "Welcome back",
3038
3178
  subtitle = "Sign in to access your account"
3039
3179
  }) {
3040
- const [email, setEmail] = React28.useState("");
3041
- const [password, setPassword] = React28.useState("");
3042
- const [showPassword, setShowPassword] = React28.useState(false);
3043
- const [error, setError] = React28.useState(initialError ?? "");
3044
- const [loading, setLoading] = React28.useState(false);
3045
- const [consecutiveErrors, setConsecutiveErrors] = React28.useState(0);
3046
- const [cooldownUntil, setCooldownUntil] = React28.useState(null);
3047
- const [supabase] = React28.useState(() => createClient());
3048
- React28.useEffect(() => {
3180
+ const [email, setEmail] = React29.useState("");
3181
+ const [password, setPassword] = React29.useState("");
3182
+ const [showPassword, setShowPassword] = React29.useState(false);
3183
+ const [error, setError] = React29.useState(initialError ?? "");
3184
+ const [loading, setLoading] = React29.useState(false);
3185
+ const [consecutiveErrors, setConsecutiveErrors] = React29.useState(0);
3186
+ const [cooldownUntil, setCooldownUntil] = React29.useState(null);
3187
+ const [supabase] = React29.useState(() => createClient());
3188
+ React29.useEffect(() => {
3049
3189
  if (initialError) setError(initialError);
3050
3190
  }, [initialError]);
3051
3191
  const handleSubmit = async (e) => {
@@ -3089,29 +3229,29 @@ function SignInForm({
3089
3229
  setLoading(false);
3090
3230
  }
3091
3231
  };
3092
- return /* @__PURE__ */ jsxs23("div", { className: "bg-card border border-border rounded-xl p-8 space-y-6", children: [
3093
- /* @__PURE__ */ jsxs23("div", { className: "text-center", children: [
3094
- /* @__PURE__ */ jsx39("h1", { className: "text-2xl font-bold text-[var(--timberwolf)] mb-2", children: title }),
3095
- /* @__PURE__ */ jsx39("p", { className: "text-sm text-muted-foreground", children: subtitle })
3232
+ return /* @__PURE__ */ jsxs24("div", { className: "bg-card border border-border rounded-xl p-8 space-y-6", children: [
3233
+ /* @__PURE__ */ jsxs24("div", { className: "text-center", children: [
3234
+ /* @__PURE__ */ jsx40("h1", { className: "text-2xl font-bold text-[var(--timberwolf)] mb-2", children: title }),
3235
+ /* @__PURE__ */ jsx40("p", { className: "text-sm text-muted-foreground", children: subtitle })
3096
3236
  ] }),
3097
- /* @__PURE__ */ jsxs23("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
3098
- error && /* @__PURE__ */ jsx39(
3237
+ /* @__PURE__ */ jsxs24("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
3238
+ error && /* @__PURE__ */ jsx40(
3099
3239
  "div",
3100
3240
  {
3101
3241
  id: "signin-error",
3102
3242
  role: "alert",
3103
3243
  "aria-live": "polite",
3104
3244
  className: "bg-red-900/20 border border-red-700/30 rounded-lg p-3",
3105
- children: /* @__PURE__ */ jsxs23("div", { className: "flex items-center gap-2 text-red-400 text-sm", children: [
3106
- /* @__PURE__ */ jsx39(AlertCircle, { className: "h-4 w-4 flex-shrink-0" }),
3107
- /* @__PURE__ */ jsx39("span", { children: error })
3245
+ children: /* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-2 text-red-400 text-sm", children: [
3246
+ /* @__PURE__ */ jsx40(AlertCircle, { className: "h-4 w-4 flex-shrink-0" }),
3247
+ /* @__PURE__ */ jsx40("span", { children: error })
3108
3248
  ] })
3109
3249
  }
3110
3250
  ),
3111
- /* @__PURE__ */ jsxs23("div", { className: "space-y-2", children: [
3112
- /* @__PURE__ */ jsx39(Label, { htmlFor: "email", className: "text-[var(--timberwolf)]", children: "Email" }),
3113
- /* @__PURE__ */ jsxs23("div", { className: "relative", children: [
3114
- /* @__PURE__ */ jsx39(
3251
+ /* @__PURE__ */ jsxs24("div", { className: "space-y-2", children: [
3252
+ /* @__PURE__ */ jsx40(Label, { htmlFor: "email", className: "text-[var(--timberwolf)]", children: "Email" }),
3253
+ /* @__PURE__ */ jsxs24("div", { className: "relative", children: [
3254
+ /* @__PURE__ */ jsx40(
3115
3255
  Input,
3116
3256
  {
3117
3257
  id: "email",
@@ -3126,13 +3266,13 @@ function SignInForm({
3126
3266
  "aria-describedby": error ? "signin-error" : void 0
3127
3267
  }
3128
3268
  ),
3129
- /* @__PURE__ */ jsx39(Mail, { className: "h-4 w-4 absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground" })
3269
+ /* @__PURE__ */ jsx40(Mail, { className: "h-4 w-4 absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground" })
3130
3270
  ] })
3131
3271
  ] }),
3132
- /* @__PURE__ */ jsxs23("div", { className: "space-y-2", children: [
3133
- /* @__PURE__ */ jsx39(Label, { htmlFor: "password", className: "text-[var(--timberwolf)]", children: "Password" }),
3134
- /* @__PURE__ */ jsxs23("div", { className: "relative", children: [
3135
- /* @__PURE__ */ jsx39(
3272
+ /* @__PURE__ */ jsxs24("div", { className: "space-y-2", children: [
3273
+ /* @__PURE__ */ jsx40(Label, { htmlFor: "password", className: "text-[var(--timberwolf)]", children: "Password" }),
3274
+ /* @__PURE__ */ jsxs24("div", { className: "relative", children: [
3275
+ /* @__PURE__ */ jsx40(
3136
3276
  Input,
3137
3277
  {
3138
3278
  id: "password",
@@ -3147,8 +3287,8 @@ function SignInForm({
3147
3287
  "aria-describedby": error ? "signin-error" : void 0
3148
3288
  }
3149
3289
  ),
3150
- /* @__PURE__ */ jsx39(Lock, { className: "h-4 w-4 absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground" }),
3151
- /* @__PURE__ */ jsx39(
3290
+ /* @__PURE__ */ jsx40(Lock, { className: "h-4 w-4 absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground" }),
3291
+ /* @__PURE__ */ jsx40(
3152
3292
  "button",
3153
3293
  {
3154
3294
  type: "button",
@@ -3157,12 +3297,12 @@ function SignInForm({
3157
3297
  disabled: loading,
3158
3298
  "aria-label": showPassword ? "Hide password" : "Show password",
3159
3299
  "aria-pressed": showPassword,
3160
- children: showPassword ? /* @__PURE__ */ jsx39(EyeOff, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx39(Eye, { className: "h-4 w-4" })
3300
+ children: showPassword ? /* @__PURE__ */ jsx40(EyeOff, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx40(Eye, { className: "h-4 w-4" })
3161
3301
  }
3162
3302
  )
3163
3303
  ] })
3164
3304
  ] }),
3165
- forgotPasswordHref ? /* @__PURE__ */ jsx39("div", { className: "flex justify-end -mt-1", children: /* @__PURE__ */ jsx39(
3305
+ forgotPasswordHref ? /* @__PURE__ */ jsx40("div", { className: "flex justify-end -mt-1", children: /* @__PURE__ */ jsx40(
3166
3306
  Link4,
3167
3307
  {
3168
3308
  href: forgotPasswordHref,
@@ -3170,23 +3310,23 @@ function SignInForm({
3170
3310
  children: "Forgot your password?"
3171
3311
  }
3172
3312
  ) }) : null,
3173
- /* @__PURE__ */ jsx39(
3313
+ /* @__PURE__ */ jsx40(
3174
3314
  Button,
3175
3315
  {
3176
3316
  type: "submit",
3177
3317
  className: "w-full h-11 bg-[var(--timberwolf)] text-[var(--night)] hover:bg-[var(--ash-grey)]",
3178
3318
  disabled: loading,
3179
- children: loading ? /* @__PURE__ */ jsxs23(Fragment6, { children: [
3180
- /* @__PURE__ */ jsx39(Loader2, { className: "h-4 w-4 mr-2 animate-spin" }),
3319
+ children: loading ? /* @__PURE__ */ jsxs24(Fragment6, { children: [
3320
+ /* @__PURE__ */ jsx40(Loader2, { className: "h-4 w-4 mr-2 animate-spin" }),
3181
3321
  "Signing in..."
3182
3322
  ] }) : "Sign in"
3183
3323
  }
3184
3324
  )
3185
3325
  ] }),
3186
- signUpHref ? /* @__PURE__ */ jsx39("div", { className: "text-center text-sm", children: /* @__PURE__ */ jsxs23("p", { className: "text-muted-foreground", children: [
3326
+ signUpHref ? /* @__PURE__ */ jsx40("div", { className: "text-center text-sm", children: /* @__PURE__ */ jsxs24("p", { className: "text-muted-foreground", children: [
3187
3327
  "Don't have an account?",
3188
3328
  " ",
3189
- /* @__PURE__ */ jsx39(
3329
+ /* @__PURE__ */ jsx40(
3190
3330
  Link4,
3191
3331
  {
3192
3332
  href: signUpHref,
@@ -3199,7 +3339,7 @@ function SignInForm({
3199
3339
  }
3200
3340
 
3201
3341
  // src/ui/forgot-password-form.tsx
3202
- import * as React29 from "react";
3342
+ import * as React30 from "react";
3203
3343
  import Link5 from "next/link";
3204
3344
  import {
3205
3345
  AlertCircle as AlertCircle2,
@@ -3208,7 +3348,7 @@ import {
3208
3348
  Loader2 as Loader22,
3209
3349
  Mail as Mail2
3210
3350
  } from "lucide-react";
3211
- import { Fragment as Fragment7, jsx as jsx40, jsxs as jsxs24 } from "react/jsx-runtime";
3351
+ import { Fragment as Fragment7, jsx as jsx41, jsxs as jsxs25 } from "react/jsx-runtime";
3212
3352
  var RESEND_COOLDOWN_MS = 3e4;
3213
3353
  var COOLDOWN_STORAGE_KEY = "playback:pwreset-cooldown-until";
3214
3354
  function ForgotPasswordForm({
@@ -3217,15 +3357,15 @@ function ForgotPasswordForm({
3217
3357
  title = "Forgot password?",
3218
3358
  subtitle = "Enter your email and we'll send you a reset link."
3219
3359
  }) {
3220
- const [email, setEmail] = React29.useState("");
3221
- const [error, setError] = React29.useState("");
3222
- const [loading, setLoading] = React29.useState(false);
3223
- const [emailSent, setEmailSent] = React29.useState(false);
3224
- const [cooldownUntil, setCooldownUntilState] = React29.useState(
3360
+ const [email, setEmail] = React30.useState("");
3361
+ const [error, setError] = React30.useState("");
3362
+ const [loading, setLoading] = React30.useState(false);
3363
+ const [emailSent, setEmailSent] = React30.useState(false);
3364
+ const [cooldownUntil, setCooldownUntilState] = React30.useState(
3225
3365
  null
3226
3366
  );
3227
- const [now, setNow] = React29.useState(() => Date.now());
3228
- const [supabase] = React29.useState(() => createClient());
3367
+ const [now, setNow] = React30.useState(() => Date.now());
3368
+ const [supabase] = React30.useState(() => createClient());
3229
3369
  const setCooldownUntil = (value) => {
3230
3370
  setCooldownUntilState(value);
3231
3371
  if (typeof window === "undefined") return;
@@ -3235,7 +3375,7 @@ function ForgotPasswordForm({
3235
3375
  window.sessionStorage.setItem(COOLDOWN_STORAGE_KEY, String(value));
3236
3376
  }
3237
3377
  };
3238
- React29.useEffect(() => {
3378
+ React30.useEffect(() => {
3239
3379
  if (typeof window === "undefined") return;
3240
3380
  const stored = window.sessionStorage.getItem(COOLDOWN_STORAGE_KEY);
3241
3381
  if (!stored) return;
@@ -3246,7 +3386,7 @@ function ForgotPasswordForm({
3246
3386
  }
3247
3387
  setCooldownUntilState(parsed);
3248
3388
  }, []);
3249
- React29.useEffect(() => {
3389
+ React30.useEffect(() => {
3250
3390
  if (!cooldownUntil) return;
3251
3391
  const id = setInterval(() => setNow(Date.now()), 1e3);
3252
3392
  return () => clearInterval(id);
@@ -3286,19 +3426,19 @@ function ForgotPasswordForm({
3286
3426
  }
3287
3427
  };
3288
3428
  if (emailSent) {
3289
- return /* @__PURE__ */ jsxs24("div", { className: "bg-card border border-border rounded-xl p-8 space-y-6 text-center", children: [
3290
- /* @__PURE__ */ jsx40("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx40("div", { className: "h-12 w-12 rounded-full bg-[var(--timberwolf)]/10 border border-[var(--timberwolf)]/20 flex items-center justify-center", children: /* @__PURE__ */ jsx40(CheckCircle, { className: "h-6 w-6 text-[var(--timberwolf)]" }) }) }),
3291
- /* @__PURE__ */ jsxs24("div", { className: "space-y-2", children: [
3292
- /* @__PURE__ */ jsx40("h1", { className: "text-2xl font-bold text-[var(--timberwolf)]", children: "Check your email" }),
3293
- /* @__PURE__ */ jsxs24("p", { className: "text-sm text-muted-foreground", children: [
3429
+ return /* @__PURE__ */ jsxs25("div", { className: "bg-card border border-border rounded-xl p-8 space-y-6 text-center", children: [
3430
+ /* @__PURE__ */ jsx41("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx41("div", { className: "h-12 w-12 rounded-full bg-[var(--timberwolf)]/10 border border-[var(--timberwolf)]/20 flex items-center justify-center", children: /* @__PURE__ */ jsx41(CheckCircle, { className: "h-6 w-6 text-[var(--timberwolf)]" }) }) }),
3431
+ /* @__PURE__ */ jsxs25("div", { className: "space-y-2", children: [
3432
+ /* @__PURE__ */ jsx41("h1", { className: "text-2xl font-bold text-[var(--timberwolf)]", children: "Check your email" }),
3433
+ /* @__PURE__ */ jsxs25("p", { className: "text-sm text-muted-foreground", children: [
3294
3434
  "We sent a reset link to",
3295
3435
  " ",
3296
- /* @__PURE__ */ jsx40("span", { className: "text-[var(--timberwolf)] font-medium", children: email }),
3436
+ /* @__PURE__ */ jsx41("span", { className: "text-[var(--timberwolf)] font-medium", children: email }),
3297
3437
  ". If it's not in your inbox, check spam."
3298
3438
  ] })
3299
3439
  ] }),
3300
- /* @__PURE__ */ jsxs24("div", { className: "space-y-3 pt-2", children: [
3301
- /* @__PURE__ */ jsx40(
3440
+ /* @__PURE__ */ jsxs25("div", { className: "space-y-3 pt-2", children: [
3441
+ /* @__PURE__ */ jsx41(
3302
3442
  Button,
3303
3443
  {
3304
3444
  onClick: () => {
@@ -3312,36 +3452,36 @@ function ForgotPasswordForm({
3312
3452
  children: cooldownSecondsLeft > 0 ? `Send another email in ${cooldownSecondsLeft}s` : "Send another email"
3313
3453
  }
3314
3454
  ),
3315
- /* @__PURE__ */ jsx40(Link5, { href: loginHref, className: "block", children: /* @__PURE__ */ jsxs24(Button, { className: "w-full h-11 bg-[var(--timberwolf)] text-[var(--night)] hover:bg-[var(--ash-grey)]", children: [
3316
- /* @__PURE__ */ jsx40(ArrowLeft, { className: "h-4 w-4 mr-2" }),
3455
+ /* @__PURE__ */ jsx41(Link5, { href: loginHref, className: "block", children: /* @__PURE__ */ jsxs25(Button, { className: "w-full h-11 bg-[var(--timberwolf)] text-[var(--night)] hover:bg-[var(--ash-grey)]", children: [
3456
+ /* @__PURE__ */ jsx41(ArrowLeft, { className: "h-4 w-4 mr-2" }),
3317
3457
  "Back to sign in"
3318
3458
  ] }) })
3319
3459
  ] })
3320
3460
  ] });
3321
3461
  }
3322
- return /* @__PURE__ */ jsxs24("div", { className: "bg-card border border-border rounded-xl p-8 space-y-6", children: [
3323
- /* @__PURE__ */ jsxs24("div", { className: "text-center", children: [
3324
- /* @__PURE__ */ jsx40("h1", { className: "text-2xl font-bold text-[var(--timberwolf)] mb-2", children: title }),
3325
- /* @__PURE__ */ jsx40("p", { className: "text-sm text-muted-foreground", children: subtitle })
3462
+ return /* @__PURE__ */ jsxs25("div", { className: "bg-card border border-border rounded-xl p-8 space-y-6", children: [
3463
+ /* @__PURE__ */ jsxs25("div", { className: "text-center", children: [
3464
+ /* @__PURE__ */ jsx41("h1", { className: "text-2xl font-bold text-[var(--timberwolf)] mb-2", children: title }),
3465
+ /* @__PURE__ */ jsx41("p", { className: "text-sm text-muted-foreground", children: subtitle })
3326
3466
  ] }),
3327
- /* @__PURE__ */ jsxs24("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
3328
- error && /* @__PURE__ */ jsx40(
3467
+ /* @__PURE__ */ jsxs25("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
3468
+ error && /* @__PURE__ */ jsx41(
3329
3469
  "div",
3330
3470
  {
3331
3471
  id: "forgot-error",
3332
3472
  role: "alert",
3333
3473
  "aria-live": "polite",
3334
3474
  className: "bg-red-900/20 border border-red-700/30 rounded-lg p-3",
3335
- children: /* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-2 text-red-400 text-sm", children: [
3336
- /* @__PURE__ */ jsx40(AlertCircle2, { className: "h-4 w-4 flex-shrink-0" }),
3337
- /* @__PURE__ */ jsx40("span", { children: error })
3475
+ children: /* @__PURE__ */ jsxs25("div", { className: "flex items-center gap-2 text-red-400 text-sm", children: [
3476
+ /* @__PURE__ */ jsx41(AlertCircle2, { className: "h-4 w-4 flex-shrink-0" }),
3477
+ /* @__PURE__ */ jsx41("span", { children: error })
3338
3478
  ] })
3339
3479
  }
3340
3480
  ),
3341
- /* @__PURE__ */ jsxs24("div", { className: "space-y-2", children: [
3342
- /* @__PURE__ */ jsx40(Label, { htmlFor: "email", className: "text-[var(--timberwolf)]", children: "Email" }),
3343
- /* @__PURE__ */ jsxs24("div", { className: "relative", children: [
3344
- /* @__PURE__ */ jsx40(
3481
+ /* @__PURE__ */ jsxs25("div", { className: "space-y-2", children: [
3482
+ /* @__PURE__ */ jsx41(Label, { htmlFor: "email", className: "text-[var(--timberwolf)]", children: "Email" }),
3483
+ /* @__PURE__ */ jsxs25("div", { className: "relative", children: [
3484
+ /* @__PURE__ */ jsx41(
3345
3485
  Input,
3346
3486
  {
3347
3487
  id: "email",
@@ -3357,29 +3497,29 @@ function ForgotPasswordForm({
3357
3497
  "aria-describedby": error ? "forgot-error" : void 0
3358
3498
  }
3359
3499
  ),
3360
- /* @__PURE__ */ jsx40(Mail2, { className: "h-4 w-4 absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground" })
3500
+ /* @__PURE__ */ jsx41(Mail2, { className: "h-4 w-4 absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground" })
3361
3501
  ] })
3362
3502
  ] }),
3363
- /* @__PURE__ */ jsx40(
3503
+ /* @__PURE__ */ jsx41(
3364
3504
  Button,
3365
3505
  {
3366
3506
  type: "submit",
3367
3507
  className: "w-full h-11 bg-[var(--timberwolf)] text-[var(--night)] hover:bg-[var(--ash-grey)]",
3368
3508
  disabled: loading || cooldownSecondsLeft > 0,
3369
- children: loading ? /* @__PURE__ */ jsxs24(Fragment7, { children: [
3370
- /* @__PURE__ */ jsx40(Loader22, { className: "h-4 w-4 mr-2 animate-spin" }),
3509
+ children: loading ? /* @__PURE__ */ jsxs25(Fragment7, { children: [
3510
+ /* @__PURE__ */ jsx41(Loader22, { className: "h-4 w-4 mr-2 animate-spin" }),
3371
3511
  "Sending email..."
3372
3512
  ] }) : cooldownSecondsLeft > 0 ? `Try again in ${cooldownSecondsLeft}s` : "Send reset link"
3373
3513
  }
3374
3514
  )
3375
3515
  ] }),
3376
- /* @__PURE__ */ jsx40("div", { className: "text-center text-sm", children: /* @__PURE__ */ jsxs24(
3516
+ /* @__PURE__ */ jsx41("div", { className: "text-center text-sm", children: /* @__PURE__ */ jsxs25(
3377
3517
  Link5,
3378
3518
  {
3379
3519
  href: loginHref,
3380
3520
  className: "inline-flex items-center gap-1.5 text-muted-foreground hover:text-[var(--timberwolf)] transition-colors",
3381
3521
  children: [
3382
- /* @__PURE__ */ jsx40(ArrowLeft, { className: "h-3.5 w-3.5" }),
3522
+ /* @__PURE__ */ jsx41(ArrowLeft, { className: "h-3.5 w-3.5" }),
3383
3523
  "Back to sign in"
3384
3524
  ]
3385
3525
  }
@@ -3388,7 +3528,7 @@ function ForgotPasswordForm({
3388
3528
  }
3389
3529
 
3390
3530
  // src/ui/reset-password-form.tsx
3391
- import * as React30 from "react";
3531
+ import * as React31 from "react";
3392
3532
  import Link6 from "next/link";
3393
3533
  import { useRouter } from "next/navigation";
3394
3534
  import {
@@ -3399,7 +3539,7 @@ import {
3399
3539
  Loader2 as Loader23,
3400
3540
  Lock as Lock2
3401
3541
  } from "lucide-react";
3402
- import { Fragment as Fragment8, jsx as jsx41, jsxs as jsxs25 } from "react/jsx-runtime";
3542
+ import { Fragment as Fragment8, jsx as jsx42, jsxs as jsxs26 } from "react/jsx-runtime";
3403
3543
  function ResetPasswordForm({
3404
3544
  loginHref = "/auth/login",
3405
3545
  initialError,
@@ -3407,19 +3547,19 @@ function ResetPasswordForm({
3407
3547
  title = "Reset password",
3408
3548
  subtitle = "Enter a new password for your account."
3409
3549
  }) {
3410
- const [password, setPassword] = React30.useState("");
3411
- const [confirmPassword, setConfirmPassword] = React30.useState("");
3412
- const [showPassword, setShowPassword] = React30.useState(false);
3413
- const [showConfirmPassword, setShowConfirmPassword] = React30.useState(false);
3414
- const [error, setError] = React30.useState(initialError ?? "");
3415
- const [loading, setLoading] = React30.useState(false);
3416
- const [passwordReset, setPasswordReset] = React30.useState(false);
3550
+ const [password, setPassword] = React31.useState("");
3551
+ const [confirmPassword, setConfirmPassword] = React31.useState("");
3552
+ const [showPassword, setShowPassword] = React31.useState(false);
3553
+ const [showConfirmPassword, setShowConfirmPassword] = React31.useState(false);
3554
+ const [error, setError] = React31.useState(initialError ?? "");
3555
+ const [loading, setLoading] = React31.useState(false);
3556
+ const [passwordReset, setPasswordReset] = React31.useState(false);
3417
3557
  const router = useRouter();
3418
- const [supabase] = React30.useState(() => createClient());
3419
- React30.useEffect(() => {
3558
+ const [supabase] = React31.useState(() => createClient());
3559
+ React31.useEffect(() => {
3420
3560
  if (initialError) setError(initialError);
3421
3561
  }, [initialError]);
3422
- React30.useEffect(() => {
3562
+ React31.useEffect(() => {
3423
3563
  if (!passwordReset) return;
3424
3564
  const id = setTimeout(() => {
3425
3565
  router.push(loginHref);
@@ -3467,38 +3607,38 @@ function ResetPasswordForm({
3467
3607
  }
3468
3608
  };
3469
3609
  if (passwordReset) {
3470
- return /* @__PURE__ */ jsxs25("div", { className: "bg-card border border-border rounded-xl p-8 space-y-6 text-center", children: [
3471
- /* @__PURE__ */ jsx41("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx41("div", { className: "h-12 w-12 rounded-full bg-[var(--timberwolf)]/10 border border-[var(--timberwolf)]/20 flex items-center justify-center", children: /* @__PURE__ */ jsx41(CheckCircle2, { className: "h-6 w-6 text-[var(--timberwolf)]" }) }) }),
3472
- /* @__PURE__ */ jsxs25("div", { className: "space-y-2", children: [
3473
- /* @__PURE__ */ jsx41("h1", { className: "text-2xl font-bold text-[var(--timberwolf)]", children: "Password updated" }),
3474
- /* @__PURE__ */ jsx41("p", { className: "text-sm text-muted-foreground", children: "Redirecting you to sign in\u2026" })
3610
+ return /* @__PURE__ */ jsxs26("div", { className: "bg-card border border-border rounded-xl p-8 space-y-6 text-center", children: [
3611
+ /* @__PURE__ */ jsx42("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx42("div", { className: "h-12 w-12 rounded-full bg-[var(--timberwolf)]/10 border border-[var(--timberwolf)]/20 flex items-center justify-center", children: /* @__PURE__ */ jsx42(CheckCircle2, { className: "h-6 w-6 text-[var(--timberwolf)]" }) }) }),
3612
+ /* @__PURE__ */ jsxs26("div", { className: "space-y-2", children: [
3613
+ /* @__PURE__ */ jsx42("h1", { className: "text-2xl font-bold text-[var(--timberwolf)]", children: "Password updated" }),
3614
+ /* @__PURE__ */ jsx42("p", { className: "text-sm text-muted-foreground", children: "Redirecting you to sign in\u2026" })
3475
3615
  ] }),
3476
- /* @__PURE__ */ jsx41(Link6, { href: loginHref, className: "block pt-2", children: /* @__PURE__ */ jsx41(Button, { className: "w-full h-11 bg-[var(--timberwolf)] text-[var(--night)] hover:bg-[var(--ash-grey)]", children: "Continue to sign in" }) })
3616
+ /* @__PURE__ */ jsx42(Link6, { href: loginHref, className: "block pt-2", children: /* @__PURE__ */ jsx42(Button, { className: "w-full h-11 bg-[var(--timberwolf)] text-[var(--night)] hover:bg-[var(--ash-grey)]", children: "Continue to sign in" }) })
3477
3617
  ] });
3478
3618
  }
3479
- return /* @__PURE__ */ jsxs25("div", { className: "bg-card border border-border rounded-xl p-8 space-y-6", children: [
3480
- /* @__PURE__ */ jsxs25("div", { className: "text-center", children: [
3481
- /* @__PURE__ */ jsx41("h1", { className: "text-2xl font-bold text-[var(--timberwolf)] mb-2", children: title }),
3482
- /* @__PURE__ */ jsx41("p", { className: "text-sm text-muted-foreground", children: subtitle })
3619
+ return /* @__PURE__ */ jsxs26("div", { className: "bg-card border border-border rounded-xl p-8 space-y-6", children: [
3620
+ /* @__PURE__ */ jsxs26("div", { className: "text-center", children: [
3621
+ /* @__PURE__ */ jsx42("h1", { className: "text-2xl font-bold text-[var(--timberwolf)] mb-2", children: title }),
3622
+ /* @__PURE__ */ jsx42("p", { className: "text-sm text-muted-foreground", children: subtitle })
3483
3623
  ] }),
3484
- /* @__PURE__ */ jsxs25("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
3485
- error && /* @__PURE__ */ jsx41(
3624
+ /* @__PURE__ */ jsxs26("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
3625
+ error && /* @__PURE__ */ jsx42(
3486
3626
  "div",
3487
3627
  {
3488
3628
  id: "reset-error",
3489
3629
  role: "alert",
3490
3630
  "aria-live": "polite",
3491
3631
  className: "bg-red-900/20 border border-red-700/30 rounded-lg p-3",
3492
- children: /* @__PURE__ */ jsxs25("div", { className: "flex items-center gap-2 text-red-400 text-sm", children: [
3493
- /* @__PURE__ */ jsx41(AlertCircle3, { className: "h-4 w-4 flex-shrink-0" }),
3494
- /* @__PURE__ */ jsx41("span", { children: error })
3632
+ children: /* @__PURE__ */ jsxs26("div", { className: "flex items-center gap-2 text-red-400 text-sm", children: [
3633
+ /* @__PURE__ */ jsx42(AlertCircle3, { className: "h-4 w-4 flex-shrink-0" }),
3634
+ /* @__PURE__ */ jsx42("span", { children: error })
3495
3635
  ] })
3496
3636
  }
3497
3637
  ),
3498
- /* @__PURE__ */ jsxs25("div", { className: "space-y-2", children: [
3499
- /* @__PURE__ */ jsx41(Label, { htmlFor: "password", className: "text-[var(--timberwolf)]", children: "New password" }),
3500
- /* @__PURE__ */ jsxs25("div", { className: "relative", children: [
3501
- /* @__PURE__ */ jsx41(
3638
+ /* @__PURE__ */ jsxs26("div", { className: "space-y-2", children: [
3639
+ /* @__PURE__ */ jsx42(Label, { htmlFor: "password", className: "text-[var(--timberwolf)]", children: "New password" }),
3640
+ /* @__PURE__ */ jsxs26("div", { className: "relative", children: [
3641
+ /* @__PURE__ */ jsx42(
3502
3642
  Input,
3503
3643
  {
3504
3644
  id: "password",
@@ -3514,8 +3654,8 @@ function ResetPasswordForm({
3514
3654
  "aria-describedby": error ? "reset-error" : void 0
3515
3655
  }
3516
3656
  ),
3517
- /* @__PURE__ */ jsx41(Lock2, { className: "h-4 w-4 absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground" }),
3518
- /* @__PURE__ */ jsx41(
3657
+ /* @__PURE__ */ jsx42(Lock2, { className: "h-4 w-4 absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground" }),
3658
+ /* @__PURE__ */ jsx42(
3519
3659
  "button",
3520
3660
  {
3521
3661
  type: "button",
@@ -3524,13 +3664,13 @@ function ResetPasswordForm({
3524
3664
  disabled: loading,
3525
3665
  "aria-label": showPassword ? "Hide password" : "Show password",
3526
3666
  "aria-pressed": showPassword,
3527
- children: showPassword ? /* @__PURE__ */ jsx41(EyeOff2, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx41(Eye2, { className: "h-4 w-4" })
3667
+ children: showPassword ? /* @__PURE__ */ jsx42(EyeOff2, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx42(Eye2, { className: "h-4 w-4" })
3528
3668
  }
3529
3669
  )
3530
3670
  ] })
3531
3671
  ] }),
3532
- /* @__PURE__ */ jsxs25("div", { className: "space-y-2", children: [
3533
- /* @__PURE__ */ jsx41(
3672
+ /* @__PURE__ */ jsxs26("div", { className: "space-y-2", children: [
3673
+ /* @__PURE__ */ jsx42(
3534
3674
  Label,
3535
3675
  {
3536
3676
  htmlFor: "confirmPassword",
@@ -3538,8 +3678,8 @@ function ResetPasswordForm({
3538
3678
  children: "Confirm new password"
3539
3679
  }
3540
3680
  ),
3541
- /* @__PURE__ */ jsxs25("div", { className: "relative", children: [
3542
- /* @__PURE__ */ jsx41(
3681
+ /* @__PURE__ */ jsxs26("div", { className: "relative", children: [
3682
+ /* @__PURE__ */ jsx42(
3543
3683
  Input,
3544
3684
  {
3545
3685
  id: "confirmPassword",
@@ -3554,8 +3694,8 @@ function ResetPasswordForm({
3554
3694
  "aria-describedby": error ? "reset-error" : void 0
3555
3695
  }
3556
3696
  ),
3557
- /* @__PURE__ */ jsx41(Lock2, { className: "h-4 w-4 absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground" }),
3558
- /* @__PURE__ */ jsx41(
3697
+ /* @__PURE__ */ jsx42(Lock2, { className: "h-4 w-4 absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground" }),
3698
+ /* @__PURE__ */ jsx42(
3559
3699
  "button",
3560
3700
  {
3561
3701
  type: "button",
@@ -3564,26 +3704,26 @@ function ResetPasswordForm({
3564
3704
  disabled: loading,
3565
3705
  "aria-label": showConfirmPassword ? "Hide password" : "Show password",
3566
3706
  "aria-pressed": showConfirmPassword,
3567
- children: showConfirmPassword ? /* @__PURE__ */ jsx41(EyeOff2, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx41(Eye2, { className: "h-4 w-4" })
3707
+ children: showConfirmPassword ? /* @__PURE__ */ jsx42(EyeOff2, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx42(Eye2, { className: "h-4 w-4" })
3568
3708
  }
3569
3709
  )
3570
3710
  ] })
3571
3711
  ] }),
3572
- /* @__PURE__ */ jsx41("p", { className: "text-xs text-muted-foreground", children: "At least 8 characters with an uppercase letter, a lowercase letter, and a number." }),
3573
- /* @__PURE__ */ jsx41(
3712
+ /* @__PURE__ */ jsx42("p", { className: "text-xs text-muted-foreground", children: "At least 8 characters with an uppercase letter, a lowercase letter, and a number." }),
3713
+ /* @__PURE__ */ jsx42(
3574
3714
  Button,
3575
3715
  {
3576
3716
  type: "submit",
3577
3717
  className: "w-full h-11 bg-[var(--timberwolf)] text-[var(--night)] hover:bg-[var(--ash-grey)]",
3578
3718
  disabled: loading,
3579
- children: loading ? /* @__PURE__ */ jsxs25(Fragment8, { children: [
3580
- /* @__PURE__ */ jsx41(Loader23, { className: "h-4 w-4 mr-2 animate-spin" }),
3719
+ children: loading ? /* @__PURE__ */ jsxs26(Fragment8, { children: [
3720
+ /* @__PURE__ */ jsx42(Loader23, { className: "h-4 w-4 mr-2 animate-spin" }),
3581
3721
  "Updating password..."
3582
3722
  ] }) : "Update password"
3583
3723
  }
3584
3724
  )
3585
3725
  ] }),
3586
- /* @__PURE__ */ jsx41("div", { className: "text-center text-sm", children: /* @__PURE__ */ jsx41(
3726
+ /* @__PURE__ */ jsx42("div", { className: "text-center text-sm", children: /* @__PURE__ */ jsx42(
3587
3727
  Link6,
3588
3728
  {
3589
3729
  href: loginHref,
@@ -3646,6 +3786,7 @@ export {
3646
3786
  Input,
3647
3787
  Label,
3648
3788
  LumaSpin,
3789
+ MultiSelect,
3649
3790
  NewsletterForm2 as NewsletterForm,
3650
3791
  PageShell,
3651
3792
  Popover,