@ship-it-ui/ui 0.0.9 → 0.0.10

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 CHANGED
@@ -105,6 +105,7 @@ __export(index_exports, {
105
105
  LargeTitle: () => LargeTitle,
106
106
  Lightbox: () => Lightbox,
107
107
  ListingCard: () => ListingCard,
108
+ ListingDetail: () => ListingDetail,
108
109
  MenuCheckboxItem: () => MenuCheckboxItem,
109
110
  MenuItem: () => MenuItem,
110
111
  MenuSeparator: () => MenuSeparator,
@@ -4493,10 +4494,31 @@ Lightbox.displayName = "Lightbox";
4493
4494
 
4494
4495
  // src/patterns/ListingCard/ListingCard.tsx
4495
4496
  var import_icons8 = require("@ship-it-ui/icons");
4497
+ var import_class_variance_authority11 = require("class-variance-authority");
4496
4498
  var import_react60 = require("react");
4497
4499
  var import_jsx_runtime53 = require("react/jsx-runtime");
4500
+ var hoverVariants = (0, import_class_variance_authority11.cva)("", {
4501
+ variants: {
4502
+ hoverEffect: {
4503
+ lift: "transition-[transform,box-shadow,border-color] duration-(--duration-micro) hover:-translate-y-px hover:shadow hover:border-border-strong",
4504
+ glow: "transition-[box-shadow,border-color] duration-(--duration-micro) hover:ring-[3px] hover:ring-accent-dim hover:border-accent",
4505
+ none: ""
4506
+ }
4507
+ }
4508
+ });
4509
+ var flagToneClass = {
4510
+ accent: "bg-accent-dim text-accent",
4511
+ purple: "bg-[color-mix(in_oklab,var(--color-purple),transparent_75%)] text-purple",
4512
+ pink: "bg-[color-mix(in_oklab,var(--color-pink),transparent_75%)] text-pink",
4513
+ ok: "bg-[color-mix(in_oklab,var(--color-ok),transparent_75%)] text-ok",
4514
+ warn: "bg-[color-mix(in_oklab,var(--color-warn),transparent_75%)] text-warn"
4515
+ };
4498
4516
  var ListingCard = (0, import_react60.forwardRef)(function ListingCard2({
4517
+ variant = "default",
4499
4518
  photos,
4519
+ renderPhoto,
4520
+ onClick,
4521
+ hoverEffect,
4500
4522
  title,
4501
4523
  eyebrow,
4502
4524
  rating,
@@ -4504,31 +4526,50 @@ var ListingCard = (0, import_react60.forwardRef)(function ListingCard2({
4504
4526
  price,
4505
4527
  priceUnit = "/day",
4506
4528
  originalPrice,
4529
+ pricePrefix,
4507
4530
  host,
4508
4531
  distance,
4509
4532
  verified,
4510
4533
  href,
4511
4534
  onFavorite,
4512
4535
  favorited,
4513
- width = 280,
4536
+ width = variant === "spec" ? 320 : 280,
4537
+ flag,
4538
+ category,
4539
+ meta,
4540
+ specs,
4541
+ cta,
4542
+ hidePhotoCounter,
4543
+ classNames: cls = {},
4514
4544
  className,
4515
4545
  ...props
4516
4546
  }, ref) {
4547
+ const [photoIndex, setPhotoIndex] = (0, import_react60.useState)(0);
4548
+ const isSpec = variant === "spec";
4549
+ const stretchedLinkSupported = !isSpec || !cta && !!href;
4550
+ const isInteractive = Boolean(onClick) || Boolean(href);
4551
+ const effectiveHover = hoverEffect ?? (isInteractive ? "lift" : "none");
4552
+ const hoverClass = hoverVariants({ hoverEffect: effectiveHover });
4517
4553
  return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
4518
4554
  Card,
4519
4555
  {
4520
4556
  ref,
4521
- className: cn("relative overflow-hidden !p-0", className),
4557
+ className: cn("relative isolate overflow-hidden !p-0", hoverClass, cls.root, className),
4522
4558
  style: { width },
4523
4559
  ...props,
4524
4560
  children: [
4525
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "relative", children: [
4561
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: cn("relative", cls.photos), children: [
4526
4562
  /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
4527
4563
  Carousel,
4528
4564
  {
4529
4565
  items: photos,
4566
+ ...isSpec ? {
4567
+ index: photoIndex,
4568
+ onIndexChange: setPhotoIndex,
4569
+ showDots: false
4570
+ } : {},
4530
4571
  "aria-label": typeof title === "string" ? `${title} photos` : "Listing photos",
4531
- renderItem: (src) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
4572
+ renderItem: (src, i) => renderPhoto ? renderPhoto(src, i) : /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
4532
4573
  "img",
4533
4574
  {
4534
4575
  src,
@@ -4539,15 +4580,133 @@ var ListingCard = (0, import_react60.forwardRef)(function ListingCard2({
4539
4580
  )
4540
4581
  }
4541
4582
  ),
4542
- verified && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "pointer-events-none absolute top-3 left-3 z-10", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(Badge, { variant: "ok", size: "sm", children: [
4583
+ !isSpec && verified && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "pointer-events-none absolute top-3 left-3 z-10", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(Badge, { variant: "ok", size: "sm", children: [
4543
4584
  /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_icons8.IconGlyph, { name: "verified", size: 11 }),
4544
4585
  " Verified host"
4545
- ] }) })
4586
+ ] }) }),
4587
+ isSpec && flag && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "pointer-events-none absolute top-3 left-3 z-10", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
4588
+ "span",
4589
+ {
4590
+ className: cn(
4591
+ "inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 text-[11px] font-medium backdrop-blur",
4592
+ flagToneClass[flag.tone ?? "accent"],
4593
+ cls.flag
4594
+ ),
4595
+ children: [
4596
+ flag.icon && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_icons8.IconGlyph, { name: flag.icon, size: 11 }),
4597
+ flag.label
4598
+ ]
4599
+ }
4600
+ ) }),
4601
+ isSpec && !hidePhotoCounter && photos.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
4602
+ "div",
4603
+ {
4604
+ "aria-hidden": true,
4605
+ className: cn(
4606
+ "pointer-events-none absolute top-3 right-3 z-10 rounded-full bg-black/55 px-2.5 py-1 font-mono text-[11px] text-white backdrop-blur",
4607
+ cls.photoCounter
4608
+ ),
4609
+ children: [
4610
+ photoIndex + 1,
4611
+ " / ",
4612
+ photos.length
4613
+ ]
4614
+ }
4615
+ )
4546
4616
  ] }),
4547
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex flex-col gap-1 p-3", children: [
4548
- eyebrow && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-text-dim font-mono text-[10px] tracking-wide uppercase", children: eyebrow }),
4549
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
4550
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-text text-[14px] leading-snug font-semibold", children: title }),
4617
+ isSpec ? /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: cn("flex flex-col", cls.body), children: [
4618
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: cn("flex flex-col gap-2 p-4 pb-3", cls.header), children: [
4619
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
4620
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: cn("text-text text-[15px] leading-snug font-semibold", cls.title), children: title }),
4621
+ category && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
4622
+ "span",
4623
+ {
4624
+ className: cn(
4625
+ "border-border bg-panel-2 text-text-muted shrink-0 rounded-full border px-2 py-0.5 text-[10px] tracking-wide uppercase",
4626
+ cls.category
4627
+ ),
4628
+ children: category
4629
+ }
4630
+ )
4631
+ ] }),
4632
+ meta && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: cn("text-text-dim font-mono text-[11px] tracking-wide", cls.meta), children: meta }),
4633
+ specs && specs.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
4634
+ "dl",
4635
+ {
4636
+ className: cn(
4637
+ "border-border mt-1 grid gap-2 border-t pt-3",
4638
+ specs.length === 2 && "grid-cols-2",
4639
+ specs.length === 3 && "grid-cols-3",
4640
+ specs.length >= 4 && "grid-cols-4",
4641
+ cls.specs
4642
+ ),
4643
+ children: specs.map((s, i) => /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: cn("flex flex-col gap-0.5", cls.specCell), children: [
4644
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
4645
+ "dt",
4646
+ {
4647
+ className: cn(
4648
+ "text-text-dim text-[10px] tracking-wider uppercase",
4649
+ cls.specLabel
4650
+ ),
4651
+ children: s.label
4652
+ }
4653
+ ),
4654
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("dd", { className: cn("text-text text-[13px] font-medium", cls.specValue), children: s.value })
4655
+ ] }, i))
4656
+ }
4657
+ )
4658
+ ] }),
4659
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
4660
+ "div",
4661
+ {
4662
+ className: cn(
4663
+ "border-border bg-panel-2 relative z-10 flex items-center justify-between gap-2 border-t px-4 py-3",
4664
+ cls.footer
4665
+ ),
4666
+ children: [
4667
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "flex flex-col leading-tight", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex items-baseline gap-1.5", children: [
4668
+ pricePrefix && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-text-dim text-[11px]", children: pricePrefix }),
4669
+ originalPrice && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-text-dim decoration-sale text-[11px] line-through", children: originalPrice }),
4670
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: cn("text-text text-[15px] font-semibold", cls.price), children: price }),
4671
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: cn("text-text-dim text-[11px]", cls.priceUnit), children: priceUnit })
4672
+ ] }) }),
4673
+ cta && (cta.href ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
4674
+ Button,
4675
+ {
4676
+ asChild: true,
4677
+ variant: "primary",
4678
+ size: "sm",
4679
+ disabled: cta.disabled,
4680
+ className: cls.cta,
4681
+ children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("a", { href: cta.href, onClick: cta.onClick, children: cta.label })
4682
+ }
4683
+ ) : /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
4684
+ Button,
4685
+ {
4686
+ variant: "primary",
4687
+ size: "sm",
4688
+ onClick: cta.onClick,
4689
+ disabled: cta.disabled,
4690
+ className: cls.cta,
4691
+ children: cta.label
4692
+ }
4693
+ ))
4694
+ ]
4695
+ }
4696
+ )
4697
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: cn("flex flex-col gap-1 p-3", cls.body), children: [
4698
+ eyebrow && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
4699
+ "span",
4700
+ {
4701
+ className: cn(
4702
+ "text-text-dim font-mono text-[10px] tracking-wide uppercase",
4703
+ cls.eyebrow
4704
+ ),
4705
+ children: eyebrow
4706
+ }
4707
+ ),
4708
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: cn("flex items-start justify-between gap-2", cls.header), children: [
4709
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: cn("text-text text-[14px] leading-snug font-semibold", cls.title), children: title }),
4551
4710
  rating !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("span", { className: "inline-flex shrink-0 items-center gap-1 text-[12px]", children: [
4552
4711
  /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_icons8.IconGlyph, { name: "star", size: 12, className: "text-rating" }),
4553
4712
  /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-text font-medium", children: rating.toFixed(1) }),
@@ -4558,19 +4717,29 @@ var ListingCard = (0, import_react60.forwardRef)(function ListingCard2({
4558
4717
  ] })
4559
4718
  ] })
4560
4719
  ] }),
4561
- (host || distance) && /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "text-text-dim flex items-center gap-2 text-[12px]", children: [
4720
+ (host || distance) && /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: cn("text-text-dim flex items-center gap-2 text-[12px]", cls.meta), children: [
4562
4721
  host && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: host }),
4563
4722
  host && distance && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { "aria-hidden": true, children: "\xB7" }),
4564
4723
  distance && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { children: distance })
4565
4724
  ] }),
4566
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "mt-2 flex items-baseline gap-2", children: [
4725
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: cn("mt-2 flex items-baseline gap-2", cls.footer), children: [
4567
4726
  originalPrice && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-text-dim decoration-sale text-[12px] line-through", children: originalPrice }),
4568
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-text text-[15px] font-semibold", children: price }),
4569
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-text-dim text-[12px]", children: priceUnit })
4727
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: cn("text-text text-[15px] font-semibold", cls.price), children: price }),
4728
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: cn("text-text-dim text-[12px]", cls.priceUnit), children: priceUnit })
4570
4729
  ] }),
4571
- rating !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Rating, { value: rating, max: 5, precision: "half", size: "sm", readOnly: true, className: "sr-only" })
4730
+ rating !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
4731
+ Rating,
4732
+ {
4733
+ value: rating,
4734
+ max: 5,
4735
+ precision: "half",
4736
+ size: "sm",
4737
+ readOnly: true,
4738
+ className: "sr-only"
4739
+ }
4740
+ )
4572
4741
  ] }),
4573
- href && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
4742
+ href && stretchedLinkSupported && !onClick && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
4574
4743
  "a",
