@ugurdemirel/landcraft 0.1.23 → 0.1.24

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 (105) hide show
  1. package/README.md +13 -8
  2. package/dist/cjs/components/Button.cjs +1 -1
  3. package/dist/cjs/components/Button.cjs.map +1 -1
  4. package/dist/cjs/components/CTA/CTA.cjs +1 -1
  5. package/dist/cjs/components/CTA/CTA.cjs.map +1 -1
  6. package/dist/cjs/components/CTA/parts.cjs +1 -1
  7. package/dist/cjs/components/CTA/parts.cjs.map +1 -1
  8. package/dist/cjs/components/CTA/variants/Panel.cjs +1 -1
  9. package/dist/cjs/components/CTA/variants/Panel.cjs.map +1 -1
  10. package/dist/cjs/components/CTA/variants/Surface.cjs +1 -1
  11. package/dist/cjs/components/CTA/variants/Surface.cjs.map +1 -1
  12. package/dist/cjs/components/Footer/Footer.cjs +1 -1
  13. package/dist/cjs/components/Footer/Footer.cjs.map +1 -1
  14. package/dist/cjs/components/Footer/parts.cjs +1 -1
  15. package/dist/cjs/components/Footer/parts.cjs.map +1 -1
  16. package/dist/cjs/components/Footer/variants/Columns.cjs +2 -0
  17. package/dist/cjs/components/Footer/variants/Columns.cjs.map +1 -0
  18. package/dist/cjs/components/Footer/variants/Editorial.cjs +1 -1
  19. package/dist/cjs/components/Footer/variants/Editorial.cjs.map +1 -1
  20. package/dist/cjs/components/Footer/variants/Minimal.cjs +1 -1
  21. package/dist/cjs/components/Footer/variants/Minimal.cjs.map +1 -1
  22. package/dist/cjs/components/Hero/parts.cjs +1 -1
  23. package/dist/cjs/components/Hero/parts.cjs.map +1 -1
  24. package/dist/cjs/components/Hero/variants/Centered.cjs +1 -1
  25. package/dist/cjs/components/Hero/variants/Centered.cjs.map +1 -1
  26. package/dist/cjs/components/Hero/variants/Parallax.cjs +1 -1
  27. package/dist/cjs/components/Hero/variants/Parallax.cjs.map +1 -1
  28. package/dist/cjs/components/Hero/variants/Split.cjs +1 -1
  29. package/dist/cjs/components/Hero/variants/Split.cjs.map +1 -1
  30. package/dist/cjs/components/Hero/variants/Statement.cjs +1 -1
  31. package/dist/cjs/components/Hero/variants/Statement.cjs.map +1 -1
  32. package/dist/cjs/components/LanguageSwitcher/parts.cjs +1 -1
  33. package/dist/cjs/components/LanguageSwitcher/parts.cjs.map +1 -1
  34. package/dist/cjs/components/MegaMenu/MegaMenu.cjs +1 -1
  35. package/dist/cjs/components/MegaMenu/MegaMenu.cjs.map +1 -1
  36. package/dist/cjs/components/Navbar/Navbar.cjs +1 -1
  37. package/dist/cjs/components/Navbar/Navbar.cjs.map +1 -1
  38. package/dist/cjs/components/Stats/Stats.cjs +1 -1
  39. package/dist/cjs/components/Stats/Stats.cjs.map +1 -1
  40. package/dist/cjs/components/Stats/variants/{Hairline.cjs → Divided.cjs} +2 -2
  41. package/dist/cjs/components/Stats/variants/Divided.cjs.map +1 -0
  42. package/dist/cjs/components/Stats/variants/{Editorial.cjs → Stacked.cjs} +2 -2
  43. package/dist/cjs/components/Stats/variants/Stacked.cjs.map +1 -0
  44. package/dist/cjs/utils/surface.cjs +2 -0
  45. package/dist/cjs/utils/surface.cjs.map +1 -0
  46. package/dist/es/components/Button.js +41 -31
  47. package/dist/es/components/Button.js.map +1 -1
  48. package/dist/es/components/CTA/CTA.js +5 -6
  49. package/dist/es/components/CTA/CTA.js.map +1 -1
  50. package/dist/es/components/CTA/parts.js +19 -14
  51. package/dist/es/components/CTA/parts.js.map +1 -1
  52. package/dist/es/components/CTA/variants/Panel.js +15 -17
  53. package/dist/es/components/CTA/variants/Panel.js.map +1 -1
  54. package/dist/es/components/CTA/variants/Surface.js +21 -11
  55. package/dist/es/components/CTA/variants/Surface.js.map +1 -1
  56. package/dist/es/components/Footer/Footer.js +5 -5
  57. package/dist/es/components/Footer/Footer.js.map +1 -1
  58. package/dist/es/components/Footer/parts.js +21 -20
  59. package/dist/es/components/Footer/parts.js.map +1 -1
  60. package/dist/es/components/Footer/variants/Columns.js +76 -0
  61. package/dist/es/components/Footer/variants/Columns.js.map +1 -0
  62. package/dist/es/components/Footer/variants/Editorial.js +68 -35
  63. package/dist/es/components/Footer/variants/Editorial.js.map +1 -1
  64. package/dist/es/components/Footer/variants/Minimal.js +50 -16
  65. package/dist/es/components/Footer/variants/Minimal.js.map +1 -1
  66. package/dist/es/components/Hero/parts.js +13 -11
  67. package/dist/es/components/Hero/parts.js.map +1 -1
  68. package/dist/es/components/Hero/variants/Centered.js +29 -17
  69. package/dist/es/components/Hero/variants/Centered.js.map +1 -1
  70. package/dist/es/components/Hero/variants/Parallax.js +23 -23
  71. package/dist/es/components/Hero/variants/Parallax.js.map +1 -1
  72. package/dist/es/components/Hero/variants/Split.js +35 -23
  73. package/dist/es/components/Hero/variants/Split.js.map +1 -1
  74. package/dist/es/components/Hero/variants/Statement.js +28 -23
  75. package/dist/es/components/Hero/variants/Statement.js.map +1 -1
  76. package/dist/es/components/LanguageSwitcher/parts.js +44 -44
  77. package/dist/es/components/LanguageSwitcher/parts.js.map +1 -1
  78. package/dist/es/components/MegaMenu/MegaMenu.js +131 -126
  79. package/dist/es/components/MegaMenu/MegaMenu.js.map +1 -1
  80. package/dist/es/components/Navbar/Navbar.js +110 -92
  81. package/dist/es/components/Navbar/Navbar.js.map +1 -1
  82. package/dist/es/components/Stats/Stats.js +8 -8
  83. package/dist/es/components/Stats/Stats.js.map +1 -1
  84. package/dist/es/components/Stats/variants/{Hairline.js → Divided.js} +13 -13
  85. package/dist/es/components/Stats/variants/Divided.js.map +1 -0
  86. package/dist/es/components/Stats/variants/{Editorial.js → Stacked.js} +12 -12
  87. package/dist/es/components/Stats/variants/Stacked.js.map +1 -0
  88. package/dist/es/utils/surface.js +16 -0
  89. package/dist/es/utils/surface.js.map +1 -0
  90. package/dist/index.d.ts +48 -9
  91. package/dist/styles.css +79 -98
  92. package/dist/theme.css +27 -0
  93. package/package.json +1 -1
  94. package/dist/cjs/components/CTA/variants/Inverse.cjs +0 -2
  95. package/dist/cjs/components/CTA/variants/Inverse.cjs.map +0 -1
  96. package/dist/cjs/components/Footer/variants/Classic.cjs +0 -2
  97. package/dist/cjs/components/Footer/variants/Classic.cjs.map +0 -1
  98. package/dist/cjs/components/Stats/variants/Editorial.cjs.map +0 -1
  99. package/dist/cjs/components/Stats/variants/Hairline.cjs.map +0 -1
  100. package/dist/es/components/CTA/variants/Inverse.js +0 -42
  101. package/dist/es/components/CTA/variants/Inverse.js.map +0 -1
  102. package/dist/es/components/Footer/variants/Classic.js +0 -43
  103. package/dist/es/components/Footer/variants/Classic.js.map +0 -1
  104. package/dist/es/components/Stats/variants/Editorial.js.map +0 -1
  105. package/dist/es/components/Stats/variants/Hairline.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -186,7 +186,7 @@ export declare interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElem
