@contractspec/lib.design-system 1.61.0 → 1.62.0

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.
@@ -527,7 +527,6 @@ var formRenderer = createFormRenderer({
527
527
  })
528
528
  });
529
529
  // src/components/atoms/Cta.tsx
530
- import * as React3 from "react";
531
530
  import { cva } from "class-variance-authority";
532
531
 
533
532
  // src/components/atoms/ButtonLink.tsx
@@ -591,7 +590,7 @@ var _ctaVariants = cva("", {
591
590
  },
592
591
  defaultVariants: { size: "touch", emphasis: "default" }
593
592
  });
594
- var Cta = React3.forwardRef(({
593
+ function Cta({
595
594
  capture,
596
595
  ctaName,
597
596
  as = "button",
@@ -601,7 +600,7 @@ var Cta = React3.forwardRef(({
601
600
  emphasis = "default",
602
601
  children,
603
602
  ...props
604
- }, _ref) => {
603
+ }) {
605
604
  const handleClick = (e) => {
606
605
  if (ctaName) {
607
606
  try {
@@ -630,8 +629,7 @@ var Cta = React3.forwardRef(({
630
629
  ...props,
631
630
  children
632
631
  }, undefined, false, undefined, this);
633
- });
634
- Cta.displayName = "Cta";
632
+ }
635
633
  // src/components/atoms/Link.tsx
636
634
  import { jsxDEV as jsxDEV8 } from "react/jsx-dev-runtime";
637
635
  function Link2({ children, ...props }) {
@@ -1973,7 +1971,7 @@ function FeatureCarousel({
1973
1971
  }, undefined, false, undefined, this);
1974
1972
  }
1975
1973
  // src/components/organisms/MarketingHeader.tsx
1976
- import * as React7 from "react";
1974
+ import * as React6 from "react";
1977
1975
  import { cn as cn10 } from "@contractspec/lib.ui-kit-web/ui/utils";
1978
1976
  import {
1979
1977
  NavigationMenu as Nav2,
@@ -2075,12 +2073,12 @@ function MobileNavMenu({
2075
2073
  }
2076
2074
 
2077
2075
  // src/components/molecules/CommandSearchTrigger.tsx
2078
- import * as React5 from "react";
2076
+ import * as React4 from "react";
2079
2077
  import { SearchIcon } from "lucide-react";
2080
2078
  import { cn as cn9 } from "@contractspec/lib.ui-kit-web/ui/utils";
2081
2079
 
2082
2080
  // src/components/molecules/CommandPalette.tsx
2083
- import * as React4 from "react";
2081
+ import * as React3 from "react";
2084
2082
  import {
2085
2083
  CommandDialog,
2086
2084
  CommandEmpty,
@@ -2099,11 +2097,11 @@ function CommandPalette({
2099
2097
  groups,
2100
2098
  placeholder = "Type a command or search…"
2101
2099
  }) {
2102
- const [internalOpen, setInternalOpen] = React4.useState(false);
2100
+ const [internalOpen, setInternalOpen] = React3.useState(false);
2103
2101
  const isControlled = typeof open === "boolean";
2104
2102
  const visible = isControlled ? open : internalOpen;
2105
2103
  const setVisible = isControlled && onOpenChange ? onOpenChange : setInternalOpen;
2106
- React4.useEffect(() => {
2104
+ React3.useEffect(() => {
2107
2105
  const handler = (e) => {
2108
2106
  if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k") {
2109
2107
  e.preventDefault();
@@ -2155,8 +2153,8 @@ function CommandSearchTrigger({
2155
2153
  placeholder = "Search…",
2156
2154
  compact = false
2157
2155
  }) {
2158
- const [open, setOpen] = React5.useState(false);
2159
- React5.useEffect(() => {
2156
+ const [open, setOpen] = React4.useState(false);
2157
+ React4.useEffect(() => {
2160
2158
  const handler = (e) => {
2161
2159
  if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k") {
2162
2160
  e.preventDefault();
@@ -2200,7 +2198,7 @@ function CommandSearchTrigger({
2200
2198
  }
2201
2199
 
2202
2200
  // src/components/molecules/LangSwitchDropdown.tsx
2203
- import * as React6 from "react";
2201
+ import * as React5 from "react";
2204
2202
  import { Globe } from "lucide-react";
2205
2203
  import {
2206
2204
  DropdownMenu as DropdownMenu2,
@@ -2215,7 +2213,7 @@ function LangSwitchDropdown({
2215
2213
  onChange,
2216
2214
  className
2217
2215
  }) {
2218
- const [open, setOpen] = React6.useState(false);
2216
+ const [open, setOpen] = React5.useState(false);
2219
2217
  const current = options.find((o) => o.code === value);
2220
2218
  return /* @__PURE__ */ jsxDEV30(DropdownMenu2, {
2221
2219
  open,
@@ -2278,7 +2276,7 @@ function MarketingHeader({
2278
2276
  commandPaletteGroups,
2279
2277
  langSwitchProps
2280
2278
  }) {
2281
- const [open, setOpen] = React7.useState(false);
2279
+ const [open, setOpen] = React6.useState(false);
2282
2280
  return /* @__PURE__ */ jsxDEV31(HStack2, {
2283
2281
  as: "header",
2284
2282
  className: cn10("bg-background/95 supports-backdrop-filter:bg-background/60 sticky top-0 z-50 w-full border-b backdrop-blur-xs", className),
@@ -2505,7 +2503,7 @@ function MarketingHeaderDesktop({
2505
2503
  }, undefined, false, undefined, this);
2506
2504
  }
2507
2505
  // src/components/organisms/MarketingHeaderMobile.tsx
2508
- import * as React8 from "react";
2506
+ import * as React7 from "react";
2509
2507
  import { cn as cn12 } from "@contractspec/lib.ui-kit-web/ui/utils";
2510
2508
  import {
2511
2509
  Sheet as Sheet3,
@@ -2526,7 +2524,7 @@ function MarketingHeaderMobile({
2526
2524
  className,
2527
2525
  right
2528
2526
  }) {
2529
- const [open, setOpen] = React8.useState(false);
2527
+ const [open, setOpen] = React7.useState(false);
2530
2528
  return /* @__PURE__ */ jsxDEV33("div", {
2531
2529
  className: cn12("bg-background/95 supports-backdrop-filter:bg-background/60 w-full border-b backdrop-blur-xs md:hidden", className),
2532
2530
  children: /* @__PURE__ */ jsxDEV33("div", {
@@ -2945,7 +2943,7 @@ function MarketingComparisonSection({
2945
2943
  }, undefined, false, undefined, this);
2946
2944
  }
2947
2945
  // src/components/organisms/AppLayout.tsx
2948
- import * as React9 from "react";
2946
+ import * as React8 from "react";
2949
2947
  import { cn as cn17 } from "@contractspec/lib.ui-kit-web/ui/utils";
2950
2948
  import { Separator as Separator4 } from "@contractspec/lib.ui-kit-web/ui/separator";
2951
2949
  import {
@@ -2990,7 +2988,7 @@ function AppLayout({
2990
2988
  className: "mb-2",
2991
2989
  children: /* @__PURE__ */ jsxDEV41(Breadcrumb, {
2992
2990
  children: /* @__PURE__ */ jsxDEV41(BreadcrumbList, {
2993
- children: breadcrumb.items.map((it, idx) => /* @__PURE__ */ jsxDEV41(React9.Fragment, {
2991
+ children: breadcrumb.items.map((it, idx) => /* @__PURE__ */ jsxDEV41(React8.Fragment, {
2994
2992
  children: [
2995
2993
  /* @__PURE__ */ jsxDEV41(BreadcrumbItem, {
2996
2994
  children: it.href ? /* @__PURE__ */ jsxDEV41(BreadcrumbLink, {
@@ -3023,7 +3021,7 @@ function AppLayout({
3023
3021
  }, undefined, true, undefined, this);
3024
3022
  }
3025
3023
  // src/components/organisms/AcademyLayout.tsx
3026
- import * as React10 from "react";
3024
+ import * as React9 from "react";
3027
3025
  import { cn as cn18 } from "@contractspec/lib.ui-kit-web/ui/utils";
3028
3026
  import {
3029
3027
  Breadcrumb as Breadcrumb2,
@@ -3062,7 +3060,7 @@ function AcademyLayout({
3062
3060
  className: "mb-4",
3063
3061
  children: /* @__PURE__ */ jsxDEV42(Breadcrumb2, {
3064
3062
  children: /* @__PURE__ */ jsxDEV42(BreadcrumbList2, {
3065
- children: breadcrumb.items.map((it, idx) => /* @__PURE__ */ jsxDEV42(React10.Fragment, {
3063
+ children: breadcrumb.items.map((it, idx) => /* @__PURE__ */ jsxDEV42(React9.Fragment, {
3066
3064
  children: [
3067
3065
  /* @__PURE__ */ jsxDEV42(BreadcrumbItem2, {
3068
3066
  children: it.href ? /* @__PURE__ */ jsxDEV42(BreadcrumbLink2, {
@@ -3182,7 +3180,7 @@ function NavBrand({
3182
3180
  }, undefined, false, undefined, this) : content;
3183
3181
  }
3184
3182
  // src/components/molecules/Breadcrumbs.tsx
3185
- import * as React11 from "react";
3183
+ import * as React10 from "react";
3186
3184
  import {
3187
3185
  Breadcrumb as Root,
3188
3186
  BreadcrumbItem as BreadcrumbItem3,
@@ -3198,7 +3196,7 @@ function Breadcrumbs({ items }) {
3198
3196
  return null;
3199
3197
  return /* @__PURE__ */ jsxDEV46(Root, {
3200
3198
  children: /* @__PURE__ */ jsxDEV46(BreadcrumbList3, {
3201
- children: items.map((it, idx) => /* @__PURE__ */ jsxDEV46(React11.Fragment, {
3199
+ children: items.map((it, idx) => /* @__PURE__ */ jsxDEV46(React10.Fragment, {
3202
3200
  children: [
3203
3201
  /* @__PURE__ */ jsxDEV46(BreadcrumbItem3, {
3204
3202
  children: it.href ? /* @__PURE__ */ jsxDEV46(BreadcrumbLink3, {
@@ -3268,7 +3266,7 @@ function StatusChip({
3268
3266
  }
3269
3267
  }
3270
3268
  // src/components/molecules/EntityCard.tsx
3271
- import * as React12 from "react";
3269
+ import * as React11 from "react";
3272
3270
  import { Card as Card5, CardContent as CardContent5 } from "@contractspec/lib.ui-kit-web/ui/card";
3273
3271
  import { cva as cva13 } from "class-variance-authority";
3274
3272
  import { cn as cn22 } from "@contractspec/lib.ui-kit-web/ui/utils";
@@ -3337,7 +3335,7 @@ function EntityCard({
3337
3335
  onClick,
3338
3336
  ...cardProps
3339
3337
  }) {
3340
- const [isExpanded, setIsExpanded] = React12.useState(defaultExpanded);
3338
+ const [isExpanded, setIsExpanded] = React11.useState(defaultExpanded);
3341
3339
  const Wrapper = href ? "a" : "div";
3342
3340
  const isInteractive = interactive ?? !!(onClick || href);
3343
3341
  const handleExpandClick = (e) => {
@@ -3983,13 +3981,13 @@ function HeroSection({
3983
3981
  }, undefined, false, undefined, this);
3984
3982
  }
3985
3983
  // src/platform/useResponsive.ts
3986
- import * as React13 from "react";
3984
+ import * as React12 from "react";
3987
3985
  "use client";
3988
3986
  var DEFAULT = { sm: 640, md: 768, lg: 1024, xl: 1280 };
3989
3987
  function useResponsive(custom) {
3990
- const bp = React13.useMemo(() => ({ ...DEFAULT, ...custom }), [custom]);
3991
- const [width, setWidth] = React13.useState(typeof window !== "undefined" ? window.innerWidth : bp.md);
3992
- React13.useEffect(() => {
3988
+ const bp = React12.useMemo(() => ({ ...DEFAULT, ...custom }), [custom]);
3989
+ const [width, setWidth] = React12.useState(typeof window !== "undefined" ? window.innerWidth : bp.md);
3990
+ React12.useEffect(() => {
3993
3991
  if (typeof window === "undefined")
3994
3992
  return;
3995
3993
  const onResize = () => setWidth(window.innerWidth);
@@ -4133,7 +4131,7 @@ function PricingSection({
4133
4131
  }, undefined, false, undefined, this);
4134
4132
  }
4135
4133
  // src/components/organisms/FAQSection.tsx
4136
- import * as React14 from "react";
4134
+ import * as React13 from "react";
4137
4135
  import { VStack as VStack10 } from "@contractspec/lib.ui-kit-web/ui/stack";
4138
4136
  import {
4139
4137
  Accordion,
@@ -4154,7 +4152,7 @@ function FAQSection({
4154
4152
  accordionClassName
4155
4153
  }) {
4156
4154
  const hasItems = Array.isArray(items) && items.length > 0;
4157
- const defaultValue = React14.useMemo(() => {
4155
+ const defaultValue = React13.useMemo(() => {
4158
4156
  if (!hasItems)
4159
4157
  return;
4160
4158
  if (accordionType === "multiple")
@@ -4453,7 +4451,7 @@ function ListTablePage({
4453
4451
  }, undefined, true, undefined, this);
4454
4452
  }
4455
4453
  // src/components/molecules/FiltersToolbar.tsx
4456
- import * as React15 from "react";
4454
+ import * as React14 from "react";
4457
4455
  import { cn as cn24 } from "@contractspec/lib.ui-kit-web/ui/utils";
4458
4456
  import { Badge as Badge3 } from "@contractspec/lib.ui-kit-web/ui/badge";
4459
4457
  import { jsxDEV as jsxDEV69 } from "react/jsx-dev-runtime";
@@ -4469,11 +4467,11 @@ function FiltersToolbar({
4469
4467
  activeChips = [],
4470
4468
  onClearAll
4471
4469
  }) {
4472
- const [q, setQ] = React15.useState(searchValue ?? "");
4473
- React15.useEffect(() => {
4470
+ const [q, setQ] = React14.useState(searchValue ?? "");
4471
+ React14.useEffect(() => {
4474
4472
  setQ(searchValue ?? "");
4475
4473
  }, [searchValue]);
4476
- React15.useEffect(() => {
4474
+ React14.useEffect(() => {
4477
4475
  if (!onSearchChange)
4478
4476
  return;
4479
4477
  const id = setTimeout(() => onSearchChange(q), debounceMs);
@@ -4546,12 +4544,12 @@ function FiltersToolbar({
4546
4544
  }, undefined, true, undefined, this);
4547
4545
  }
4548
4546
  // src/components/templates/lists/ListPageTemplate/index.web.tsx
4549
- import * as React17 from "react";
4547
+ import * as React16 from "react";
4550
4548
  import { cva as cva20 } from "class-variance-authority";
4551
4549
  import { cn as cn25 } from "@contractspec/lib.ui-kit-web/ui/utils";
4552
4550
 
4553
4551
  // src/components/molecules/AiLinkButton.tsx
4554
- import * as React16 from "react";
4552
+ import * as React15 from "react";
4555
4553
  import {
4556
4554
  DropdownMenu as DropdownMenu3,
4557
4555
  DropdownMenuContent as DropdownMenuContent3,
@@ -4573,19 +4571,19 @@ function buildProviderUrl(provider, href) {
4573
4571
  }
4574
4572
  }
4575
4573
  function AiLinkButton({ href, className }) {
4576
- const copyLink = React16.useCallback(() => {
4574
+ const copyLink = React15.useCallback(() => {
4577
4575
  try {
4578
4576
  navigator.clipboard?.writeText(href).catch(() => {});
4579
4577
  } catch (_e) {}
4580
4578
  }, [href]);
4581
- const openChatGPT = React16.useCallback(() => {
4579
+ const openChatGPT = React15.useCallback(() => {
4582
4580
  const url = buildProviderUrl("chatgpt", href);
4583
4581
  try {
4584
4582
  navigator.clipboard?.writeText(href).catch(() => {});
4585
4583
  } catch (_e) {}
4586
4584
  window.open(url, "_blank", "noopener,noreferrer");
4587
4585
  }, [href]);
4588
- const openClaude = React16.useCallback(() => {
4586
+ const openClaude = React15.useCallback(() => {
4589
4587
  const url = buildProviderUrl("claude", href);
4590
4588
  try {
4591
4589
  navigator.clipboard?.writeText(href).catch(() => {});
@@ -4723,7 +4721,7 @@ function ListPageTemplate({
4723
4721
  renderItem,
4724
4722
  emptyProps
4725
4723
  }) {
4726
- const mdHref = React17.useMemo(() => {
4724
+ const mdHref = React16.useMemo(() => {
4727
4725
  if (typeof window === "undefined")
4728
4726
  return;
4729
4727
  const url = new URL(window.location.href);
@@ -4777,7 +4775,7 @@ function ListPageTemplate({
4777
4775
  }, undefined, true, undefined, this);
4778
4776
  }
4779
4777
  // src/components/organisms/EmptySearchResult.tsx
4780
- import * as React18 from "react";
4778
+ import * as React17 from "react";
4781
4779
  import {
4782
4780
  Empty as Empty2,
4783
4781
  EmptyContent as EmptyContent2,
@@ -4798,7 +4796,7 @@ function EmptySearchResult({
4798
4796
  const title = emptySearchTitle ?? emtptySearchTitle ?? "No results";
4799
4797
  const description = emptySearchDescription ?? emtptySearchDescription ?? "Try another search.";
4800
4798
  const onChange = onSearchChange ?? handleSearchChange;
4801
- const [q, setQ] = React18.useState("");
4799
+ const [q, setQ] = React17.useState("");
4802
4800
  return /* @__PURE__ */ jsxDEV73(Empty2, {
4803
4801
  className,
4804
4802
  children: [
@@ -5002,7 +5000,7 @@ function ErrorState({
5002
5000
  }, undefined, true, undefined, this);
5003
5001
  }
5004
5002
  // src/hooks/useListUrlState.ts
5005
- import * as React19 from "react";
5003
+ import * as React18 from "react";
5006
5004
  function useListUrlState({
5007
5005
  defaults,
5008
5006
  paramKeys = {
@@ -5014,7 +5012,7 @@ function useListUrlState({
5014
5012
  },
5015
5013
  replaceState = true
5016
5014
  }) {
5017
- const read = React19.useCallback(() => {
5015
+ const read = React18.useCallback(() => {
5018
5016
  if (typeof window === "undefined")
5019
5017
  return defaults;
5020
5018
  const url = new URL(window.location.href);
@@ -5040,8 +5038,8 @@ function useListUrlState({
5040
5038
  filters
5041
5039
  };
5042
5040
  }, [defaults, paramKeys]);
5043
- const [state, setState] = React19.useState(read);
5044
- const write = React19.useCallback((next) => {
5041
+ const [state, setState] = React18.useState(read);
5042
+ const write = React18.useCallback((next) => {
5045
5043
  if (typeof window === "undefined")
5046
5044
  return;
5047
5045
  const url = new URL(window.location.href);
@@ -5071,15 +5069,15 @@ function useListUrlState({
5071
5069
  window.history.pushState({}, "", newUrl);
5072
5070
  setState(merged);
5073
5071
  }, [state, paramKeys, replaceState]);
5074
- const setFilter = React19.useCallback((key, value) => {
5072
+ const setFilter = React18.useCallback((key, value) => {
5075
5073
  write({
5076
5074
  filters: { ...state.filters, [key]: value }
5077
5075
  });
5078
5076
  }, [state.filters, write]);
5079
- const clearFilters = React19.useCallback(() => {
5077
+ const clearFilters = React18.useCallback(() => {
5080
5078
  write({ filters: {}, page: 1 });
5081
5079
  }, [write]);
5082
- React19.useEffect(() => {
5080
+ React18.useEffect(() => {
5083
5081
  const onPop = () => setState(read());
5084
5082
  window.addEventListener("popstate", onPop);
5085
5083
  return () => window.removeEventListener("popstate", onPop);
@@ -5618,7 +5616,7 @@ function GDPRRights({
5618
5616
  }, undefined, true, undefined, this);
5619
5617
  }
5620
5618
  // src/components/legal/organisms/ContactForm.tsx
5621
- import * as React20 from "react";
5619
+ import * as React19 from "react";
5622
5620
  import { jsxDEV as jsxDEV93 } from "react/jsx-dev-runtime";
5623
5621
  function ContactForm({
5624
5622
  labels = { submit: "Envoyer" },
@@ -5626,8 +5624,8 @@ function ContactForm({
5626
5624
  disabled,
5627
5625
  onSubmit
5628
5626
  }) {
5629
- const [value, setValue] = React20.useState(initialValue);
5630
- const [loading, setLoading] = React20.useState(false);
5627
+ const [value, setValue] = React19.useState(initialValue);
5628
+ const [loading, setLoading] = React19.useState(false);
5631
5629
  const handleSubmit = async (e) => {
5632
5630
  e.preventDefault();
5633
5631
  if (!onSubmit)
@@ -5657,14 +5655,14 @@ function ContactForm({
5657
5655
  }, undefined, true, undefined, this);
5658
5656
  }
5659
5657
  // src/components/legal/organisms/GDPRDataRequest.tsx
5660
- import * as React21 from "react";
5658
+ import * as React20 from "react";
5661
5659
  import { jsxDEV as jsxDEV94 } from "react/jsx-dev-runtime";
5662
5660
  function GDPRDataRequest({
5663
5661
  onExport,
5664
5662
  onDelete,
5665
5663
  labels = { export: "Demander une copie", delete: "Demander la suppression" }
5666
5664
  }) {
5667
- const [loading, setLoading] = React21.useState(null);
5665
+ const [loading, setLoading] = React20.useState(null);
5668
5666
  const handle = async (kind) => {
5669
5667
  const fn = kind === "export" ? onExport : onDelete;
5670
5668
  if (!fn)
@@ -5854,20 +5852,20 @@ function CookiesTemplate({
5854
5852
  }, undefined, true, undefined, this);
5855
5853
  }
5856
5854
  // src/components/legal/templates/ContactTemplate.tsx
5857
- import * as React22 from "react";
5855
+ import * as React21 from "react";
5858
5856
  import { jsxDEV as jsxDEV99 } from "react/jsx-dev-runtime";
5859
5857
  function ContactTemplate({
5860
5858
  title = "Contact",
5861
5859
  meta,
5862
5860
  onSubmit
5863
5861
  }) {
5864
- const [value, setValue] = React22.useState({
5862
+ const [value, setValue] = React21.useState({
5865
5863
  name: "",
5866
5864
  email: "",
5867
5865
  subject: "",
5868
5866
  message: ""
5869
5867
  });
5870
- const [loading, setLoading] = React22.useState(false);
5868
+ const [loading, setLoading] = React21.useState(false);
5871
5869
  const handleSubmit = async (e) => {
5872
5870
  e.preventDefault();
5873
5871
  if (!onSubmit)
@@ -5921,11 +5919,11 @@ function withPlatformUI(options) {
5921
5919
  };
5922
5920
  }
5923
5921
  // src/platform/useReducedMotion.ts
5924
- import * as React23 from "react";
5922
+ import * as React22 from "react";
5925
5923
  "use client";
5926
5924
  function useReducedMotion() {
5927
- const [reduced, setReduced] = React23.useState(false);
5928
- React23.useEffect(() => {
5925
+ const [reduced, setReduced] = React22.useState(false);
5926
+ React22.useEffect(() => {
5929
5927
  if (typeof window === "undefined" || !window.matchMedia)
5930
5928
  return;
5931
5929
  const mq = window.matchMedia("(prefers-reduced-motion: reduce)");
@@ -5937,11 +5935,11 @@ function useReducedMotion() {
5937
5935
  return reduced;
5938
5936
  }
5939
5937
  // src/platform/useColorScheme.ts
5940
- import * as React24 from "react";
5938
+ import * as React23 from "react";
5941
5939
  "use client";
5942
5940
  function useColorScheme() {
5943
- const [scheme, setScheme] = React24.useState("light");
5944
- React24.useEffect(() => {
5941
+ const [scheme, setScheme] = React23.useState("light");
5942
+ React23.useEffect(() => {
5945
5943
  if (typeof window === "undefined" || !window.matchMedia)
5946
5944
  return;
5947
5945
  const media = window.matchMedia("(prefers-color-scheme: dark)");
@@ -6178,7 +6176,7 @@ function FormCardLayout({
6178
6176
  }, undefined, true, undefined, this);
6179
6177
  }
6180
6178
  // src/components/forms/FormStepsLayout.tsx
6181
- import * as React25 from "react";
6179
+ import * as React24 from "react";
6182
6180
  import { Separator as Separator6 } from "@contractspec/lib.ui-kit-web/ui/separator";
6183
6181
  import { cn as cn42 } from "@contractspec/lib.ui-kit-web/ui/utils";
6184
6182
  import { jsxDEV as jsxDEV104 } from "react/jsx-dev-runtime";
@@ -6189,8 +6187,8 @@ function FormStepsLayout({
6189
6187
  canNext,
6190
6188
  className
6191
6189
  }) {
6192
- const indexByKey = React25.useMemo(() => Object.fromEntries(steps.map((s, i) => [s.key, i])), [steps]);
6193
- const [idx, setIdx] = React25.useState(() => {
6190
+ const indexByKey = React24.useMemo(() => Object.fromEntries(steps.map((s, i) => [s.key, i])), [steps]);
6191
+ const [idx, setIdx] = React24.useState(() => {
6194
6192
  if (initialStepKey && initialStepKey in indexByKey)
6195
6193
  return indexByKey[initialStepKey] || 0;
6196
6194
  return 0;
@@ -6258,7 +6256,7 @@ function FormStepsLayout({
6258
6256
  }, undefined, true, undefined, this);
6259
6257
  }
6260
6258
  // src/components/forms/FormOneByOneLayout.tsx
6261
- import * as React26 from "react";
6259
+ import * as React25 from "react";
6262
6260
  import { cn as cn43 } from "@contractspec/lib.ui-kit-web/ui/utils";
6263
6261
  import { jsxDEV as jsxDEV105 } from "react/jsx-dev-runtime";
6264
6262
  function FormOneByOneLayout({
@@ -6267,8 +6265,8 @@ function FormOneByOneLayout({
6267
6265
  onComplete,
6268
6266
  className
6269
6267
  }) {
6270
- const indexByKey = React26.useMemo(() => Object.fromEntries(fields.map((f, i) => [f.key, i])), [fields]);
6271
- const [idx, setIdx] = React26.useState(() => {
6268
+ const indexByKey = React25.useMemo(() => Object.fromEntries(fields.map((f, i) => [f.key, i])), [fields]);
6269
+ const [idx, setIdx] = React25.useState(() => {
6272
6270
  if (initialKey && initialKey in indexByKey) {
6273
6271
  return indexByKey[initialKey] || 0;
6274
6272
  }
@@ -6736,7 +6734,7 @@ function fieldByKey2(fields, key) {
6736
6734
  return fields.find((field) => field.key === key);
6737
6735
  }
6738
6736
  // src/components/data-view/DataViewRenderer.tsx
6739
- import * as React27 from "react";
6737
+ import * as React26 from "react";
6740
6738
  import {
6741
6739
  Pagination,
6742
6740
  PaginationContent,
@@ -6765,7 +6763,7 @@ function DataViewRenderer({
6765
6763
  pagination,
6766
6764
  onPageChange
6767
6765
  }) {
6768
- const viewContent = React27.useMemo(() => {
6766
+ const viewContent = React26.useMemo(() => {
6769
6767
  switch (spec.view.kind) {
6770
6768
  case "list":
6771
6769
  return /* @__PURE__ */ jsxDEV111(DataViewList, {
@@ -5,33 +5,13 @@ declare const _ctaVariants: (props?: ({
5
5
  size?: "sm" | "lg" | "md" | "touch" | null | undefined;
6
6
  emphasis?: "default" | "strong" | "subtle" | null | undefined;
7
7
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
- export type CtaProps = ButtonProps & VariantProps<typeof _ctaVariants> & {
8
+ export type CtaProps = Omit<ButtonProps, 'size'> & VariantProps<typeof _ctaVariants> & {
9
9
  capture?: (cta: string) => void;
10
10
  ctaName?: string;
11
11
  as?: 'button' | 'a';
12
12
  href?: string;
13
13
  children?: React.ReactNode;
14
14
  };
15
- export declare const Cta: React.ForwardRefExoticComponent<Omit<import("@contractspec/lib.ui-kit-web/ui/button").ButtonProps, "disabled" | "children" | "onClick"> & {
16
- children: React.ReactNode;
17
- loading?: boolean;
18
- loadingText?: string;
19
- spinnerPlacement?: "start" | "end";
20
- onPress?: () => void;
21
- onPressIn?: () => void;
22
- onPressOut?: () => void;
23
- onLongPress?: () => void;
24
- onClick?: React.MouseEventHandler<HTMLButtonElement>;
25
- disabled?: boolean;
26
- } & VariantProps<(props?: ({
27
- size?: "sm" | "lg" | "md" | "touch" | null | undefined;
28
- emphasis?: "default" | "strong" | "subtle" | null | undefined;
29
- } & import("class-variance-authority/types").ClassProp) | undefined) => string> & {
30
- capture?: (cta: string) => void;
31
- ctaName?: string;
32
- as?: "button" | "a";
33
- href?: string;
34
- children?: React.ReactNode;
35
- } & React.RefAttributes<HTMLAnchorElement | HTMLButtonElement>>;
15
+ export declare function Cta({ capture, ctaName, as, href, onClick, size, emphasis, children, ...props }: CtaProps): import("react/jsx-runtime").JSX.Element;
36
16
  export {};
37
17
  //# sourceMappingURL=Cta.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Cta.d.ts","sourceRoot":"","sources":["../../../src/components/atoms/Cta.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,QAAA,MAAM,YAAY;;;8EAMhB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,WAAW,GAChC,YAAY,CAAC,OAAO,YAAY,CAAC,GAAG;IAClC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,QAAQ,GAAG,GAAG,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AAEJ,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;cAPF,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI;cACrB,MAAM;SACX,QAAQ,GAAG,GAAG;WACZ,MAAM;eACF,KAAK,CAAC,SAAS;+DAoE7B,CAAC"}
1
+ {"version":3,"file":"Cta.d.ts","sourceRoot":"","sources":["../../../src/components/atoms/Cta.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,QAAA,MAAM,YAAY;;;8EAMhB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,GAC9C,YAAY,CAAC,OAAO,YAAY,CAAC,GAAG;IAClC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,QAAQ,GAAG,GAAG,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AAEJ,wBAAgB,GAAG,CAAC,EAClB,OAAO,EACP,OAAO,EACP,EAAa,EACb,IAAI,EACJ,OAAO,EACP,IAAc,EACd,QAAoB,EACpB,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,QAAQ,2CA+CV"}
@@ -1,28 +1,14 @@
1
1
  import * as React from 'react';
2
2
  import { type ButtonProps } from './Button';
3
- export type CtaProps = ButtonProps & {
3
+ export type CtaProps = Omit<ButtonProps, 'size'> & {
4
4
  capture?: (cta: string) => void;
5
5
  ctaName?: string;
6
6
  as?: 'button' | 'a';
7
7
  href?: string;
8
+ size?: 'default' | 'sm' | 'lg' | 'icon' | 'touch' | null;
8
9
  children?: React.ReactNode;
9
10
  };
10
- export declare const Cta: React.ForwardRefExoticComponent<Omit<import("@contractspec/lib.ui-kit-web/ui/button").ButtonProps, "disabled" | "children" | "onClick"> & {
11
- children: React.ReactNode;
12
- loading?: boolean;
13
- loadingText?: string;
14
- spinnerPlacement?: "start" | "end";
15
- onPress?: () => void;
16
- onPressIn?: () => void;
17
- onPressOut?: () => void;
18
- onLongPress?: () => void;
19
- onClick?: React.MouseEventHandler<HTMLButtonElement>;
20
- disabled?: boolean;
21
- } & {
22
- capture?: (cta: string) => void;
23
- ctaName?: string;
24
- as?: "button" | "a";
25
- href?: string;
26
- children?: React.ReactNode;
27
- } & React.RefAttributes<unknown>>;
11
+ export declare function Cta({ capture, ctaName, size, onClick, children, ref, ...props }: CtaProps & {
12
+ ref?: React.Ref<unknown>;
13
+ }): import("react/jsx-runtime").JSX.Element;
28
14
  //# sourceMappingURL=Cta.mobile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Cta.mobile.d.ts","sourceRoot":"","sources":["../../../src/components/atoms/Cta.mobile.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAEpD,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG;IACnC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,QAAQ,GAAG,GAAG,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,GAAG;;;;;;;;;;;;cAPJ,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI;cACrB,MAAM;SACX,QAAQ,GAAG,GAAG;WACZ,MAAM;eACF,KAAK,CAAC,SAAS;iCAwD3B,CAAC"}
1
+ {"version":3,"file":"Cta.mobile.d.ts","sourceRoot":"","sources":["../../../src/components/atoms/Cta.mobile.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAEpD,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG;IACjD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,QAAQ,GAAG,GAAG,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IACzD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AAEF,wBAAgB,GAAG,CAAC,EAClB,OAAO,EACP,OAAO,EACP,IAAc,EACd,OAAO,EACP,QAAQ,EACR,GAAG,EACH,GAAG,KAAK,EACT,EAAE,QAAQ,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;CAAE,2CAmDzC"}
package/dist/index.js CHANGED
@@ -522,7 +522,6 @@ var formRenderer = createFormRenderer({
522
522
  })
523
523
  });
524
524
  // src/components/atoms/Cta.tsx
525
- import * as React3 from "react";
526
525
  import { cva } from "class-variance-authority";
527
526
 
528
527
  // src/components/atoms/ButtonLink.tsx
@@ -586,7 +585,7 @@ var _ctaVariants = cva("", {
586
585
  },
587
586
  defaultVariants: { size: "touch", emphasis: "default" }
588
587
  });
589
- var Cta = React3.forwardRef(({
588
+ function Cta({
590
589
  capture,
591
590
  ctaName,
592
591
  as = "button",
@@ -596,7 +595,7 @@ var Cta = React3.forwardRef(({
596
595
  emphasis = "default",
597
596
  children,
598
597
  ...props
599
- }, _ref) => {
598
+ }) {
600
599
  const handleClick = (e) => {
601
600
  if (ctaName) {
602
601
  try {
@@ -625,8 +624,7 @@ var Cta = React3.forwardRef(({
625
624
  ...props,
626
625
  children
627
626
  }, undefined, false, undefined, this);
628
- });
629
- Cta.displayName = "Cta";
627
+ }
630
628
  // src/components/atoms/Link.tsx
631
629
  import { jsxDEV as jsxDEV8 } from "react/jsx-dev-runtime";
632
630
  function Link2({ children, ...props }) {
@@ -1968,7 +1966,7 @@ function FeatureCarousel({
1968
1966
  }, undefined, false, undefined, this);
1969
1967
  }
1970
1968
  // src/components/organisms/MarketingHeader.tsx
1971
- import * as React7 from "react";
1969
+ import * as React6 from "react";
1972
1970
  import { cn as cn10 } from "@contractspec/lib.ui-kit-web/ui/utils";
1973
1971
  import {
1974
1972
  NavigationMenu as Nav2,
@@ -2070,12 +2068,12 @@ function MobileNavMenu({
2070
2068
  }
2071
2069
 
2072
2070
  // src/components/molecules/CommandSearchTrigger.tsx
2073
- import * as React5 from "react";
2071
+ import * as React4 from "react";
2074
2072
  import { SearchIcon } from "lucide-react";
2075
2073
  import { cn as cn9 } from "@contractspec/lib.ui-kit-web/ui/utils";
2076
2074
 
2077
2075
  // src/components/molecules/CommandPalette.tsx
2078
- import * as React4 from "react";
2076
+ import * as React3 from "react";
2079
2077
  import {
2080
2078
  CommandDialog,
2081
2079
  CommandEmpty,
@@ -2094,11 +2092,11 @@ function CommandPalette({
2094
2092
  groups,
2095
2093
  placeholder = "Type a command or search\u2026"
2096
2094
  }) {
2097
- const [internalOpen, setInternalOpen] = React4.useState(false);
2095
+ const [internalOpen, setInternalOpen] = React3.useState(false);
2098
2096
  const isControlled = typeof open === "boolean";
2099
2097
  const visible = isControlled ? open : internalOpen;
2100
2098
  const setVisible = isControlled && onOpenChange ? onOpenChange : setInternalOpen;
2101
- React4.useEffect(() => {
2099
+ React3.useEffect(() => {
2102
2100
  const handler = (e) => {
2103
2101
  if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k") {
2104
2102
  e.preventDefault();
@@ -2150,8 +2148,8 @@ function CommandSearchTrigger({
2150
2148
  placeholder = "Search\u2026",
2151
2149
  compact = false
2152
2150
  }) {
2153
- const [open, setOpen] = React5.useState(false);
2154
- React5.useEffect(() => {
2151
+ const [open, setOpen] = React4.useState(false);
2152
+ React4.useEffect(() => {
2155
2153
  const handler = (e) => {
2156
2154
  if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k") {
2157
2155
  e.preventDefault();
@@ -2195,7 +2193,7 @@ function CommandSearchTrigger({
2195
2193
  }
2196
2194
 
2197
2195
  // src/components/molecules/LangSwitchDropdown.tsx
2198
- import * as React6 from "react";
2196
+ import * as React5 from "react";
2199
2197
  import { Globe } from "lucide-react";
2200
2198
  import {
2201
2199
  DropdownMenu as DropdownMenu2,
@@ -2210,7 +2208,7 @@ function LangSwitchDropdown({
2210
2208
  onChange,
2211
2209
  className
2212
2210
  }) {
2213
- const [open, setOpen] = React6.useState(false);
2211
+ const [open, setOpen] = React5.useState(false);
2214
2212
  const current = options.find((o) => o.code === value);
2215
2213
  return /* @__PURE__ */ jsxDEV30(DropdownMenu2, {
2216
2214
  open,
@@ -2273,7 +2271,7 @@ function MarketingHeader({
2273
2271
  commandPaletteGroups,
2274
2272
  langSwitchProps
2275
2273
  }) {
2276
- const [open, setOpen] = React7.useState(false);
2274
+ const [open, setOpen] = React6.useState(false);
2277
2275
  return /* @__PURE__ */ jsxDEV31(HStack2, {
2278
2276
  as: "header",
2279
2277
  className: cn10("bg-background/95 supports-backdrop-filter:bg-background/60 sticky top-0 z-50 w-full border-b backdrop-blur-xs", className),
@@ -2500,7 +2498,7 @@ function MarketingHeaderDesktop({
2500
2498
  }, undefined, false, undefined, this);
2501
2499
  }
2502
2500
  // src/components/organisms/MarketingHeaderMobile.tsx
2503
- import * as React8 from "react";
2501
+ import * as React7 from "react";
2504
2502
  import { cn as cn12 } from "@contractspec/lib.ui-kit-web/ui/utils";
2505
2503
  import {
2506
2504
  Sheet as Sheet3,
@@ -2521,7 +2519,7 @@ function MarketingHeaderMobile({
2521
2519
  className,
2522
2520
  right
2523
2521
  }) {
2524
- const [open, setOpen] = React8.useState(false);
2522
+ const [open, setOpen] = React7.useState(false);
2525
2523
  return /* @__PURE__ */ jsxDEV33("div", {
2526
2524
  className: cn12("bg-background/95 supports-backdrop-filter:bg-background/60 w-full border-b backdrop-blur-xs md:hidden", className),
2527
2525
  children: /* @__PURE__ */ jsxDEV33("div", {
@@ -2940,7 +2938,7 @@ function MarketingComparisonSection({
2940
2938
  }, undefined, false, undefined, this);
2941
2939
  }
2942
2940
  // src/components/organisms/AppLayout.tsx
2943
- import * as React9 from "react";
2941
+ import * as React8 from "react";
2944
2942
  import { cn as cn17 } from "@contractspec/lib.ui-kit-web/ui/utils";
2945
2943
  import { Separator as Separator4 } from "@contractspec/lib.ui-kit-web/ui/separator";
2946
2944
  import {
@@ -2985,7 +2983,7 @@ function AppLayout({
2985
2983
  className: "mb-2",
2986
2984
  children: /* @__PURE__ */ jsxDEV41(Breadcrumb, {
2987
2985
  children: /* @__PURE__ */ jsxDEV41(BreadcrumbList, {
2988
- children: breadcrumb.items.map((it, idx) => /* @__PURE__ */ jsxDEV41(React9.Fragment, {
2986
+ children: breadcrumb.items.map((it, idx) => /* @__PURE__ */ jsxDEV41(React8.Fragment, {
2989
2987
  children: [
2990
2988
  /* @__PURE__ */ jsxDEV41(BreadcrumbItem, {
2991
2989
  children: it.href ? /* @__PURE__ */ jsxDEV41(BreadcrumbLink, {
@@ -3018,7 +3016,7 @@ function AppLayout({
3018
3016
  }, undefined, true, undefined, this);
3019
3017
  }
3020
3018
  // src/components/organisms/AcademyLayout.tsx
3021
- import * as React10 from "react";
3019
+ import * as React9 from "react";
3022
3020
  import { cn as cn18 } from "@contractspec/lib.ui-kit-web/ui/utils";
3023
3021
  import {
3024
3022
  Breadcrumb as Breadcrumb2,
@@ -3057,7 +3055,7 @@ function AcademyLayout({
3057
3055
  className: "mb-4",
3058
3056
  children: /* @__PURE__ */ jsxDEV42(Breadcrumb2, {
3059
3057
  children: /* @__PURE__ */ jsxDEV42(BreadcrumbList2, {
3060
- children: breadcrumb.items.map((it, idx) => /* @__PURE__ */ jsxDEV42(React10.Fragment, {
3058
+ children: breadcrumb.items.map((it, idx) => /* @__PURE__ */ jsxDEV42(React9.Fragment, {
3061
3059
  children: [
3062
3060
  /* @__PURE__ */ jsxDEV42(BreadcrumbItem2, {
3063
3061
  children: it.href ? /* @__PURE__ */ jsxDEV42(BreadcrumbLink2, {
@@ -3177,7 +3175,7 @@ function NavBrand({
3177
3175
  }, undefined, false, undefined, this) : content;
3178
3176
  }
3179
3177
  // src/components/molecules/Breadcrumbs.tsx
3180
- import * as React11 from "react";
3178
+ import * as React10 from "react";
3181
3179
  import {
3182
3180
  Breadcrumb as Root,
3183
3181
  BreadcrumbItem as BreadcrumbItem3,
@@ -3193,7 +3191,7 @@ function Breadcrumbs({ items }) {
3193
3191
  return null;
3194
3192
  return /* @__PURE__ */ jsxDEV46(Root, {
3195
3193
  children: /* @__PURE__ */ jsxDEV46(BreadcrumbList3, {
3196
- children: items.map((it, idx) => /* @__PURE__ */ jsxDEV46(React11.Fragment, {
3194
+ children: items.map((it, idx) => /* @__PURE__ */ jsxDEV46(React10.Fragment, {
3197
3195
  children: [
3198
3196
  /* @__PURE__ */ jsxDEV46(BreadcrumbItem3, {
3199
3197
  children: it.href ? /* @__PURE__ */ jsxDEV46(BreadcrumbLink3, {
@@ -3263,7 +3261,7 @@ function StatusChip({
3263
3261
  }
3264
3262
  }
3265
3263
  // src/components/molecules/EntityCard.tsx
3266
- import * as React12 from "react";
3264
+ import * as React11 from "react";
3267
3265
  import { Card as Card5, CardContent as CardContent5 } from "@contractspec/lib.ui-kit-web/ui/card";
3268
3266
  import { cva as cva13 } from "class-variance-authority";
3269
3267
  import { cn as cn22 } from "@contractspec/lib.ui-kit-web/ui/utils";
@@ -3332,7 +3330,7 @@ function EntityCard({
3332
3330
  onClick,
3333
3331
  ...cardProps
3334
3332
  }) {
3335
- const [isExpanded, setIsExpanded] = React12.useState(defaultExpanded);
3333
+ const [isExpanded, setIsExpanded] = React11.useState(defaultExpanded);
3336
3334
  const Wrapper = href ? "a" : "div";
3337
3335
  const isInteractive = interactive ?? !!(onClick || href);
3338
3336
  const handleExpandClick = (e) => {
@@ -3978,13 +3976,13 @@ function HeroSection({
3978
3976
  }, undefined, false, undefined, this);
3979
3977
  }
3980
3978
  // src/platform/useResponsive.ts
3981
- import * as React13 from "react";
3979
+ import * as React12 from "react";
3982
3980
  "use client";
3983
3981
  var DEFAULT = { sm: 640, md: 768, lg: 1024, xl: 1280 };
3984
3982
  function useResponsive(custom) {
3985
- const bp = React13.useMemo(() => ({ ...DEFAULT, ...custom }), [custom]);
3986
- const [width, setWidth] = React13.useState(typeof window !== "undefined" ? window.innerWidth : bp.md);
3987
- React13.useEffect(() => {
3983
+ const bp = React12.useMemo(() => ({ ...DEFAULT, ...custom }), [custom]);
3984
+ const [width, setWidth] = React12.useState(typeof window !== "undefined" ? window.innerWidth : bp.md);
3985
+ React12.useEffect(() => {
3988
3986
  if (typeof window === "undefined")
3989
3987
  return;
3990
3988
  const onResize = () => setWidth(window.innerWidth);
@@ -4128,7 +4126,7 @@ function PricingSection({
4128
4126
  }, undefined, false, undefined, this);
4129
4127
  }
4130
4128
  // src/components/organisms/FAQSection.tsx
4131
- import * as React14 from "react";
4129
+ import * as React13 from "react";
4132
4130
  import { VStack as VStack10 } from "@contractspec/lib.ui-kit-web/ui/stack";
4133
4131
  import {
4134
4132
  Accordion,
@@ -4149,7 +4147,7 @@ function FAQSection({
4149
4147
  accordionClassName
4150
4148
  }) {
4151
4149
  const hasItems = Array.isArray(items) && items.length > 0;
4152
- const defaultValue = React14.useMemo(() => {
4150
+ const defaultValue = React13.useMemo(() => {
4153
4151
  if (!hasItems)
4154
4152
  return;
4155
4153
  if (accordionType === "multiple")
@@ -4448,7 +4446,7 @@ function ListTablePage({
4448
4446
  }, undefined, true, undefined, this);
4449
4447
  }
4450
4448
  // src/components/molecules/FiltersToolbar.tsx
4451
- import * as React15 from "react";
4449
+ import * as React14 from "react";
4452
4450
  import { cn as cn24 } from "@contractspec/lib.ui-kit-web/ui/utils";
4453
4451
  import { Badge as Badge3 } from "@contractspec/lib.ui-kit-web/ui/badge";
4454
4452
  import { jsxDEV as jsxDEV69 } from "react/jsx-dev-runtime";
@@ -4464,11 +4462,11 @@ function FiltersToolbar({
4464
4462
  activeChips = [],
4465
4463
  onClearAll
4466
4464
  }) {
4467
- const [q, setQ] = React15.useState(searchValue ?? "");
4468
- React15.useEffect(() => {
4465
+ const [q, setQ] = React14.useState(searchValue ?? "");
4466
+ React14.useEffect(() => {
4469
4467
  setQ(searchValue ?? "");
4470
4468
  }, [searchValue]);
4471
- React15.useEffect(() => {
4469
+ React14.useEffect(() => {
4472
4470
  if (!onSearchChange)
4473
4471
  return;
4474
4472
  const id = setTimeout(() => onSearchChange(q), debounceMs);
@@ -4541,12 +4539,12 @@ function FiltersToolbar({
4541
4539
  }, undefined, true, undefined, this);
4542
4540
  }
4543
4541
  // src/components/templates/lists/ListPageTemplate/index.web.tsx
4544
- import * as React17 from "react";
4542
+ import * as React16 from "react";
4545
4543
  import { cva as cva20 } from "class-variance-authority";
4546
4544
  import { cn as cn25 } from "@contractspec/lib.ui-kit-web/ui/utils";
4547
4545
 
4548
4546
  // src/components/molecules/AiLinkButton.tsx
4549
- import * as React16 from "react";
4547
+ import * as React15 from "react";
4550
4548
  import {
4551
4549
  DropdownMenu as DropdownMenu3,
4552
4550
  DropdownMenuContent as DropdownMenuContent3,
@@ -4568,19 +4566,19 @@ function buildProviderUrl(provider, href) {
4568
4566
  }
4569
4567
  }
4570
4568
  function AiLinkButton({ href, className }) {
4571
- const copyLink = React16.useCallback(() => {
4569
+ const copyLink = React15.useCallback(() => {
4572
4570
  try {
4573
4571
  navigator.clipboard?.writeText(href).catch(() => {});
4574
4572
  } catch (_e) {}
4575
4573
  }, [href]);
4576
- const openChatGPT = React16.useCallback(() => {
4574
+ const openChatGPT = React15.useCallback(() => {
4577
4575
  const url = buildProviderUrl("chatgpt", href);
4578
4576
  try {
4579
4577
  navigator.clipboard?.writeText(href).catch(() => {});
4580
4578
  } catch (_e) {}
4581
4579
  window.open(url, "_blank", "noopener,noreferrer");
4582
4580
  }, [href]);
4583
- const openClaude = React16.useCallback(() => {
4581
+ const openClaude = React15.useCallback(() => {
4584
4582
  const url = buildProviderUrl("claude", href);
4585
4583
  try {
4586
4584
  navigator.clipboard?.writeText(href).catch(() => {});
@@ -4718,7 +4716,7 @@ function ListPageTemplate({
4718
4716
  renderItem,
4719
4717
  emptyProps
4720
4718
  }) {
4721
- const mdHref = React17.useMemo(() => {
4719
+ const mdHref = React16.useMemo(() => {
4722
4720
  if (typeof window === "undefined")
4723
4721
  return;
4724
4722
  const url = new URL(window.location.href);
@@ -4772,7 +4770,7 @@ function ListPageTemplate({
4772
4770
  }, undefined, true, undefined, this);
4773
4771
  }
4774
4772
  // src/components/organisms/EmptySearchResult.tsx
4775
- import * as React18 from "react";
4773
+ import * as React17 from "react";
4776
4774
  import {
4777
4775
  Empty as Empty2,
4778
4776
  EmptyContent as EmptyContent2,
@@ -4793,7 +4791,7 @@ function EmptySearchResult({
4793
4791
  const title = emptySearchTitle ?? emtptySearchTitle ?? "No results";
4794
4792
  const description = emptySearchDescription ?? emtptySearchDescription ?? "Try another search.";
4795
4793
  const onChange = onSearchChange ?? handleSearchChange;
4796
- const [q, setQ] = React18.useState("");
4794
+ const [q, setQ] = React17.useState("");
4797
4795
  return /* @__PURE__ */ jsxDEV73(Empty2, {
4798
4796
  className,
4799
4797
  children: [
@@ -4997,7 +4995,7 @@ function ErrorState({
4997
4995
  }, undefined, true, undefined, this);
4998
4996
  }
4999
4997
  // src/hooks/useListUrlState.ts
5000
- import * as React19 from "react";
4998
+ import * as React18 from "react";
5001
4999
  function useListUrlState({
5002
5000
  defaults,
5003
5001
  paramKeys = {
@@ -5009,7 +5007,7 @@ function useListUrlState({
5009
5007
  },
5010
5008
  replaceState = true
5011
5009
  }) {
5012
- const read = React19.useCallback(() => {
5010
+ const read = React18.useCallback(() => {
5013
5011
  if (typeof window === "undefined")
5014
5012
  return defaults;
5015
5013
  const url = new URL(window.location.href);
@@ -5035,8 +5033,8 @@ function useListUrlState({
5035
5033
  filters
5036
5034
  };
5037
5035
  }, [defaults, paramKeys]);
5038
- const [state, setState] = React19.useState(read);
5039
- const write = React19.useCallback((next) => {
5036
+ const [state, setState] = React18.useState(read);
5037
+ const write = React18.useCallback((next) => {
5040
5038
  if (typeof window === "undefined")
5041
5039
  return;
5042
5040
  const url = new URL(window.location.href);
@@ -5066,15 +5064,15 @@ function useListUrlState({
5066
5064
  window.history.pushState({}, "", newUrl);
5067
5065
  setState(merged);
5068
5066
  }, [state, paramKeys, replaceState]);
5069
- const setFilter = React19.useCallback((key, value) => {
5067
+ const setFilter = React18.useCallback((key, value) => {
5070
5068
  write({
5071
5069
  filters: { ...state.filters, [key]: value }
5072
5070
  });
5073
5071
  }, [state.filters, write]);
5074
- const clearFilters = React19.useCallback(() => {
5072
+ const clearFilters = React18.useCallback(() => {
5075
5073
  write({ filters: {}, page: 1 });
5076
5074
  }, [write]);
5077
- React19.useEffect(() => {
5075
+ React18.useEffect(() => {
5078
5076
  const onPop = () => setState(read());
5079
5077
  window.addEventListener("popstate", onPop);
5080
5078
  return () => window.removeEventListener("popstate", onPop);
@@ -5613,7 +5611,7 @@ function GDPRRights({
5613
5611
  }, undefined, true, undefined, this);
5614
5612
  }
5615
5613
  // src/components/legal/organisms/ContactForm.tsx
5616
- import * as React20 from "react";
5614
+ import * as React19 from "react";
5617
5615
  import { jsxDEV as jsxDEV93 } from "react/jsx-dev-runtime";
5618
5616
  function ContactForm({
5619
5617
  labels = { submit: "Envoyer" },
@@ -5621,8 +5619,8 @@ function ContactForm({
5621
5619
  disabled,
5622
5620
  onSubmit
5623
5621
  }) {
5624
- const [value, setValue] = React20.useState(initialValue);
5625
- const [loading, setLoading] = React20.useState(false);
5622
+ const [value, setValue] = React19.useState(initialValue);
5623
+ const [loading, setLoading] = React19.useState(false);
5626
5624
  const handleSubmit = async (e) => {
5627
5625
  e.preventDefault();
5628
5626
  if (!onSubmit)
@@ -5652,14 +5650,14 @@ function ContactForm({
5652
5650
  }, undefined, true, undefined, this);
5653
5651
  }
5654
5652
  // src/components/legal/organisms/GDPRDataRequest.tsx
5655
- import * as React21 from "react";
5653
+ import * as React20 from "react";
5656
5654
  import { jsxDEV as jsxDEV94 } from "react/jsx-dev-runtime";
5657
5655
  function GDPRDataRequest({
5658
5656
  onExport,
5659
5657
  onDelete,
5660
5658
  labels = { export: "Demander une copie", delete: "Demander la suppression" }
5661
5659
  }) {
5662
- const [loading, setLoading] = React21.useState(null);
5660
+ const [loading, setLoading] = React20.useState(null);
5663
5661
  const handle = async (kind) => {
5664
5662
  const fn = kind === "export" ? onExport : onDelete;
5665
5663
  if (!fn)
@@ -5849,20 +5847,20 @@ function CookiesTemplate({
5849
5847
  }, undefined, true, undefined, this);
5850
5848
  }
5851
5849
  // src/components/legal/templates/ContactTemplate.tsx
5852
- import * as React22 from "react";
5850
+ import * as React21 from "react";
5853
5851
  import { jsxDEV as jsxDEV99 } from "react/jsx-dev-runtime";
5854
5852
  function ContactTemplate({
5855
5853
  title = "Contact",
5856
5854
  meta,
5857
5855
  onSubmit
5858
5856
  }) {
5859
- const [value, setValue] = React22.useState({
5857
+ const [value, setValue] = React21.useState({
5860
5858
  name: "",
5861
5859
  email: "",
5862
5860
  subject: "",
5863
5861
  message: ""
5864
5862
  });
5865
- const [loading, setLoading] = React22.useState(false);
5863
+ const [loading, setLoading] = React21.useState(false);
5866
5864
  const handleSubmit = async (e) => {
5867
5865
  e.preventDefault();
5868
5866
  if (!onSubmit)
@@ -5916,11 +5914,11 @@ function withPlatformUI(options) {
5916
5914
  };
5917
5915
  }
5918
5916
  // src/platform/useReducedMotion.ts
5919
- import * as React23 from "react";
5917
+ import * as React22 from "react";
5920
5918
  "use client";
5921
5919
  function useReducedMotion() {
5922
- const [reduced, setReduced] = React23.useState(false);
5923
- React23.useEffect(() => {
5920
+ const [reduced, setReduced] = React22.useState(false);
5921
+ React22.useEffect(() => {
5924
5922
  if (typeof window === "undefined" || !window.matchMedia)
5925
5923
  return;
5926
5924
  const mq = window.matchMedia("(prefers-reduced-motion: reduce)");
@@ -5932,11 +5930,11 @@ function useReducedMotion() {
5932
5930
  return reduced;
5933
5931
  }
5934
5932
  // src/platform/useColorScheme.ts
5935
- import * as React24 from "react";
5933
+ import * as React23 from "react";
5936
5934
  "use client";
5937
5935
  function useColorScheme() {
5938
- const [scheme, setScheme] = React24.useState("light");
5939
- React24.useEffect(() => {
5936
+ const [scheme, setScheme] = React23.useState("light");
5937
+ React23.useEffect(() => {
5940
5938
  if (typeof window === "undefined" || !window.matchMedia)
5941
5939
  return;
5942
5940
  const media = window.matchMedia("(prefers-color-scheme: dark)");
@@ -6173,7 +6171,7 @@ function FormCardLayout({
6173
6171
  }, undefined, true, undefined, this);
6174
6172
  }
6175
6173
  // src/components/forms/FormStepsLayout.tsx
6176
- import * as React25 from "react";
6174
+ import * as React24 from "react";
6177
6175
  import { Separator as Separator6 } from "@contractspec/lib.ui-kit-web/ui/separator";
6178
6176
  import { cn as cn42 } from "@contractspec/lib.ui-kit-web/ui/utils";
6179
6177
  import { jsxDEV as jsxDEV104 } from "react/jsx-dev-runtime";
@@ -6184,8 +6182,8 @@ function FormStepsLayout({
6184
6182
  canNext,
6185
6183
  className
6186
6184
  }) {
6187
- const indexByKey = React25.useMemo(() => Object.fromEntries(steps.map((s, i) => [s.key, i])), [steps]);
6188
- const [idx, setIdx] = React25.useState(() => {
6185
+ const indexByKey = React24.useMemo(() => Object.fromEntries(steps.map((s, i) => [s.key, i])), [steps]);
6186
+ const [idx, setIdx] = React24.useState(() => {
6189
6187
  if (initialStepKey && initialStepKey in indexByKey)
6190
6188
  return indexByKey[initialStepKey] || 0;
6191
6189
  return 0;
@@ -6253,7 +6251,7 @@ function FormStepsLayout({
6253
6251
  }, undefined, true, undefined, this);
6254
6252
  }
6255
6253
  // src/components/forms/FormOneByOneLayout.tsx
6256
- import * as React26 from "react";
6254
+ import * as React25 from "react";
6257
6255
  import { cn as cn43 } from "@contractspec/lib.ui-kit-web/ui/utils";
6258
6256
  import { jsxDEV as jsxDEV105 } from "react/jsx-dev-runtime";
6259
6257
  function FormOneByOneLayout({
@@ -6262,8 +6260,8 @@ function FormOneByOneLayout({
6262
6260
  onComplete,
6263
6261
  className
6264
6262
  }) {
6265
- const indexByKey = React26.useMemo(() => Object.fromEntries(fields.map((f, i) => [f.key, i])), [fields]);
6266
- const [idx, setIdx] = React26.useState(() => {
6263
+ const indexByKey = React25.useMemo(() => Object.fromEntries(fields.map((f, i) => [f.key, i])), [fields]);
6264
+ const [idx, setIdx] = React25.useState(() => {
6267
6265
  if (initialKey && initialKey in indexByKey) {
6268
6266
  return indexByKey[initialKey] || 0;
6269
6267
  }
@@ -6731,7 +6729,7 @@ function fieldByKey2(fields, key) {
6731
6729
  return fields.find((field) => field.key === key);
6732
6730
  }
6733
6731
  // src/components/data-view/DataViewRenderer.tsx
6734
- import * as React27 from "react";
6732
+ import * as React26 from "react";
6735
6733
  import {
6736
6734
  Pagination,
6737
6735
  PaginationContent,
@@ -6760,7 +6758,7 @@ function DataViewRenderer({
6760
6758
  pagination,
6761
6759
  onPageChange
6762
6760
  }) {
6763
- const viewContent = React27.useMemo(() => {
6761
+ const viewContent = React26.useMemo(() => {
6764
6762
  switch (spec.view.kind) {
6765
6763
  case "list":
6766
6764
  return /* @__PURE__ */ jsxDEV111(DataViewList, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contractspec/lib.design-system",
3
- "version": "1.61.0",
3
+ "version": "1.62.0",
4
4
  "description": "Design tokens and theming primitives",
5
5
  "keywords": [
6
6
  "contractspec",
@@ -30,10 +30,10 @@
30
30
  "sideEffects": false,
31
31
  "tree-shake": true,
32
32
  "dependencies": {
33
- "@contractspec/lib.ai-agent": "1.61.0",
34
- "@contractspec/lib.contracts": "1.61.0",
35
- "@contractspec/lib.ui-kit": "1.61.0",
36
- "@contractspec/lib.ui-kit-web": "1.61.0",
33
+ "@contractspec/lib.ai-agent": "1.62.0",
34
+ "@contractspec/lib.contracts": "1.62.0",
35
+ "@contractspec/lib.ui-kit": "1.62.0",
36
+ "@contractspec/lib.ui-kit-web": "1.62.0",
37
37
  "@hookform/resolvers": "5.2.2",
38
38
  "class-variance-authority": "^0.7.1",
39
39
  "clsx": "^2.1.1",
@@ -48,8 +48,8 @@
48
48
  "zod": "^4.3.5"
49
49
  },
50
50
  "devDependencies": {
51
- "@contractspec/tool.typescript": "1.61.0",
52
- "@types/node": "^25.2.1",
51
+ "@contractspec/tool.typescript": "1.62.0",
52
+ "@types/node": "^25.2.3",
53
53
  "@types/react-dom": "^19.0.14",
54
54
  "postcss": "^8.5",
55
55
  "postcss-load-config": "^6.0.1",
@@ -57,7 +57,7 @@
57
57
  "react-native-css": "^3.0.0",
58
58
  "tailwindcss": "4.1.18",
59
59
  "typescript": "^5.9.3",
60
- "@contractspec/tool.bun": "1.60.0"
60
+ "@contractspec/tool.bun": "1.61.0"
61
61
  },
62
62
  "files": [
63
63
  "dist",