4575
4744
  {
4576
4745
  href,
@@ -4578,7 +4747,16 @@ var ListingCard = (0, import_react60.forwardRef)(function ListingCard2({
4578
4747
  className: "absolute inset-0 z-0 no-underline"
4579
4748
  }
4580
4749
  ),
4581
- onFavorite && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
4750
+ onClick && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
4751
+ "button",
4752
+ {
4753
+ type: "button",
4754
+ onClick,
4755
+ "aria-label": typeof title === "string" ? `View ${title}` : "View listing",
4756
+ className: "focus-visible:ring-accent-dim absolute inset-0 z-0 cursor-pointer bg-transparent outline-none focus-visible:ring-[3px]"
4757
+ }
4758
+ ),
4759
+ !isSpec && onFavorite && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
4582
4760
  "button",
4583
4761
  {
4584
4762
  type: "button",
@@ -4588,7 +4766,8 @@ var ListingCard = (0, import_react60.forwardRef)(function ListingCard2({
4588
4766
  className: cn(
4589
4767
  "absolute top-3 right-3 z-20 inline-grid h-8 w-8 cursor-pointer place-items-center rounded-full",
4590
4768
  "bg-panel/85 hover:bg-panel border-border border shadow-sm backdrop-blur",
4591
- favorited ? "text-err" : "text-text-dim hover:text-text"
4769
+ favorited ? "text-err" : "text-text-dim hover:text-text",
4770
+ cls.favorite
4592
4771
  ),
4593
4772
  children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_icons8.IconGlyph, { name: "heart", size: 16 })
4594
4773
  }
@@ -4599,8 +4778,355 @@ var ListingCard = (0, import_react60.forwardRef)(function ListingCard2({
4599
4778
  });
4600
4779
  ListingCard.displayName = "ListingCard";
4601
4780
 
4602
- // src/patterns/PhoneInput/PhoneInput.tsx
4781
+ // src/patterns/ListingDetail/ListingDetail.tsx
4782
+ var RadixDialog6 = __toESM(require("@radix-ui/react-dialog"), 1);
4783
+ var import_icons9 = require("@ship-it-ui/icons");
4603
4784
  var import_react61 = require("react");
4785
+ var import_jsx_runtime54 = require("react/jsx-runtime");
4786
+ function renderAction(action, variant) {
4787
+ if (action.href) {
4788
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Button, { asChild: true, variant, disabled: action.disabled, children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("a", { href: action.href, onClick: action.onClick, children: action.label }) });
4789
+ }
4790
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Button, { variant, onClick: action.onClick, disabled: action.disabled, children: action.label });
4791
+ }
4792
+ var flagToneClass2 = {
4793
+ accent: "bg-accent-dim text-accent",
4794
+ purple: "bg-[color-mix(in_oklab,var(--color-purple),transparent_75%)] text-purple",
4795
+ pink: "bg-[color-mix(in_oklab,var(--color-pink),transparent_75%)] text-pink",
4796
+ ok: "bg-[color-mix(in_oklab,var(--color-ok),transparent_75%)] text-ok",
4797
+ warn: "bg-[color-mix(in_oklab,var(--color-warn),transparent_75%)] text-warn"
4798
+ };
4799
+ var ListingDetail = (0, import_react61.forwardRef)(function ListingDetail2({
4800
+ variant = "default",
4801
+ open,
4802
+ defaultOpen,
4803
+ onOpenChange,
4804
+ photos,
4805
+ renderPhoto,
4806
+ title,
4807
+ eyebrow,
4808
+ description,
4809
+ rating,
4810
+ reviewCount,
4811
+ price,
4812
+ priceUnit = "/day",
4813
+ originalPrice,
4814
+ pricePrefix,
4815
+ host,
4816
+ features,
4817
+ primaryAction,
4818
+ secondaryAction,
4819
+ flag,
4820
+ category,
4821
+ meta,
4822
+ specs,
4823
+ cta,
4824
+ hidePhotoCounter,
4825
+ classNames: cls = {}
4826
+ }, ref) {
4827
+ const [galleryIndex, setGalleryIndex] = (0, import_react61.useState)(0);
4828
+ const [lightboxOpen, setLightboxOpen] = (0, import_react61.useState)(false);
4829
+ const isSpec = variant === "spec";
4830
+ const lightboxTitle = typeof title === "string" ? `${title} photos` : "Listing photos";
4831
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(RadixDialog6.Root, { open, defaultOpen, onOpenChange, children: [
4832
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(RadixDialog6.Portal, { children: [
4833
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
4834
+ RadixDialog6.Overlay,
4835
+ {
4836
+ className: cn(
4837
+ "z-overlay fixed inset-0 bg-black/55 backdrop-blur-[4px]",
4838
+ "data-[state=open]:animate-[ship-fade-in_150ms_ease]",
4839
+ cls.overlay
4840
+ )
4841
+ }
4842
+ ),
4843
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
4844
+ RadixDialog6.Content,
4845
+ {
4846
+ ref,
4847
+ ...description ? {} : { "aria-describedby": void 0 },
4848
+ className: cn(
4849
+ "z-modal fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2",
4850
+ "w-[calc(100%-32px)] max-w-[960px]",
4851
+ "max-h-[min(92vh,820px)] overflow-hidden",
4852
+ "bg-panel border-border-strong rounded-lg border shadow-lg outline-none",
4853
+ "data-[state=open]:animate-[ship-dialog-in_180ms_var(--easing-out)]",
4854
+ "flex flex-col",
4855
+ cls.content
4856
+ ),
4857
+ children: [
4858
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
4859
+ "div",
4860
+ {
4861
+ className: cn(
4862
+ "grid grid-cols-1 gap-6 overflow-y-auto p-6 md:grid-cols-[1.1fr_1fr]",
4863
+ isSpec && cta && "pb-4",
4864
+ cls.grid
4865
+ ),
4866
+ children: [
4867
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: cn("flex flex-col gap-3", cls.photos), children: [
4868
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "relative overflow-hidden rounded-md", children: [
4869
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
4870
+ Carousel,
4871
+ {
4872
+ items: photos,
4873
+ index: galleryIndex,
4874
+ onIndexChange: setGalleryIndex,
4875
+ ...isSpec ? { showDots: false } : {},
4876
+ "aria-label": typeof title === "string" ? `${title} photos` : "Listing photos",
4877
+ renderItem: (src, i) => renderPhoto ? renderPhoto(src, i, "gallery") : /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
4878
+ "img",
4879
+ {
4880
+ src,
4881
+ alt: "",
4882
+ className: "block h-full w-full object-cover",
4883
+ loading: "lazy"
4884
+ }
4885
+ )
4886
+ }
4887
+ ),
4888
+ isSpec && flag ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "pointer-events-none absolute top-3 left-3 z-10", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
4889
+ "span",
4890
+ {
4891
+ className: cn(
4892
+ "inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 text-[11px] font-medium backdrop-blur",
4893
+ flagToneClass2[flag.tone ?? "accent"],
4894
+ cls.flag
4895
+ ),
4896
+ children: [
4897
+ flag.icon && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_icons9.IconGlyph, { name: flag.icon, size: 11 }),
4898
+ flag.label
4899
+ ]
4900
+ }
4901
+ ) }) : null,
4902
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
4903
+ "button",
4904
+ {
4905
+ type: "button",
4906
+ onClick: () => setLightboxOpen(true),
4907
+ "aria-label": "Open photo viewer",
4908
+ className: cn(
4909
+ "bg-panel/85 hover:bg-panel border-border text-text-muted hover:text-text focus-visible:ring-accent-dim absolute z-10 inline-grid h-8 w-8 cursor-pointer place-items-center rounded-full border shadow-sm backdrop-blur outline-none focus-visible:ring-[3px]",
4910
+ isSpec ? "right-3 bottom-3" : "top-3 left-3"
4911
+ ),
4912
+ children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_icons9.IconGlyph, { name: "maximize", size: 14 })
4913
+ }
4914
+ ),
4915
+ isSpec && !hidePhotoCounter && photos.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
4916
+ "div",
4917
+ {
4918
+ "aria-hidden": true,
4919
+ className: cn(
4920
+ "pointer-events-none absolute top-3 right-3 z-10 rounded-full bg-black/55 px-2.5 py-1 font-mono text-[11px] text-white backdrop-blur",
4921
+ cls.photoCounter
4922
+ ),
4923
+ children: [
4924
+ galleryIndex + 1,
4925
+ " / ",
4926
+ photos.length
4927
+ ]
4928
+ }
4929
+ )
4930
+ ] }),
4931
+ !isSpec && features && features.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("ul", { className: cn("flex flex-wrap gap-2", cls.features), children: features.map((f, i) => /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
4932
+ "li",
4933
+ {
4934
+ className: "border-border bg-panel-2 text-text-muted inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-[12px]",
4935
+ children: [
4936
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_icons9.IconGlyph, { name: f.icon, size: 12 }),
4937
+ f.label
4938
+ ]
4939
+ },
4940
+ i
4941
+ )) })
4942
+ ] }),
4943
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: cn("flex flex-col gap-4", cls.info), children: [
4944
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("header", { className: cn("flex flex-col gap-1.5", cls.header), children: [
4945
+ eyebrow && !isSpec && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "text-text-dim font-mono text-[10px] tracking-wide uppercase", children: eyebrow }),
4946
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [
4947
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(RadixDialog6.Title, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
4948
+ "h2",
4949
+ {
4950
+ className: cn("text-text text-[22px] leading-tight font-semibold", cls.title),
4951
+ children: title
4952
+ }
4953
+ ) }),
4954
+ isSpec && category && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
4955
+ "span",
4956
+ {
4957
+ className: cn(
4958
+ "border-border bg-panel-2 text-text-muted mt-1 shrink-0 rounded-full border px-2 py-0.5 text-[10px] tracking-wide uppercase",
4959
+ cls.category
4960
+ ),
4961
+ children: category
4962
+ }
4963
+ )
4964
+ ] }),
4965
+ isSpec && meta && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
4966
+ "span",
4967
+ {
4968
+ className: cn("text-text-dim font-mono text-[12px] tracking-wide", cls.meta),
4969
+ children: meta
4970
+ }
4971
+ ),
4972
+ rating !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "text-text-muted mt-1 flex items-center gap-2 text-[13px]", children: [
4973
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_icons9.IconGlyph, { name: "star", size: 13, className: "text-rating" }),
4974
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "text-text font-medium", children: rating.toFixed(2) }),
4975
+ reviewCount !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("span", { children: [
4976
+ "(",
4977
+ reviewCount,
4978
+ " reviews)"
4979
+ ] }),
4980
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
4981
+ Rating,
4982
+ {
4983
+ value: rating,
4984
+ max: 5,
4985
+ precision: "half",
4986
+ size: "sm",
4987
+ readOnly: true,
4988
+ className: "sr-only"
4989
+ }
4990
+ )
4991
+ ] })
4992
+ ] }),
4993
+ isSpec && specs && specs.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
4994
+ "dl",
4995
+ {
4996
+ className: cn(
4997
+ "border-border grid grid-cols-2 gap-3 border-t pt-4 sm:grid-cols-3",
4998
+ cls.specs
4999
+ ),
5000
+ children: specs.map((s, i) => /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: cn("flex flex-col gap-0.5", cls.specCell), children: [
5001
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
5002
+ "dt",
5003
+ {
5004
+ className: cn(
5005
+ "text-text-dim text-[10px] tracking-wider uppercase",
5006
+ cls.specLabel
5007
+ ),
5008
+ children: s.label
5009
+ }
5010
+ ),
5011
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("dd", { className: cn("text-text text-[15px] font-semibold", cls.specValue), children: s.value })
5012
+ ] }, i))
5013
+ }
5014
+ ),
5015
+ host && /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
5016
+ "div",
5017
+ {
5018
+ className: cn("border-border flex items-center gap-3 border-t pt-4", cls.host),
5019
+ children: [
5020
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
5021
+ Avatar,
5022
+ {
5023
+ size: "md",
5024
+ name: typeof host.name === "string" ? host.name : "Host",
5025
+ src: host.avatarUrl
5026
+ }
5027
+ ),
5028
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex flex-col", children: [
5029
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "text-text inline-flex items-center gap-1.5 text-[13px] font-medium", children: [
5030
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("span", { children: [
5031
+ "Hosted by ",
5032
+ host.name
5033
+ ] }),
5034
+ host.verified && /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(Badge, { variant: "ok", size: "sm", children: [
5035
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_icons9.IconGlyph, { name: "verified", size: 11 }),
5036
+ " Verified"
5037
+ ] })
5038
+ ] }),
5039
+ host.meta && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "text-text-dim text-[12px]", children: host.meta })
5040
+ ] })
5041
+ ]
5042
+ }
5043
+ ),
5044
+ description && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(RadixDialog6.Description, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { className: cn("text-text-muted text-[13px] leading-[1.6]", cls.description), children: description }) }),
5045
+ !isSpec && /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
5046
+ "div",
5047
+ {
5048
+ className: cn(
5049
+ "border-border mt-auto flex flex-col gap-3 border-t pt-4",
5050
+ cls.footer
5051
+ ),
5052
+ children: [
5053
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex items-baseline gap-2", children: [
5054
+ originalPrice && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "text-text-dim decoration-sale text-[13px] line-through", children: originalPrice }),
5055
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: cn("text-text text-[22px] font-semibold", cls.price), children: price }),
5056
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: cn("text-text-dim text-[13px]", cls.priceUnit), children: priceUnit })
5057
+ ] }),
5058
+ (primaryAction || secondaryAction) && /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-end", children: [
5059
+ secondaryAction && renderAction(secondaryAction, "ghost"),
5060
+ primaryAction && renderAction(primaryAction, "primary")
5061
+ ] })
5062
+ ]
5063
+ }
5064
+ )
5065
+ ] })
5066
+ ]
5067
+ }
5068
+ ),
5069
+ isSpec && (cta || price) && /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
5070
+ "div",
5071
+ {
5072
+ className: cn(
5073
+ "border-border bg-panel-2 flex items-center justify-between gap-3 border-t px-6 py-4",
5074
+ cls.footer
5075
+ ),
5076
+ children: [
5077
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex items-baseline gap-2", children: [
5078
+ pricePrefix && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "text-text-dim text-[12px]", children: pricePrefix }),
5079
+ originalPrice && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "text-text-dim decoration-sale text-[13px] line-through", children: originalPrice }),
5080
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: cn("text-text text-[20px] font-semibold", cls.price), children: price }),
5081
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: cn("text-text-dim text-[13px]", cls.priceUnit), children: priceUnit })
5082
+ ] }),
5083
+ cta && (cta.href ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Button, { asChild: true, variant: "primary", disabled: cta.disabled, className: cls.cta, children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("a", { href: cta.href, onClick: cta.onClick, children: cta.label }) }) : /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
5084
+ Button,
5085
+ {
5086
+ variant: "primary",
5087
+ onClick: cta.onClick,
5088
+ disabled: cta.disabled,
5089
+ className: cls.cta,
5090
+ children: cta.label
5091
+ }
5092
+ ))
5093
+ ]
5094
+ }
5095
+ ),
5096
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(RadixDialog6.Close, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
5097
+ "button",
5098
+ {
5099
+ type: "button",
5100
+ "aria-label": "Close listing details",
5101
+ className: cn(
5102
+ "bg-panel-2 hover:bg-panel-2/80 text-text-muted hover:text-text border-border focus-visible:ring-accent-dim absolute top-3 right-3 inline-grid h-9 w-9 cursor-pointer place-items-center rounded-full border outline-none focus-visible:ring-[3px]",
5103
+ cls.close
5104
+ ),
5105
+ children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_icons9.IconGlyph, { name: "close", size: 16 })
5106
+ }
5107
+ ) })
5108
+ ]
5109
+ }
5110
+ )
5111
+ ] }),
5112
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
5113
+ Lightbox,
5114
+ {
5115
+ open: lightboxOpen,
5116
+ onOpenChange: setLightboxOpen,
5117
+ items: photos,
5118
+ index: galleryIndex,
5119
+ onIndexChange: setGalleryIndex,
5120
+ title: lightboxTitle,
5121
+ renderItem: (src, i) => renderPhoto ? renderPhoto(src, i, "lightbox") : /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("img", { src, alt: "", className: "max-h-[88vh] max-w-[92vw] object-contain" })
5122
+ }
5123
+ )
5124
+ ] });
5125
+ });
5126
+ ListingDetail.displayName = "ListingDetail";
5127
+
5128
+ // src/patterns/PhoneInput/PhoneInput.tsx
5129
+ var import_react62 = require("react");
4604
5130
 
4605
5131
  // src/patterns/PhoneInput/countries.ts