186
186
 
187
187
  export declare type ButtonSize = "sm" | "md" | "lg";
188
188
 
189
- export declare type ButtonVariant = "primary" | "dark" | "outline" | "ghost" | "link";
189
+ export declare type ButtonVariant = "primary" | "outline" | "ghost" | "link";
190
190
 
191
191
  export declare const Card: ForwardRefExoticComponent<CardProps & RefAttributes<HTMLDivElement>>;
192
192
 
@@ -251,7 +251,8 @@ export declare const Cpu: (props: IconProps) => JSX_2.Element;
251
251
 
252
252
  export declare const CTA: ForwardRefExoticComponent<CTAProps & RefAttributes<HTMLElement>>;
253
253
 
254
- declare type CTAOption = "panel" | "surface" | "inverse";
254
+ /** Layout options — arrangement only. Emphasis tone is the `background` prop. */
255
+ declare type CTAOption = "panel" | "surface";
255
256
 
256
257
  export declare interface CTAProps extends Omit<HTMLAttributes<HTMLElement>, "title"> {
257
258
  title: ReactNode;
@@ -260,6 +261,12 @@ export declare interface CTAProps extends Omit<HTMLAttributes<HTMLElement>, "tit
260
261
  secondaryAction?: ReactNode;
261
262
  option?: CTAOption;
262
263
  align?: "left" | "center";
264
+ /**
265
+ * Overrides the emphasis (`panel`) surface with any CSS color; the text color
266
+ * is derived for contrast via CSS `contrast-color()`. Ignored by `surface`,
267
+ * which sits on the page background.
268
+ */
269
+ background?: string;
263
270
  }
264
271
 
265
272
  export declare const Database: (props: IconProps) => JSX_2.Element;
@@ -382,8 +389,15 @@ export declare interface FooterProps extends Omit<HTMLAttributes<HTMLElement>, "
382
389
  bottom?: ReactNode;
383
390
  /** Optional language switcher rendered in the footer's bottom bar. */
384
391
  languageSwitcher?: ReactNode;
385
- option?: "classic" | "minimal" | "editorial";
392
+ /** Layout options — arrangement only. Tone is the `background` prop. */
393
+ option?: "columns" | "minimal" | "editorial";
386
394
  badge?: ReactNode;
395
+ /**
396
+ * Overrides the footer surface with any CSS color; text colors are derived for
397
+ * contrast via CSS `contrast-color()`. Use it to tint the footer to a brand or
398
+ * dark color.
399
+ */
400
+ background?: string;
387
401
  /** Component used to render footer links. Defaults to `<a>`. Pass your router's `<Link>` (Next.js, Remix, React Router…) for framework-aware navigation. */
388
402
  LinkComponent?: ElementType;
389
403
  }
@@ -427,6 +441,12 @@ export declare interface HeroProps extends Omit<HTMLAttributes<HTMLElement>, "ti
427
441
  meta?: HeroMeta[];
428
442
  /** Floating logo tiles with a mouse parallax effect (`parallax` variant). */
429
443
  logos?: HeroLogo[];
444
+ /**
445
+ * Overrides the emphasis (`statement`) band with any CSS color; the text color
446
+ * is derived for contrast via CSS `contrast-color()`. Layouts on the page
447
+ * background are unaffected.
448
+ */
449
+ background?: string;
430
450
  }
431
451
 
432
452
  declare type HeroVariant = "split" | "centered" | "statement" | "parallax";
@@ -473,7 +493,11 @@ export declare interface LanguageSwitcherProps extends Omit<HTMLAttributes<HTMLD
473
493
  modalTitle?: ReactNode;
474
494
  /** Replace the globe icon with the selected language's flag emoji (and show flags in options). */
475
495
  showFlag?: boolean;
476
- /** Adapts colors for dark surfaces (inverse Navbar, classic Footer). */
496
+ /**
497
+ * Adapts the trigger to a custom/emphasis surface (Navbar `background`,
498
+ * Footer `background`): the trigger inherits `currentColor` instead of the
499
+ * page tokens. Dropdown options keep paper-surface colors.
500
+ */
477
501
  inverse?: boolean;
478
502
  }
479
503
 
@@ -502,7 +526,7 @@ export declare interface LogoItem {
502
526
  export declare const Mail: (props: IconProps) => JSX_2.Element;
503
527
 
504
528
  export declare const MegaMenu: {
505
- ({ className, variant, brand, logo, logoSrc, logoAlt, logoClassName, brandHref, items, actions, cta, languageSwitcher, sticky, LinkComponent, onKeyDown, ...props }: MegaMenuProps): JSX_2.Element;
529
+ ({ className, variant, brand, logo, logoSrc, logoAlt, logoClassName, brandHref, items, actions, cta, languageSwitcher, sticky, background, LinkComponent, onKeyDown, style, ...props }: MegaMenuProps): JSX_2.Element;
506
530
  displayName: string;
507
531
  };
508
532
 
@@ -561,11 +585,18 @@ export declare interface MegaMenuProps extends Omit<HTMLAttributes<HTMLElement>,
561
585
  /** Optional language switcher rendered on the right (desktop) and beside the menu button (mobile). */
562
586
  languageSwitcher?: ReactNode;
563
587
  sticky?: boolean;
588
+ /**
589
+ * Overrides the bar's surface with any CSS color; the text color (and the
590
+ * text/border of outline/ghost buttons inside it) is derived for contrast via
591
+ * CSS `contrast-color()`. Use it to tint the bar to a brand or dark color.
592
+ */
593
+ background?: string;
564
594
  /** Component used to render brand, trigger and panel links. Defaults to `<a>`. Pass your router's `<Link>` (Next.js, Remix, React Router…) for framework-aware navigation. */
565
595
  LinkComponent?: ElementType;
566
596
  }
567
597
 
568
- declare type MegaMenuVariant = "classic" | "floating" | "inverse";
598
+ /** Layout options — arrangement only. Tone is the `background` prop. */
599
+ declare type MegaMenuVariant = "classic" | "floating";
569
600
 
570
601
  export declare const Menu: (props: IconProps) => JSX_2.Element;
571
602
 
@@ -592,7 +623,7 @@ export declare interface ModalProps extends Omit<HTMLAttributes<HTMLDivElement>,
592
623
  }
593
624
 
594
625
  export declare const Navbar: {
595
- ({ className, variant, brand, logo, logoSrc, logoAlt, logoClassName, brandHref, links, actions, cta, languageSwitcher, sticky, LinkComponent, ...props }: NavbarProps): JSX_2.Element;
626
+ ({ className, variant, brand, logo, logoSrc, logoAlt, logoClassName, brandHref, links, actions, cta, languageSwitcher, sticky, background, LinkComponent, style, ...props }: NavbarProps): JSX_2.Element;
596
627
  displayName: string;
597
628
  };
598
629
 
@@ -614,11 +645,18 @@ export declare interface NavbarProps extends Omit<HTMLAttributes<HTMLElement>, "
614
645
  /** Optional language switcher rendered on the right (desktop) and beside the menu button (mobile). */
615
646
  languageSwitcher?: ReactNode;
616
647
  sticky?: boolean;
648
+ /**
649
+ * Overrides the bar's surface with any CSS color; the text color (and the
650
+ * text/border of outline/ghost buttons inside it) is derived for contrast via
651
+ * CSS `contrast-color()`. Use it to tint the bar to a brand or dark color.
652
+ */
653
+ background?: string;
617
654
  /** Component used to render the brand and nav links. Defaults to `<a>`. Pass your router's `<Link>` (Next.js, Remix, React Router…) for framework-aware navigation. */
