@contractspec/lib.design-system 3.7.6 → 3.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +45 -110
  2. package/dist/browser/index.js +473 -466
  3. package/dist/components/agent/ApprovalQueue.d.ts +1 -1
  4. package/dist/components/agent/ApprovalQueue.mobile.d.ts +12 -0
  5. package/dist/components/atoms/ActionButtons.d.ts +3 -3
  6. package/dist/components/atoms/Button.d.ts +1 -1
  7. package/dist/components/atoms/Cta.d.ts +2 -2
  8. package/dist/components/atoms/DataChips.d.ts +1 -1
  9. package/dist/components/atoms/Input.mobile.d.ts +1 -1
  10. package/dist/components/atoms/LoaderCircular.d.ts +1 -1
  11. package/dist/components/atoms/Textarea.mobile.d.ts +1 -1
  12. package/dist/components/data-table/DataTable.d.ts +15 -0
  13. package/dist/components/data-table/DataTable.mobile.d.ts +15 -0
  14. package/dist/components/data-view/DataViewDetail.d.ts +1 -1
  15. package/dist/components/data-view/DataViewList.d.ts +1 -1
  16. package/dist/components/data-view/DataViewRenderer.d.ts +1 -1
  17. package/dist/components/data-view/DataViewRenderer.mobile.d.ts +25 -0
  18. package/dist/components/data-view/DataViewTable.d.ts +2 -2
  19. package/dist/components/data-view/DataViewTable.mobile.d.ts +17 -0
  20. package/dist/components/forms/ZodForm.d.ts +1 -1
  21. package/dist/components/legal/atoms/LegalCallout.d.ts +1 -1
  22. package/dist/components/legal/atoms/LegalHeading.d.ts +2 -2
  23. package/dist/components/legal/atoms/LegalList.d.ts +1 -1
  24. package/dist/components/legal/atoms/LegalSection.d.ts +2 -2
  25. package/dist/components/legal/atoms/LegalText.d.ts +3 -3
  26. package/dist/components/legal/molecules/LegalTOC.d.ts +1 -1
  27. package/dist/components/marketing/MarketingCard.d.ts +1 -1
  28. package/dist/components/marketing/MarketingCardsSection.d.ts +2 -2
  29. package/dist/components/marketing/MarketingComparisonSection.d.ts +1 -1
  30. package/dist/components/marketing/MarketingIconCard.d.ts +2 -2
  31. package/dist/components/marketing/MarketingSection.d.ts +1 -1
  32. package/dist/components/molecules/EntityCard.d.ts +2 -2
  33. package/dist/components/molecules/MarkdownRenderer/MarkdownRenderer.d.ts +2 -0
  34. package/dist/components/molecules/MarkdownRenderer/formatInlineMarkdown.d.ts +2 -0
  35. package/dist/components/molecules/MarkdownRenderer/index.d.ts +2 -0
  36. package/dist/components/molecules/MarkdownRenderer/renderMarkdownTable.d.ts +2 -0
  37. package/dist/components/molecules/MarkdownRenderer/types.d.ts +3 -0
  38. package/dist/components/molecules/SkeletonBlock/index.d.ts +1 -1
  39. package/dist/components/molecules/SkeletonCircle/index.d.ts +1 -1
  40. package/dist/components/molecules/SkeletonList/index.d.ts +1 -1
  41. package/dist/components/molecules/StatCard.d.ts +2 -2
  42. package/dist/components/molecules/StatusChip.d.ts +1 -1
  43. package/dist/components/native/FlatListScreen.mobile.d.ts +2 -2
  44. package/dist/components/organisms/GridLayout.d.ts +1 -1
  45. package/dist/components/organisms/ListCardPage.d.ts +1 -1
  46. package/dist/components/organisms/ListGridPage.d.ts +1 -1
  47. package/dist/components/organisms/ListTablePage.d.ts +1 -1
  48. package/dist/components/organisms/ListTablePage.mobile.d.ts +20 -0
  49. package/dist/components/organisms/PricingSection.d.ts +1 -1
  50. package/dist/components/templates/lists/ListPageTemplate/index.d.ts +1 -1
  51. package/dist/components/visualization/ComparisonView.d.ts +9 -0
  52. package/dist/components/visualization/ComparisonView.mobile.d.ts +9 -0
  53. package/dist/components/visualization/TimelineView.d.ts +9 -0
  54. package/dist/components/visualization/TimelineView.mobile.d.ts +9 -0
  55. package/dist/components/visualization/VisualizationCard.d.ts +13 -0
  56. package/dist/components/visualization/VisualizationCard.mobile.d.ts +13 -0
  57. package/dist/components/visualization/VisualizationGrid.d.ts +6 -0
  58. package/dist/components/visualization/VisualizationGrid.mobile.d.ts +6 -0
  59. package/dist/components/visualization/VisualizationRenderer.d.ts +12 -0
  60. package/dist/components/visualization/VisualizationRenderer.mobile.d.ts +12 -0
  61. package/dist/components/visualization/types.d.ts +12 -0
  62. package/dist/index.d.ts +108 -100
  63. package/dist/index.js +473 -466
  64. package/dist/theme/tokenBridge.d.ts +1 -1
  65. package/dist/theme/variants.d.ts +1 -1
  66. package/package.json +13 -12
package/dist/index.js CHANGED
@@ -1,14 +1,6 @@
1
1
  // @bun
2
- // src/renderers/form-contract.tsx
3
- import { createFormRenderer } from "@contractspec/lib.contracts-runtime-client-react/form-render";
4
- import { shadcnDriver } from "@contractspec/lib.contracts-runtime-client-react/drivers/shadcn";
5
- import {
6
- Field as FieldWrap,
7
- FieldDescription,
8
- FieldError,
9
- FieldGroup,
10
- FieldLabel
11
- } from "@contractspec/lib.ui-kit-web/ui/field";
2
+ // src/components/legal/organisms/ContactForm.tsx
3
+ import * as React2 from "react";
12
4
 
13
5
  // src/components/atoms/Button.tsx
14
6
  import {
@@ -64,6 +56,9 @@ function Button({
64
56
  }, undefined, false, undefined, this);
65
57
  }
66
58
 
59
+ // src/components/legal/molecules/ContactFields.tsx
60
+ import { Label } from "@contractspec/lib.ui-kit-web/ui/label";
61
+
67
62
  // src/components/atoms/Input.tsx