4606
5132
  var phoneCountries = [
@@ -4644,7 +5170,7 @@ var phoneCountries = [
4644
5170
  ];
4645
5171
 
4646
5172
  // src/patterns/PhoneInput/PhoneInput.tsx
4647
- var import_jsx_runtime54 = require("react/jsx-runtime");
5173
+ var import_jsx_runtime55 = require("react/jsx-runtime");
4648
5174
  function parseE164(value, list) {
4649
5175
  if (!value.startsWith("+")) return null;
4650
5176
  const digits = value.slice(1);
@@ -4658,7 +5184,7 @@ function toE164(country, national) {
4658
5184
  if (cleaned.length === 0) return "";
4659
5185
  return `+${country.dialCode}${cleaned}`;
4660
5186
  }
4661
- var PhoneInput = (0, import_react61.forwardRef)(function PhoneInput2({
5187
+ var PhoneInput = (0, import_react62.forwardRef)(function PhoneInput2({
4662
5188
  value,
4663
5189
  defaultValue,
4664
5190
  onValueChange,
@@ -4673,13 +5199,13 @@ var PhoneInput = (0, import_react61.forwardRef)(function PhoneInput2({
4673
5199
  defaultValue: defaultValue ?? "",
4674
5200
  onChange: onValueChange
4675
5201
  });
4676
- const parsed = (0, import_react61.useMemo)(() => parseE164(committed ?? "", countries), [committed, countries]);
4677
- const [country, setCountry] = (0, import_react61.useState)(
5202
+ const parsed = (0, import_react62.useMemo)(() => parseE164(committed ?? "", countries), [committed, countries]);
5203
+ const [country, setCountry] = (0, import_react62.useState)(
4678
5204
  parsed?.country ?? countries.find((c) => c.code === defaultCountry) ?? countries[0]
4679
5205
  );
4680
- const [national, setNational] = (0, import_react61.useState)(parsed?.national ?? "");
4681
- const lastEmittedRef = (0, import_react61.useRef)(committed ?? "");
4682
- (0, import_react61.useEffect)(() => {
5206
+ const [national, setNational] = (0, import_react62.useState)(parsed?.national ?? "");
5207
+ const lastEmittedRef = (0, import_react62.useRef)(committed ?? "");
5208
+ (0, import_react62.useEffect)(() => {
4683
5209
  const current = committed ?? "";
4684
5210
  if (current === lastEmittedRef.current) return;
4685
5211
  lastEmittedRef.current = current;
@@ -4704,14 +5230,14 @@ var PhoneInput = (0, import_react61.forwardRef)(function PhoneInput2({
4704
5230
  lastEmittedRef.current = emitted;
4705
5231
  setCommitted(emitted);
4706
5232
  };
4707
- const selectOptions = (0, import_react61.useMemo)(
5233
+ const selectOptions = (0, import_react62.useMemo)(
4708
5234
  () => countries.map((c) => ({
4709
5235
  value: c.code,
4710
5236
  label: `${c.flag} +${c.dialCode}`
4711
5237
  })),
4712
5238
  [countries]
4713
5239
  );
4714
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
5240
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
4715
5241
  "div",
4716
5242
  {
4717
5243
  className: cn(
@@ -4720,7 +5246,7 @@ var PhoneInput = (0, import_react61.forwardRef)(function PhoneInput2({
4720
5246
  disabled && "opacity-50"
4721
5247
  ),
4722
5248
  children: [
4723
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
5249
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
4724
5250
  Select,
4725
5251
  {
4726
5252
  options: selectOptions,
@@ -4730,7 +5256,7 @@ var PhoneInput = (0, import_react61.forwardRef)(function PhoneInput2({
4730
5256
  "aria-label": "Country"
4731
5257
  }
4732
5258
  ),
4733
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
5259
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
4734
5260
  "input",
4735
5261
  {
4736
5262
  ref,
@@ -4752,8 +5278,8 @@ var PhoneInput = (0, import_react61.forwardRef)(function PhoneInput2({
4752
5278
  PhoneInput.displayName = "PhoneInput";
4753
5279
 
4754
5280
  // src/patterns/PriceBreakdown/PriceBreakdown.tsx
4755
- var import_react62 = require("react");
4756
- var import_jsx_runtime55 = require("react/jsx-runtime");
5281
+ var import_react63 = require("react");
5282
+ var import_jsx_runtime56 = require("react/jsx-runtime");
4757
5283
  function PriceBreakdownRoot({
4758
5284
  items,
4759
5285
  total,
@@ -4763,30 +5289,30 @@ function PriceBreakdownRoot({
4763
5289
  children,
4764
5290
  ...props
4765
5291
  }, ref) {
4766
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { ref, className: cn("flex flex-col gap-2", className), ...props, children: [
4767
- items?.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(PriceBreakdownLine, { ...item }, i)),
5292
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { ref, className: cn("flex flex-col gap-2", className), ...props, children: [
5293
+ items?.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(PriceBreakdownLine, { ...item }, i)),
4768
5294
  children,
4769
- total !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "border-border mt-2 flex items-baseline justify-between border-t pt-3", children: [
4770
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "text-text text-[14px] font-semibold", children: totalLabel }),
4771
- /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("span", { className: "text-text text-[16px] font-semibold", children: [
5295
+ total !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "border-border mt-2 flex items-baseline justify-between border-t pt-3", children: [
5296
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-text text-[14px] font-semibold", children: totalLabel }),
5297
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("span", { className: "text-text text-[16px] font-semibold", children: [
4772
5298
  total,
4773
- currency && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "text-text-dim ml-1 text-[12px] font-normal", children: currency })
5299
+ currency && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-text-dim ml-1 text-[12px] font-normal", children: currency })
4774
5300
  ] })
4775
5301
  ] })
4776
5302
  ] });
4777
5303
  }
4778
- var PriceBreakdown = (0, import_react62.forwardRef)(PriceBreakdownRoot);
5304
+ var PriceBreakdown = (0, import_react63.forwardRef)(PriceBreakdownRoot);
4779
5305
  PriceBreakdown.displayName = "PriceBreakdown";
4780
- var PriceBreakdownLine = (0, import_react62.forwardRef)(
5306
+ var PriceBreakdownLine = (0, import_react63.forwardRef)(
4781
5307
  function PriceBreakdownLine2({ label, subLabel, amount, originalAmount, discount, className }, ref) {
4782
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { ref, className: cn("flex items-baseline justify-between gap-3", className), children: [
4783
- /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "flex min-w-0 flex-col", children: [
4784
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "text-text text-[13px]", children: label }),
4785
- subLabel && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "text-text-dim text-[11px]", children: subLabel })
5308
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { ref, className: cn("flex items-baseline justify-between gap-3", className), children: [
5309
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex min-w-0 flex-col", children: [
5310
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-text text-[13px]", children: label }),
5311
+ subLabel && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-text-dim text-[11px]", children: subLabel })
4786
5312
  ] }),
4787
- /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "inline-flex shrink-0 items-baseline gap-2", children: [
4788
- originalAmount && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "text-text-dim decoration-sale text-[12px] line-through", children: originalAmount }),
4789
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
5313
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "inline-flex shrink-0 items-baseline gap-2", children: [
5314
+ originalAmount && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-text-dim decoration-sale text-[12px] line-through", children: originalAmount }),
5315
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
4790
5316
  "span",
4791
5317
  {
4792
5318
  className: cn("text-[13px] font-medium", discount ? "text-sale-text" : "text-text"),
@@ -4801,19 +5327,19 @@ PriceBreakdownLine.displayName = "PriceBreakdownLine";
4801
5327
  PriceBreakdown.Line = PriceBreakdownLine;
4802
5328
 
4803
5329
  // src/patterns/ReviewCard/ReviewCard.tsx
4804
- var import_icons9 = require("@ship-it-ui/icons");
4805
- var import_react63 = require("react");
4806
- var import_jsx_runtime56 = require("react/jsx-runtime");
4807
- var ReviewCard = (0, import_react63.forwardRef)(function ReviewCard2({ author, authorAvatar, rating, date, body, photos, verified, subtitle, className, ...props }, ref) {
4808
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
5330
+ var import_icons10 = require("@ship-it-ui/icons");
5331
+ var import_react64 = require("react");
5332
+ var import_jsx_runtime57 = require("react/jsx-runtime");
5333
+ var ReviewCard = (0, import_react64.forwardRef)(function ReviewCard2({ author, authorAvatar, rating, date, body, photos, verified, subtitle, className, ...props }, ref) {
5334
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
4809
5335
  "article",
4810
5336
  {
4811
5337
  ref,
4812
5338
  className: cn("border-border bg-panel flex flex-col gap-3 rounded-md border p-4", className),
4813
5339
  ...props,
4814
5340
  children: [
4815
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("header", { className: "flex items-start gap-3", children: [
4816
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
5341
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("header", { className: "flex items-start gap-3", children: [
5342
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
4817
5343
  Avatar,
4818
5344
  {
4819
5345
  src: authorAvatar,
@@ -4821,24 +5347,24 @@ var ReviewCard = (0, import_react63.forwardRef)(function ReviewCard2({ author, a
4821
5347
  size: "md"
4822
5348
  }
4823
5349
  ),
4824
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
4825
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center gap-2", children: [
4826
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-text text-[14px] leading-tight font-semibold", children: author }),
4827
- verified && /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(Badge, { variant: "ok", size: "sm", children: [
4828
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_icons9.IconGlyph, { name: "verified", size: 11 }),
5350
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
5351
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex items-center gap-2", children: [
5352
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "text-text text-[14px] leading-tight font-semibold", children: author }),
5353
+ verified && /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(Badge, { variant: "ok", size: "sm", children: [
5354
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_icons10.IconGlyph, { name: "verified", size: 11 }),
4829
5355
  " Verified trip"
4830
5356
  ] })
4831
5357
  ] }),
4832
- subtitle && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-text-dim text-[11px]", children: subtitle }),
4833
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "mt-1 flex items-center gap-2", children: [
4834
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Rating, { value: rating, max: 5, precision: "half", size: "sm", readOnly: true }),
4835
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-text-dim text-[11px]", children: "\xB7" }),
4836
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("time", { className: "text-text-dim text-[11px]", children: date })
5358
+ subtitle && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "text-text-dim text-[11px]", children: subtitle }),
5359
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "mt-1 flex items-center gap-2", children: [
5360
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Rating, { value: rating, max: 5, precision: "half", size: "sm", readOnly: true }),
5361
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "text-text-dim text-[11px]", children: "\xB7" }),
5362
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("time", { className: "text-text-dim text-[11px]", children: date })
4837
5363
  ] })
4838
5364
  ] })
4839
5365
  ] }),
4840
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("p", { className: "text-text text-[13px] leading-relaxed", children: body }),
4841
- photos && photos.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "flex gap-2 overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden", children: photos.map((src, i) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
5366
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("p", { className: "text-text text-[13px] leading-relaxed", children: body }),
5367
+ photos && photos.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "flex gap-2 overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden", children: photos.map((src, i) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
4842
5368
  "img",
4843
5369
  {
4844
5370
  src,
@@ -4855,11 +5381,11 @@ var ReviewCard = (0, import_react63.forwardRef)(function ReviewCard2({ author, a
4855
5381
  ReviewCard.displayName = "ReviewCard";
4856
5382
 
4857
5383
  // src/patterns/Dots/Dots.tsx
4858
- var import_react64 = require("react");
4859
- var import_jsx_runtime57 = require("react/jsx-runtime");
4860
- var Dots = (0, import_react64.forwardRef)(function Dots2({ total, current, onChange, className, "aria-label": ariaLabel = "Progress", ...props }, ref) {
5384
+ var import_react65 = require("react");
5385
+ var import_jsx_runtime58 = require("react/jsx-runtime");
5386
+ var Dots = (0, import_react65.forwardRef)(function Dots2({ total, current, onChange, className, "aria-label": ariaLabel = "Progress", ...props }, ref) {
4861
5387
  const interactive = typeof onChange === "function";
4862
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
5388
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
4863
5389
  "nav",
4864
5390
  {
4865
5391
  ref,
@@ -4873,7 +5399,7 @@ var Dots = (0, import_react64.forwardRef)(function Dots2({ total, current, onCha
4873
5399
  isActive ? "w-[18px] bg-accent" : "w-[6px] bg-panel-2"
4874
5400
  );
4875
5401
  if (interactive) {
4876
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
5402
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
4877
5403
  "button",
4878
5404
  {
4879
5405
  type: "button",
@@ -4890,7 +5416,7 @@ var Dots = (0, import_react64.forwardRef)(function Dots2({ total, current, onCha
4890
5416
  i
4891
5417
  );
4892
5418
  }
4893
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { "aria-hidden": true, className: sharedClass }, i);
5419
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { "aria-hidden": true, className: sharedClass }, i);
4894
5420
  })
4895
5421
  }
4896
5422
  );
@@ -4898,13 +5424,13 @@ var Dots = (0, import_react64.forwardRef)(function Dots2({ total, current, onCha
4898
5424
  Dots.displayName = "Dots";
4899
5425
 
4900
5426
  // src/patterns/Dropzone/Dropzone.tsx
4901
- var import_react65 = require("react");
4902
- var import_jsx_runtime58 = require("react/jsx-runtime");
5427
+ var import_react66 = require("react");
5428
+ var import_jsx_runtime59 = require("react/jsx-runtime");
4903
5429
  function listToArray(list) {
4904
5430
  if (!list) return [];
4905
5431
  return Array.from(list);
4906
5432
  }
4907
- var Dropzone = (0, import_react65.forwardRef)(function Dropzone2({
5433
+ var Dropzone = (0, import_react66.forwardRef)(function Dropzone2({
4908
5434
  onFiles,
4909
5435
  accept,
4910
5436
  multiple = true,
@@ -4915,7 +5441,7 @@ var Dropzone = (0, import_react65.forwardRef)(function Dropzone2({
4915
5441
  className,
4916
5442
  ...props
4917
5443
  }, ref) {
4918
- const [isDragging, setIsDragging] = (0, import_react65.useState)(false);
5444
+ const [isDragging, setIsDragging] = (0, import_react66.useState)(false);
4919
5445
  const onDragOver = (e) => {
4920
5446
  if (disabled) return;
4921
5447
  e.preventDefault();
@@ -4929,7 +5455,7 @@ var Dropzone = (0, import_react65.forwardRef)(function Dropzone2({
4929
5455
  const files = listToArray(e.dataTransfer.files);
4930
5456
  if (files.length) onFiles?.(files);
4931
5457
  };
4932
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(
5458
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(
4933
5459
  "label",
4934
5460
  {
4935
5461
  ref,
@@ -4946,7 +5472,7 @@ var Dropzone = (0, import_react65.forwardRef)(function Dropzone2({
4946
5472
  ),
4947
5473
  ...props,
4948
5474
  children: [
4949
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
5475
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
4950
5476
  "input",
4951
5477
  {
4952
5478
  type: "file",
@@ -4962,7 +5488,7 @@ var Dropzone = (0, import_react65.forwardRef)(function Dropzone2({
4962
5488
  }
4963
5489
  }
4964
5490
  ),
4965
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
5491
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
4966
5492
  "div",
4967
5493
  {
4968
5494
  "aria-hidden": true,
@@ -4970,8 +5496,8 @@ var Dropzone = (0, import_react65.forwardRef)(function Dropzone2({
4970
5496
  children: icon
4971
5497
  }
4972
5498
  ),
4973
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "mb-1 text-[13px] font-medium", children: title }),
4974
- description && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "text-text-dim text-[11px]", children: description })
5499
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "mb-1 text-[13px] font-medium", children: title }),
5500
+ description && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "text-text-dim text-[11px]", children: description })
4975
5501
  ]
4976
5502
  }
4977
5503
  );
@@ -4979,10 +5505,10 @@ var Dropzone = (0, import_react65.forwardRef)(function Dropzone2({
4979
5505
  Dropzone.displayName = "Dropzone";
4980
5506
 
4981
5507
  // src/patterns/EmptyState/EmptyState.tsx
4982
- var import_class_variance_authority11 = require("class-variance-authority");
4983
- var import_react66 = require("react");
4984
- var import_jsx_runtime59 = require("react/jsx-runtime");
4985
- var plateStyles = (0, import_class_variance_authority11.cva)("grid h-12 w-12 place-items-center rounded-base text-[22px]", {
5508
+ var import_class_variance_authority12 = require("class-variance-authority");
5509
+ var import_react67 = require("react");
5510
+ var import_jsx_runtime60 = require("react/jsx-runtime");
5511
+ var plateStyles = (0, import_class_variance_authority12.cva)("grid h-12 w-12 place-items-center rounded-base text-[22px]", {
4986
5512
  variants: {
4987
5513
  tone: {
4988
5514
  neutral: "bg-panel-2 text-text-muted",
@@ -4994,8 +5520,8 @@ var plateStyles = (0, import_class_variance_authority11.cva)("grid h-12 w-12 pla
4994
5520
  },
4995
5521
  defaultVariants: { tone: "neutral" }
4996
5522
  });
4997
- var EmptyState = (0, import_react66.forwardRef)(function EmptyState2({ icon, title, description, action, chips, tone, className, ...props }, ref) {
4998
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(
5523
+ var EmptyState = (0, import_react67.forwardRef)(function EmptyState2({ icon, title, description, action, chips, tone, className, ...props }, ref) {
5524
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(
4999
5525
  "div",
5000
5526
  {
5001
5527
  ref,
@@ -5005,10 +5531,10 @@ var EmptyState = (0, import_react66.forwardRef)(function EmptyState2({ icon, tit
5005
5531
  ),
5006
5532
  ...props,
5007
5533
  children: [
5008
- icon != null && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { "aria-hidden": true, className: plateStyles({ tone: tone ?? "neutral" }), children: icon }),
5009
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "text-[14px] font-medium", children: title }),
5010
- description && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "text-text-muted max-w-[260px] text-[12px] leading-[1.5]", children: description }),
5011
- chips && chips.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "flex w-full flex-col gap-1", children: chips.map((c, i) => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
5534
+ icon != null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { "aria-hidden": true, className: plateStyles({ tone: tone ?? "neutral" }), children: icon }),
5535
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "text-[14px] font-medium", children: title }),
5536
+ description && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "text-text-muted max-w-[260px] text-[12px] leading-[1.5]", children: description }),
5537
+ chips && chips.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "flex w-full flex-col gap-1", children: chips.map((c, i) => /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
5012
5538
  "button",
5013
5539
  {
5014
5540
  type: "button",
@@ -5030,18 +5556,18 @@ var EmptyState = (0, import_react66.forwardRef)(function EmptyState2({ icon, tit
5030
5556
  EmptyState.displayName = "EmptyState";
5031
5557
 
5032
5558
  // src/patterns/FileChip/FileChip.tsx
5033
- var import_react67 = require("react");
5034
- var import_jsx_runtime60 = require("react/jsx-runtime");
5559
+ var import_react68 = require("react");
5560
+ var import_jsx_runtime61 = require("react/jsx-runtime");
5035
5561
  function deriveExt(name) {
5036
5562
  const dot = name.lastIndexOf(".");
5037
5563
  if (dot < 0) return "FILE";
5038
5564
  return name.slice(dot + 1).slice(0, 4).toUpperCase();
5039
5565
  }
5040
- var FileChip = (0, import_react67.forwardRef)(function FileChip2({ name, size, progress, icon, onRemove, failed, className, ...props }, ref) {
5566
+ var FileChip = (0, import_react68.forwardRef)(function FileChip2({ name, size, progress, icon, onRemove, failed, className, ...props }, ref) {
5041
5567
  const ext = deriveExt(name);
5042
5568
  const showProgress = typeof progress === "number";
5043
5569
  const isComplete = showProgress && progress >= 100;
5044
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(
5570
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
5045
5571
  "div",
5046
5572
  {
5047
5573
  ref,
@@ -5051,7 +5577,7 @@ var FileChip = (0, import_react67.forwardRef)(function FileChip2({ name, size, p
5051
5577
  ),
5052
5578
  ...props,
5053
5579
  children: [
5054
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
5580
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
5055
5581
  "span",
5056
5582
  {
5057
5583
  "aria-hidden": true,
@@ -5059,17 +5585,17 @@ var FileChip = (0, import_react67.forwardRef)(function FileChip2({ name, size, p
5059
5585
  children: icon ?? ext
5060
5586
  }
5061
5587
  ),
5062
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "min-w-0 flex-1", children: [
5063
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "truncate text-[12px] font-medium", children: name }),
5064
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: cn("font-mono text-[10px]", failed ? "text-err" : "text-text-dim"), children: [
5588
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "min-w-0 flex-1", children: [
5589
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "truncate text-[12px] font-medium", children: name }),
5590
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: cn("font-mono text-[10px]", failed ? "text-err" : "text-text-dim"), children: [
5065
5591
  size,
5066
- showProgress && !isComplete && /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("span", { children: [
5592
+ showProgress && !isComplete && /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("span", { children: [
5067
5593
  " \xB7 ",
5068
5594
  Math.round(progress),
5069
5595
  "%"
5070
5596
  ] })
5071
5597
  ] }),
5072
- showProgress && !isComplete && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "bg-panel mt-1 h-[2px] overflow-hidden rounded-full", children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
5598
+ showProgress && !isComplete && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "bg-panel mt-1 h-[2px] overflow-hidden rounded-full", children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
5073
5599
  "div",
5074
5600
  {
5075
5601
  className: cn(
@@ -5080,7 +5606,7 @@ var FileChip = (0, import_react67.forwardRef)(function FileChip2({ name, size, p
5080
5606
  }
5081
5607
  ) })
5082
5608
  ] }),
5083
- onRemove && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
5609
+ onRemove && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
5084
5610
  "button",
5085
5611
  {
5086
5612
  type: "button",
@@ -5100,10 +5626,10 @@ var FileChip = (0, import_react67.forwardRef)(function FileChip2({ name, size, p
5100
5626
  FileChip.displayName = "FileChip";
5101
5627
 
5102
5628
  // src/patterns/FilterPanel/FilterPanel.tsx
5103
- var import_react68 = require("react");
5104
- var import_jsx_runtime61 = require("react/jsx-runtime");
5629
+ var import_react69 = require("react");
5630
+ var import_jsx_runtime62 = require("react/jsx-runtime");
5105
5631
  var EMPTY = Object.freeze({});
5106
- var FilterPanel = (0, import_react68.forwardRef)(function FilterPanel2({
5632
+ var FilterPanel = (0, import_react69.forwardRef)(function FilterPanel2({
5107
5633
  facets,
5108
5634
  value,
5109
5635
  defaultValue,
@@ -5121,7 +5647,7 @@ var FilterPanel = (0, import_react68.forwardRef)(function FilterPanel2({
5121
5647
  onChange: onValueChange
5122
5648
  });
5123
5649
  const total = facets.reduce((sum, facet) => sum + (selection[facet.id]?.length ?? 0), 0);
5124
- const toggle = (0, import_react68.useCallback)(
5650
+ const toggle = (0, import_react69.useCallback)(
5125
5651
  (facetId, optionValue, next) => {
5126
5652
  setSelection((prev) => {
5127
5653
  const current = prev?.[facetId] ?? [];
@@ -5132,11 +5658,11 @@ var FilterPanel = (0, import_react68.forwardRef)(function FilterPanel2({
5132
5658
  },
5133
5659
  [setSelection]
5134
5660
  );
5135
- const handleReset = (0, import_react68.useCallback)(() => {
5661
+ const handleReset = (0, import_react69.useCallback)(() => {
5136
5662
  setSelection(EMPTY);
5137
5663
  onReset?.();
5138
5664
  }, [setSelection, onReset]);
5139
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
5665
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
5140
5666
  "div",
5141
5667
  {
5142
5668
  ref,
@@ -5148,10 +5674,10 @@ var FilterPanel = (0, import_react68.forwardRef)(function FilterPanel2({
5148
5674
  ),
5149
5675
  ...props,
5150
5676
  children: [
5151
- /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "flex items-center gap-2", children: [
5152
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "text-text-dim font-mono text-[10px] tracking-[1.4px] uppercase", children: title }),
5153
- total > 0 && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(Badge, { size: "sm", variant: "accent", children: total }),
5154
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
5677
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "flex items-center gap-2", children: [
5678
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: "text-text-dim font-mono text-[10px] tracking-[1.4px] uppercase", children: title }),
5679
+ total > 0 && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Badge, { size: "sm", variant: "accent", children: total }),
5680
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
5155
5681
  Button,
5156
5682
  {
5157
5683
  type: "button",
@@ -5164,7 +5690,7 @@ var FilterPanel = (0, import_react68.forwardRef)(function FilterPanel2({
5164
5690
  }
5165
5691
  )
5166
5692
  ] }),
5167
- facets.map((facet) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
5693
+ facets.map((facet) => /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
5168
5694
  FilterFacetGroup,
5169
5695
  {
5170
5696
  facet,
@@ -5181,12 +5707,12 @@ var FilterPanel = (0, import_react68.forwardRef)(function FilterPanel2({
5181
5707
  FilterPanel.displayName = "FilterPanel";
5182
5708
  function FilterFacetGroup({ facet, selected, counts, onToggle }) {
5183
5709
  const collapsible = facet.collapsible ?? true;
5184
- const [open, setOpen] = (0, import_react68.useState)(facet.defaultOpen ?? true);
5710
+ const [open, setOpen] = (0, import_react69.useState)(facet.defaultOpen ?? true);
5185
5711
  const isOpen = !collapsible || open;
5186
5712
  const selectedCount = selected.length;
5187
5713
  const headingClass = "text-text-muted flex items-center gap-[6px] font-mono text-[10px] tracking-[1.4px] uppercase";
5188
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("section", { className: "flex flex-col gap-1", children: [
5189
- collapsible ? /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
5714
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("section", { className: "flex flex-col gap-1", children: [
5715
+ collapsible ? /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
5190
5716
  "button",
5191
5717
  {
5192
5718
  type: "button",
@@ -5199,20 +5725,20 @@ function FilterFacetGroup({ facet, selected, counts, onToggle }) {
5199
5725
  "hover:text-text"
5200
5726
  ),
5201
5727
  children: [
5202
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "flex-1 text-left", children: facet.label }),
5203
- selectedCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(Badge, { size: "sm", variant: "neutral", children: selectedCount }),
5204
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { "aria-hidden": true, className: "text-[10px] opacity-70", children: isOpen ? "\u25BE" : "\u25B8" })
5728
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: "flex-1 text-left", children: facet.label }),
5729
+ selectedCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Badge, { size: "sm", variant: "neutral", children: selectedCount }),
5730
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { "aria-hidden": true, className: "text-[10px] opacity-70", children: isOpen ? "\u25BE" : "\u25B8" })
5205
5731
  ]
5206
5732
  }
5207
- ) : /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: cn(headingClass, "px-1 py-[2px]"), children: [
5208
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "flex-1", children: facet.label }),
5209
- selectedCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(Badge, { size: "sm", variant: "neutral", children: selectedCount })
5733
+ ) : /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: cn(headingClass, "px-1 py-[2px]"), children: [
5734
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: "flex-1", children: facet.label }),
5735
+ selectedCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Badge, { size: "sm", variant: "neutral", children: selectedCount })
5210
5736
  ] }),
5211
- isOpen && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("ul", { className: "m-0 flex list-none flex-col gap-[2px] p-0", children: facet.options.map((option) => {
5737
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("ul", { className: "m-0 flex list-none flex-col gap-[2px] p-0", children: facet.options.map((option) => {
5212
5738
  const isSelected = selected.includes(option.value);
5213
5739
  const count = counts?.[option.value];
5214
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("li", { className: "flex items-center gap-2 px-1 py-[3px]", children: [
5215
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
5740
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("li", { className: "flex items-center gap-2 px-1 py-[3px]", children: [
5741
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
5216
5742
  Checkbox,
5217
5743
  {
5218
5744
  checked: isSelected,
@@ -5220,25 +5746,25 @@ function FilterFacetGroup({ facet, selected, counts, onToggle }) {
5220
5746
  label: option.label
5221
5747
  }
5222
5748
  ),
5223
- typeof count === "number" && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "text-text-dim ml-auto font-mono text-[10px] tabular-nums", children: count })
5749
+ typeof count === "number" && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: "text-text-dim ml-auto font-mono text-[10px] tabular-nums", children: count })
5224
5750
  ] }, option.value);
5225
5751
  }) })
5226
5752
  ] });
5227
5753
  }
5228
5754
 
5229
5755
  // src/patterns/HealthScore/HealthScore.tsx
5230
- var import_react70 = require("react");
5756
+ var import_react71 = require("react");
5231
5757
 
5232
5758
  // src/patterns/RadialProgress/RadialProgress.tsx
5233
- var import_react69 = require("react");
5234
- var import_jsx_runtime62 = require("react/jsx-runtime");
5759
+ var import_react70 = require("react");
5760
+ var import_jsx_runtime63 = require("react/jsx-runtime");
5235
5761
  var toneStrokeClass = {
5236
5762
  accent: "stroke-accent",
5237
5763
  ok: "stroke-ok",
5238
5764
  warn: "stroke-warn",
5239
5765
  err: "stroke-err"
5240
5766
  };
5241
- var RadialProgress = (0, import_react69.forwardRef)(
5767
+ var RadialProgress = (0, import_react70.forwardRef)(
5242
5768
  function RadialProgress2({
5243
5769
  value,
5244
5770
  max = 100,
@@ -5256,7 +5782,7 @@ var RadialProgress = (0, import_react69.forwardRef)(
5256
5782
  const c = 2 * Math.PI * r;
5257
5783
  const dash = pct / 100 * c;
5258
5784
  const resolvedTone = tone ?? (clamped >= max ? "ok" : "accent");
5259
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
5785
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
5260
5786
  "div",
5261
5787
  {
5262
5788
  ref,
@@ -5269,8 +5795,8 @@ var RadialProgress = (0, import_react69.forwardRef)(
5269
5795
  style: { width: size, height: size },
5270
5796
  ...props,
5271
5797
  children: [
5272
- /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, children: [
5273
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
5798
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, children: [
5799
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
5274
5800
  "circle",
5275
5801
  {
5276
5802
  cx: size / 2,
@@ -5281,7 +5807,7 @@ var RadialProgress = (0, import_react69.forwardRef)(
5281
5807
  className: "stroke-panel-2"
5282
5808
  }
5283
5809
  ),
5284
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
5810
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
5285
5811
  "circle",
5286
5812
  {
5287
5813
  cx: size / 2,
@@ -5299,7 +5825,7 @@ var RadialProgress = (0, import_react69.forwardRef)(
5299
5825
  }
5300
5826
  )
5301
5827
  ] }),
5302
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "absolute inset-0 grid place-items-center font-mono text-[11px] font-medium tabular-nums", children: children ?? `${Math.round(pct)}%` })
5828
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "absolute inset-0 grid place-items-center font-mono text-[11px] font-medium tabular-nums", children: children ?? `${Math.round(pct)}%` })
5303
5829
  ]
5304
5830
  }
5305
5831
  );
@@ -5308,7 +5834,7 @@ var RadialProgress = (0, import_react69.forwardRef)(
5308
5834
  RadialProgress.displayName = "RadialProgress";
5309
5835
 
5310
5836
  // src/patterns/HealthScore/HealthScore.tsx
5311
- var import_jsx_runtime63 = require("react/jsx-runtime");
5837
+ var import_jsx_runtime64 = require("react/jsx-runtime");
5312
5838
  function deltaTone(delta) {
5313
5839
  if (delta > 0) return "ok";
5314
5840
  if (delta < 0) return "err";
@@ -5325,7 +5851,7 @@ var toneTextClass = {
5325
5851
  warn: "text-warn",
5326
5852
  err: "text-err"
5327
5853
  };
5328
- var HealthScore = (0, import_react70.forwardRef)(function HealthScore2({
5854
+ var HealthScore = (0, import_react71.forwardRef)(function HealthScore2({
5329
5855
  value,
5330
5856
  max = 100,
5331
5857
  delta,
@@ -5340,7 +5866,7 @@ var HealthScore = (0, import_react70.forwardRef)(function HealthScore2({
5340
5866
  const pct = max > 0 ? Math.round(Math.min(max, Math.max(0, value)) / max * 100) : 0;
5341
5867
  const resolvedTone = tone ?? (pct >= 80 ? "ok" : pct >= 50 ? "accent" : "warn");
5342
5868
  const indicatorTone = typeof delta === "number" ? deltaTone(delta) : "accent";
5343
- const core = /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
5869
+ const core = /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(
5344
5870
  "div",
5345
5871
  {
5346
5872
  ref,
@@ -5348,10 +5874,10 @@ var HealthScore = (0, import_react70.forwardRef)(function HealthScore2({
5348
5874
  "aria-label": ariaLabel ?? `${pct}% health`,
5349
5875
  ...props,
5350
5876
  children: [
5351
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(RadialProgress, { value, max, size, tone: resolvedTone }),
5352
- label && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "text-text-muted mt-1 text-[12px] leading-tight", children: label }),
5353
- typeof delta === "number" && /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: cn("font-mono text-[11px] tabular-nums", toneTextClass[indicatorTone]), children: [
5354
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { "aria-hidden": true, children: deltaGlyph(delta) }),
5877
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(RadialProgress, { value, max, size, tone: resolvedTone }),
5878
+ label && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("div", { className: "text-text-muted mt-1 text-[12px] leading-tight", children: label }),
5879
+ typeof delta === "number" && /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { className: cn("font-mono text-[11px] tabular-nums", toneTextClass[indicatorTone]), children: [
5880
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { "aria-hidden": true, children: deltaGlyph(delta) }),
5355
5881
  " ",
5356
5882
  Math.abs(delta)
5357
5883
  ] })
@@ -5361,15 +5887,15 @@ var HealthScore = (0, import_react70.forwardRef)(function HealthScore2({
5361
5887
  if (!breakdown || breakdown.length === 0) {
5362
5888
  return core;
5363
5889
  }
5364
- return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
5890
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
5365
5891
  HoverCard,
5366
5892
  {
5367
- trigger: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { className: "inline-flex", children: core }),
5368
- content: /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "flex min-w-[180px] flex-col gap-2", children: [
5369
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "text-text-dim font-mono text-[9px] tracking-[1.4px] uppercase", children: "Breakdown" }),
5370
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("ul", { className: "m-0 flex list-none flex-col gap-1 p-0 text-[12px]", children: breakdown.map((entry, i) => /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("li", { className: "flex items-center gap-2", children: [
5371
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { className: "text-text-muted flex-1 truncate", children: entry.label }),
5372
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
5893
+ trigger: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "inline-flex", children: core }),
5894
+ content: /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { className: "flex min-w-[180px] flex-col gap-2", children: [
5895
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("div", { className: "text-text-dim font-mono text-[9px] tracking-[1.4px] uppercase", children: "Breakdown" }),
5896
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("ul", { className: "m-0 flex list-none flex-col gap-1 p-0 text-[12px]", children: breakdown.map((entry, i) => /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("li", { className: "flex items-center gap-2", children: [
5897
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "text-text-muted flex-1 truncate", children: entry.label }),
5898
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
5373
5899
  "span",
5374
5900
  {
5375
5901
  className: cn(
@@ -5387,21 +5913,21 @@ var HealthScore = (0, import_react70.forwardRef)(function HealthScore2({
5387
5913
  HealthScore.displayName = "HealthScore";
5388
5914
 
5389
5915
  // src/patterns/LargeTitle/LargeTitle.tsx
5390
- var import_react71 = require("react");
5391
- var import_jsx_runtime64 = require("react/jsx-runtime");
5392
- var LargeTitle = (0, import_react71.forwardRef)(function LargeTitle2({ title, eyebrow, trailing, className, ...props }, ref) {
5393
- return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(
5916
+ var import_react72 = require("react");
5917
+ var import_jsx_runtime65 = require("react/jsx-runtime");
5918
+ var LargeTitle = (0, import_react72.forwardRef)(function LargeTitle2({ title, eyebrow, trailing, className, ...props }, ref) {
5919
+ return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
5394
5920
  "header",
5395
5921
  {
5396
5922
  ref,
5397
5923
  className: cn("px-screen flex items-end justify-between gap-3 py-3 pb-4", className),
5398
5924
  ...props,
5399
5925
  children: [
5400
- /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { className: "min-w-0 flex-1", children: [
5401
- eyebrow && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("div", { className: "text-m-eyebrow text-accent mb-[6px] font-mono tracking-wide uppercase", children: eyebrow }),
5402
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("h1", { className: "text-m-h1 m-0 truncate leading-tight font-medium tracking-tight", children: title })
5926
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "min-w-0 flex-1", children: [
5927
+ eyebrow && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "text-m-eyebrow text-accent mb-[6px] font-mono tracking-wide uppercase", children: eyebrow }),
5928
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("h1", { className: "text-m-h1 m-0 truncate leading-tight font-medium tracking-tight", children: title })
5403
5929
  ] }),
5404
- trailing && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("div", { className: "shrink-0", children: trailing })
5930
+ trailing && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "shrink-0", children: trailing })
5405
5931
  ]
5406
5932
  }
5407
5933
  );
@@ -5410,10 +5936,10 @@ LargeTitle.displayName = "LargeTitle";
5410
5936
 
5411
5937
  // src/patterns/Menubar/Menubar.tsx
5412
5938
  var RadixMenubar = __toESM(require("@radix-ui/react-menubar"), 1);
5413
- var import_react72 = require("react");
5414
- var import_jsx_runtime65 = require("react/jsx-runtime");
5415
- var Menubar = (0, import_react72.forwardRef)(function Menubar2({ className, ...props }, ref) {
5416
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
5939
+ var import_react73 = require("react");
5940
+ var import_jsx_runtime66 = require("react/jsx-runtime");
5941
+ var Menubar = (0, import_react73.forwardRef)(function Menubar2({ className, ...props }, ref) {
5942
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
5417
5943
  RadixMenubar.Root,
5418
5944
  {
5419
5945
  ref,
@@ -5427,9 +5953,9 @@ var Menubar = (0, import_react72.forwardRef)(function Menubar2({ className, ...p
5427
5953
  });
5428
5954
  Menubar.displayName = "Menubar";
5429
5955
  var MenubarMenu = RadixMenubar.Menu;
5430
- var MenubarTrigger = (0, import_react72.forwardRef)(
5956
+ var MenubarTrigger = (0, import_react73.forwardRef)(
5431
5957
  function MenubarTrigger2({ className, ...props }, ref) {
5432
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
5958
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
5433
5959
  RadixMenubar.Trigger,
5434
5960
  {
5435
5961
  ref,
@@ -5446,9 +5972,9 @@ var MenubarTrigger = (0, import_react72.forwardRef)(
5446
5972
  }
5447
5973
  );
5448
5974
  MenubarTrigger.displayName = "MenubarTrigger";
5449
- var MenubarContent = (0, import_react72.forwardRef)(
5975
+ var MenubarContent = (0, import_react73.forwardRef)(
5450
5976
  function MenubarContent2({ className, sideOffset = 6, align = "start", ...props }, ref) {
5451
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(RadixMenubar.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
5977
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(RadixMenubar.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
5452
5978
  RadixMenubar.Content,
5453
5979
  {
5454
5980
  ref,
@@ -5470,24 +5996,24 @@ var itemBase3 = cn(
5470
5996
  "data-[highlighted]:bg-panel-2",
5471
5997
  "data-[disabled]:opacity-40 data-[disabled]:cursor-not-allowed"
5472
5998
  );
5473
- var MenubarItem = (0, import_react72.forwardRef)(function MenubarItem2({ trailing, destructive, className, children, ...props }, ref) {
5474
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
5999
+ var MenubarItem = (0, import_react73.forwardRef)(function MenubarItem2({ trailing, destructive, className, children, ...props }, ref) {
6000
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
5475
6001
  RadixMenubar.Item,
5476
6002
  {
5477
6003
  ref,
5478
6004
  className: cn(itemBase3, destructive ? "text-err" : "text-text", className),
5479
6005
  ...props,
5480
6006
  children: [
5481
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "flex-1", children }),
5482
- trailing && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "text-text-dim font-mono text-[10px]", children: trailing })
6007
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "flex-1", children }),
6008
+ trailing && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "text-text-dim font-mono text-[10px]", children: trailing })
5483
6009
  ]
5484
6010
  }
5485
6011
  );
5486
6012
  });
5487
6013
  MenubarItem.displayName = "MenubarItem";
5488
- var MenubarSeparator = (0, import_react72.forwardRef)(
6014
+ var MenubarSeparator = (0, import_react73.forwardRef)(
5489
6015
  function MenubarSeparator2({ className, ...props }, ref) {
5490
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
6016
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
5491
6017
  RadixMenubar.Separator,
5492
6018
  {
5493
6019
  ref,
@@ -5501,13 +6027,13 @@ MenubarSeparator.displayName = "MenubarSeparator";
5501
6027
 
5502
6028
  // src/patterns/NavBar/NavBar.tsx
5503
6029
  var RadixNav = __toESM(require("@radix-ui/react-navigation-menu"), 1);
5504
- var import_react74 = require("react");
6030
+ var import_react75 = require("react");
5505
6031
 
5506
6032
  // src/patterns/Sidebar/Sidebar.tsx
5507
- var import_react73 = require("react");
5508
- var import_jsx_runtime66 = require("react/jsx-runtime");
5509
- var Sidebar = (0, import_react73.forwardRef)(function Sidebar2({ width = 240, className, style, ...props }, ref) {
5510
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
6033
+ var import_react74 = require("react");
6034
+ var import_jsx_runtime67 = require("react/jsx-runtime");
6035
+ var Sidebar = (0, import_react74.forwardRef)(function Sidebar2({ width = 240, className, style, ...props }, ref) {
6036
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
5511
6037
  "aside",
5512
6038
  {
5513
6039
  ref,
@@ -5521,12 +6047,12 @@ var Sidebar = (0, import_react73.forwardRef)(function Sidebar2({ width = 240, cl
5521
6047
  );
5522
6048
  });
5523
6049
  Sidebar.displayName = "Sidebar";
5524
- var NavItem = (0, import_react73.forwardRef)(
6050
+ var NavItem = (0, import_react74.forwardRef)(
5525
6051
  function NavItem2({ icon, label, active, badge, href, disabled, className, ...props }, ref) {
5526
- const inner = /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(import_jsx_runtime66.Fragment, { children: [
5527
- icon && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { "aria-hidden": true, className: "w-[14px] text-center opacity-80", children: icon }),
5528
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "flex-1 truncate", children: label }),
5529
- badge != null && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
6052
+ const inner = /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
6053
+ icon && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { "aria-hidden": true, className: "w-[14px] text-center opacity-80", children: icon }),
6054
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "flex-1 truncate", children: label }),
6055
+ badge != null && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
5530
6056
  "span",
5531
6057
  {
5532
6058
  className: cn(
@@ -5547,7 +6073,7 @@ var NavItem = (0, import_react73.forwardRef)(
5547
6073
  );
5548
6074
  if (href) {
5549
6075
  const anchorProps = props;
5550
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
6076
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
5551
6077
  "a",
5552
6078
  {
5553
6079
  ref,
@@ -5561,7 +6087,7 @@ var NavItem = (0, import_react73.forwardRef)(
5561
6087
  );
5562
6088
  }
5563
6089
  const buttonProps = props;
5564
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
6090
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
5565
6091
  "button",
5566
6092
  {
5567
6093
  ref,
@@ -5576,7 +6102,7 @@ var NavItem = (0, import_react73.forwardRef)(
5576
6102
  }
5577
6103
  );
5578
6104
  NavItem.displayName = "NavItem";
5579
- var NavSection = (0, import_react73.forwardRef)(function NavSection2({
6105
+ var NavSection = (0, import_react74.forwardRef)(function NavSection2({
5580
6106
  label,
5581
6107
  icon,
5582
6108
  action,
@@ -5590,16 +6116,16 @@ var NavSection = (0, import_react73.forwardRef)(function NavSection2({
5590
6116
  ...props
5591
6117
  }, ref) {
5592
6118
  const isControlled = open !== void 0;
5593
- const [internalOpen, setInternalOpen] = (0, import_react73.useState)(defaultOpen);
6119
+ const [internalOpen, setInternalOpen] = (0, import_react74.useState)(defaultOpen);
5594
6120
  const isOpen = !collapsible || (isControlled ? open : internalOpen);
5595
- const toggle = (0, import_react73.useCallback)(() => {
6121
+ const toggle = (0, import_react74.useCallback)(() => {
5596
6122
  const next = !isOpen;
5597
6123
  if (!isControlled) setInternalOpen(next);
5598
6124
  onOpenChange?.(next);
5599
6125
  }, [isOpen, isControlled, onOpenChange]);
5600
6126
  const eyebrowClass = "text-text-dim flex items-center gap-[6px] px-2 pt-2 font-mono text-[9px] tracking-[1.4px] uppercase";
5601
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { ref, className: cn("flex flex-col gap-1", className), ...props, children: [
5602
- collapsible ? /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
6127
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { ref, className: cn("flex flex-col gap-1", className), ...props, children: [
6128
+ collapsible ? /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
5603
6129
  "button",
5604
6130
  {
5605
6131
  type: "button",
@@ -5612,18 +6138,18 @@ var NavSection = (0, import_react73.forwardRef)(function NavSection2({
5612
6138
  "hover:text-text-muted"
5613
6139
  ),
5614
6140
  children: [
5615
- icon != null && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { "aria-hidden": true, className: "opacity-80", children: icon }),
5616
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "flex-1 text-left", children: label }),
6141
+ icon != null && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { "aria-hidden": true, className: "opacity-80", children: icon }),
6142
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "flex-1 text-left", children: label }),
5617
6143
  action,
5618
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { "aria-hidden": true, className: "text-[10px] opacity-70", children: isOpen ? "\u25BE" : "\u25B8" })
6144
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { "aria-hidden": true, className: "text-[10px] opacity-70", children: isOpen ? "\u25BE" : "\u25B8" })
5619
6145
  ]
5620
6146
  }
5621
- ) : /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: eyebrowClass, children: [
5622
- icon != null && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { "aria-hidden": true, className: "opacity-80", children: icon }),
5623
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "flex-1", children: label }),
6147
+ ) : /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: eyebrowClass, children: [
6148
+ icon != null && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { "aria-hidden": true, className: "opacity-80", children: icon }),
6149
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "flex-1", children: label }),
5624
6150
  action
5625
6151
  ] }),
5626
- isOpen && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
6152
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
5627
6153
  "div",
5628
6154
  {
5629
6155
  className: cn("flex flex-col gap-[2px]", indent > 0 && "border-border ml-2 border-l"),
@@ -5636,12 +6162,12 @@ var NavSection = (0, import_react73.forwardRef)(function NavSection2({
5636
6162
  NavSection.displayName = "NavSection";
5637
6163
 
5638
6164
  // src/patterns/NavBar/NavBar.tsx
5639
- var import_jsx_runtime67 = require("react/jsx-runtime");
6165
+ var import_jsx_runtime68 = require("react/jsx-runtime");
5640
6166
  function isActiveTree(item, activeId) {
5641
6167
  if (item.id === activeId) return true;
5642
6168
  return item.children?.some((c) => isActiveTree(c, activeId)) ?? false;
5643
6169
  }
5644
- var NavBar = (0, import_react74.forwardRef)(function NavBar2({
6170
+ var NavBar = (0, import_react75.forwardRef)(function NavBar2({
5645
6171
  orientation = "horizontal",
5646
6172
  items,
5647
6173
  brand,
@@ -5655,17 +6181,17 @@ var NavBar = (0, import_react74.forwardRef)(function NavBar2({
5655
6181
  ...props
5656
6182
  }, ref) {
5657
6183
  const isControlled = value !== void 0;
5658
- const [internalValue, setInternalValue] = (0, import_react74.useState)(defaultValue);
6184
+ const [internalValue, setInternalValue] = (0, import_react75.useState)(defaultValue);
5659
6185
  const activeId = isControlled ? value : internalValue;
5660
- const [drawerOpen, setDrawerOpen] = (0, import_react74.useState)(false);
5661
- const select = (0, import_react74.useCallback)(
6186
+ const [drawerOpen, setDrawerOpen] = (0, import_react75.useState)(false);
6187
+ const select = (0, import_react75.useCallback)(
5662
6188
  (id) => {
5663
6189
  if (!isControlled) setInternalValue(id);
5664
6190
  onValueChange?.(id);
5665
6191
  },
5666
6192
  [isControlled, onValueChange]
5667
6193
  );
5668
- const handleItemActivate = (0, import_react74.useCallback)(
6194
+ const handleItemActivate = (0, import_react75.useCallback)(
5669
6195
  (id) => {
5670
6196
  select(id);
5671
6197
  setDrawerOpen(false);
@@ -5677,7 +6203,7 @@ var NavBar = (0, import_react74.forwardRef)(function NavBar2({
5677
6203
  // drawer is open on a viewport that's resizing past `md`, both navs can
5678
6204
  // sit in the DOM together. Identical accessible names would trip axe's
5679
6205
  // `landmark-unique` rule.
5680
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("nav", { "aria-label": "Mobile navigation", className: "flex flex-col gap-1", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
6206
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("nav", { "aria-label": "Mobile navigation", className: "flex flex-col gap-1", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
5681
6207
  VerticalItem,
5682
6208
  {
5683
6209
  item,
@@ -5687,14 +6213,14 @@ var NavBar = (0, import_react74.forwardRef)(function NavBar2({
5687
6213
  item.id
5688
6214
  )) })
5689
6215
  );
5690
- const mobileBar = responsive ? /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
6216
+ const mobileBar = responsive ? /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
5691
6217
  "div",
5692
6218
  {
5693
6219
  className: cn(
5694
6220
  "border-border bg-panel z-overlay sticky top-0 flex h-[52px] items-center gap-4 border-b px-5 md:hidden"
5695
6221
  ),
5696
6222
  children: [
5697
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
6223
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
5698
6224
  "button",
5699
6225
  {
5700
6226
  type: "button",
@@ -5704,15 +6230,15 @@ var NavBar = (0, import_react74.forwardRef)(function NavBar2({
5704
6230
  children: "\u2630"
5705
6231
  }
5706
6232
  ),
5707
- brand && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "flex flex-1 items-center text-[13px] font-medium whitespace-nowrap", children: brand }),
5708
- actions && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "flex items-center gap-3", children: actions })
6233
+ brand && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "flex flex-1 items-center text-[13px] font-medium whitespace-nowrap", children: brand }),
6234
+ actions && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "flex items-center gap-3", children: actions })
5709
6235
  ]
5710
6236
  }
5711
6237
  ) : null;
5712
6238
  if (orientation === "horizontal") {
5713
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
6239
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
5714
6240
  mobileBar,
5715
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
6241
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
5716
6242
  "header",
5717
6243
  {
5718
6244
  ref,
@@ -5723,10 +6249,10 @@ var NavBar = (0, import_react74.forwardRef)(function NavBar2({
5723
6249
  ),
5724
6250
  ...props,
5725
6251
  children: [
5726
- brand && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "shrink-0 text-[13px] font-medium whitespace-nowrap", children: brand }),
5727
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(RadixNav.Root, { className: "relative flex-1", delayDuration: 120, children: [
5728
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(RadixNav.List, { className: "m-0! flex list-none! items-center gap-1 p-0! [&_li]:m-0!", children: items.map(
5729
- (item) => item.children?.length ? /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
6252
+ brand && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "shrink-0 text-[13px] font-medium whitespace-nowrap", children: brand }),
6253
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(RadixNav.Root, { className: "relative flex-1", delayDuration: 120, children: [
6254
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(RadixNav.List, { className: "m-0! flex list-none! items-center gap-1 p-0! [&_li]:m-0!", children: items.map(
6255
+ (item) => item.children?.length ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
5730
6256
  HorizontalDropdown,
5731
6257
  {
5732
6258
  item,
@@ -5735,7 +6261,7 @@ var NavBar = (0, import_react74.forwardRef)(function NavBar2({
5735
6261
  onActivate: handleItemActivate
5736
6262
  },
5737
6263
  item.id
5738
- ) : /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(RadixNav.Item, { children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
6264
+ ) : /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(RadixNav.Item, { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
5739
6265
  HorizontalLink,
5740
6266
  {
5741
6267
  item,
@@ -5744,13 +6270,13 @@ var NavBar = (0, import_react74.forwardRef)(function NavBar2({
5744
6270
  }
5745
6271
  ) }, item.id)
5746
6272
  ) }),
5747
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "z-popover absolute top-full left-0 flex justify-start", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(RadixNav.Viewport, { className: "origin-top-left data-[state=open]:animate-[ship-fade-in_120ms_var(--easing-out)]" }) })
6273
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "z-popover absolute top-full left-0 flex justify-start", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(RadixNav.Viewport, { className: "origin-top-left data-[state=open]:animate-[ship-fade-in_120ms_var(--easing-out)]" }) })
5748
6274
  ] }),
5749
- actions && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "flex items-center gap-3", children: actions })
6275
+ actions && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "flex items-center gap-3", children: actions })
5750
6276
  ]
5751
6277
  }
5752
6278
  ),
5753
- responsive && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
6279
+ responsive && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
5754
6280
  Drawer,
5755
6281
  {
5756
6282
  open: drawerOpen,
@@ -5763,9 +6289,9 @@ var NavBar = (0, import_react74.forwardRef)(function NavBar2({
5763
6289
  )
5764
6290
  ] });
5765
6291
  }
5766
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
6292
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
5767
6293
  mobileBar,
5768
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
6294
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
5769
6295
  "aside",
5770
6296
  {
5771
6297
  ref,
@@ -5778,8 +6304,8 @@ var NavBar = (0, import_react74.forwardRef)(function NavBar2({
5778
6304
  ),
5779
6305
  ...props,
5780
6306
  children: [
5781
- brand && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "px-2 py-1 text-[13px] font-medium", children: brand }),
5782
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("nav", { "aria-label": "Sidebar navigation", className: "flex flex-1 flex-col gap-1 overflow-y-auto", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
6307
+ brand && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "px-2 py-1 text-[13px] font-medium", children: brand }),
6308
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("nav", { "aria-label": "Sidebar navigation", className: "flex flex-1 flex-col gap-1 overflow-y-auto", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
5783
6309
  VerticalItem,
5784
6310
  {
5785
6311
  item,
@@ -5788,11 +6314,11 @@ var NavBar = (0, import_react74.forwardRef)(function NavBar2({
5788
6314
  },
5789
6315
  item.id
5790
6316
  )) }),
5791
- actions && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "border-border mt-auto flex flex-col gap-2 border-t pt-3", children: actions })
6317
+ actions && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "border-border mt-auto flex flex-col gap-2 border-t pt-3", children: actions })
5792
6318
  ]
5793
6319
  }
5794
6320
  ),
5795
- responsive && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
6321
+ responsive && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
5796
6322
  Drawer,
5797
6323
  {
5798
6324
  open: drawerOpen,
@@ -5821,13 +6347,13 @@ function HorizontalLink({ item, active, onActivate }) {
5821
6347
  }
5822
6348
  onActivate(item.id);
5823
6349
  };
5824
- const inner = /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
5825
- item.icon != null && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { "aria-hidden": true, className: "opacity-80", children: item.icon }),
5826
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { children: item.label }),
5827
- item.badge != null && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(ItemBadge, { active, children: item.badge })
6350
+ const inner = /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
6351
+ item.icon != null && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { "aria-hidden": true, className: "opacity-80", children: item.icon }),
6352
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { children: item.label }),
6353
+ item.badge != null && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(ItemBadge, { active, children: item.badge })
5828
6354
  ] });
5829
6355
  if (item.href) {
5830
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(RadixNav.Link, { asChild: true, active, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
6356
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(RadixNav.Link, { asChild: true, active, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
5831
6357
  "a",
5832
6358
  {
5833
6359
  href: item.href,
@@ -5839,7 +6365,7 @@ function HorizontalLink({ item, active, onActivate }) {
5839
6365
  }
5840
6366
  ) });
5841
6367
  }
5842
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(RadixNav.Link, { asChild: true, active, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
6368
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(RadixNav.Link, { asChild: true, active, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
5843
6369
  "button",
5844
6370
  {
5845
6371
  type: "button",
@@ -5852,8 +6378,8 @@ function HorizontalLink({ item, active, onActivate }) {
5852
6378
  ) });
5853
6379
  }
5854
6380
  function HorizontalDropdown({ item, active, activeId, onActivate }) {
5855
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(RadixNav.Item, { children: [
5856
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
6381
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(RadixNav.Item, { children: [
6382
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
5857
6383
  RadixNav.Trigger,
5858
6384
  {
5859
6385
  className: cn(
@@ -5865,9 +6391,9 @@ function HorizontalDropdown({ item, active, activeId, onActivate }) {
5865
6391
  ),
5866
6392
  disabled: item.disabled,
5867
6393
  children: [
5868
- item.icon != null && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { "aria-hidden": true, className: "opacity-80", children: item.icon }),
5869
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { children: item.label }),
5870
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
6394
+ item.icon != null && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { "aria-hidden": true, className: "opacity-80", children: item.icon }),
6395
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { children: item.label }),
6396
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
5871
6397
  "span",
5872
6398
  {
5873
6399
  "aria-hidden": true,
@@ -5878,7 +6404,7 @@ function HorizontalDropdown({ item, active, activeId, onActivate }) {
5878
6404
  ]
5879
6405
  }
5880
6406
  ),
5881
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(RadixNav.Content, { className: "border-border bg-panel min-w-[220px] rounded-xs border p-2 shadow-lg", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("ul", { className: "m-0! flex list-none! flex-col gap-[2px] p-0! [&_li]:m-0!", children: item.children.map((child) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(DropdownLink, { item: child, active: child.id === activeId, onActivate }) }, child.id)) }) })
6407
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(RadixNav.Content, { className: "border-border bg-panel min-w-[220px] rounded-xs border p-2 shadow-lg", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("ul", { className: "m-0! flex list-none! flex-col gap-[2px] p-0! [&_li]:m-0!", children: item.children.map((child) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(DropdownLink, { item: child, active: child.id === activeId, onActivate }) }, child.id)) }) })
5882
6408
  ] });
5883
6409
  }
5884
6410
  function DropdownLink({ item, active, onActivate }) {
@@ -5895,13 +6421,13 @@ function DropdownLink({ item, active, onActivate }) {
5895
6421
  }
5896
6422
  onActivate(item.id);
5897
6423
  };
5898
- const inner = /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
5899
- item.icon != null && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { "aria-hidden": true, className: "opacity-80", children: item.icon }),
5900
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "flex-1", children: item.label }),
5901
- item.badge != null && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(ItemBadge, { active, children: item.badge })
6424
+ const inner = /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
6425
+ item.icon != null && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { "aria-hidden": true, className: "opacity-80", children: item.icon }),
6426
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "flex-1", children: item.label }),
6427
+ item.badge != null && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(ItemBadge, { active, children: item.badge })
5902
6428
  ] });
5903
6429
  if (item.href) {
5904
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(RadixNav.Link, { asChild: true, active, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
6430
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(RadixNav.Link, { asChild: true, active, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
5905
6431
  "a",
5906
6432
  {
5907
6433
  href: item.href,
@@ -5913,7 +6439,7 @@ function DropdownLink({ item, active, onActivate }) {
5913
6439
  }
5914
6440
  ) });
5915
6441
  }
5916
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(RadixNav.Link, { asChild: true, active, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
6442
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(RadixNav.Link, { asChild: true, active, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
5917
6443
  "button",
5918
6444
  {
5919
6445
  type: "button",
@@ -5928,9 +6454,9 @@ function DropdownLink({ item, active, onActivate }) {
5928
6454
  function VerticalItem({ item, activeId, onActivate }) {
5929
6455
  const hasChildren = (item.children?.length ?? 0) > 0;
5930
6456
  const treeActive = isActiveTree(item, activeId);
5931
- const [open, setOpen] = (0, import_react74.useState)(treeActive);
5932
- const prevTreeActive = (0, import_react74.useRef)(treeActive);
5933
- (0, import_react74.useEffect)(() => {
6457
+ const [open, setOpen] = (0, import_react75.useState)(treeActive);
6458
+ const prevTreeActive = (0, import_react75.useRef)(treeActive);
6459
+ (0, import_react75.useEffect)(() => {
5934
6460
  if (treeActive && !prevTreeActive.current) setOpen(true);
5935
6461
  prevTreeActive.current = treeActive;
5936
6462
  }, [treeActive]);
@@ -5942,7 +6468,7 @@ function VerticalItem({ item, activeId, onActivate }) {
5942
6468
  }
5943
6469
  onActivate(item.id);
5944
6470
  };
5945
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
6471
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
5946
6472
  NavItem,
5947
6473
  {
5948
6474
  icon: item.icon,
@@ -5955,8 +6481,8 @@ function VerticalItem({ item, activeId, onActivate }) {
5955
6481
  }
5956
6482
  );
5957
6483
  }
5958
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex flex-col", children: [
5959
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
6484
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex flex-col", children: [
6485
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
5960
6486
  "button",
5961
6487
  {
5962
6488
  type: "button",
@@ -5972,18 +6498,18 @@ function VerticalItem({ item, activeId, onActivate }) {
5972
6498
  item.disabled && "pointer-events-none opacity-50"
5973
6499
  ),
5974
6500
  children: [
5975
- item.icon != null && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { "aria-hidden": true, className: "w-[14px] text-center opacity-80", children: item.icon }),
5976
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "flex-1 truncate", children: item.label }),
5977
- item.badge != null && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(ItemBadge, { active: treeActive, children: item.badge }),
5978
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { "aria-hidden": true, className: "text-[10px] opacity-60", children: open ? "\u25BE" : "\u25B8" })
6501
+ item.icon != null && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { "aria-hidden": true, className: "w-[14px] text-center opacity-80", children: item.icon }),
6502
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "flex-1 truncate", children: item.label }),
6503
+ item.badge != null && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(ItemBadge, { active: treeActive, children: item.badge }),
6504
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { "aria-hidden": true, className: "text-[10px] opacity-60", children: open ? "\u25BE" : "\u25B8" })
5979
6505
  ]
5980
6506
  }
5981
6507
  ),
5982
- open && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "border-border mt-1 ml-[18px] flex flex-col gap-[2px] border-l pl-3", children: item.children.map((child) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(VerticalItem, { item: child, activeId, onActivate }, child.id)) })
6508
+ open && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "border-border mt-1 ml-[18px] flex flex-col gap-[2px] border-l pl-3", children: item.children.map((child) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(VerticalItem, { item: child, activeId, onActivate }, child.id)) })
5983
6509
  ] });
5984
6510
  }
5985
6511
  function ItemBadge({ active, children }) {
5986
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
6512
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
5987
6513
  "span",
5988
6514
  {
5989
6515
  className: cn(
@@ -5996,8 +6522,8 @@ function ItemBadge({ active, children }) {
5996
6522
  }
5997
6523
 
5998
6524
  // src/patterns/OnboardingChecklist/OnboardingChecklist.tsx
5999
- var import_react75 = require("react");
6000
- var import_jsx_runtime68 = require("react/jsx-runtime");
6525
+ var import_react76 = require("react");
6526
+ var import_jsx_runtime69 = require("react/jsx-runtime");
6001
6527
  var statusDot = {
6002
6528
  pending: "off",
6003
6529
  "in-progress": "sync",
@@ -6008,11 +6534,11 @@ var labelStateClass = {
6008
6534
  "in-progress": "text-text",
6009
6535
  done: "text-text-dim line-through"
6010
6536
  };
6011
- var OnboardingChecklist = (0, import_react75.forwardRef)(
6537
+ var OnboardingChecklist = (0, import_react76.forwardRef)(
6012
6538
  function OnboardingChecklist2({ items, onItemClick, title = "Get started", progressLabel, hideProgress, className, ...props }, ref) {
6013
6539
  const total = items.length;
6014
6540
  const done = items.filter((i) => i.status === "done").length;
6015
- return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
6541
+ return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
6016
6542
  "section",
6017
6543
  {
6018
6544
  ref,
@@ -6023,11 +6549,11 @@ var OnboardingChecklist = (0, import_react75.forwardRef)(
6023
6549
  ),
6024
6550
  ...props,
6025
6551
  children: [
6026
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("header", { className: "flex items-center gap-2", children: [
6027
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "text-[14px] font-medium", children: title }),
6028
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "text-text-dim ml-auto font-mono text-[11px] tabular-nums", children: progressLabel ?? `${done} of ${total} complete` })
6552
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("header", { className: "flex items-center gap-2", children: [
6553
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "text-[14px] font-medium", children: title }),
6554
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "text-text-dim ml-auto font-mono text-[11px] tabular-nums", children: progressLabel ?? `${done} of ${total} complete` })
6029
6555
  ] }),
6030
- !hideProgress && total > 0 && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
6556
+ !hideProgress && total > 0 && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
6031
6557
  "div",
6032
6558
  {
6033
6559
  role: "progressbar",
@@ -6036,7 +6562,7 @@ var OnboardingChecklist = (0, import_react75.forwardRef)(
6036
6562
  "aria-valuenow": done,
6037
6563
  "aria-label": typeof title === "string" ? `${title} progress` : "Setup progress",
6038
6564
  className: "bg-panel-2 h-[3px] w-full overflow-hidden rounded-full",
6039
- children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
6565
+ children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
6040
6566
  "span",
6041
6567
  {
6042
6568
  "aria-hidden": true,
@@ -6049,10 +6575,10 @@ var OnboardingChecklist = (0, import_react75.forwardRef)(
6049
6575
  )
6050
6576
  }
6051
6577
  ),
6052
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("ul", { className: "m-0 flex list-none flex-col gap-1 p-0", children: items.map((item) => {
6578
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("ul", { className: "m-0 flex list-none flex-col gap-1 p-0", children: items.map((item) => {
6053
6579
  const interactive = typeof onItemClick === "function";
6054
- const labelBlock = /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
6055
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
6580
+ const labelBlock = /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(import_jsx_runtime69.Fragment, { children: [
6581
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
6056
6582
  StatusDot,
6057
6583
  {
6058
6584
  state: statusDot[item.status],
@@ -6061,17 +6587,17 @@ var OnboardingChecklist = (0, import_react75.forwardRef)(
6061
6587
  className: "mt-[3px]"
6062
6588
  }
6063
6589
  ),
6064
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-[2px]", children: [
6065
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: cn("text-[13px]", labelStateClass[item.status]), children: item.label }),
6066
- item.description && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "text-text-muted text-[12px] leading-[1.45]", children: item.description })
6590
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-[2px]", children: [
6591
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: cn("text-[13px]", labelStateClass[item.status]), children: item.label }),
6592
+ item.description && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "text-text-muted text-[12px] leading-[1.45]", children: item.description })
6067
6593
  ] })
6068
6594
  ] });
6069
6595
  const labelRegionClass = cn(
6070
6596
  "flex flex-1 items-start gap-3 rounded-md px-2 py-2 text-left transition-colors duration-(--duration-micro)",
6071
6597
  interactive && "cursor-pointer outline-none hover:bg-panel-2 focus-visible:ring-[3px] focus-visible:ring-accent-dim"
6072
6598
  );
6073
- return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("li", { className: "flex items-start gap-2", children: [
6074
- interactive ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
6599
+ return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("li", { className: "flex items-start gap-2", children: [
6600
+ interactive ? /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
6075
6601
  "button",
6076
6602
  {
6077
6603
  type: "button",
@@ -6080,8 +6606,8 @@ var OnboardingChecklist = (0, import_react75.forwardRef)(
6080
6606
  className: labelRegionClass,
6081
6607
  children: labelBlock
6082
6608
  }
6083
- ) : /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: labelRegionClass, children: labelBlock }),
6084
- item.action && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "shrink-0 self-center", children: item.action })
6609
+ ) : /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: labelRegionClass, children: labelBlock }),
6610
+ item.action && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("div", { className: "shrink-0 self-center", children: item.action })
6085
6611
  ] }, item.id);
6086
6612
  }) })
6087
6613
  ]
@@ -6092,8 +6618,8 @@ var OnboardingChecklist = (0, import_react75.forwardRef)(
6092
6618
  OnboardingChecklist.displayName = "OnboardingChecklist";
6093
6619
 
6094
6620
  // src/patterns/Pagination/Pagination.tsx
6095
- var import_react76 = require("react");
6096
- var import_jsx_runtime69 = require("react/jsx-runtime");
6621
+ var import_react77 = require("react");
6622
+ var import_jsx_runtime70 = require("react/jsx-runtime");
6097
6623
  function buildRange(page, total, siblings) {
6098
6624
  if (total <= 0) return [];
6099
6625
  const items = [];
@@ -6106,9 +6632,9 @@ function buildRange(page, total, siblings) {
6106
6632
  if (total > 1) items.push(total);
6107
6633
  return items;
6108
6634
  }
6109
- var Pagination = (0, import_react76.forwardRef)(function Pagination2({ page, total, onPageChange, siblings = 1, className, ...props }, ref) {
6635
+ var Pagination = (0, import_react77.forwardRef)(function Pagination2({ page, total, onPageChange, siblings = 1, className, ...props }, ref) {
6110
6636
  const items = buildRange(page, total, siblings);
6111
- return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
6637
+ return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
6112
6638
  "nav",
6113
6639
  {
6114
6640
  ref,
@@ -6116,7 +6642,7 @@ var Pagination = (0, import_react76.forwardRef)(function Pagination2({ page, tot
6116
6642
  className: cn("inline-flex items-center gap-1", className),
6117
6643
  ...props,
6118
6644
  children: [
6119
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
6645
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
6120
6646
  IconButton,
6121
6647
  {
6122
6648
  size: "sm",
@@ -6129,7 +6655,7 @@ var Pagination = (0, import_react76.forwardRef)(function Pagination2({ page, tot
6129
6655
  ),
6130
6656
  items.map((item, i) => {
6131
6657
  if (item === "start-ellipsis" || item === "end-ellipsis") {
6132
- return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
6658
+ return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
6133
6659
  "span",
6134
6660
  {
6135
6661
  "aria-hidden": true,
@@ -6140,7 +6666,7 @@ var Pagination = (0, import_react76.forwardRef)(function Pagination2({ page, tot
6140
6666
  );
6141
6667
  }
6142
6668
  const isActive = item === page;
6143
- return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
6669
+ return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
6144
6670
  "button",
6145
6671
  {
6146
6672
  type: "button",
@@ -6158,7 +6684,7 @@ var Pagination = (0, import_react76.forwardRef)(function Pagination2({ page, tot
6158
6684
  item
6159
6685
  );
6160
6686
  }),
6161
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
6687
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
6162
6688
  IconButton,
6163
6689
  {
6164
6690
  size: "sm",
@@ -6176,10 +6702,10 @@ var Pagination = (0, import_react76.forwardRef)(function Pagination2({ page, tot
6176
6702
  Pagination.displayName = "Pagination";
6177
6703
 
6178
6704
  // src/patterns/Progress/Progress.tsx
6179
- var import_class_variance_authority12 = require("class-variance-authority");
6180
- var import_react77 = require("react");
6181
- var import_jsx_runtime70 = require("react/jsx-runtime");
6182
- var trackStyles = (0, import_class_variance_authority12.cva)("w-full rounded-full bg-panel-2 overflow-hidden", {
6705
+ var import_class_variance_authority13 = require("class-variance-authority");
6706
+ var import_react78 = require("react");
6707
+ var import_jsx_runtime71 = require("react/jsx-runtime");
6708
+ var trackStyles = (0, import_class_variance_authority13.cva)("w-full rounded-full bg-panel-2 overflow-hidden", {
6183
6709
  variants: {
6184
6710
  size: {
6185
6711
  sm: "h-[3px]",
@@ -6189,7 +6715,7 @@ var trackStyles = (0, import_class_variance_authority12.cva)("w-full rounded-ful
6189
6715
  },
6190
6716
  defaultVariants: { size: "md" }
6191
6717
  });
6192
- var fillStyles = (0, import_class_variance_authority12.cva)("h-full rounded-full transition-[width] duration-(--duration-step)", {
6718
+ var fillStyles = (0, import_class_variance_authority13.cva)("h-full rounded-full transition-[width] duration-(--duration-step)", {
6193
6719
  variants: {
6194
6720
  tone: {
6195
6721
  accent: "bg-accent",
@@ -6200,7 +6726,7 @@ var fillStyles = (0, import_class_variance_authority12.cva)("h-full rounded-full
6200
6726
  },
6201
6727
  defaultVariants: { tone: "accent" }
6202
6728
  });
6203
- var Progress = (0, import_react77.forwardRef)(function Progress2({
6729
+ var Progress = (0, import_react78.forwardRef)(function Progress2({
6204
6730
  value = 0,
6205
6731
  max = 100,
6206
6732
  indeterminate = false,
@@ -6214,15 +6740,15 @@ var Progress = (0, import_react77.forwardRef)(function Progress2({
6214
6740
  const clamped = Math.min(max, Math.max(0, value));
6215
6741
  const pct = max > 0 ? clamped / max * 100 : 0;
6216
6742
  const display = Math.round(pct);
6217
- return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { ref, className: cn("flex w-full flex-col gap-2", className), ...props, children: [
6218
- label != null && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { className: "flex text-[12px]", children: [
6219
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "text-text-muted", children: label }),
6220
- showValue && !indeterminate && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("span", { className: "text-text ml-auto font-mono tabular-nums", children: [
6743
+ return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { ref, className: cn("flex w-full flex-col gap-2", className), ...props, children: [
6744
+ label != null && /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "flex text-[12px]", children: [
6745
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "text-text-muted", children: label }),
6746
+ showValue && !indeterminate && /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("span", { className: "text-text ml-auto font-mono tabular-nums", children: [
6221
6747
  display,
6222
6748
  "%"
6223
6749
  ] })
6224
6750
  ] }),
6225
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
6751
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
6226
6752
  "div",
6227
6753
  {
6228
6754
  role: "progressbar",
@@ -6231,7 +6757,7 @@ var Progress = (0, import_react77.forwardRef)(function Progress2({
6231
6757
  "aria-valuenow": indeterminate ? void 0 : display,
6232
6758
  "aria-label": typeof label === "string" ? label : void 0,
6233
6759
  className: trackStyles({ size }),
6234
- children: indeterminate ? /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
6760
+ children: indeterminate ? /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
6235
6761
  "span",
6236
6762
  {
6237
6763
  "aria-hidden": true,
@@ -6241,7 +6767,7 @@ var Progress = (0, import_react77.forwardRef)(function Progress2({
6241
6767
  "animate-[ship-indeterminate_1.4s_linear_infinite]"
6242
6768
  )
6243
6769
  }
6244
- ) : /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { "aria-hidden": true, className: fillStyles({ tone }), style: { width: `${pct}%` } })
6770
+ ) : /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { "aria-hidden": true, className: fillStyles({ tone }), style: { width: `${pct}%` } })
6245
6771
  }
6246
6772
  )
6247
6773
  ] });
@@ -6249,18 +6775,18 @@ var Progress = (0, import_react77.forwardRef)(function Progress2({
6249
6775
  Progress.displayName = "Progress";
6250
6776
 
6251
6777
  // src/patterns/PullToRefresh/PullToRefresh.tsx
6252
- var import_react78 = require("react");
6253
- var import_jsx_runtime71 = require("react/jsx-runtime");
6778
+ var import_react79 = require("react");
6779
+ var import_jsx_runtime72 = require("react/jsx-runtime");
6254
6780
  var labels = {
6255
6781
  idle: "Pull to refresh",
6256
6782
  pulling: "Pull to refresh",
6257
6783
  ready: "Release to refresh",
6258
6784
  loading: "Refreshing\u2026"
6259
6785
  };
6260
- var PullToRefresh = (0, import_react78.forwardRef)(function PullToRefresh2({ state = "idle", label, className, ...props }, ref) {
6786
+ var PullToRefresh = (0, import_react79.forwardRef)(function PullToRefresh2({ state = "idle", label, className, ...props }, ref) {
6261
6787
  const isLoading = state === "loading";
6262
6788
  const transform = state === "ready" ? "rotate(180deg)" : state === "pulling" ? "rotate(90deg)" : "rotate(0deg)";
6263
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(
6789
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(
6264
6790
  "div",
6265
6791
  {
6266
6792
  ref,
@@ -6270,7 +6796,7 @@ var PullToRefresh = (0, import_react78.forwardRef)(function PullToRefresh2({ sta
6270
6796
  className: cn("text-text-muted flex flex-col items-center gap-[6px] py-3", className),
6271
6797
  ...props,
6272
6798
  children: [
6273
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
6799
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
6274
6800
  "div",
6275
6801
  {
6276
6802
  "aria-hidden": true,
@@ -6286,7 +6812,7 @@ var PullToRefresh = (0, import_react78.forwardRef)(function PullToRefresh2({ sta
6286
6812
  }
6287
6813
  }
6288
6814
  ),
6289
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "text-m-eyebrow font-mono tracking-wide uppercase", children: label ?? labels[state] })
6815
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "text-m-eyebrow font-mono tracking-wide uppercase", children: label ?? labels[state] })
6290
6816
  ]
6291
6817
  }
6292
6818
  );
@@ -6294,8 +6820,8 @@ var PullToRefresh = (0, import_react78.forwardRef)(function PullToRefresh2({ sta
6294
6820
  PullToRefresh.displayName = "PullToRefresh";
6295
6821
 
6296
6822
  // src/patterns/Sparkline/Sparkline.tsx
6297
- var import_react79 = require("react");
6298
- var import_jsx_runtime72 = require("react/jsx-runtime");
6823
+ var import_react80 = require("react");
6824
+ var import_jsx_runtime73 = require("react/jsx-runtime");
6299
6825
  function buildPath(values, w, h) {
6300
6826
  if (values.length === 0) return { line: "", area: "" };
6301
6827
  const pad = 2;
@@ -6314,7 +6840,7 @@ function buildPath(values, w, h) {
6314
6840
  )} L${pad.toFixed(2)},${(h - pad).toFixed(2)} Z`;
6315
6841
  return { line, area };
6316
6842
  }
6317
- var Sparkline = (0, import_react79.forwardRef)(function Sparkline2({
6843
+ var Sparkline = (0, import_react80.forwardRef)(function Sparkline2({
6318
6844
  values,
6319
6845
  width = 160,
6320
6846
  height = 32,
@@ -6325,8 +6851,8 @@ var Sparkline = (0, import_react79.forwardRef)(function Sparkline2({
6325
6851
  "aria-label": ariaLabel = "Trend",
6326
6852
  ...props
6327
6853
  }, ref) {
6328
- const { line, area } = (0, import_react79.useMemo)(() => buildPath(values, width, height), [values, width, height]);
6329
- return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(
6854
+ const { line, area } = (0, import_react80.useMemo)(() => buildPath(values, width, height), [values, width, height]);
6855
+ return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(
6330
6856
  "svg",
6331
6857
  {
6332
6858
  ref,
@@ -6338,8 +6864,8 @@ var Sparkline = (0, import_react79.forwardRef)(function Sparkline2({
6338
6864
  className: cn("inline-block", className),
6339
6865
  ...props,
6340
6866
  children: [
6341
- fill && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("path", { d: area, fill: stroke, fillOpacity: 0.16, stroke: "none" }),
6342
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
6867
+ fill && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("path", { d: area, fill: stroke, fillOpacity: 0.16, stroke: "none" }),
6868
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
6343
6869
  "path",
6344
6870
  {
6345
6871
  d: line,
@@ -6357,16 +6883,16 @@ var Sparkline = (0, import_react79.forwardRef)(function Sparkline2({
6357
6883
  Sparkline.displayName = "Sparkline";
6358
6884
 
6359
6885
  // src/patterns/Spinner/Spinner.tsx
6360
- var import_react80 = require("react");
6361
- var import_jsx_runtime73 = require("react/jsx-runtime");
6886
+ var import_react81 = require("react");
6887
+ var import_jsx_runtime74 = require("react/jsx-runtime");
6362
6888
  var sizes = {
6363
6889
  sm: { box: "h-3 w-3", border: "border-[2px]" },
6364
6890
  md: { box: "h-4 w-4", border: "border-[2px]" },
6365
6891
  lg: { box: "h-5 w-5", border: "border-[2px]" }
6366
6892
  };
6367
- var Spinner2 = (0, import_react80.forwardRef)(function Spinner3({ size = "md", label = "Loading", className, ...props }, ref) {
6893
+ var Spinner2 = (0, import_react81.forwardRef)(function Spinner3({ size = "md", label = "Loading", className, ...props }, ref) {
6368
6894
  const s = sizes[size];
6369
- return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
6895
+ return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
6370
6896
  "span",
6371
6897
  {
6372
6898
  ref,
@@ -6374,7 +6900,7 @@ var Spinner2 = (0, import_react80.forwardRef)(function Spinner3({ size = "md", l
6374
6900
  "aria-label": label,
6375
6901
  className: cn("inline-block", className),
6376
6902
  ...props,
6377
- children: /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
6903
+ children: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
6378
6904
  "span",
6379
6905
  {
6380
6906
  "aria-hidden": true,
@@ -6391,8 +6917,8 @@ var Spinner2 = (0, import_react80.forwardRef)(function Spinner3({ size = "md", l
6391
6917
  Spinner2.displayName = "Spinner";
6392
6918
 
6393
6919
  // src/patterns/Stepper/Stepper.tsx
6394
- var import_react81 = require("react");
6395
- var import_jsx_runtime74 = require("react/jsx-runtime");
6920
+ var import_react82 = require("react");
6921
+ var import_jsx_runtime75 = require("react/jsx-runtime");
6396
6922
  var dotBase = "h-6 w-6 rounded-full grid place-items-center text-[11px] font-mono font-semibold border";
6397
6923
  var dotStateClass = {
6398
6924
  done: "bg-accent text-on-accent border-accent",
@@ -6409,8 +6935,8 @@ function stateFor(index, current) {
6409
6935
  if (index === current) return "current";
6410
6936
  return "upcoming";
6411
6937
  }
6412
- var Stepper = (0, import_react81.forwardRef)(function Stepper2({ steps, current, className, ...props }, ref) {
6413
- return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
6938
+ var Stepper = (0, import_react82.forwardRef)(function Stepper2({ steps, current, className, ...props }, ref) {
6939
+ return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
6414
6940
  "ol",
6415
6941
  {
6416
6942
  ref,
@@ -6422,19 +6948,19 @@ var Stepper = (0, import_react81.forwardRef)(function Stepper2({ steps, current,
6422
6948
  const id = typeof step === "string" ? void 0 : step.id;
6423
6949
  const state = stateFor(i, current);
6424
6950
  const connectorActive = i < current;
6425
- return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(import_react81.Fragment, { children: [
6426
- /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(
6951
+ return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(import_react82.Fragment, { children: [
6952
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(
6427
6953
  "li",
6428
6954
  {
6429
6955
  "aria-current": state === "current" ? "step" : void 0,
6430
6956
  className: "flex items-center gap-2",
6431
6957
  children: [
6432
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { "aria-hidden": true, className: cn(dotBase, dotStateClass[state]), children: state === "done" ? "\u2713" : i + 1 }),
6433
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: cn("text-[12px]", labelStateClass2[state]), children: label })
6958
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { "aria-hidden": true, className: cn(dotBase, dotStateClass[state]), children: state === "done" ? "\u2713" : i + 1 }),
6959
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: cn("text-[12px]", labelStateClass2[state]), children: label })
6434
6960
  ]
6435
6961
  }
6436
6962
  ),
6437
- i < steps.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
6963
+ i < steps.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
6438
6964
  "span",
6439
6965
  {
6440
6966
  "aria-hidden": true,
@@ -6449,13 +6975,13 @@ var Stepper = (0, import_react81.forwardRef)(function Stepper2({ steps, current,
6449
6975
  Stepper.displayName = "Stepper";
6450
6976
 
6451
6977
  // src/patterns/TabBar/TabBar.tsx
6452
- var import_react82 = require("react");
6453
- var import_jsx_runtime75 = require("react/jsx-runtime");
6454
- var TabBar = (0, import_react82.forwardRef)(function TabBar2({ items, value, defaultValue, onValueChange, className, ...props }, ref) {
6978
+ var import_react83 = require("react");
6979
+ var import_jsx_runtime76 = require("react/jsx-runtime");
6980
+ var TabBar = (0, import_react83.forwardRef)(function TabBar2({ items, value, defaultValue, onValueChange, className, ...props }, ref) {
6455
6981
  const isControlled = value !== void 0;
6456
- const [internalValue, setInternalValue] = (0, import_react82.useState)(defaultValue);
6982
+ const [internalValue, setInternalValue] = (0, import_react83.useState)(defaultValue);
6457
6983
  const activeId = isControlled ? value : internalValue;
6458
- const handleSelect = (0, import_react82.useCallback)(
6984
+ const handleSelect = (0, import_react83.useCallback)(
6459
6985
  (id, e) => {
6460
6986
  if (!isControlled) setInternalValue(id);
6461
6987
  onValueChange?.(id);
@@ -6463,7 +6989,7 @@ var TabBar = (0, import_react82.forwardRef)(function TabBar2({ items, value, def
6463
6989
  },
6464
6990
  [isControlled, onValueChange]
6465
6991
  );
6466
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
6992
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
6467
6993
  "nav",
6468
6994
  {
6469
6995
  ref,
@@ -6478,7 +7004,7 @@ var TabBar = (0, import_react82.forwardRef)(function TabBar2({ items, value, def
6478
7004
  children: items.map((item) => {
6479
7005
  const isActive = item.id === activeId;
6480
7006
  if (item.elevated) {
6481
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("div", { className: "grid place-items-center", children: /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(
7007
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "grid place-items-center", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(
6482
7008
  "button",
6483
7009
  {
6484
7010
  type: "button",
@@ -6494,13 +7020,13 @@ var TabBar = (0, import_react82.forwardRef)(function TabBar2({ items, value, def
6494
7020
  "disabled:cursor-not-allowed disabled:opacity-40"
6495
7021
  ),
6496
7022
  children: [
6497
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { "aria-hidden": true, children: item.icon }),
6498
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "sr-only", children: item.label })
7023
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { "aria-hidden": true, children: item.icon }),
7024
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "sr-only", children: item.label })
6499
7025
  ]
6500
7026
  }
6501
7027
  ) }, item.id);
6502
7028
  }
6503
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(
7029
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(
6504
7030
  "button",
6505
7031
  {
6506
7032
  type: "button",
@@ -6515,9 +7041,9 @@ var TabBar = (0, import_react82.forwardRef)(function TabBar2({ items, value, def
6515
7041
  isActive ? "text-accent-text" : "text-text-muted hover:text-text"
6516
7042
  ),
6517
7043
  children: [
6518
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("span", { className: "relative inline-flex", "aria-hidden": true, children: [
7044
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("span", { className: "relative inline-flex", "aria-hidden": true, children: [
6519
7045
  item.icon,
6520
- item.badge != null && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
7046
+ item.badge != null && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
6521
7047
  "span",
6522
7048
  {
6523
7049
  className: cn(
@@ -6528,9 +7054,9 @@ var TabBar = (0, import_react82.forwardRef)(function TabBar2({ items, value, def
6528
7054
  }
6529
7055
  )
6530
7056
  ] }),
6531
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("span", { className: "text-[10px] font-medium tracking-tight", children: [
7057
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("span", { className: "text-[10px] font-medium tracking-tight", children: [
6532
7058
  item.label,
6533
- item.badge != null && /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("span", { className: "sr-only", children: [
7059
+ item.badge != null && /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("span", { className: "sr-only", children: [
6534
7060
  ", ",
6535
7061
  item.badge,
6536
7062
  " unread"
@@ -6548,11 +7074,11 @@ TabBar.displayName = "TabBar";
6548
7074
 
6549
7075
  // src/patterns/Tabs/Tabs.tsx
6550
7076
  var RadixTabs = __toESM(require("@radix-ui/react-tabs"), 1);
6551
- var import_class_variance_authority13 = require("class-variance-authority");
6552
- var import_react83 = require("react");
6553
- var import_jsx_runtime76 = require("react/jsx-runtime");
6554
- var TabsVariantContext = (0, import_react83.createContext)("underline");
6555
- var tabsListStyles = (0, import_class_variance_authority13.cva)("", {
7077
+ var import_class_variance_authority14 = require("class-variance-authority");
7078
+ var import_react84 = require("react");
7079
+ var import_jsx_runtime77 = require("react/jsx-runtime");
7080
+ var TabsVariantContext = (0, import_react84.createContext)("underline");
7081
+ var tabsListStyles = (0, import_class_variance_authority14.cva)("", {
6556
7082
  variants: {
6557
7083
  variant: {
6558
7084
  underline: "flex gap-6 border-b border-border",
@@ -6560,7 +7086,7 @@ var tabsListStyles = (0, import_class_variance_authority13.cva)("", {
6560
7086
  }
6561
7087
  }
6562
7088
  });
6563
- var tabsTriggerStyles = (0, import_class_variance_authority13.cva)(
7089
+ var tabsTriggerStyles = (0, import_class_variance_authority14.cva)(
6564
7090
  "cursor-pointer outline-none transition-colors duration-(--duration-micro) focus-visible:ring-[3px] focus-visible:ring-accent-dim",
6565
7091
  {
6566
7092
  variants: {
@@ -6581,8 +7107,8 @@ var tabsTriggerStyles = (0, import_class_variance_authority13.cva)(
6581
7107
  }
6582
7108
  }
6583
7109
  );
6584
- var Tabs = (0, import_react83.forwardRef)(function Tabs2({ variant = "underline", className, ...props }, ref) {
6585
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(TabsVariantContext.Provider, { value: variant, children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
7110
+ var Tabs = (0, import_react84.forwardRef)(function Tabs2({ variant = "underline", className, ...props }, ref) {
7111
+ return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(TabsVariantContext.Provider, { value: variant, children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
6586
7112
  RadixTabs.Root,
6587
7113
  {
6588
7114
  ref,
@@ -6592,14 +7118,14 @@ var Tabs = (0, import_react83.forwardRef)(function Tabs2({ variant = "underline"
6592
7118
  ) });
6593
7119
  });
6594
7120
  Tabs.displayName = "Tabs";
6595
- var TabsList = (0, import_react83.forwardRef)(function TabsList2({ className, ...props }, ref) {
6596
- const variant = (0, import_react83.useContext)(TabsVariantContext);
6597
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(RadixTabs.List, { ref, className: cn(tabsListStyles({ variant }), className), ...props });
7121
+ var TabsList = (0, import_react84.forwardRef)(function TabsList2({ className, ...props }, ref) {
7122
+ const variant = (0, import_react84.useContext)(TabsVariantContext);
7123
+ return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(RadixTabs.List, { ref, className: cn(tabsListStyles({ variant }), className), ...props });
6598
7124
  });
6599
7125
  TabsList.displayName = "TabsList";
6600
- var Tab = (0, import_react83.forwardRef)(function Tab2({ className, ...props }, ref) {
6601
- const variant = (0, import_react83.useContext)(TabsVariantContext);
6602
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
7126
+ var Tab = (0, import_react84.forwardRef)(function Tab2({ className, ...props }, ref) {
7127
+ const variant = (0, import_react84.useContext)(TabsVariantContext);
7128
+ return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
6603
7129
  RadixTabs.Trigger,
6604
7130
  {
6605
7131
  ref,
@@ -6609,9 +7135,9 @@ var Tab = (0, import_react83.forwardRef)(function Tab2({ className, ...props },
6609
7135
  );
6610
7136
  });
6611
7137
  Tab.displayName = "Tab";
6612
- var TabsContent = (0, import_react83.forwardRef)(
7138
+ var TabsContent = (0, import_react84.forwardRef)(
6613
7139
  function TabsContent2({ className, ...props }, ref) {
6614
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
7140
+ return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
6615
7141
  RadixTabs.Content,
6616
7142
  {
6617
7143
  ref,
@@ -6627,8 +7153,8 @@ var TabsContent = (0, import_react83.forwardRef)(
6627
7153
  TabsContent.displayName = "TabsContent";
6628
7154
 
6629
7155
  // src/patterns/Timeline/Timeline.tsx
6630
- var import_react84 = require("react");
6631
- var import_jsx_runtime77 = require("react/jsx-runtime");
7156
+ var import_react85 = require("react");
7157
+ var import_jsx_runtime78 = require("react/jsx-runtime");
6632
7158
  var ringClass = {
6633
7159
  accent: "border-accent",
6634
7160
  ok: "border-ok",
@@ -6636,8 +7162,8 @@ var ringClass = {
6636
7162
  err: "border-err",
6637
7163
  muted: "border-text-dim"
6638
7164
  };
6639
- var Timeline = (0, import_react84.forwardRef)(function Timeline2({ events, className, children, ...props }, ref) {
6640
- return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
7165
+ var Timeline = (0, import_react85.forwardRef)(function Timeline2({ events, className, children, ...props }, ref) {
7166
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
6641
7167
  "ol",
6642
7168
  {
6643
7169
  ref,
@@ -6647,14 +7173,14 @@ var Timeline = (0, import_react84.forwardRef)(function Timeline2({ events, class
6647
7173
  className
6648
7174
  ),
6649
7175
  ...props,
6650
- children: events ? events.map((e, i) => /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(TimelineItem, { tone: e.tone, time: e.time, description: e.description, children: e.title }, i)) : children
7176
+ children: events ? events.map((e, i) => /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(TimelineItem, { tone: e.tone, time: e.time, description: e.description, children: e.title }, i)) : children
6651
7177
  }
6652
7178
  );
6653
7179
  });
6654
7180
  Timeline.displayName = "Timeline";
6655
- var TimelineItem = (0, import_react84.forwardRef)(function TimelineItem2({ tone = "accent", description, time, className, children, ...props }, ref) {
6656
- return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("li", { ref, className: cn("relative mb-[18px] last:mb-0", className), ...props, children: [
6657
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
7181
+ var TimelineItem = (0, import_react85.forwardRef)(function TimelineItem2({ tone = "accent", description, time, className, children, ...props }, ref) {
7182
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("li", { ref, className: cn("relative mb-[18px] last:mb-0", className), ...props, children: [
7183
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
6658
7184
  "span",
6659
7185
  {
6660
7186
  "aria-hidden": true,
@@ -6664,15 +7190,15 @@ var TimelineItem = (0, import_react84.forwardRef)(function TimelineItem2({ tone
6664
7190
  )
6665
7191
  }
6666
7192
  ),
6667
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: "text-[13px] font-medium", children }),
6668
- description && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: "text-text-muted text-[12px]", children: description }),
6669
- time && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: "text-text-dim mt-[2px] font-mono text-[10px]", children: time })
7193
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "text-[13px] font-medium", children }),
7194
+ description && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "text-text-muted text-[12px]", children: description }),
7195
+ time && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "text-text-dim mt-[2px] font-mono text-[10px]", children: time })
6670
7196
  ] });
6671
7197
  });
6672
7198
  TimelineItem.displayName = "TimelineItem";
6673
7199
 
6674
7200
  // src/patterns/Timeline/ActivityTimeline.tsx
6675
- var import_react85 = require("react");
7201
+ var import_react86 = require("react");
6676
7202
 
6677
7203
  // src/patterns/Timeline/formatRelative.ts
6678
7204
  var SECOND = 1e3;
@@ -6707,7 +7233,7 @@ function formatRelative(input, now = /* @__PURE__ */ new Date()) {
6707
7233
  }
6708
7234
 
6709
7235
  // src/patterns/Timeline/ActivityTimeline.tsx
6710
- var import_jsx_runtime78 = require("react/jsx-runtime");
7236
+ var import_jsx_runtime79 = require("react/jsx-runtime");
6711
7237
  var ringClass2 = {
6712
7238
  accent: "border-accent",
6713
7239
  ok: "border-ok",
@@ -6715,10 +7241,10 @@ var ringClass2 = {
6715
7241
  err: "border-err",
6716
7242
  muted: "border-text-dim"
6717
7243
  };
6718
- var ActivityTimeline = (0, import_react85.forwardRef)(
7244
+ var ActivityTimeline = (0, import_react86.forwardRef)(
6719
7245
  function ActivityTimeline2({ events, relativeNow, className, ...props }, ref) {
6720
7246
  const now = relativeNow ?? /* @__PURE__ */ new Date();
6721
- return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
7247
+ return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
6722
7248
  "ol",
6723
7249
  {
6724
7250
  ref,
@@ -6731,8 +7257,8 @@ var ActivityTimeline = (0, import_react85.forwardRef)(
6731
7257
  children: events.map((event) => {
6732
7258
  const tone = event.tone ?? "accent";
6733
7259
  const time = formatRelative(event.at, now);
6734
- return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("li", { className: "relative mb-4 last:mb-0", children: [
6735
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
7260
+ return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("li", { className: "relative mb-4 last:mb-0", children: [
7261
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
6736
7262
  "span",
6737
7263
  {
6738
7264
  "aria-hidden": true,
@@ -6742,16 +7268,16 @@ var ActivityTimeline = (0, import_react85.forwardRef)(
6742
7268
  )
6743
7269
  }
6744
7270
  ),
6745
- /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "flex items-baseline gap-2", children: [
6746
- event.icon && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { "aria-hidden": true, className: "text-text-muted font-mono text-[12px]", children: event.icon }),
6747
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "text-[13px] font-medium", children: event.title }),
6748
- time && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("time", { className: "text-text-dim ml-auto font-mono text-[10px]", children: time })
7271
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "flex items-baseline gap-2", children: [
7272
+ event.icon && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { "aria-hidden": true, className: "text-text-muted font-mono text-[12px]", children: event.icon }),
7273
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "text-[13px] font-medium", children: event.title }),
7274
+ time && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("time", { className: "text-text-dim ml-auto font-mono text-[10px]", children: time })
6749
7275
  ] }),
6750
- event.actor && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "text-text-muted mt-[2px] flex items-center gap-[6px] text-[12px]", children: [
6751
- event.actor.avatar && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { "aria-hidden": true, className: "inline-flex", children: event.actor.avatar }),
6752
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { children: event.actor.name })
7276
+ event.actor && /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "text-text-muted mt-[2px] flex items-center gap-[6px] text-[12px]", children: [
7277
+ event.actor.avatar && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { "aria-hidden": true, className: "inline-flex", children: event.actor.avatar }),
7278
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { children: event.actor.name })
6753
7279
  ] }),
6754
- event.payload && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "border-border bg-panel-2 mt-2 rounded-md border px-3 py-2 font-mono text-[11px] leading-[1.5]", children: event.payload })
7280
+ event.payload && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "border-border bg-panel-2 mt-2 rounded-md border px-3 py-2 font-mono text-[11px] leading-[1.5]", children: event.payload })
6755
7281
  ] }, event.id);
6756
7282
  })
6757
7283
  }
@@ -6761,9 +7287,9 @@ var ActivityTimeline = (0, import_react85.forwardRef)(
6761
7287
  ActivityTimeline.displayName = "ActivityTimeline";
6762
7288
 
6763
7289
  // src/patterns/Topbar/Topbar.tsx
6764
- var import_react86 = require("react");
6765
- var import_jsx_runtime79 = require("react/jsx-runtime");
6766
- var Topbar = (0, import_react86.forwardRef)(function Topbar2({
7290
+ var import_react87 = require("react");
7291
+ var import_jsx_runtime80 = require("react/jsx-runtime");
7292
+ var Topbar = (0, import_react87.forwardRef)(function Topbar2({
6767
7293
  title,
6768
7294
  eyebrow,
6769
7295
  leading,
@@ -6777,7 +7303,7 @@ var Topbar = (0, import_react86.forwardRef)(function Topbar2({
6777
7303
  }, ref) {
6778
7304
  const isTouch = density === "touch";
6779
7305
  const backHandler = typeof back === "function" ? back : back ? onBack : void 0;
6780
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(
7306
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
6781
7307
  "header",
6782
7308
  {
6783
7309
  ref,
@@ -6788,7 +7314,7 @@ var Topbar = (0, import_react86.forwardRef)(function Topbar2({
6788
7314
  ),
6789
7315
  ...props,
6790
7316
  children: [
6791
- isTouch && back && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
7317
+ isTouch && back && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
6792
7318
  "button",
6793
7319
  {
6794
7320
  type: "button",
@@ -6802,7 +7328,7 @@ var Topbar = (0, import_react86.forwardRef)(function Topbar2({
6802
7328
  "hover:bg-panel-2 h-touch w-touch",
6803
7329
  "focus-visible:ring-accent-dim outline-none focus-visible:ring-[3px]"
6804
7330
  ),
6805
- children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
7331
+ children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
6806
7332
  "svg",
6807
7333
  {
6808
7334
  width: "20",
@@ -6812,15 +7338,15 @@ var Topbar = (0, import_react86.forwardRef)(function Topbar2({
6812
7338
  stroke: "currentColor",
6813
7339
  strokeWidth: "2",
6814
7340
  "aria-hidden": true,
6815
- children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("path", { d: "m15 18-6-6 6-6" })
7341
+ children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("path", { d: "m15 18-6-6 6-6" })
6816
7342
  }
6817
7343
  )
6818
7344
  }
6819
7345
  ),
6820
7346
  leading,
6821
- (title || isTouch && eyebrow) && /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: cn("min-w-0", isTouch && "flex-1"), children: [
6822
- isTouch && eyebrow && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "text-m-eyebrow text-accent font-mono tracking-wide uppercase", children: eyebrow }),
6823
- title && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
7347
+ (title || isTouch && eyebrow) && /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: cn("min-w-0", isTouch && "flex-1"), children: [
7348
+ isTouch && eyebrow && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "text-m-eyebrow text-accent font-mono tracking-wide uppercase", children: eyebrow }),
7349
+ title && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
6824
7350
  "div",
6825
7351
  {
6826
7352
  className: cn(
@@ -6830,8 +7356,8 @@ var Topbar = (0, import_react86.forwardRef)(function Topbar2({
6830
7356
  }
6831
7357
  )
6832
7358
  ] }),
6833
- !isTouch && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "flex flex-1 items-center" }),
6834
- actions && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: cn("flex items-center", isTouch ? "gap-1" : "gap-3"), children: actions }),
7359
+ !isTouch && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "flex flex-1 items-center" }),
7360
+ actions && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: cn("flex items-center", isTouch ? "gap-1" : "gap-3"), children: actions }),
6835
7361
  children
6836
7362
  ]
6837
7363
  }
@@ -6840,9 +7366,9 @@ var Topbar = (0, import_react86.forwardRef)(function Topbar2({
6840
7366
  Topbar.displayName = "Topbar";
6841
7367
 
6842
7368
  // src/patterns/Tree/Tree.tsx
6843
- var import_react87 = require("react");
7369
+ var import_react88 = require("react");
6844
7370
  var import_react_dom = require("react-dom");
6845
- var import_jsx_runtime80 = require("react/jsx-runtime");
7371
+ var import_jsx_runtime81 = require("react/jsx-runtime");
6846
7372
  var EMPTY_SET2 = /* @__PURE__ */ new Set();
6847
7373
  function flattenVisible(items, expanded, level, parentId, out) {
6848
7374
  for (const item of items) {
@@ -6853,7 +7379,7 @@ function flattenVisible(items, expanded, level, parentId, out) {
6853
7379
  }
6854
7380
  }
6855
7381
  }
6856
- var Tree = (0, import_react87.forwardRef)(function Tree2({
7382
+ var Tree = (0, import_react88.forwardRef)(function Tree2({
6857
7383
  items,
6858
7384
  expanded: expandedProp,
6859
7385
  defaultExpanded,
@@ -6876,24 +7402,24 @@ var Tree = (0, import_react87.forwardRef)(function Tree2({
6876
7402
  onChange: onValueChange
6877
7403
  });
6878
7404
  const expandedSet = expanded ?? EMPTY_SET2;
6879
- const flatVisible = (0, import_react87.useMemo)(() => {
7405
+ const flatVisible = (0, import_react88.useMemo)(() => {
6880
7406
  const out = [];
6881
7407
  flattenVisible(items, expandedSet, 1, null, out);
6882
7408
  return out;
6883
7409
  }, [items, expandedSet]);
6884
- const [activeId, setActiveId] = (0, import_react87.useState)(null);
6885
- (0, import_react87.useEffect)(() => {
7410
+ const [activeId, setActiveId] = (0, import_react88.useState)(null);
7411
+ (0, import_react88.useEffect)(() => {
6886
7412
  if (activeId && !flatVisible.some((f) => f.id === activeId)) {
6887
7413
  setActiveId(null);
6888
7414
  }
6889
7415
  }, [activeId, flatVisible]);
6890
- const tabStopId = (0, import_react87.useMemo)(() => {
7416
+ const tabStopId = (0, import_react88.useMemo)(() => {
6891
7417
  if (activeId && flatVisible.some((f) => f.id === activeId)) return activeId;
6892
7418
  if (value && flatVisible.some((f) => f.id === value)) return value;
6893
7419
  return flatVisible[0]?.id ?? null;
6894
7420
  }, [activeId, flatVisible, value]);
6895
- const listRef = (0, import_react87.useRef)(null);
6896
- const setRefs = (0, import_react87.useCallback)(
7421
+ const listRef = (0, import_react88.useRef)(null);
7422
+ const setRefs = (0, import_react88.useCallback)(
6897
7423
  (node) => {
6898
7424
  listRef.current = node;
6899
7425
  if (typeof ref === "function") ref(node);
@@ -6901,20 +7427,20 @@ var Tree = (0, import_react87.forwardRef)(function Tree2({
6901
7427
  },
6902
7428
  [ref]
6903
7429
  );
6904
- const focusItem = (0, import_react87.useCallback)((id) => {
7430
+ const focusItem = (0, import_react88.useCallback)((id) => {
6905
7431
  const root = listRef.current;
6906
7432
  if (!root) return;
6907
7433
  const el = root.querySelector(`[data-treeitem-id="${CSS.escape(id)}"]`);
6908
7434
  el?.focus();
6909
7435
  }, []);
6910
- const moveActive = (0, import_react87.useCallback)(
7436
+ const moveActive = (0, import_react88.useCallback)(
6911
7437
  (id) => {
6912
7438
  (0, import_react_dom.flushSync)(() => setActiveId(id));
6913
7439
  focusItem(id);
6914
7440
  },
6915
7441
  [focusItem]
6916
7442
  );
6917
- const toggle = (0, import_react87.useCallback)(
7443
+ const toggle = (0, import_react88.useCallback)(
6918
7444
  (id) => {
6919
7445
  setExpanded((prev) => {
6920
7446
  const next = new Set(prev ?? EMPTY_SET2);
@@ -6925,7 +7451,7 @@ var Tree = (0, import_react87.forwardRef)(function Tree2({
6925
7451
  },
6926
7452
  [setExpanded]
6927
7453
  );
6928
- const expand = (0, import_react87.useCallback)(
7454
+ const expand = (0, import_react88.useCallback)(
6929
7455
  (id) => {
6930
7456
  setExpanded((prev) => {
6931
7457
  const base = prev ?? EMPTY_SET2;
@@ -6937,7 +7463,7 @@ var Tree = (0, import_react87.forwardRef)(function Tree2({
6937
7463
  },
6938
7464
  [setExpanded]
6939
7465
  );
6940
- const collapse = (0, import_react87.useCallback)(
7466
+ const collapse = (0, import_react88.useCallback)(
6941
7467
  (id) => {
6942
7468
  setExpanded((prev) => {
6943
7469
  const base = prev ?? EMPTY_SET2;
@@ -6949,13 +7475,13 @@ var Tree = (0, import_react87.forwardRef)(function Tree2({
6949
7475
  },
6950
7476
  [setExpanded]
6951
7477
  );
6952
- const selectItem = (0, import_react87.useCallback)(
7478
+ const selectItem = (0, import_react88.useCallback)(
6953
7479
  (id) => {
6954
7480
  setValue(id);
6955
7481
  },
6956
7482
  [setValue]
6957
7483
  );
6958
- const handleKeyDown = (0, import_react87.useCallback)(
7484
+ const handleKeyDown = (0, import_react88.useCallback)(
6959
7485
  (e) => {
6960
7486
  onKeyDown?.(e);
6961
7487
  if (e.defaultPrevented) return;
@@ -7035,7 +7561,7 @@ var Tree = (0, import_react87.forwardRef)(function Tree2({
7035
7561
  toggle
7036
7562
  ]
7037
7563
  );
7038
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7564
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
7039
7565
  "ul",
7040
7566
  {
7041
7567
  ref: setRefs,
@@ -7043,7 +7569,7 @@ var Tree = (0, import_react87.forwardRef)(function Tree2({
7043
7569
  className: cn("flex flex-col gap-px text-[12px]", className),
7044
7570
  onKeyDown: handleKeyDown,
7045
7571
  ...props,
7046
- children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7572
+ children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
7047
7573
  TreeItemRow,
7048
7574
  {
7049
7575
  item,
@@ -7078,8 +7604,8 @@ function TreeItemRow({
7078
7604
  const isExpanded = hasChildren && expanded.has(item.id);
7079
7605
  const isSelected = selected === item.id;
7080
7606
  const isTabStop = tabStopId === item.id;
7081
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("li", { role: "none", children: [
7082
- /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
7607
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("li", { role: "none", children: [
7608
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(
7083
7609
  "div",
7084
7610
  {
7085
7611
  role: "treeitem",
@@ -7102,14 +7628,14 @@ function TreeItemRow({
7102
7628
  isSelected ? "bg-accent-dim text-accent" : "text-text hover:bg-panel-2"
7103
7629
  ),
7104
7630
  children: [
7105
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { "aria-hidden": true, className: "text-text-dim grid w-3 place-items-center text-[10px]", children: hasChildren ? isExpanded ? "\u25BE" : "\u25B8" : "" }),
7106
- item.icon && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { "aria-hidden": true, className: "text-[12px] opacity-80", children: item.icon }),
7107
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "flex-1 truncate", children: item.label }),
7631
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { "aria-hidden": true, className: "text-text-dim grid w-3 place-items-center text-[10px]", children: hasChildren ? isExpanded ? "\u25BE" : "\u25B8" : "" }),
7632
+ item.icon && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { "aria-hidden": true, className: "text-[12px] opacity-80", children: item.icon }),
7633
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "flex-1 truncate", children: item.label }),
7108
7634
  item.trailing
7109
7635
  ]
7110
7636
  }
7111
7637
  ),
7112
- hasChildren && isExpanded && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("ul", { role: "group", className: "flex flex-col gap-px", children: (item.children ?? []).map((child) => /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7638
+ hasChildren && isExpanded && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("ul", { role: "group", className: "flex flex-col gap-px", children: (item.children ?? []).map((child) => /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
7113
7639
  TreeItemRow,
7114
7640
  {
7115
7641
  item: child,
@@ -7127,10 +7653,10 @@ function TreeItemRow({
7127
7653
  }
7128
7654
 
7129
7655
  // src/patterns/WizardDialog/WizardDialog.tsx
7130
- var RadixDialog6 = __toESM(require("@radix-ui/react-dialog"), 1);
7131
- var import_react88 = require("react");
7132
- var import_jsx_runtime81 = require("react/jsx-runtime");
7133
- var WizardDialog = (0, import_react88.forwardRef)(function WizardDialog2({
7656
+ var RadixDialog7 = __toESM(require("@radix-ui/react-dialog"), 1);
7657
+ var import_react89 = require("react");
7658
+ var import_jsx_runtime82 = require("react/jsx-runtime");
7659
+ var WizardDialog = (0, import_react89.forwardRef)(function WizardDialog2({
7134
7660
  open,
7135
7661
  defaultOpen,
7136
7662
  onOpenChange,
@@ -7146,19 +7672,19 @@ var WizardDialog = (0, import_react88.forwardRef)(function WizardDialog2({
7146
7672
  cancelLabel,
7147
7673
  onCancel
7148
7674
  }, ref) {
7149
- const [current, setCurrent] = (0, import_react88.useState)(initialStep);
7675
+ const [current, setCurrent] = (0, import_react89.useState)(initialStep);
7150
7676
  const total = steps.length;
7151
7677
  const safeCurrent = Math.min(current, Math.max(0, total - 1));
7152
7678
  const step = steps[safeCurrent];
7153
- const goTo = (0, import_react88.useCallback)(
7679
+ const goTo = (0, import_react89.useCallback)(
7154
7680
  (index) => {
7155
7681
  setCurrent(Math.min(Math.max(0, index), Math.max(0, total - 1)));
7156
7682
  },
7157
7683
  [total]
7158
7684
  );
7159
- const goNext = (0, import_react88.useCallback)(() => setCurrent((c) => Math.min(c + 1, total - 1)), [total]);
7160
- const goBack = (0, import_react88.useCallback)(() => setCurrent((c) => Math.max(c - 1, 0)), []);
7161
- const ctx = (0, import_react88.useMemo)(
7685
+ const goNext = (0, import_react89.useCallback)(() => setCurrent((c) => Math.min(c + 1, total - 1)), [total]);
7686
+ const goBack = (0, import_react89.useCallback)(() => setCurrent((c) => Math.max(c - 1, 0)), []);
7687
+ const ctx = (0, import_react89.useMemo)(
7162
7688
  () => ({
7163
7689
  current: safeCurrent,
7164
7690
  total,
@@ -7170,7 +7696,7 @@ var WizardDialog = (0, import_react88.forwardRef)(function WizardDialog2({
7170
7696
  }),
7171
7697
  [safeCurrent, total, goNext, goBack, goTo]
7172
7698
  );
7173
- const stepperSteps = (0, import_react88.useMemo)(() => steps.map((s) => ({ id: s.id, label: s.label })), [steps]);
7699
+ const stepperSteps = (0, import_react89.useMemo)(() => steps.map((s) => ({ id: s.id, label: s.label })), [steps]);
7174
7700
  if (!step) return null;
7175
7701
  const canAdvance = step.canAdvance ? step.canAdvance(ctx) : true;
7176
7702
  const body = typeof step.content === "function" ? step.content(ctx) : step.content;
@@ -7181,36 +7707,36 @@ var WizardDialog = (0, import_react88.forwardRef)(function WizardDialog2({
7181
7707
  goNext();
7182
7708
  }
7183
7709
  };
7184
- return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(DialogRoot, { open, defaultOpen, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(
7710
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(DialogRoot, { open, defaultOpen, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(
7185
7711
  DialogContent,
7186
7712
  {
7187
7713
  ref,
7188
7714
  width,
7189
7715
  ...description ? {} : { "aria-describedby": void 0 },
7190
7716
  children: [
7191
- title ? /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(WizardTitle, { children: title }) : (
7717
+ title ? /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(WizardTitle, { children: title }) : (
7192
7718
  // Radix Dialog requires a Title for assistive tech and warns in dev
7193
7719
  // mode without one. Fall back to a visually-hidden generic title so
7194
7720
  // the contract is met even when no title prop is supplied.
7195
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(RadixDialog6.Title, { className: "sr-only", children: "Wizard" })
7721
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(RadixDialog7.Title, { className: "sr-only", children: "Wizard" })
7196
7722
  ),
7197
- description && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(WizardDescription, { children: description }),
7198
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "mb-5", children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Stepper, { steps: stepperSteps, current: safeCurrent }) }),
7199
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "mb-5", children: body }),
7200
- /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "flex justify-end gap-2", children: [
7201
- cancelLabel && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Button, { type: "button", variant: "ghost", onClick: onCancel, children: cancelLabel }),
7202
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Button, { type: "button", variant: "secondary", onClick: goBack, disabled: ctx.isFirst, children: backLabel }),
7203
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Button, { type: "button", variant: "primary", onClick: handlePrimary, disabled: !canAdvance, children: ctx.isLast ? completeLabel : nextLabel })
7723
+ description && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(WizardDescription, { children: description }),
7724
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "mb-5", children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(Stepper, { steps: stepperSteps, current: safeCurrent }) }),
7725
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "mb-5", children: body }),
7726
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "flex justify-end gap-2", children: [
7727
+ cancelLabel && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(Button, { type: "button", variant: "ghost", onClick: onCancel, children: cancelLabel }),
7728
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(Button, { type: "button", variant: "secondary", onClick: goBack, disabled: ctx.isFirst, children: backLabel }),
7729
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(Button, { type: "button", variant: "primary", onClick: handlePrimary, disabled: !canAdvance, children: ctx.isLast ? completeLabel : nextLabel })
7204
7730
  ] })
7205
7731
  ]
7206
7732
  }
7207
7733
  ) });
7208
7734
  });
7209
7735
  function WizardTitle({ children }) {
7210
- return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(RadixDialog6.Title, { className: "mb-2 text-[16px] font-medium", children });
7736
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(RadixDialog7.Title, { className: "mb-2 text-[16px] font-medium", children });
7211
7737
  }
7212
7738
  function WizardDescription({ children }) {
7213
- return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(RadixDialog6.Description, { className: "text-text-muted mb-4 text-[13px] leading-[1.55]", children });
7739
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(RadixDialog7.Description, { className: "text-text-muted mb-4 text-[13px] leading-[1.55]", children });
7214
7740
  }
7215
7741
  WizardDialog.displayName = "WizardDialog";
7216
7742
  // Annotate the CommonJS export names for ESM import in node:
@@ -7288,6 +7814,7 @@ WizardDialog.displayName = "WizardDialog";
7288
7814
  LargeTitle,
7289
7815
  Lightbox,
7290
7816
  ListingCard,
7817
+ ListingDetail,
7291
7818
  MenuCheckboxItem,
7292
7819
  MenuItem,
7293
7820
  MenuSeparator,