618
655
  LinkComponent?: ElementType;
619
656
  }
620
657
 
621
- declare type NavbarVariant = "classic" | "floating" | "inverse";
658
+ /** Layout options — arrangement only. Tone is the `background` prop. */
659
+ declare type NavbarVariant = "classic" | "floating";
622
660
 
623
661
  export declare interface NavLink {
624
662
  label: string;
@@ -776,7 +814,8 @@ export declare interface Stat {
776
814
 
777
815
  export declare const Stats: ForwardRefExoticComponent<StatsProps & RefAttributes<HTMLDListElement>>;
778
816
 
779
- declare type StatsOption = "editorial" | "hairline" | "cells" | "ticker";
817
+ /** Layout options — arrangement only. */
818
+ declare type StatsOption = "stacked" | "divided" | "cells" | "ticker";
780
819
 
781
820
  export declare interface StatsProps extends HTMLAttributes<HTMLDListElement> {
782
821
  stats: Stat[];
package/dist/styles.css CHANGED
@@ -2144,9 +2144,6 @@
2144
2144
  .overflow-y-auto {
2145
2145
  overflow-y: auto;
2146
2146
  }
2147
- .rounded {
2148
- border-radius: 0.25rem;
2149
- }
2150
2147
  .rounded-2xl {
2151
2148
  border-radius: var(--radius-2xl);
2152
2149
  }
@@ -2216,6 +2213,18 @@
2216
2213
  .border-current {
2217
2214
  border-color: currentcolor;
2218
2215
  }
2216
+ .border-current\/15 {
2217
+ border-color: currentcolor;
2218
+ @supports (color: color-mix(in lab, red, red)) {
2219
+ border-color: color-mix(in oklab, currentcolor 15%, transparent);
2220
+ }
2221
+ }
2222
+ .border-current\/20 {
2223
+ border-color: currentcolor;
2224
+ @supports (color: color-mix(in lab, red, red)) {
2225
+ border-color: color-mix(in oklab, currentcolor 20%, transparent);
2226
+ }
2227
+ }
2219
2228
  .border-foreground\/20 {
2220
2229
  border-color: color-mix(in srgb, rgb(rgb(var(--color-foreground))) 20%, transparent);
2221
2230
  @supports (color: color-mix(in lab, red, red)) {
@@ -2237,24 +2246,9 @@
2237
2246
  border-color: color-mix(in oklab, var(--color-red-500) 40%, transparent);
2238
2247
  }
2239
2248
  }
2240
- .border-white\/10 {
2241
- border-color: color-mix(in srgb, #fff 10%, transparent);
2242
- @supports (color: color-mix(in lab, red, red)) {
2243
- border-color: color-mix(in oklab, var(--color-white) 10%, transparent);
2244
- }
2245
- }
2246
2249
  .border-t-transparent {
2247
2250
  border-top-color: transparent;
2248
2251
  }
2249
- .bg-\[\#101010\] {
2250
- background-color: #101010;
2251
- }
2252
- .bg-\[\#101010\]\/85 {
2253
- background-color: color-mix(in oklab, #101010 85%, transparent);
2254
- }
2255
- .bg-\[\#161616\] {
2256
- background-color: #161616;
2257
- }
2258
2252
  .bg-accent {
2259
2253
  background-color: rgb(var(--color-accent));
2260
2254
  }
@@ -2291,6 +2285,18 @@
2291
2285
  .bg-current {
2292
2286
  background-color: currentcolor;
2293
2287
  }
2288
+ .bg-current\/15 {
2289
+ background-color: currentcolor;
2290
+ @supports (color: color-mix(in lab, red, red)) {
2291
+ background-color: color-mix(in oklab, currentcolor 15%, transparent);
2292
+ }
2293
+ }
2294
+ .bg-current\/20 {
2295
+ background-color: currentcolor;
2296
+ @supports (color: color-mix(in lab, red, red)) {
2297
+ background-color: color-mix(in oklab, currentcolor 20%, transparent);
2298
+ }
2299
+ }
2294
2300
  .bg-foreground {
2295
2301
  background-color: rgb(var(--color-foreground));
2296
2302
  }
@@ -2315,9 +2321,6 @@
2315
2321
  .bg-on-primary {
2316
2322
  background-color: rgb(var(--color-on-primary));
2317
2323
  }
2318
- .bg-on-secondary {
2319
- background-color: rgb(var(--color-on-secondary));
2320
- }
2321
2324
  .bg-primary {
2322
2325
  background-color: rgb(var(--color-primary));
2323
2326
  }
@@ -2369,12 +2372,6 @@
2369
2372
  background-color: color-mix(in oklab, var(--color-white) 10%, transparent);
2370
2373
  }
2371
2374
  }
2372
- .bg-white\/15 {
2373
- background-color: color-mix(in srgb, #fff 15%, transparent);
2374
- @supports (color: color-mix(in lab, red, red)) {
2375
- background-color: color-mix(in oklab, var(--color-white) 15%, transparent);
2376
- }
2377
- }
2378
2375
  .grain {
2379
2376
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.45'/%3E%3C/svg%3E");
2380
2377
  }
@@ -2663,21 +2660,13 @@
2663
2660
  --tw-leading: calc(var(--spacing) * 7);
2664
2661
  line-height: calc(var(--spacing) * 7);
2665
2662
  }
2666
- .leading-\[1\.02\] {
2667
- --tw-leading: 1.02;
2668
- line-height: 1.02;
2669
- }
2670
- .leading-\[1\.03\] {
2671
- --tw-leading: 1.03;
2672
- line-height: 1.03;
2673
- }
2674
2663
  .leading-\[1\.04\] {
2675
2664
  --tw-leading: 1.04;
2676
2665
  line-height: 1.04;
2677
2666
  }
2678
- .leading-\[1\.06\] {
2679
- --tw-leading: 1.06;
2680
- line-height: 1.06;
2667
+ .leading-\[1\.05\] {
2668
+ --tw-leading: 1.05;
2669
+ line-height: 1.05;
2681
2670
  }
2682
2671
  .leading-\[1\.08\] {
2683
2672
  --tw-leading: 1.08;
@@ -2715,10 +2704,6 @@
2715
2704
  --tw-font-weight: var(--font-weight-semibold);
2716
2705
  font-weight: var(--font-weight-semibold);
2717
2706
  }
2718
- .tracking-\[-0\.02em\] {
2719
- --tw-tracking: -0.02em;
2720
- letter-spacing: -0.02em;
2721
- }
2722
2707
  .tracking-\[-0\.03em\] {
2723
2708
  --tw-tracking: -0.03em;
2724
2709
  letter-spacing: -0.03em;
@@ -2784,6 +2769,30 @@
2784
2769
  .text-current {
2785
2770
  color: currentcolor;
2786
2771
  }
2772
+ .text-current\/50 {
2773
+ color: currentcolor;
2774
+ @supports (color: color-mix(in lab, red, red)) {
2775
+ color: color-mix(in oklab, currentcolor 50%, transparent);
2776
+ }
2777
+ }
2778
+ .text-current\/60 {
2779
+ color: currentcolor;
2780
+ @supports (color: color-mix(in lab, red, red)) {
2781
+ color: color-mix(in oklab, currentcolor 60%, transparent);
2782
+ }
2783
+ }
2784
+ .text-current\/70 {
2785
+ color: currentcolor;
2786
+ @supports (color: color-mix(in lab, red, red)) {
2787
+ color: color-mix(in oklab, currentcolor 70%, transparent);
2788
+ }
2789
+ }
2790
+ .text-current\/80 {
2791
+ color: currentcolor;
2792
+ @supports (color: color-mix(in lab, red, red)) {
2793
+ color: color-mix(in oklab, currentcolor 80%, transparent);
2794
+ }
2795
+ }
2787
2796
  .text-danger {
2788
2797
  color: rgb(var(--color-danger));
2789
2798
  }
@@ -2853,33 +2862,6 @@
2853
2862
  .text-on-primary {
2854
2863
  color: rgb(var(--color-on-primary));
2855
2864
  }
2856
- .text-on-secondary {
2857
- color: rgb(var(--color-on-secondary));
2858
- }
2859
- .text-on-secondary\/45 {
2860
- color: color-mix(in srgb, rgb(rgb(var(--color-on-secondary))) 45%, transparent);
2861
- @supports (color: color-mix(in lab, red, red)) {
2862
- color: color-mix(in oklab, rgb(var(--color-on-secondary)) 45%, transparent);
2863
- }
2864
- }
2865
- .text-on-secondary\/50 {
2866
- color: color-mix(in srgb, rgb(rgb(var(--color-on-secondary))) 50%, transparent);
2867
- @supports (color: color-mix(in lab, red, red)) {
2868
- color: color-mix(in oklab, rgb(var(--color-on-secondary)) 50%, transparent);
2869
- }
2870
- }
2871
- .text-on-secondary\/60 {
2872
- color: color-mix(in srgb, rgb(rgb(var(--color-on-secondary))) 60%, transparent);
2873
- @supports (color: color-mix(in lab, red, red)) {
2874
- color: color-mix(in oklab, rgb(var(--color-on-secondary)) 60%, transparent);
2875
- }
2876
- }
2877
- .text-on-secondary\/70 {
2878
- color: color-mix(in srgb, rgb(rgb(var(--color-on-secondary))) 70%, transparent);
2879
- @supports (color: color-mix(in lab, red, red)) {
2880
- color: color-mix(in oklab, rgb(var(--color-on-secondary)) 70%, transparent);
2881
- }
2882
- }
2883
2865
  .text-primary {
2884
2866
  color: rgb(var(--color-primary));
2885
2867
  }
@@ -2941,9 +2923,6 @@
2941
2923
  .opacity-\[0\.07\] {
2942
2924
  opacity: 0.07;
2943
2925
  }
2944
- .opacity-\[0\.09\] {
2945
- opacity: 0.09;
2946
- }
2947
2926
  .mix-blend-overlay {
2948
2927
  mix-blend-mode: overlay;
2949
2928
  }
@@ -3173,6 +3152,14 @@
3173
3152
  border-color: color-mix(in oklab, rgb(var(--color-foreground)) 30%, transparent);
3174
3153
  }
3175
3154
  }
3155
+ .hover\:bg-current\/10:hover {
3156
+ background-color: currentcolor;
3157
+ }
3158
+ @supports (color: color-mix(in lab, red, red)) {
3159
+ .hover\:bg-current\/10:hover {
3160
+ background-color: color-mix(in oklab, currentcolor 10%, transparent);
3161
+ }
3162
+ }
3176
3163
  .hover\:bg-foreground\/50:hover {
3177
3164
  background-color: color-mix(in srgb, rgb(rgb(var(--color-foreground))) 50%, transparent);
3178
3165
  }
@@ -3184,9 +3171,6 @@
3184
3171
  .hover\:bg-primary-hover:hover {
3185
3172
  background-color: rgb(var(--color-primary-hover));
3186
3173
  }
3187
- .hover\:bg-secondary-hover:hover {
3188
- background-color: rgb(var(--color-secondary-hover));
3189
- }
3190
3174
  .hover\:bg-surface:hover {
3191
3175
  background-color: rgb(var(--color-surface));
3192
3176
  }
@@ -3201,14 +3185,6 @@
3201
3185
  background-color: color-mix(in oklab, rgb(var(--color-surface-strong)) 60%, transparent);
3202
3186
  }
3203
3187
  }
3204
- .hover\:bg-white\/10:hover {
3205
- background-color: color-mix(in srgb, #fff 10%, transparent);
3206
- }
3207
- @supports (color: color-mix(in lab, red, red)) {
3208
- .hover\:bg-white\/10:hover {
3209
- background-color: color-mix(in oklab, var(--color-white) 10%, transparent);
3210
- }
3211
- }
3212
3188
  .hover\:bg-white\/90:hover {
3213
3189
  background-color: color-mix(in srgb, #fff 90%, transparent);
3214
3190
  }
@@ -3217,12 +3193,12 @@
3217
3193
  background-color: color-mix(in oklab, var(--color-white) 90%, transparent);
3218
3194
  }
3219
3195
  }
3196
+ .hover\:text-current:hover {
3197
+ color: currentcolor;
3198
+ }
3220
3199
  .hover\:text-foreground:hover {
3221
3200
  color: rgb(var(--color-foreground));
3222
3201
  }
3223
- .hover\:text-on-secondary:hover {
3224
- color: rgb(var(--color-on-secondary));
3225
- }
3226
3202
  .hover\:text-primary:hover {
3227
3203
  color: rgb(var(--color-primary));
3228
3204
  }
@@ -3414,9 +3390,6 @@
3414
3390
  .sm\:px-14 {
3415
3391
  padding-inline: calc(var(--spacing) * 14);
3416
3392
  }
3417
- .sm\:px-16 {
3418
- padding-inline: calc(var(--spacing) * 16);
3419
- }
3420
3393
  .sm\:py-20 {
3421
3394
  padding-block: calc(var(--spacing) * 20);
3422
3395
  }
@@ -3581,18 +3554,9 @@
3581
3554
  .lg\:grid-cols-\[minmax\(0\,1fr\)_auto\] {
3582
3555
  grid-template-columns: minmax(0,1fr) auto;
3583
3556
  }
3584
- .lg\:flex-row {
3585
- flex-direction: row;
3586
- }
3587
3557
  .lg\:items-center {
3588
3558
  align-items: center;
3589
3559
  }
3590
- .lg\:items-end {
3591
- align-items: flex-end;
3592
- }
3593
- .lg\:justify-between {
3594
- justify-content: space-between;
3595
- }
3596
3560
  .lg\:gap-12 {
3597
3561
  gap: calc(var(--spacing) * 12);
3598
3562
  }
@@ -3741,6 +3705,23 @@
3741
3705
  border-radius: 0;
3742
3706
  }