68
63
  import {
69
64
  Input as WebInput
@@ -322,10 +317,10 @@ function Input({
322
317
  }
323
318
 
324
319
  // src/components/atoms/Textarea.tsx
325
- import * as React from "react";
326
320
  import {
327
321
  Textarea as WebTextarea
328
322
  } from "@contractspec/lib.ui-kit-web/ui/textarea";
323
+ import * as React from "react";
329
324
  import { jsxDEV as jsxDEV3 } from "react/jsx-dev-runtime";
330
325
  function Textarea({
331
326
  value,
@@ -364,111 +359,132 @@ function Textarea({
364
359
  }, undefined, false, undefined, this);
365
360
  }
366
361
 
367
- // src/renderers/form-contract.tsx
368
- import { Switch as SwitchUiKit } from "@contractspec/lib.ui-kit-web/ui/switch";
369
- import {
370
- RadioGroup as RadioGroupUiKit,
371
- RadioGroupItem
372
- } from "@contractspec/lib.ui-kit-web/ui/radio-group";
373
- import { Checkbox as CheckboxUiKit } from "@contractspec/lib.ui-kit-web/ui/checkbox";
374
- import {
375
- Select as SelectUiKit,
376
- SelectContent,
377
- SelectGroup,
378
- SelectItem,
379
- SelectTrigger,
380
- SelectValue
381
- } from "@contractspec/lib.ui-kit-web/ui/select";
382
- import { Label } from "@contractspec/lib.ui-kit-web/ui/label";
362
+ // src/components/legal/molecules/ContactFields.tsx
383
363
  import { jsxDEV as jsxDEV4 } from "react/jsx-dev-runtime";
384
- "use client";
385
- var Select = (props) => {
386
- const { options, value, onChange, ...rest } = props;
387
- return /* @__PURE__ */ jsxDEV4(SelectUiKit, {
388
- value: value ?? "",
389
- onValueChange: (v) => onChange?.(v),
390
- ...rest,
364
+ function ContactFields({
365
+ value,
366
+ onChange,
367
+ disabled
368
+ }) {
369
+ return /* @__PURE__ */ jsxDEV4("div", {
370
+ className: "space-y-4",
391
371
  children: [
392
- /* @__PURE__ */ jsxDEV4(SelectTrigger, {
393
- className: "w-[180px]",
394
- children: /* @__PURE__ */ jsxDEV4(SelectValue, {
395
- placeholder: props.placeholder
396
- }, undefined, false, undefined, this)
397
- }, undefined, false, undefined, this),
398
- /* @__PURE__ */ jsxDEV4(SelectContent, {
399
- children: /* @__PURE__ */ jsxDEV4(SelectGroup, {
400
- children: options?.map((o, i) => /* @__PURE__ */ jsxDEV4(SelectItem, {
401
- value: o.value,
402
- disabled: o.disabled,
403
- children: o.labelI18n
404
- }, i, false, undefined, this))
405
- }, undefined, false, undefined, this)
406
- }, undefined, false, undefined, this)
372
+ /* @__PURE__ */ jsxDEV4("div", {
373
+ className: "space-y-2",
374
+ children: [
375
+ /* @__PURE__ */ jsxDEV4(Label, {
376
+ children: "Nom"
377
+ }, undefined, false, undefined, this),
378
+ /* @__PURE__ */ jsxDEV4(Input, {
379
+ value: value.name,
380
+ onChange: (e) => onChange({ ...value, name: e.target.value }),
381
+ disabled
382
+ }, undefined, false, undefined, this)
383
+ ]
384
+ }, undefined, true, undefined, this),
385
+ /* @__PURE__ */ jsxDEV4("div", {
386
+ className: "space-y-2",
387
+ children: [
388
+ /* @__PURE__ */ jsxDEV4(Label, {
389
+ children: "Email"
390
+ }, undefined, false, undefined, this),
391
+ /* @__PURE__ */ jsxDEV4(Input, {
392
+ type: "email",
393
+ value: value.email,
394
+ onChange: (e) => onChange({ ...value, email: e.target.value }),
395
+ disabled
396
+ }, undefined, false, undefined, this)
397
+ ]
398
+ }, undefined, true, undefined, this),
399
+ /* @__PURE__ */ jsxDEV4("div", {
400
+ className: "space-y-2",
401
+ children: [
402
+ /* @__PURE__ */ jsxDEV4(Label, {
403
+ children: "Objet"
404
+ }, undefined, false, undefined, this),
405
+ /* @__PURE__ */ jsxDEV4(Input, {
406
+ value: value.subject,
407
+ onChange: (e) => onChange({
408
+ ...value,
409
+ subject: e.target.value
410
+ }),
411
+ disabled
412
+ }, undefined, false, undefined, this)
413
+ ]
414
+ }, undefined, true, undefined, this),
415
+ /* @__PURE__ */ jsxDEV4("div", {
416
+ className: "space-y-2",
417
+ children: [
418
+ /* @__PURE__ */ jsxDEV4(Label, {
419
+ children: "Message"
420
+ }, undefined, false, undefined, this),
421
+ /* @__PURE__ */ jsxDEV4(Textarea, {
422
+ value: value.message,
423
+ onChange: (e) => onChange({
424
+ ...value,
425
+ message: e.target.value
426
+ }),
427
+ disabled,
428
+ rows: 6
429
+ }, undefined, false, undefined, this)
430
+ ]
431
+ }, undefined, true, undefined, this)
407
432
  ]
408
433
  }, undefined, true, undefined, this);
409
- };
410
- var Checkbox = (props) => /* @__PURE__ */ jsxDEV4(CheckboxUiKit, {
411
- checked: !!props.checked,
412
- onCheckedChange: (v) => props.onCheckedChange?.(v),
413
- ...props
414
- }, undefined, false, undefined, this);
415
- var RadioGroup = (props) => /* @__PURE__ */ jsxDEV4(RadioGroupUiKit, {
416
- ...props,
417
- children: props.options?.map((o) => /* @__PURE__ */ jsxDEV4("div", {
418
- className: "flex items-center gap-3",
434
+ }
435
+
436
+ // src/components/legal/organisms/ContactForm.tsx
437
+ import { jsxDEV as jsxDEV5 } from "react/jsx-dev-runtime";
438
+ function ContactForm({
439
+ labels = { submit: "Envoyer" },
440
+ initialValue = { name: "", email: "", subject: "", message: "" },
441
+ disabled,
442
+ onSubmit
443
+ }) {
444
+ const [value, setValue] = React2.useState(initialValue);
445
+ const [loading, setLoading] = React2.useState(false);
446
+ const handleSubmit = async (e) => {
447
+ e.preventDefault();
448
+ if (!onSubmit)
449
+ return;
450
+ setLoading(true);
451
+ try {
452
+ await onSubmit(value);
453
+ } finally {
454
+ setLoading(false);
455
+ }
456
+ };
457
+ return /* @__PURE__ */ jsxDEV5("form", {
458
+ onSubmit: handleSubmit,
459
+ className: "space-y-6",
419
460
  children: [
420
- /* @__PURE__ */ jsxDEV4(RadioGroupItem, {
421
- value: o.value,
422
- id: o.value
461
+ /* @__PURE__ */ jsxDEV5(ContactFields, {
462
+ value,
463
+ onChange: setValue,
464
+ disabled: disabled || loading
423
465
  }, undefined, false, undefined, this),
424
- /* @__PURE__ */ jsxDEV4(Label, {
425
- htmlFor: o.value,
426
- children: o.label
466
+ /* @__PURE__ */ jsxDEV5(Button, {
467
+ disabled: disabled || loading,
468
+ type: "submit",
469
+ children: loading ? "Envoi\u2026" : labels.submit
427
470
  }, undefined, false, undefined, this)
428
471
  ]
429
- }, o.value, true, undefined, this))
430
- }, undefined, false, undefined, this);
431
- var Switch = (props) => /* @__PURE__ */ jsxDEV4(SwitchUiKit, {
432
- checked: !!props.checked,
433
- onCheckedChange: (v) => props.onCheckedChange?.(v),
434
- ...props
435
- }, undefined, false, undefined, this);
436
- var formRenderer = createFormRenderer({
437
- driver: shadcnDriver({
438
- Field: FieldWrap,
439
- FieldLabel,
440
- FieldDescription,
441
- FieldError,
442
- FieldGroup,
443
- FieldSet: (p) => /* @__PURE__ */ jsxDEV4("fieldset", {
444
- ...p
445
- }, undefined, false, undefined, this),
446
- FieldLegend: (p) => /* @__PURE__ */ jsxDEV4("legend", {
447
- ...p
448
- }, undefined, false, undefined, this),
449
- Input,
450
- Textarea,
451
- Select,
452
- Checkbox,
453
- RadioGroup,
454
- Switch,
455
- Button
456
- })
457
- });
458
- // src/components/legal/organisms/LegalPageLayout.tsx
459
- import { cn as cn4 } from "@contractspec/lib.ui-kit-web/ui/utils";
472
+ }, undefined, true, undefined, this);
473
+ }
474
+ // src/components/legal/organisms/GDPRDataRequest.tsx
475
+ import * as React3 from "react";
460
476
 
461
477
  // src/components/legal/atoms/LegalHeading.tsx
462
- import { cva } from "class-variance-authority";
463
478
  import { cn } from "@contractspec/lib.ui-kit-web/ui/utils";
464
- import { jsxDEV as jsxDEV5 } from "react/jsx-dev-runtime";
479
+ import { cva } from "class-variance-authority";
480
+ import { jsxDEV as jsxDEV6 } from "react/jsx-dev-runtime";
465
481
  var headingVariants = cva("text-foreground tracking-tight", {
466
482
  variants: {
467
483
  level: {
468
- h1: "text-3xl font-semibold md:text-4xl",
469
- h2: "text-2xl font-semibold md:text-3xl",
470
- h3: "text-xl font-semibold md:text-2xl",
471
- h4: "text-lg font-semibold md:text-xl"
484
+ h1: "font-semibold text-3xl md:text-4xl",
485
+ h2: "font-semibold text-2xl md:text-3xl",
486
+ h3: "font-semibold text-xl md:text-2xl",
487
+ h4: "font-semibold text-lg md:text-xl"
472
488
  },
473
489
  tone: {
474
490
  default: "",
@@ -497,153 +513,141 @@ function LegalHeading({
497
513
  ...props
498
514
  }) {
499
515
  const Comp = as ?? level ?? "h2";
500
- return /* @__PURE__ */ jsxDEV5(Comp, {
516
+ return /* @__PURE__ */ jsxDEV6(Comp, {
501
517
  className: cn(headingVariants({ level, tone, spacing }), className),
502
518
  ...props
503
519
  }, undefined, false, undefined, this);
504
520
  }
505
521
 
506
- // src/components/legal/molecules/LegalMeta.tsx
522
+ // src/components/legal/atoms/LegalSection.tsx
507
523
  import { cn as cn2 } from "@contractspec/lib.ui-kit-web/ui/utils";
508
- import { jsxDEV as jsxDEV6 } from "react/jsx-dev-runtime";
509
- function LegalMeta({
510
- lastUpdated,
511
- version,
512
- className
513
- }) {
514
- const fmtDate = (d) => {
515
- if (!d)
516
- return null;
517
- try {
518
- const date = typeof d === "string" ? new Date(d) : d;
519
- return date.toLocaleDateString();
520
- } catch {
521
- return String(d);
522
- }
523
- };
524
- return /* @__PURE__ */ jsxDEV6("div", {
525
- className: cn2("text-muted-foreground text-base", className),
526
- children: [
527
- version && /* @__PURE__ */ jsxDEV6("span", {
528
- children: [
529
- "Version ",
530
- version
531
- ]
532
- }, undefined, true, undefined, this),
533
- version && lastUpdated && /* @__PURE__ */ jsxDEV6("span", {
534
- className: "mx-2",
535
- children: "\u2022"
536
- }, undefined, false, undefined, this),
537
- lastUpdated && /* @__PURE__ */ jsxDEV6("span", {
538
- children: [
539
- "Derni\xE8re mise \xE0 jour: ",
540
- fmtDate(lastUpdated)
541
- ]
542
- }, undefined, true, undefined, this)
543
- ]
544
- }, undefined, true, undefined, this);
545
- }
546
-
547
- // src/components/legal/molecules/LegalTOC.tsx
548
524
  import { cva as cva2 } from "class-variance-authority";
549
- import { cn as cn3 } from "@contractspec/lib.ui-kit-web/ui/utils";
550
525
  import { jsxDEV as jsxDEV7 } from "react/jsx-dev-runtime";
551
- var tocVariants = cva2("text-base", {
526
+ var sectionVariants = cva2("space-y-3", {
552
527
  variants: {
553
- variant: {
554
- sidebar: "space-y-2",
555
- inline: "flex flex-wrap gap-3"
528
+ spacing: {
529
+ sm: "py-3",
530
+ md: "py-4",
531
+ lg: "py-6"
556
532
  },
557
- size: {
558
- sm: "",
559
- md: "text-base"
533
+ border: {
534
+ none: "",
535
+ top: "border-t",
536
+ bottom: "border-b",
537
+ both: "border-y"
538
+ },
539
+ tone: {
540
+ plain: "",
541
+ subtle: "bg-muted/30"
560
542
  }
561
543
  },
562
- defaultVariants: { variant: "sidebar", size: "md" }
544
+ defaultVariants: {
545
+ spacing: "md",
546
+ border: "none",
547
+ tone: "plain"
548
+ }
563
549
  });
564
- function LegalTOC({
565
- items,
566
- activeHref,
567
- onNavigate,
568
- variant,
569
- size,
550
+ function LegalSection({
551
+ spacing,
552
+ border,
553
+ tone,
570
554
  className,
571
555
  ...props
572
556
  }) {
573
- return /* @__PURE__ */ jsxDEV7("nav", {
574
- "aria-label": "Table of contents",
575
- className: cn3(tocVariants({ variant, size }), className),
576
- ...props,
577
- children: variant === "inline" ? items.map((it) => /* @__PURE__ */ jsxDEV7("a", {
578
- href: it.href,
579
- onClick: (_e) => {
580
- onNavigate?.(it.href);
581
- },
582
- className: cn3("hover:bg-accent hover:text-accent-foreground rounded-xs px-2 py-1", activeHref === it.href && "bg-accent text-accent-foreground"),
583
- children: it.label
584
- }, it.href, false, undefined, this)) : /* @__PURE__ */ jsxDEV7("ul", {
585
- className: "list-none space-y-2 pl-0",
586
- children: items.map((it) => /* @__PURE__ */ jsxDEV7("li", {
587
- children: /* @__PURE__ */ jsxDEV7("a", {
588
- href: it.href,
589
- onClick: () => onNavigate?.(it.href),
590
- className: cn3("hover:bg-accent hover:text-accent-foreground block rounded-xs px-2 py-1", activeHref === it.href && "bg-accent text-accent-foreground"),
591
- children: it.label
592
- }, undefined, false, undefined, this)
593
- }, it.href, false, undefined, this))
594
- }, undefined, false, undefined, this)
557
+ return /* @__PURE__ */ jsxDEV7("div", {
558
+ className: cn2(sectionVariants({ spacing, border, tone }), className),
559
+ ...props
595
560
  }, undefined, false, undefined, this);
596
561
  }
597
562
 
598
- // src/components/legal/organisms/LegalPageLayout.tsx
563
+ // src/components/legal/atoms/LegalText.tsx
564
+ import { cn as cn3 } from "@contractspec/lib.ui-kit-web/ui/utils";
565
+ import { cva as cva3 } from "class-variance-authority";
599
566
  import { jsxDEV as jsxDEV8 } from "react/jsx-dev-runtime";
600
- function LegalPageLayout({
601
- title,
602
- meta,
603
- toc,
604
- children,
605
- className
567
+ var textVariants = cva3("text-base leading-relaxed", {
568
+ variants: {
569
+ tone: {
570
+ default: "text-foreground",
571
+ muted: "text-muted-foreground",
572
+ danger: "text-destructive"
573
+ },
574
+ size: {
575
+ base: "text-base",
576
+ sm: "text-sm",
577
+ lg: "text-lg"
578
+ },
579
+ spacing: {
580
+ none: "",
581
+ sm: "mt-2",
582
+ md: "mt-3",
583
+ lg: "mt-4"
584
+ }
585
+ },
586
+ defaultVariants: {
587
+ tone: "default",
588
+ size: "base",
589
+ spacing: "sm"
590
+ }
591
+ });
592
+ function LegalText({
593
+ as = "p",
594
+ tone,
595
+ size,
596
+ spacing,
597
+ className,
598
+ ...props
599
+ }) {
600
+ const Comp = as;
601
+ return /* @__PURE__ */ jsxDEV8(Comp, {
602
+ className: cn3(textVariants({ tone, size, spacing }), className),
603
+ ...props
604
+ }, undefined, false, undefined, this);
605
+ }
606
+
607
+ // src/components/legal/organisms/GDPRDataRequest.tsx
608
+ import { jsxDEV as jsxDEV9 } from "react/jsx-dev-runtime";
609
+ function GDPRDataRequest({
610
+ onExport,
611
+ onDelete,
612
+ labels = { export: "Demander une copie", delete: "Demander la suppression" }
606
613
  }) {
607
- return /* @__PURE__ */ jsxDEV8("div", {
608
- className: cn4("mx-auto w-full max-w-6xl px-4 py-8 md:py-12", className),
614
+ const [loading, setLoading] = React3.useState(null);
615
+ const handle = async (kind) => {
616
+ const fn = kind === "export" ? onExport : onDelete;
617
+ if (!fn)
618
+ return;
619
+ setLoading(kind);
620
+ try {
621
+ await fn();
622
+ } finally {
623
+ setLoading(null);
624
+ }
625
+ };
626
+ return /* @__PURE__ */ jsxDEV9(LegalSection, {
627
+ border: "top",
628
+ className: "space-y-3",
609
629
  children: [
610
- /* @__PURE__ */ jsxDEV8("div", {
611
- className: "mb-6 space-y-2",
612
- children: [
613
- /* @__PURE__ */ jsxDEV8(LegalHeading, {
614
- as: "h1",
615
- level: "h1",
616
- spacing: "sm",
617
- children: title
618
- }, undefined, false, undefined, this),
619
- meta && /* @__PURE__ */ jsxDEV8(LegalMeta, {
620
- lastUpdated: meta.lastUpdated,
621
- version: meta.version
622
- }, undefined, false, undefined, this)
623
- ]
624
- }, undefined, true, undefined, this),
625
- toc && toc.length > 0 && /* @__PURE__ */ jsxDEV8("div", {
626
- className: "mb-6 md:hidden",
627
- children: /* @__PURE__ */ jsxDEV8(LegalTOC, {
628
- items: toc,
629
- variant: "inline"
630
- }, undefined, false, undefined, this)
630
+ /* @__PURE__ */ jsxDEV9(LegalHeading, {
631
+ as: "h2",
632
+ level: "h2",
633
+ children: "Demandes de donn\xE9es"
631
634
  }, undefined, false, undefined, this),
632
- /* @__PURE__ */ jsxDEV8("div", {
633
- className: "grid grid-cols-1 gap-8 md:grid-cols-[220px_minmax(0,1fr)]",
635
+ /* @__PURE__ */ jsxDEV9(LegalText, {
636
+ children: "Vous pouvez demander une copie de vos donn\xE9es ou solliciter leur suppression. Ces demandes n\xE9cessitent une v\xE9rification d\u2019identit\xE9 et sont trait\xE9es dans les d\xE9lais l\xE9gaux."
637
+ }, undefined, false, undefined, this),
638
+ /* @__PURE__ */ jsxDEV9("div", {
639
+ className: "flex flex-wrap gap-3",
634
640
  children: [
635
- toc && toc.length > 0 ? /* @__PURE__ */ jsxDEV8("aside", {
636
- className: "sticky top-24 hidden self-start md:block",
637
- children: /* @__PURE__ */ jsxDEV8(LegalTOC, {
638
- items: toc,
639
- variant: "sidebar"
640
- }, undefined, false, undefined, this)
641
- }, undefined, false, undefined, this) : /* @__PURE__ */ jsxDEV8("div", {
642
- className: "hidden md:block"
641
+ /* @__PURE__ */ jsxDEV9(Button, {
642
+ onPress: () => handle("export"),
643
+ disabled: loading !== null,
644
+ children: loading === "export" ? "Envoi\u2026" : labels.export
643
645
  }, undefined, false, undefined, this),
644
- /* @__PURE__ */ jsxDEV8("article", {
645
- className: "prose text-foreground max-w-none",
646
- children
646
+ /* @__PURE__ */ jsxDEV9(Button, {
647
+ variant: "destructive",
648
+ onPress: () => handle("delete"),
649
+ disabled: loading !== null,
650
+ children: loading === "delete" ? "Envoi\u2026" : labels.delete
647
651
  }, undefined, false, undefined, this)
648
652
  ]
649
653
  }, undefined, true, undefined, this)
@@ -651,10 +655,10 @@ function LegalPageLayout({
651
655
  }, undefined, true, undefined, this);
652
656
  }
653
657
  // src/components/legal/atoms/LegalList.tsx
654
- import { cva as cva3 } from "class-variance-authority";
655
- import { cn as cn5 } from "@contractspec/lib.ui-kit-web/ui/utils";
656
- import { jsxDEV as jsxDEV9 } from "react/jsx-dev-runtime";
657
- var listVariants = cva3("", {
658
+ import { cn as cn4 } from "@contractspec/lib.ui-kit-web/ui/utils";
659
+ import { cva as cva4 } from "class-variance-authority";
660
+ import { jsxDEV as jsxDEV10 } from "react/jsx-dev-runtime";
661
+ var listVariants = cva4("", {
658
662
  variants: {
659
663
  type: {
660
664
  unordered: "list-disc pl-6",
@@ -680,54 +684,13 @@ function LegalList({
680
684
  ...props
681
685
  }) {
682
686
  const Comp = type === "ordered" ? "ol" : "ul";
683
- return /* @__PURE__ */ jsxDEV9(Comp, {
684
- className: cn5(listVariants({ type, spacing }), className),
687
+ return /* @__PURE__ */ jsxDEV10(Comp, {
688
+ className: cn4(listVariants({ type, spacing }), className),
685
689
  ...props,
686
690
  children
687
691
  }, undefined, false, undefined, this);
688
692
  }
689
693
 
690
- // src/components/legal/atoms/LegalSection.tsx
691
- import { cva as cva4 } from "class-variance-authority";
692
- import { cn as cn6 } from "@contractspec/lib.ui-kit-web/ui/utils";
693
- import { jsxDEV as jsxDEV10 } from "react/jsx-dev-runtime";
694
- var sectionVariants = cva4("space-y-3", {
695
- variants: {
696
- spacing: {
697
- sm: "py-3",
698
- md: "py-4",
699
- lg: "py-6"
700
- },
701
- border: {
702
- none: "",
703
- top: "border-t",
704
- bottom: "border-b",
705
- both: "border-y"
706
- },
707
- tone: {
708
- plain: "",
709
- subtle: "bg-muted/30"
710
- }
711
- },
712
- defaultVariants: {
713
- spacing: "md",
714
- border: "none",
715
- tone: "plain"
716
- }
717
- });
718
- function LegalSection({
719
- spacing,
720
- border,
721
- tone,
722
- className,
723
- ...props
724
- }) {
725
- return /* @__PURE__ */ jsxDEV10("div", {
726
- className: cn6(sectionVariants({ spacing, border, tone }), className),
727
- ...props
728
- }, undefined, false, undefined, this);
729
- }
730
-
731
694
  // src/components/legal/organisms/GDPRRights.tsx
732
695
  import { jsxDEV as jsxDEV11 } from "react/jsx-dev-runtime";
733
696
  function GDPRRights({
@@ -757,213 +720,150 @@ function GDPRRights({
757
720
  ]
758
721
  }, undefined, true, undefined, this);
759
722
  }
760
- // src/components/legal/organisms/ContactForm.tsx
761
- import * as React2 from "react";
723
+ // src/components/legal/organisms/LegalPageLayout.tsx
724
+ import { cn as cn7 } from "@contractspec/lib.ui-kit-web/ui/utils";
762
725
 
763
- // src/components/legal/molecules/ContactFields.tsx
764
- import { Label as Label2 } from "@contractspec/lib.ui-kit-web/ui/label";
726
+ // src/components/legal/molecules/LegalMeta.tsx
727
+ import { cn as cn5 } from "@contractspec/lib.ui-kit-web/ui/utils";
765
728
  import { jsxDEV as jsxDEV12 } from "react/jsx-dev-runtime";
766
- function ContactFields({
767
- value,
768
- onChange,
769
- disabled
729
+ function LegalMeta({
730
+ lastUpdated,
731
+ version,
732
+ className
770
733
  }) {
734
+ const fmtDate = (d) => {
735
+ if (!d)
736
+ return null;
737
+ try {
738
+ const date = typeof d === "string" ? new Date(d) : d;
739
+ return date.toLocaleDateString();
740
+ } catch {
741
+ return String(d);
742
+ }
743
+ };
771
744
  return /* @__PURE__ */ jsxDEV12("div", {
772
- className: "space-y-4",
745
+ className: cn5("text-base text-muted-foreground", className),
773
746
  children: [
774
- /* @__PURE__ */ jsxDEV12("div", {
775
- className: "space-y-2",
776
- children: [
777
- /* @__PURE__ */ jsxDEV12(Label2, {
778
- children: "Nom"
779
- }, undefined, false, undefined, this),
780
- /* @__PURE__ */ jsxDEV12(Input, {
781
- value: value.name,
782
- onChange: (e) => onChange({ ...value, name: e.target.value }),
783
- disabled
784
- }, undefined, false, undefined, this)
785
- ]
786
- }, undefined, true, undefined, this),
787
- /* @__PURE__ */ jsxDEV12("div", {
788
- className: "space-y-2",
789
- children: [
790
- /* @__PURE__ */ jsxDEV12(Label2, {
791
- children: "Email"
792
- }, undefined, false, undefined, this),
793
- /* @__PURE__ */ jsxDEV12(Input, {
794
- type: "email",
795
- value: value.email,
796
- onChange: (e) => onChange({ ...value, email: e.target.value }),
797
- disabled
798
- }, undefined, false, undefined, this)
799
- ]
800
- }, undefined, true, undefined, this),
801
- /* @__PURE__ */ jsxDEV12("div", {
802
- className: "space-y-2",
747
+ version && /* @__PURE__ */ jsxDEV12("span", {
803
748
  children: [
804
- /* @__PURE__ */ jsxDEV12(Label2, {
805
- children: "Objet"
806
- }, undefined, false, undefined, this),
807
- /* @__PURE__ */ jsxDEV12(Input, {
808
- value: value.subject,
809
- onChange: (e) => onChange({
810
- ...value,
811
- subject: e.target.value
812
- }),
813
- disabled
814
- }, undefined, false, undefined, this)
749
+ "Version ",
750
+ version
815
751
  ]
816
752
  }, undefined, true, undefined, this),
817
- /* @__PURE__ */ jsxDEV12("div", {
818
- className: "space-y-2",
753
+ version && lastUpdated && /* @__PURE__ */ jsxDEV12("span", {
754
+ className: "mx-2",
755
+ children: "\u2022"
756
+ }, undefined, false, undefined, this),
757
+ lastUpdated && /* @__PURE__ */ jsxDEV12("span", {
819
758
  children: [
820
- /* @__PURE__ */ jsxDEV12(Label2, {
821
- children: "Message"
822
- }, undefined, false, undefined, this),
823
- /* @__PURE__ */ jsxDEV12(Textarea, {
824
- value: value.message,
825
- onChange: (e) => onChange({
826
- ...value,
827
- message: e.target.value
828
- }),
829
- disabled,
830
- rows: 6
831
- }, undefined, false, undefined, this)
759
+ "Derni\xE8re mise \xE0 jour: ",
760
+ fmtDate(lastUpdated)
832
761
  ]
833
762
  }, undefined, true, undefined, this)
834
763
  ]
835
764
  }, undefined, true, undefined, this);
836
765
  }
837
766
 
838
- // src/components/legal/organisms/ContactForm.tsx
767
+ // src/components/legal/molecules/LegalTOC.tsx
768
+ import { cn as cn6 } from "@contractspec/lib.ui-kit-web/ui/utils";
769
+ import { cva as cva5 } from "class-variance-authority";
839
770
  import { jsxDEV as jsxDEV13 } from "react/jsx-dev-runtime";
840
- function ContactForm({
841
- labels = { submit: "Envoyer" },
842
- initialValue = { name: "", email: "", subject: "", message: "" },
843
- disabled,
844
- onSubmit
845
- }) {
846
- const [value, setValue] = React2.useState(initialValue);
847
- const [loading, setLoading] = React2.useState(false);
848
- const handleSubmit = async (e) => {
849
- e.preventDefault();
850
- if (!onSubmit)
851
- return;
852
- setLoading(true);
853
- try {
854
- await onSubmit(value);
855
- } finally {
856
- setLoading(false);
857
- }
858
- };
859
- return /* @__PURE__ */ jsxDEV13("form", {
860
- onSubmit: handleSubmit,
861
- className: "space-y-6",
862
- children: [
863
- /* @__PURE__ */ jsxDEV13(ContactFields, {
864
- value,
865
- onChange: setValue,
866
- disabled: disabled || loading
867
- }, undefined, false, undefined, this),
868
- /* @__PURE__ */ jsxDEV13(Button, {
869
- disabled: disabled || loading,
870
- type: "submit",
871
- children: loading ? "Envoi\u2026" : labels.submit
872
- }, undefined, false, undefined, this)
873
- ]
874
- }, undefined, true, undefined, this);
875
- }
876
- // src/components/legal/organisms/GDPRDataRequest.tsx
877
- import * as React3 from "react";
878
-
879
- // src/components/legal/atoms/LegalText.tsx
880
- import { cva as cva5 } from "class-variance-authority";
881
- import { cn as cn7 } from "@contractspec/lib.ui-kit-web/ui/utils";
882
- import { jsxDEV as jsxDEV14 } from "react/jsx-dev-runtime";
883
- var textVariants = cva5("text-base leading-relaxed", {
771
+ var tocVariants = cva5("text-base", {
884
772
  variants: {
885
- tone: {
886
- default: "text-foreground",
887
- muted: "text-muted-foreground",
888
- danger: "text-destructive"
773
+ variant: {
774
+ sidebar: "space-y-2",
775
+ inline: "flex flex-wrap gap-3"
889
776
  },
890
777
  size: {
891
- base: "text-base",
892
- sm: "text-sm",
893
- lg: "text-lg"
894
- },
895
- spacing: {
896
- none: "",
897
- sm: "mt-2",
898
- md: "mt-3",
899
- lg: "mt-4"
778
+ sm: "",
779
+ md: "text-base"
900
780
  }
901
781
  },
902
- defaultVariants: {
903
- tone: "default",
904
- size: "base",
905
- spacing: "sm"
906
- }
782
+ defaultVariants: { variant: "sidebar", size: "md" }
907
783
  });
908
- function LegalText({
909
- as = "p",
910
- tone,
784
+ function LegalTOC({
785
+ items,
786
+ activeHref,
787
+ onNavigate,
788
+ variant,
911
789
  size,
912
- spacing,
913
790
  className,
914
791
  ...props
915
792
  }) {
916
- const Comp = as;
917
- return /* @__PURE__ */ jsxDEV14(Comp, {
918
- className: cn7(textVariants({ tone, size, spacing }), className),
919
- ...props
793
+ return /* @__PURE__ */ jsxDEV13("nav", {
794
+ "aria-label": "Table of contents",
795
+ className: cn6(tocVariants({ variant, size }), className),
796
+ ...props,
797
+ children: variant === "inline" ? items.map((it) => /* @__PURE__ */ jsxDEV13("a", {
798
+ href: it.href,
799
+ onClick: (_e) => {
800
+ onNavigate?.(it.href);
801
+ },
802
+ className: cn6("rounded-xs px-2 py-1 hover:bg-accent hover:text-accent-foreground", activeHref === it.href && "bg-accent text-accent-foreground"),
803
+ children: it.label
804
+ }, it.href, false, undefined, this)) : /* @__PURE__ */ jsxDEV13("ul", {
805
+ className: "list-none space-y-2 pl-0",
806
+ children: items.map((it) => /* @__PURE__ */ jsxDEV13("li", {
807
+ children: /* @__PURE__ */ jsxDEV13("a", {
808
+ href: it.href,
809
+ onClick: () => onNavigate?.(it.href),
810
+ className: cn6("block rounded-xs px-2 py-1 hover:bg-accent hover:text-accent-foreground", activeHref === it.href && "bg-accent text-accent-foreground"),
811
+ children: it.label
812
+ }, undefined, false, undefined, this)
813
+ }, it.href, false, undefined, this))
814
+ }, undefined, false, undefined, this)
920
815
  }, undefined, false, undefined, this);
921
816
  }
922
817
 
923
- // src/components/legal/organisms/GDPRDataRequest.tsx
924
- import { jsxDEV as jsxDEV15 } from "react/jsx-dev-runtime";
925
- function GDPRDataRequest({
926
- onExport,
927
- onDelete,
928
- labels = { export: "Demander une copie", delete: "Demander la suppression" }
818
+ // src/components/legal/organisms/LegalPageLayout.tsx
819
+ import { jsxDEV as jsxDEV14 } from "react/jsx-dev-runtime";
820
+ function LegalPageLayout({
821
+ title,
822
+ meta,
823
+ toc,
824
+ children,
825
+ className
929
826
  }) {
930
- const [loading, setLoading] = React3.useState(null);
931
- const handle = async (kind) => {
932
- const fn = kind === "export" ? onExport : onDelete;
933
- if (!fn)
934
- return;
935
- setLoading(kind);
936
- try {
937
- await fn();
938
- } finally {
939
- setLoading(null);
940
- }
941
- };
942
- return /* @__PURE__ */ jsxDEV15(LegalSection, {
943
- border: "top",
944
- className: "space-y-3",
827
+ return /* @__PURE__ */ jsxDEV14("div", {
828
+ className: cn7("mx-auto w-full max-w-6xl px-4 py-8 md:py-12", className),
945
829
  children: [
946
- /* @__PURE__ */ jsxDEV15(LegalHeading, {
947
- as: "h2",
948
- level: "h2",
949
- children: "Demandes de donn\xE9es"
950
- }, undefined, false, undefined, this),
951
- /* @__PURE__ */ jsxDEV15(LegalText, {
952
- children: "Vous pouvez demander une copie de vos donn\xE9es ou solliciter leur suppression. Ces demandes n\xE9cessitent une v\xE9rification d\u2019identit\xE9 et sont trait\xE9es dans les d\xE9lais l\xE9gaux."
830
+ /* @__PURE__ */ jsxDEV14("div", {
831
+ className: "mb-6 space-y-2",
832
+ children: [
833
+ /* @__PURE__ */ jsxDEV14(LegalHeading, {
834
+ as: "h1",
835
+ level: "h1",
836
+ spacing: "sm",
837
+ children: title
838
+ }, undefined, false, undefined, this),
839
+ meta && /* @__PURE__ */ jsxDEV14(LegalMeta, {
840
+ lastUpdated: meta.lastUpdated,
841
+ version: meta.version
842
+ }, undefined, false, undefined, this)
843
+ ]
844
+ }, undefined, true, undefined, this),
845
+ toc && toc.length > 0 && /* @__PURE__ */ jsxDEV14("div", {
846
+ className: "mb-6 md:hidden",
847
+ children: /* @__PURE__ */ jsxDEV14(LegalTOC, {
848
+ items: toc,
849
+ variant: "inline"
850
+ }, undefined, false, undefined, this)
953
851
  }, undefined, false, undefined, this),
954
- /* @__PURE__ */ jsxDEV15("div", {
955
- className: "flex flex-wrap gap-3",
852
+ /* @__PURE__ */ jsxDEV14("div", {
853
+ className: "grid grid-cols-1 gap-8 md:grid-cols-[220px_minmax(0,1fr)]",
956
854
  children: [
957
- /* @__PURE__ */ jsxDEV15(Button, {
958
- onPress: () => handle("export"),
959
- disabled: loading !== null,
960
- children: loading === "export" ? "Envoi\u2026" : labels.export
855
+ toc && toc.length > 0 ? /* @__PURE__ */ jsxDEV14("aside", {
856
+ className: "sticky top-24 hidden self-start md:block",
857
+ children: /* @__PURE__ */ jsxDEV14(LegalTOC, {
858
+ items: toc,
859
+ variant: "sidebar"
860
+ }, undefined, false, undefined, this)
861
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsxDEV14("div", {
862
+ className: "hidden md:block"
961
863
  }, undefined, false, undefined, this),
962
- /* @__PURE__ */ jsxDEV15(Button, {
963
- variant: "destructive",
964
- onPress: () => handle("delete"),
965
- disabled: loading !== null,
966
- children: loading === "delete" ? "Envoi\u2026" : labels.delete
864
+ /* @__PURE__ */ jsxDEV14("article", {
865
+ className: "prose max-w-none text-foreground",
866
+ children
967
867
  }, undefined, false, undefined, this)
968
868
  ]
969
869
  }, undefined, true, undefined, this)
@@ -990,6 +890,128 @@ function withPlatformUI(options) {
990
890
  breakpoints
991
891
  };
992
892
  }
893
+ // src/renderers/form-contract.tsx
894
+ import { shadcnDriver } from "@contractspec/lib.contracts-runtime-client-react/drivers/shadcn";
895
+ import { createFormRenderer } from "@contractspec/lib.contracts-runtime-client-react/form-render";
896
+ import { Checkbox as CheckboxUiKit } from "@contractspec/lib.ui-kit-web/ui/checkbox";
897
+ import {
898
+ FieldDescription,
899
+ FieldError,
900
+ FieldGroup,
901
+ FieldLabel,
902
+ Field as FieldWrap
903
+ } from "@contractspec/lib.ui-kit-web/ui/field";
904
+ import { Label as Label2 } from "@contractspec/lib.ui-kit-web/ui/label";
905
+ import {
906
+ RadioGroupItem,
907
+ RadioGroup as RadioGroupUiKit
908
+ } from "@contractspec/lib.ui-kit-web/ui/radio-group";
909
+ import {
910
+ SelectContent,
911
+ SelectGroup,
912
+ SelectItem,
913
+ SelectTrigger,
914
+ Select as SelectUiKit,
915
+ SelectValue
916
+ } from "@contractspec/lib.ui-kit-web/ui/select";
917
+ import { Switch as SwitchUiKit } from "@contractspec/lib.ui-kit-web/ui/switch";
918
+ import { jsxDEV as jsxDEV15 } from "react/jsx-dev-runtime";
919
+ "use client";
920
+ var Select = (props) => {
921
+ const { options, value, onChange, ...rest } = props;
922
+ return /* @__PURE__ */ jsxDEV15(SelectUiKit, {
923
+ value: value ?? "",
924
+ onValueChange: (v) => onChange?.(v),
925
+ ...rest,
926
+ children: [
927
+ /* @__PURE__ */ jsxDEV15(SelectTrigger, {
928
+ className: "w-[180px]",
929
+ children: /* @__PURE__ */ jsxDEV15(SelectValue, {
930
+ placeholder: props.placeholder
931
+ }, undefined, false, undefined, this)
932
+ }, undefined, false, undefined, this),
933
+ /* @__PURE__ */ jsxDEV15(SelectContent, {
934
+ children: /* @__PURE__ */ jsxDEV15(SelectGroup, {
935
+ children: options?.map((o, i) => /* @__PURE__ */ jsxDEV15(SelectItem, {
936
+ value: o.value,
937
+ disabled: o.disabled,
938
+ children: o.labelI18n
939
+ }, i, false, undefined, this))
940
+ }, undefined, false, undefined, this)
941
+ }, undefined, false, undefined, this)
942
+ ]
943
+ }, undefined, true, undefined, this);
944
+ };
945
+ var Checkbox = (props) => /* @__PURE__ */ jsxDEV15(CheckboxUiKit, {
946
+ checked: !!props.checked,
947
+ onCheckedChange: (v) => props.onCheckedChange?.(v),
948
+ ...props
949
+ }, undefined, false, undefined, this);
950
+ var RadioGroup = (props) => /* @__PURE__ */ jsxDEV15(RadioGroupUiKit, {
951
+ ...props,
952
+ children: props.options?.map((o) => /* @__PURE__ */ jsxDEV15("div", {
953
+ className: "flex items-center gap-3",
954
+ children: [
955
+ /* @__PURE__ */ jsxDEV15(RadioGroupItem, {
956
+ value: o.value,
957
+ id: o.value
958
+ }, undefined, false, undefined, this),
959
+ /* @__PURE__ */ jsxDEV15(Label2, {
960
+ htmlFor: o.value,
961
+ children: o.label
962
+ }, undefined, false, undefined, this)
963
+ ]
964
+ }, o.value, true, undefined, this))
965
+ }, undefined, false, undefined, this);
966
+ var Switch = (props) => /* @__PURE__ */ jsxDEV15(SwitchUiKit, {
967
+ checked: !!props.checked,
968
+ onCheckedChange: (v) => props.onCheckedChange?.(v),
969
+ ...props
970
+ }, undefined, false, undefined, this);
971
+ var formRenderer = createFormRenderer({
972
+ driver: shadcnDriver({
973
+ Field: FieldWrap,
974
+ FieldLabel,
975
+ FieldDescription,
976
+ FieldError,
977
+ FieldGroup,
978
+ FieldSet: (p) => /* @__PURE__ */ jsxDEV15("fieldset", {
979
+ ...p
980
+ }, undefined, false, undefined, this),
981
+ FieldLegend: (p) => /* @__PURE__ */ jsxDEV15("legend", {
982
+ ...p
983
+ }, undefined, false, undefined, this),
984
+ Input,
985
+ Textarea,
986
+ Select,
987
+ Checkbox,
988
+ RadioGroup,
989
+ Switch,
990
+ Button
991
+ })
992
+ });
993
+ // src/theme/tokens.ts
994
+ "use client";
995
+ var defaultTokens = {
996
+ colors: {
997
+ background: "#ffffff",
998
+ foreground: "#0a0a0a",
999
+ muted: "#f4f4f5",
1000
+ mutedForeground: "#71717a",
1001
+ primary: "#0f49a0",
1002
+ primaryForeground: "#ffffff",
1003
+ accent: "#16a34a",
1004
+ accentForeground: "#ffffff",
1005
+ destructive: "#ef4444",
1006
+ destructiveForeground: "#ffffff",
1007
+ border: "#e4e4e7",
1008
+ ring: "#2563eb"
1009
+ },
1010
+ radii: { sm: 4, md: 8, lg: 12, xl: 16, full: 9999 },
1011
+ space: { xs: 4, sm: 8, md: 12, lg: 16, xl: 24 },
1012
+ typography: { h1: 30, h2: 24, h3: 20, body: 16, small: 14 },
1013
+ icons: { sm: 16, md: 20, lg: 24 }
1014
+ };
993
1015
  // src/theme/variants.ts
994
1016
  import { cva as cva6 } from "class-variance-authority";
995
1017
  "use client";
@@ -1024,28 +1046,6 @@ var dsBaseVariants = cva6("", {
1024
1046
  emphasis: "default"
1025
1047
  }
1026
1048
  });
1027
- // src/theme/tokens.ts
1028
- "use client";
1029
- var defaultTokens = {
1030
- colors: {
1031
- background: "#ffffff",
1032
- foreground: "#0a0a0a",
1033
- muted: "#f4f4f5",
1034
- mutedForeground: "#71717a",
1035
- primary: "#0f49a0",
1036
- primaryForeground: "#ffffff",
1037
- accent: "#16a34a",
1038
- accentForeground: "#ffffff",
1039
- destructive: "#ef4444",
1040
- destructiveForeground: "#ffffff",
1041
- border: "#e4e4e7",
1042
- ring: "#2563eb"
1043
- },
1044
- radii: { sm: 4, md: 8, lg: 12, xl: 16, full: 9999 },
1045
- space: { xs: 4, sm: 8, md: 12, lg: 16, xl: 24 },
1046
- typography: { h1: 30, h2: 24, h3: 20, body: 16, small: 14 },
1047
- icons: { sm: 16, md: 20, lg: 24 }
1048
- };
1049
1049
  export {
1050
1050
  withPlatformUI,
1051
1051
  useResponsive,
@@ -1058,10 +1058,14 @@ export {
1058
1058
  dsBaseVariants,
1059
1059
  defaultTokens,
1060
1060
  ZodForm,
1061
+ VisualizationRenderer,
1062
+ VisualizationGrid,
1063
+ VisualizationCard,
1061
1064
  ViewButton,
1062
1065
  ToggleRightButton,
1063
1066
  ToggleLeftButton,
1064
1067
  ToggleButton,
1068
+ TimelineView,
1065
1069
  TimeChip,
1066
1070
  Textarea2 as Textarea,
1067
1071
  TestimonialCarousel,
@@ -1102,6 +1106,7 @@ export {
1102
1106
  MarketingCardDescription,
1103
1107
  MarketingCardContent,
1104
1108
  MarketingCard,
1109
+ MarkdownRenderer,
1105
1110
  LoaderCircular,
1106
1111
  LoaderBlock,
1107
1112
  ListTablePage,
@@ -1161,6 +1166,7 @@ export {
1161
1166
  DataViewRenderer,
1162
1167
  DataViewList,
1163
1168
  DataViewDetail,
1169
+ DataTable,
1164
1170
  DEFAULT_BREAKPOINTS,
1165
1171
  Cta,
1166
1172
  CopyButton,
@@ -1170,6 +1176,7 @@ export {
1170
1176
  ContactFields2 as ContactFields,
1171
1177
  ConsentList,
1172
1178
  ConsentItem,
1179
+ ComparisonView,
1173
1180
  CommandTabs,
1174
1181
  CommandSearchTrigger,
1175
1182
  CommandPalette,