3743
3707
  }
3708
+ [data-emphasis] :is(button, a)[data-unfilled] {
3709
+ color: currentColor;
3710
+ border-color: currentColor;
3711
+ @supports (color: color-mix(in lab, red, red)) {
3712
+ border-color: color-mix(in srgb, currentColor 30%, transparent);
3713
+ }
3714
+ }
3715
+ [data-emphasis] :is(button, a)[data-unfilled]:hover {
3716
+ border-color: currentColor;
3717
+ @supports (color: color-mix(in lab, red, red)) {
3718
+ border-color: color-mix(in srgb, currentColor 55%, transparent);
3719
+ }
3720
+ background-color: currentColor;
3721
+ @supports (color: color-mix(in lab, red, red)) {
3722
+ background-color: color-mix(in srgb, currentColor 10%, transparent);
3723
+ }
3724
+ }
3744
3725
  @keyframes marquee {
3745
3726
  from {
3746
3727
  transform: translateX(0);
package/dist/theme.css CHANGED
@@ -186,6 +186,33 @@
186
186
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.45'/%3E%3C/svg%3E");
187
187
  }
188
188
 
189
+ /*
190
+ * Emphasis bands (CTA panel, Hero statement, custom-background Navbar/MegaMenu/
191
+ * Footer) paint their own background and derive one readable text color with
192
+ * contrast-color(). Buttons inside them must adapt to THAT color, not to the
193
+ * page's --color-foreground/--color-border (which would disappear on a dark
194
+ * custom background).
195
+ *
196
+ * CSS contrast-color() cannot read an ancestor's background, so the band cannot
197
+ * compute a per-button contrast color. Instead the band exposes its resolved
198
+ * color via `currentColor`, and this scope lets unfilled buttons inherit it.
199
+ *
200
+ * Only buttons marked `data-unfilled` (outline/ghost — see Button.tsx) adapt;
201
+ * filled buttons (primary, `bg-surface`, `customColor`) keep their own
202
+ * background and contrast-color() text. The markup hook is exact, avoiding
203
+ * brittle `hover:bg-surface` substring matches.
204
+ *
205
+ * Applied via `data-emphasis` on the band (see CTA/Hero/Navbar/MegaMenu/Footer).
206
+ */
207
+ [data-emphasis] :is(button, a)[data-unfilled] {
208
+ color: currentColor;
209
+ border-color: color-mix(in srgb, currentColor 30%, transparent);
210
+ }
211
+ [data-emphasis] :is(button, a)[data-unfilled]:hover {
212
+ border-color: color-mix(in srgb, currentColor 55%, transparent);
213
+ background-color: color-mix(in srgb, currentColor 10%, transparent);
214
+ }
215
+
189
216
  @utility mask-fade-x {
190
217
  mask-image: linear-gradient(to right, transparent, black 12%, black 88%, transparent);
191
218
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ugurdemirel/landcraft",
3
- "version": "0.1.23",
3
+ "version": "0.1.24",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),m=require("react"),r=require("../../../utils/cn.cjs"),u=require("../../Container.cjs"),v=require("../parts.cjs"),n=m.forwardRef(({className:l,title:a,description:s,action:c,secondaryAction:o,align:t="left",id:i,...x},d)=>e.jsx("section",{ref:d,id:i,className:r.cn("w-full py-6 pb-20",l),...x,children:e.jsx(u.Container,{children:e.jsxs("div",{className:"relative overflow-hidden rounded-[1.75rem] px-7 py-16 sm:px-16 sm:py-20",style:{backgroundColor:"rgb(var(--color-secondary))",color:"contrast-color(rgb(var(--color-secondary)))"},children:[e.jsx("div",{"aria-hidden":!0,className:"pointer-events-none absolute inset-0 grain opacity-[0.09] mix-blend-overlay"}),e.jsxs("div",{className:r.cn("relative flex flex-col items-start gap-10",t==="center"&&"items-center text-center","lg:flex-row lg:items-end lg:justify-between"),children:[e.jsxs("div",{className:r.cn("max-w-3xl",t==="center"&&"mx-auto"),children:[e.jsx("h2",{className:"font-display text-balance text-4xl font-semibold leading-[1.02] tracking-[-0.03em] sm:text-6xl",children:a}),s?e.jsx("p",{className:r.cn("mt-5 max-w-xl text-pretty text-base leading-7 sm:text-lg",t==="center"&&"mx-auto"),children:s}):null]}),e.jsx(v.CTAActions,{action:c,secondaryAction:o,align:t})]})]})})}));n.displayName="CTAInverse";exports.CTAInverse=n;
2
- //# sourceMappingURL=Inverse.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Inverse.cjs","sources":["../../../../../src/components/CTA/variants/Inverse.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { Container } from \"../../Container\";\nimport { CTAActions } from \"../parts\";\nimport type { CTAProps } from \"../types\";\n\n/** inverse — ink panel with a wide left-aligned split. */\nexport const CTAInverse = forwardRef<HTMLElement, CTAProps>(\n ({ className, title, description, action, secondaryAction, align = \"left\", id, ...props }, ref) => {\n return (\n <section ref={ref} id={id} className={cn(\"w-full py-6 pb-20\", className)} {...props}>\n <Container>\n <div\n className=\"relative overflow-hidden rounded-[1.75rem] px-7 py-16 sm:px-16 sm:py-20\"\n style={{\n backgroundColor: \"rgb(var(--color-secondary))\",\n color: \"contrast-color(rgb(var(--color-secondary)))\",\n }}\n >\n <div aria-hidden className=\"pointer-events-none absolute inset-0 grain opacity-[0.09] mix-blend-overlay\" />\n <div\n className={cn(\n \"relative flex flex-col items-start gap-10\",\n align === \"center\" && \"items-center text-center\",\n \"lg:flex-row lg:items-end lg:justify-between\",\n )}\n >\n <div className={cn(\"max-w-3xl\", align === \"center\" && \"mx-auto\")}>\n <h2 className=\"font-display text-balance text-4xl font-semibold leading-[1.02] tracking-[-0.03em] sm:text-6xl\">\n {title}\n </h2>\n {description ? (\n <p className={cn(\"mt-5 max-w-xl text-pretty text-base leading-7 sm:text-lg\", align === \"center\" && \"mx-auto\")}>\n {description}\n </p>\n ) : null}\n </div>\n <CTAActions action={action} secondaryAction={secondaryAction} align={align} />\n </div>\n </div>\n </Container>\n </section>\n );\n },\n);\nCTAInverse.displayName = \"CTAInverse\";"],"names":["CTAInverse","forwardRef","className","title","description","action","secondaryAction","align","id","props","ref","jsx","cn","Container","jsxs","CTAActions"],"mappings":"sOAOaA,EAAaC,EAAAA,WACxB,CAAC,CAAE,UAAAC,EAAW,MAAAC,EAAO,YAAAC,EAAa,OAAAC,EAAQ,gBAAAC,EAAiB,MAAAC,EAAQ,OAAQ,GAAAC,EAAI,GAAGC,CAAA,EAASC,IAEvFC,EAAAA,IAAC,UAAA,CAAQ,IAAAD,EAAU,GAAAF,EAAQ,UAAWI,KAAG,oBAAqBV,CAAS,EAAI,GAAGO,EAC5E,SAAAE,EAAAA,IAACE,EAAAA,UAAA,CACC,SAAAC,EAAAA,KAAC,MAAA,CACC,UAAU,0EACV,MAAO,CACL,gBAAiB,8BACjB,MAAO,6CAAA,EAGT,SAAA,CAAAH,EAAAA,IAAC,MAAA,CAAI,cAAW,GAAC,UAAU,8EAA8E,EACzGG,EAAAA,KAAC,MAAA,CACC,UAAWF,EAAAA,GACT,4CACAL,IAAU,UAAY,2BACtB,6CAAA,EAGF,SAAA,CAAAO,OAAC,OAAI,UAAWF,EAAAA,GAAG,YAAaL,IAAU,UAAY,SAAS,EAC7D,SAAA,CAAAI,EAAAA,IAAC,KAAA,CAAG,UAAU,iGACX,SAAAR,EACH,EACCC,EACCO,EAAAA,IAAC,IAAA,CAAE,UAAWC,EAAAA,GAAG,2DAA4DL,IAAU,UAAY,SAAS,EACzG,SAAAH,CAAA,CACH,EACE,IAAA,EACN,EACAO,EAAAA,IAACI,EAAAA,WAAA,CAAW,OAAAV,EAAgB,gBAAAC,EAAkC,MAAAC,CAAA,CAAc,CAAA,CAAA,CAAA,CAC9E,CAAA,CAAA,EAEJ,CAAA,CACF,CAGN,EACAP,EAAW,YAAc"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),v=require("../../../utils/cn.cjs"),b=require("../../Container.cjs"),o=require("../parts.cjs");function c({className:i,brand:s,logo:d,logoSrc:x,logoAlt:m,logoClassName:h,description:a,columns:j,socials:l,bottom:p,languageSwitcher:u,badge:n,LinkComponent:y,...N}){const g=y??"a",f=o.FooterLogoNode({logo:d,logoSrc:x,logoAlt:m,logoClassName:h,brand:s})??e.jsx(o.FooterWordmark,{brand:s});return e.jsx("footer",{className:v.cn("w-full bg-secondary text-on-secondary",i),...N,children:e.jsxs(b.Container,{className:"py-16",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-10 md:grid-cols-4 lg:grid-cols-6",children:[e.jsxs("div",{className:"col-span-2",children:[e.jsx("span",{style:{color:"rgb(var(--color-on-secondary))"},children:f}),a?e.jsx("p",{className:"mt-4 max-w-xs text-sm leading-6 text-on-secondary/60",children:a}):null,l?e.jsx("div",{className:"mt-6 flex items-center gap-3",children:l}):null,n?e.jsx("div",{className:"mt-6",children:n}):null]}),j.map(r=>e.jsxs("div",{children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-[0.16em] text-on-secondary/50",children:r.title}),e.jsx("ul",{className:"mt-4 space-y-2.5",children:r.links.map(t=>e.jsx("li",{children:e.jsx(g,{href:t.href,className:"text-sm text-on-secondary/70 transition-colors duration-150 hover:text-on-secondary",children:t.label})},t.href))})]},r.title))]}),e.jsx(o.FooterBottomBar,{bottom:p,languageSwitcher:u,brand:s,wrapperClassName:"mt-14 flex flex-col items-center justify-between gap-4 border-t border-white/10 pt-8 text-sm text-on-secondary/50 sm:flex-row",textClassName:""})]})})}c.displayName="FooterClassic";exports.FooterClassic=c;
2
- //# sourceMappingURL=Classic.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Classic.cjs","sources":["../../../../../src/components/Footer/variants/Classic.tsx"],"sourcesContent":["import { cn } from \"../../../utils/cn\";\nimport { Container } from \"../../Container\";\nimport type { FooterProps } from \"../types\";\nimport {\n FooterWordmark,\n FooterLogoNode,\n FooterBottomBar,\n} from \"../parts\";\n\ninterface ClassicProps extends FooterProps {}\n\nexport function FooterClassic({ className, brand, logo, logoSrc, logoAlt, logoClassName, description, columns, socials, bottom, languageSwitcher, badge, LinkComponent, ...props }: ClassicProps) {\n const Link = LinkComponent ?? \"a\";\n const brandNode = FooterLogoNode({ logo, logoSrc, logoAlt, logoClassName, brand }) ?? <FooterWordmark brand={brand} />;\n\n return (\n <footer className={cn(\"w-full bg-secondary text-on-secondary\", className)} {...props}>\n <Container className=\"py-16\">\n <div className=\"grid grid-cols-2 gap-10 md:grid-cols-4 lg:grid-cols-6\">\n <div className=\"col-span-2\">\n <span style={{ color: \"rgb(var(--color-on-secondary))\" }}>{brandNode}</span>\n {description ? (\n <p className=\"mt-4 max-w-xs text-sm leading-6 text-on-secondary/60\">{description}</p>\n ) : null}\n {socials ? <div className=\"mt-6 flex items-center gap-3\">{socials}</div> : null}\n {badge ? <div className=\"mt-6\">{badge}</div> : null}\n </div>\n {columns.map((column) => (\n <div key={column.title}>\n <h3 className=\"text-xs font-semibold uppercase tracking-[0.16em] text-on-secondary/50\">\n {column.title}\n </h3>\n <ul className=\"mt-4 space-y-2.5\">\n {column.links.map((link) => (\n <li key={link.href}>\n <Link\n href={link.href}\n className=\"text-sm text-on-secondary/70 transition-colors duration-150 hover:text-on-secondary\"\n >\n {link.label}\n </Link>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n <FooterBottomBar\n bottom={bottom}\n languageSwitcher={languageSwitcher}\n brand={brand}\n wrapperClassName=\"mt-14 flex flex-col items-center justify-between gap-4 border-t border-white/10 pt-8 text-sm text-on-secondary/50 sm:flex-row\"\n textClassName=\"\"\n />\n </Container>\n </footer>\n );\n}\nFooterClassic.displayName = \"FooterClassic\";"],"names":["FooterClassic","className","brand","logo","logoSrc","logoAlt","logoClassName","description","columns","socials","bottom","languageSwitcher","badge","LinkComponent","props","Link","brandNode","FooterLogoNode","jsx","FooterWordmark","cn","jsxs","Container","column","link","FooterBottomBar"],"mappings":"mNAWO,SAASA,EAAc,CAAE,UAAAC,EAAW,MAAAC,EAAO,KAAAC,EAAM,QAAAC,EAAS,QAAAC,EAAS,cAAAC,EAAe,YAAAC,EAAa,QAAAC,EAAS,QAAAC,EAAS,OAAAC,EAAQ,iBAAAC,EAAkB,MAAAC,EAAO,cAAAC,EAAe,GAAGC,GAAuB,CAChM,MAAMC,EAAOF,GAAiB,IACxBG,EAAYC,EAAAA,eAAe,CAAE,KAAAd,EAAM,QAAAC,EAAS,QAAAC,EAAS,cAAAC,EAAe,MAAAJ,CAAA,CAAO,GAAKgB,EAAAA,IAACC,EAAAA,eAAA,CAAe,MAAAjB,CAAA,CAAc,EAEpH,OACEgB,EAAAA,IAAC,SAAA,CAAO,UAAWE,EAAAA,GAAG,wCAAyCnB,CAAS,EAAI,GAAGa,EAC7E,SAAAO,EAAAA,KAACC,EAAAA,UAAA,CAAU,UAAU,QACnB,SAAA,CAAAD,EAAAA,KAAC,MAAA,CAAI,UAAU,wDACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,aACb,SAAA,CAAAH,MAAC,QAAK,MAAO,CAAE,MAAO,gCAAA,EAAqC,SAAAF,EAAU,EACpET,EACCW,EAAAA,IAAC,IAAA,CAAE,UAAU,uDAAwD,WAAY,EAC/E,KACHT,EAAUS,EAAAA,IAAC,MAAA,CAAI,UAAU,+BAAgC,WAAQ,EAAS,KAC1EN,EAAQM,EAAAA,IAAC,MAAA,CAAI,UAAU,OAAQ,WAAM,EAAS,IAAA,EACjD,EACCV,EAAQ,IAAKe,UACX,MAAA,CACC,SAAA,CAAAL,EAAAA,IAAC,KAAA,CAAG,UAAU,yEACX,SAAAK,EAAO,MACV,EACAL,EAAAA,IAAC,KAAA,CAAG,UAAU,mBACX,SAAAK,EAAO,MAAM,IAAKC,GACjBN,EAAAA,IAAC,KAAA,CACC,SAAAA,EAAAA,IAACH,EAAA,CACC,KAAMS,EAAK,KACX,UAAU,sFAET,SAAAA,EAAK,KAAA,CAAA,GALDA,EAAK,IAOd,CACD,CAAA,CACH,CAAA,CAAA,EAfQD,EAAO,KAgBjB,CACD,CAAA,EACH,EACAL,EAAAA,IAACO,EAAAA,gBAAA,CACC,OAAAf,EACA,iBAAAC,EACA,MAAAT,EACA,iBAAiB,gIACjB,cAAc,EAAA,CAAA,CAChB,CAAA,CACF,CAAA,CACF,CAEJ,CACAF,EAAc,YAAc"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Editorial.cjs","sources":["../../../../../src/components/Stats/variants/Editorial.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { valueBase, suffixBase, gridCols, DeltaMark } from \"../parts\";\nimport type { Stat } from \"../types\";\n\ninterface EditorialProps extends HTMLAttributes<HTMLDListElement> {\n stats: Stat[];\n columns?: 2 | 3 | 4;\n}\n\n/** editorial — a ruled ledger: label on the rule, oversized numeral, typed meta. */\nexport const StatsEditorial = forwardRef<HTMLDListElement, EditorialProps>(\n ({ className, stats, columns = 4, ...props }, ref) => (\n <dl\n ref={ref}\n className={cn(\"grid grid-cols-1 gap-x-10 gap-y-10\", gridCols[columns], className)}\n {...props}\n >\n {stats.map((stat) => (\n <div key={stat.label} className=\"border-t border-border pt-5\">\n <dt className=\"text-sm leading-5 text-muted-foreground\">{stat.label}</dt>\n <dd\n className={cn(\n valueBase,\n \"mt-3 text-5xl sm:text-6xl\",\n stat.accent ? \"text-primary\" : undefined,\n )}\n >\n {stat.value}\n {stat.suffix ? <span className={suffixBase}>{stat.suffix}</span> : null}\n </dd>\n {typeof stat.delta === \"number\" || stat.sub ? (\n <div className=\"mt-4 flex flex-wrap items-baseline gap-x-3 gap-y-1\">\n {typeof stat.delta === \"number\" ? <DeltaMark delta={stat.delta} /> : null}\n {stat.sub ? (\n <p className=\"text-[13px] leading-5 text-muted-foreground\">{stat.sub}</p>\n ) : null}\n </div>\n ) : null}\n </div>\n ))}\n </dl>\n ),\n);\nStatsEditorial.displayName = \"StatsEditorial\";\n"],"names":["StatsEditorial","forwardRef","className","stats","columns","props","ref","jsx","cn","gridCols","stat","jsxs","valueBase","suffixBase","DeltaMark"],"mappings":"qMAWaA,EAAiBC,EAAAA,WAC5B,CAAC,CAAE,UAAAC,EAAW,MAAAC,EAAO,QAAAC,EAAU,EAAG,GAAGC,CAAA,EAASC,IAC5CC,EAAAA,IAAC,KAAA,CACC,IAAAD,EACA,UAAWE,EAAAA,GAAG,qCAAsCC,EAAAA,SAASL,CAAO,EAAGF,CAAS,EAC/E,GAAGG,EAEH,WAAM,IAAKK,GACVC,OAAC,MAAA,CAAqB,UAAU,8BAC9B,SAAA,CAAAJ,EAAAA,IAAC,KAAA,CAAG,UAAU,0CAA2C,SAAAG,EAAK,MAAM,EACpEC,EAAAA,KAAC,KAAA,CACC,UAAWH,EAAAA,GACTI,EAAAA,UACA,4BACAF,EAAK,OAAS,eAAiB,MAAA,EAGhC,SAAA,CAAAA,EAAK,MACLA,EAAK,OAASH,MAAC,OAAA,CAAK,UAAWM,EAAAA,WAAa,SAAAH,EAAK,OAAO,EAAU,IAAA,CAAA,CAAA,EAEpE,OAAOA,EAAK,OAAU,UAAYA,EAAK,IACtCC,EAAAA,KAAC,MAAA,CAAI,UAAU,qDACZ,SAAA,CAAA,OAAOD,EAAK,OAAU,SAAWH,MAACO,EAAAA,WAAU,MAAOJ,EAAK,MAAO,EAAK,KACpEA,EAAK,IACJH,MAAC,IAAA,CAAE,UAAU,8CAA+C,SAAAG,EAAK,IAAI,EACnE,IAAA,CAAA,CACN,EACE,IAAA,CAAA,EAnBIA,EAAK,KAoBf,CACD,CAAA,CAAA,CAGP,EACAV,EAAe,YAAc"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Hairline.cjs","sources":["../../../../../src/components/Stats/variants/Hairline.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { valueBase, suffixBase, gridCols, gridDivider, DeltaMark } from \"../parts\";\nimport type { Stat } from \"../types\";\n\ninterface HairlineProps extends HTMLAttributes<HTMLDListElement> {\n stats: Stat[];\n columns?: 2 | 3 | 4;\n}\n\n/** hairline — centered numerals in a symmetric run, divided by true vertical hairlines. */\nexport const StatsHairline = forwardRef<HTMLDListElement, HairlineProps>(\n ({ className, stats, columns = 4, ...props }, ref) => (\n <dl\n ref={ref}\n className={cn(\"grid grid-cols-1 gap-y-10\", gridCols[columns], gridDivider[columns], className)}\n {...props}\n >\n {stats.map((stat) => (\n <div\n key={stat.label}\n className=\"flex flex-col items-center gap-2.5 border-border text-center sm:px-6\"\n >\n <dd\n className={cn(\n valueBase,\n \"text-4xl sm:text-5xl\",\n stat.accent ? \"text-primary\" : undefined,\n )}\n >\n {stat.value}\n {stat.suffix ? <span className={suffixBase}>{stat.suffix}</span> : null}\n </dd>\n <dt className=\"text-sm leading-5 text-muted-foreground\">{stat.label}</dt>\n {typeof stat.delta === \"number\" ? (\n <DeltaMark delta={stat.delta} className=\"mt-0.5\" />\n ) : null}\n {stat.sub ? (\n <p className=\"mt-1 max-w-[22ch] text-[13px] leading-5 text-muted-foreground\">\n {stat.sub}\n </p>\n ) : null}\n </div>\n ))}\n </dl>\n ),\n);\nStatsHairline.displayName = \"StatsHairline\";\n"],"names":["StatsHairline","forwardRef","className","stats","columns","props","ref","jsx","cn","gridCols","gridDivider","stat","jsxs","valueBase","suffixBase","DeltaMark"],"mappings":"qMAWaA,EAAgBC,EAAAA,WAC3B,CAAC,CAAE,UAAAC,EAAW,MAAAC,EAAO,QAAAC,EAAU,EAAG,GAAGC,CAAA,EAASC,IAC5CC,EAAAA,IAAC,KAAA,CACC,IAAAD,EACA,UAAWE,EAAAA,GAAG,4BAA6BC,EAAAA,SAASL,CAAO,EAAGM,EAAAA,YAAYN,CAAO,EAAGF,CAAS,EAC5F,GAAGG,EAEH,SAAAF,EAAM,IAAKQ,GACVC,EAAAA,KAAC,MAAA,CAEC,UAAU,uEAEV,SAAA,CAAAA,EAAAA,KAAC,KAAA,CACC,UAAWJ,EAAAA,GACTK,EAAAA,UACA,uBACAF,EAAK,OAAS,eAAiB,MAAA,EAGhC,SAAA,CAAAA,EAAK,MACLA,EAAK,OAASJ,MAAC,OAAA,CAAK,UAAWO,EAAAA,WAAa,SAAAH,EAAK,OAAO,EAAU,IAAA,CAAA,CAAA,EAErEJ,EAAAA,IAAC,KAAA,CAAG,UAAU,0CAA2C,WAAK,MAAM,EACnE,OAAOI,EAAK,OAAU,SACrBJ,EAAAA,IAACQ,EAAAA,UAAA,CAAU,MAAOJ,EAAK,MAAO,UAAU,QAAA,CAAS,EAC/C,KACHA,EAAK,IACJJ,MAAC,IAAA,CAAE,UAAU,gEACV,SAAAI,EAAK,IACR,EACE,IAAA,CAAA,EArBCA,EAAK,KAAA,CAuBb,CAAA,CAAA,CAGP,EACAX,EAAc,YAAc"}
@@ -1,42 +0,0 @@
1
- import { jsx as e, jsxs as l } from "react/jsx-runtime";
2
- import { forwardRef as x } from "react";
3
- import { cn as t } from "../../../utils/cn.js";
4
- import { Container as p } from "../../Container.js";
5
- import { CTAActions as f } from "../parts.js";
6
- const v = x(
7
- ({ className: a, title: s, description: o, action: n, secondaryAction: c, align: r = "left", id: i, ...m }, d) => /* @__PURE__ */ e("section", { ref: d, id: i, className: t("w-full py-6 pb-20", a), ...m, children: /* @__PURE__ */ e(p, { children: /* @__PURE__ */ l(
8
- "div",
9
- {
10
- className: "relative overflow-hidden rounded-[1.75rem] px-7 py-16 sm:px-16 sm:py-20",
11
- style: {
12
- backgroundColor: "rgb(var(--color-secondary))",
13
- color: "contrast-color(rgb(var(--color-secondary)))"
14
- },
15
- children: [
16
- /* @__PURE__ */ e("div", { "aria-hidden": !0, className: "pointer-events-none absolute inset-0 grain opacity-[0.09] mix-blend-overlay" }),
17
- /* @__PURE__ */ l(
18
- "div",
19
- {
20
- className: t(
21
- "relative flex flex-col items-start gap-10",
22
- r === "center" && "items-center text-center",
23
- "lg:flex-row lg:items-end lg:justify-between"
24
- ),
25
- children: [
26
- /* @__PURE__ */ l("div", { className: t("max-w-3xl", r === "center" && "mx-auto"), children: [
27
- /* @__PURE__ */ e("h2", { className: "font-display text-balance text-4xl font-semibold leading-[1.02] tracking-[-0.03em] sm:text-6xl", children: s }),
28
- o ? /* @__PURE__ */ e("p", { className: t("mt-5 max-w-xl text-pretty text-base leading-7 sm:text-lg", r === "center" && "mx-auto"), children: o }) : null
29
- ] }),
30
- /* @__PURE__ */ e(f, { action: n, secondaryAction: c, align: r })
31
- ]
32
- }
33
- )
34
- ]
35
- }
36
- ) }) })
37
- );
38
- v.displayName = "CTAInverse";
39
- export {
40
- v as CTAInverse
41
- };
42
- //# sourceMappingURL=Inverse.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Inverse.js","sources":["../../../../../src/components/CTA/variants/Inverse.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { Container } from \"../../Container\";\nimport { CTAActions } from \"../parts\";\nimport type { CTAProps } from \"../types\";\n\n/** inverse — ink panel with a wide left-aligned split. */\nexport const CTAInverse = forwardRef<HTMLElement, CTAProps>(\n ({ className, title, description, action, secondaryAction, align = \"left\", id, ...props }, ref) => {\n return (\n <section ref={ref} id={id} className={cn(\"w-full py-6 pb-20\", className)} {...props}>\n <Container>\n <div\n className=\"relative overflow-hidden rounded-[1.75rem] px-7 py-16 sm:px-16 sm:py-20\"\n style={{\n backgroundColor: \"rgb(var(--color-secondary))\",\n color: \"contrast-color(rgb(var(--color-secondary)))\",\n }}\n >\n <div aria-hidden className=\"pointer-events-none absolute inset-0 grain opacity-[0.09] mix-blend-overlay\" />\n <div\n className={cn(\n \"relative flex flex-col items-start gap-10\",\n align === \"center\" && \"items-center text-center\",\n \"lg:flex-row lg:items-end lg:justify-between\",\n )}\n >\n <div className={cn(\"max-w-3xl\", align === \"center\" && \"mx-auto\")}>\n <h2 className=\"font-display text-balance text-4xl font-semibold leading-[1.02] tracking-[-0.03em] sm:text-6xl\">\n {title}\n </h2>\n {description ? (\n <p className={cn(\"mt-5 max-w-xl text-pretty text-base leading-7 sm:text-lg\", align === \"center\" && \"mx-auto\")}>\n {description}\n </p>\n ) : null}\n </div>\n <CTAActions action={action} secondaryAction={secondaryAction} align={align} />\n </div>\n </div>\n </Container>\n </section>\n );\n },\n);\nCTAInverse.displayName = \"CTAInverse\";"],"names":["CTAInverse","forwardRef","className","title","description","action","secondaryAction","align","id","props","ref","jsx","cn","Container","jsxs","CTAActions"],"mappings":";;;;;AAOO,MAAMA,IAAaC;AAAA,EACxB,CAAC,EAAE,WAAAC,GAAW,OAAAC,GAAO,aAAAC,GAAa,QAAAC,GAAQ,iBAAAC,GAAiB,OAAAC,IAAQ,QAAQ,IAAAC,GAAI,GAAGC,EAAA,GAASC,MAEvF,gBAAAC,EAAC,WAAA,EAAQ,KAAAD,GAAU,IAAAF,GAAQ,WAAWI,EAAG,qBAAqBV,CAAS,GAAI,GAAGO,GAC5E,UAAA,gBAAAE,EAACE,GAAA,EACC,UAAA,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,iBAAiB;AAAA,QACjB,OAAO;AAAA,MAAA;AAAA,MAGT,UAAA;AAAA,QAAA,gBAAAH,EAAC,OAAA,EAAI,eAAW,IAAC,WAAU,+EAA8E;AAAA,QACzG,gBAAAG;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWF;AAAA,cACT;AAAA,cACAL,MAAU,YAAY;AAAA,cACtB;AAAA,YAAA;AAAA,YAGF,UAAA;AAAA,cAAA,gBAAAO,EAAC,SAAI,WAAWF,EAAG,aAAaL,MAAU,YAAY,SAAS,GAC7D,UAAA;AAAA,gBAAA,gBAAAI,EAAC,MAAA,EAAG,WAAU,kGACX,UAAAR,GACH;AAAA,gBACCC,IACC,gBAAAO,EAAC,KAAA,EAAE,WAAWC,EAAG,4DAA4DL,MAAU,YAAY,SAAS,GACzG,UAAAH,EAAA,CACH,IACE;AAAA,cAAA,GACN;AAAA,cACA,gBAAAO,EAACI,GAAA,EAAW,QAAAV,GAAgB,iBAAAC,GAAkC,OAAAC,EAAA,CAAc;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAC9E;AAAA,IAAA;AAAA,EAAA,GAEJ,EAAA,CACF;AAGN;AACAP,EAAW,cAAc;"}
@@ -1,43 +0,0 @@
1
- import { jsx as e, jsxs as r } from "react/jsx-runtime";
2
- import { cn as v } from "../../../utils/cn.js";
3
- import { Container as w } from "../../Container.js";
4
- import { FooterLogoNode as b, FooterWordmark as C, FooterBottomBar as F } from "../parts.js";
5
- function j({ className: n, brand: t, logo: i, logoSrc: m, logoAlt: d, logoClassName: x, description: a, columns: p, socials: l, bottom: h, languageSwitcher: f, badge: c, LinkComponent: N, ...y }) {
6
- const g = N ?? "a", u = b({ logo: i, logoSrc: m, logoAlt: d, logoClassName: x, brand: t }) ?? /* @__PURE__ */ e(C, { brand: t });
7
- return /* @__PURE__ */ e("footer", { className: v("w-full bg-secondary text-on-secondary", n), ...y, children: /* @__PURE__ */ r(w, { className: "py-16", children: [
8
- /* @__PURE__ */ r("div", { className: "grid grid-cols-2 gap-10 md:grid-cols-4 lg:grid-cols-6", children: [
9
- /* @__PURE__ */ r("div", { className: "col-span-2", children: [
10
- /* @__PURE__ */ e("span", { style: { color: "rgb(var(--color-on-secondary))" }, children: u }),
11
- a ? /* @__PURE__ */ e("p", { className: "mt-4 max-w-xs text-sm leading-6 text-on-secondary/60", children: a }) : null,
12
- l ? /* @__PURE__ */ e("div", { className: "mt-6 flex items-center gap-3", children: l }) : null,
13
- c ? /* @__PURE__ */ e("div", { className: "mt-6", children: c }) : null
14
- ] }),
15
- p.map((o) => /* @__PURE__ */ r("div", { children: [
16
- /* @__PURE__ */ e("h3", { className: "text-xs font-semibold uppercase tracking-[0.16em] text-on-secondary/50", children: o.title }),
17
- /* @__PURE__ */ e("ul", { className: "mt-4 space-y-2.5", children: o.links.map((s) => /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
18
- g,
19
- {
20
- href: s.href,
21
- className: "text-sm text-on-secondary/70 transition-colors duration-150 hover:text-on-secondary",
22
- children: s.label
23
- }
24
- ) }, s.href)) })
25
- ] }, o.title))
26
- ] }),
27
- /* @__PURE__ */ e(
28
- F,
29
- {
30
- bottom: h,
31
- languageSwitcher: f,
32
- brand: t,
33
- wrapperClassName: "mt-14 flex flex-col items-center justify-between gap-4 border-t border-white/10 pt-8 text-sm text-on-secondary/50 sm:flex-row",
34
- textClassName: ""
35
- }
36
- )
37
- ] }) });
38
- }
39
- j.displayName = "FooterClassic";
40
- export {
41
- j as FooterClassic
42
- };
43
- //# sourceMappingURL=Classic.js.map