astralkit 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -196,12 +196,41 @@ html {
196
196
  .ak-switch-track-icon:last-child { right: 10px; }
197
197
  /* Off state: left icon hidden (behind knob), right icon visible */
198
198
  .ak-switch-with-icons .ak-switch-track-icon:first-child { opacity: 0; }
199
- .ak-switch-with-icons .ak-switch-track-icon:last-child { color: var(--color-ak-on-primary); opacity: 0.7; }
199
+ .ak-switch-with-icons .ak-switch-track-icon:last-child { color: var(--color-ak-inverse-on-surface, #ffffff); opacity: 0.7; }
200
200
  /* On state: left icon visible, right icon hidden (behind knob) */
201
201
  .ak-switch-with-icons[aria-checked="true"] .ak-switch-track-icon:first-child { color: var(--color-ak-on-primary); opacity: 0.7; }
202
202
  .ak-switch-with-icons[aria-checked="true"] .ak-switch-track-icon:last-child { opacity: 0; }
203
+ /* Off-state surfaces: ink track from the inverse pair — palettes tint it, and
204
+ it stays softer than the checked primary track — with the knob swapping the
205
+ same pair so the state icon is legible on every palette in both modes. */
206
+ .ak-switch-with-icons[aria-checked="false"] .ak-switch-track {
207
+ background: color-mix(in srgb, var(--color-ak-inverse-surface, #171717) 84%, var(--color-ak-surface, #ffffff));
208
+ }
209
+ .ak-switch-with-icons[aria-checked="false"] .ak-switch-knob {
210
+ background: var(--color-ak-inverse-on-surface, #ffffff);
211
+ }
203
212
  /* Knob icon */
204
213
  .ak-switch-knob-icon { font-size: 14px; color: var(--color-ak-text); line-height: 1; }
214
+ .ak-switch-with-icons .ak-switch-knob-icon { color: var(--color-ak-inverse-surface, #171717); }
215
+ .ak-switch-with-icons[aria-checked="true"] .ak-switch-knob-icon { color: var(--color-ak-primary); }
216
+ /* Dark mode: the page is already ink — the off track returns to the neutral
217
+ border tone and the inverse pair flips (inverse-surface reads light). */
218
+ .dark .ak-switch-with-icons[aria-checked="false"] .ak-switch-track,
219
+ [data-theme="dark"] .ak-switch-with-icons[aria-checked="false"] .ak-switch-track {
220
+ background: var(--color-ak-border-strong);
221
+ }
222
+ .dark .ak-switch-with-icons[aria-checked="false"] .ak-switch-knob,
223
+ [data-theme="dark"] .ak-switch-with-icons[aria-checked="false"] .ak-switch-knob {
224
+ background: var(--color-ak-inverse-surface, var(--color-ak-text, #ffffff));
225
+ }
226
+ .dark .ak-switch-with-icons .ak-switch-track-icon:last-child,
227
+ [data-theme="dark"] .ak-switch-with-icons .ak-switch-track-icon:last-child {
228
+ color: var(--color-ak-text, #ffffff);
229
+ }
230
+ .dark .ak-switch-with-icons[aria-checked="false"] .ak-switch-knob-icon,
231
+ [data-theme="dark"] .ak-switch-with-icons[aria-checked="false"] .ak-switch-knob-icon {
232
+ color: var(--color-ak-inverse-on-surface, var(--color-ak-bg, #171717));
233
+ }
205
234
 
206
235
  /* Icon switch — lg (88×44) */
207
236
  .ak-switch-icons-lg .ak-switch-track { width: 88px; height: 44px; }
@@ -524,8 +553,253 @@ body.ak-ew-resizing, body.ak-ew-resizing * {
524
553
  cursor: ew-resize !important; user-select: none !important; -webkit-user-select: none !important;
525
554
  }
526
555
 
556
+ /* ── Theme Role Utilities ── */
557
+ .ak-theme-control {
558
+ background: var(--color-ak-surface-container-lowest, var(--color-ak-bg));
559
+ border-color: var(--color-ak-outline-variant, var(--color-ak-border-subtle));
560
+ color: var(--color-ak-on-surface, var(--color-ak-text));
561
+ }
562
+ .ak-theme-control:is(button, a, [role="button"], [tabindex]):not([aria-disabled="true"]):not(:disabled):hover {
563
+ background: var(--color-ak-surface-container-low, var(--color-ak-hover));
564
+ border-color: var(--color-ak-outline, var(--color-ak-border));
565
+ }
566
+ .ak-theme-control-selected {
567
+ background: var(--color-ak-secondary, var(--color-ak-primary));
568
+ border-color: var(--color-ak-secondary, var(--color-ak-primary));
569
+ color: var(--color-ak-on-secondary, var(--color-ak-on-primary));
570
+ }
571
+ .ak-theme-control-selected-soft {
572
+ background: var(--color-ak-secondary-container, var(--color-ak-primary-subtle));
573
+ border-color: var(--color-ak-secondary-outline, var(--color-ak-secondary, var(--color-ak-primary)));
574
+ color: var(--color-ak-on-secondary-container, var(--color-ak-text));
575
+ }
576
+ .ak-theme-control-selected-primary {
577
+ background: var(--color-ak-primary);
578
+ border-color: var(--color-ak-primary);
579
+ color: var(--color-ak-on-primary);
580
+ }
581
+ .ak-theme-control-selected-primary-soft {
582
+ background: var(--color-ak-primary-container, var(--color-ak-primary-subtle));
583
+ border-color: var(--color-ak-primary-outline, var(--color-ak-primary));
584
+ color: var(--color-ak-selection-ink, var(--color-ak-on-primary-container, var(--color-ak-text)));
585
+ }
586
+ .ak-theme-icon-well {
587
+ background: var(--color-ak-surface-container, var(--color-ak-surface-2));
588
+ border-color: var(--color-ak-outline-variant, var(--color-ak-border-subtle));
589
+ color: var(--color-ak-on-surface-variant, var(--color-ak-text-secondary));
590
+ }
591
+ .ak-theme-icon-well-selected {
592
+ background: var(--color-ak-secondary, var(--color-ak-primary));
593
+ border-color: var(--color-ak-secondary, var(--color-ak-primary));
594
+ color: var(--color-ak-on-secondary, var(--color-ak-on-primary));
595
+ }
596
+ .ak-theme-icon-well-selected-primary {
597
+ background: var(--color-ak-primary-selection, var(--color-ak-primary));
598
+ border-color: var(--color-ak-primary-selection, var(--color-ak-primary));
599
+ color: var(--color-ak-on-primary-selection, var(--color-ak-on-primary));
600
+ }
601
+ .ak-theme-badge {
602
+ background: var(--color-ak-surface-container-lowest, var(--color-ak-bg));
603
+ border-color: var(--color-ak-outline-variant, var(--color-ak-border-subtle));
604
+ color: var(--color-ak-on-surface-variant, var(--color-ak-text-secondary));
605
+ }
606
+ .ak-theme-badge-selected {
607
+ background: var(--color-ak-accent, var(--color-ak-primary));
608
+ border-color: var(--color-ak-accent, var(--color-ak-primary));
609
+ color: var(--color-ak-on-accent, var(--color-ak-on-primary));
610
+ }
611
+ .ak-theme-media-caption {
612
+ background: var(--color-ak-primary-container, var(--color-ak-secondary-container, var(--color-ak-surface-container-lowest, var(--color-ak-bg))));
613
+ border-color: color-mix(in srgb, var(--color-ak-primary, var(--color-ak-border)) 34%, transparent);
614
+ color: var(--color-ak-on-primary-container, var(--color-ak-on-secondary-container, var(--color-ak-on-surface, var(--color-ak-text))));
615
+ }
616
+ .ak-theme-cta-gradient {
617
+ background: var(--gradient-ak-primary, linear-gradient(135deg, var(--color-ak-primary-hover), var(--color-ak-primary), var(--color-ak-primary-active)));
618
+ background-size: 160% 160%;
619
+ border-color: transparent;
620
+ color: var(--color-ak-on-primary);
621
+ transition:
622
+ background-position var(--duration-ak-slow, 240ms) var(--ease-ak-default, cubic-bezier(0.4, 0, 0.2, 1)),
623
+ filter var(--duration-ak-fast, 110ms) var(--ease-ak-default, cubic-bezier(0.4, 0, 0.2, 1)),
624
+ transform var(--duration-ak-fast, 110ms) var(--ease-ak-spring, cubic-bezier(0.34, 1.56, 0.64, 1));
625
+ }
626
+ .ak-theme-cta-gradient:is(button, a, [role="button"]):not([aria-disabled="true"]):not(:disabled):hover {
627
+ background: var(--gradient-ak-primary-hover, var(--gradient-ak-primary, linear-gradient(135deg, var(--color-ak-primary-hover), var(--color-ak-primary), var(--color-ak-primary-active))));
628
+ background-position: 100% 50%;
629
+ filter: saturate(1.05);
630
+ }
631
+ .ak-theme-cta-gradient:is(button, a, [role="button"]):not([aria-disabled="true"]):not(:disabled):active {
632
+ transform: translateY(1px) scale(0.99);
633
+ }
634
+ .ak-theme-switch-track {
635
+ background: var(--color-ak-surface-container-high, var(--color-ak-surface-2));
636
+ border-color: var(--color-ak-outline-variant, var(--color-ak-border-subtle));
637
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--color-ak-on-surface-variant, var(--color-ak-text-secondary)) 6%, transparent);
638
+ }
639
+ .ak-theme-switch-track-selected {
640
+ background: var(--color-ak-secondary, var(--color-ak-primary));
641
+ border-color: var(--color-ak-secondary, var(--color-ak-primary));
642
+ }
643
+ .ak-theme-switch-track-selected-primary {
644
+ background: var(--color-ak-primary);
645
+ border-color: var(--color-ak-primary);
646
+ }
647
+ .ak-theme-switch-thumb {
648
+ background: var(--color-ak-bg);
649
+ box-shadow: var(--shadow-ak-xs);
650
+ }
651
+ .ak-theme-switch-track-selected .ak-theme-switch-thumb {
652
+ background: var(--color-ak-on-secondary, var(--color-ak-on-primary));
653
+ }
654
+ .ak-theme-switch-track-selected-primary .ak-theme-switch-thumb {
655
+ background: var(--color-ak-on-primary);
656
+ }
657
+ .dark .ak-theme-switch-thumb,
658
+ [data-theme="dark"] .ak-theme-switch-thumb,
659
+ [data-ak-dark-panel] .ak-theme-switch-thumb {
660
+ background: var(--color-ak-text);
661
+ }
662
+ .dark .ak-theme-switch-track-selected .ak-theme-switch-thumb,
663
+ [data-theme="dark"] .ak-theme-switch-track-selected .ak-theme-switch-thumb,
664
+ [data-ak-dark-panel] .ak-theme-switch-track-selected .ak-theme-switch-thumb {
665
+ background: var(--color-ak-on-secondary, var(--color-ak-on-primary));
666
+ }
667
+ .dark .ak-theme-switch-track-selected-primary .ak-theme-switch-thumb,
668
+ [data-theme="dark"] .ak-theme-switch-track-selected-primary .ak-theme-switch-thumb,
669
+ [data-ak-dark-panel] .ak-theme-switch-track-selected-primary .ak-theme-switch-thumb {
670
+ background: var(--color-ak-on-primary);
671
+ }
672
+ .ak-theme-logo-mark {
673
+ transition: filter var(--duration-ak-fast, 110ms) var(--ease-ak-default, cubic-bezier(0.4, 0, 0.2, 1)), opacity var(--duration-ak-fast, 110ms) var(--ease-ak-default, cubic-bezier(0.4, 0, 0.2, 1));
674
+ }
675
+ .dark .ak-theme-logo-mark,
676
+ [data-theme="dark"] .ak-theme-logo-mark,
677
+ [data-ak-dark-panel] .ak-theme-logo-mark {
678
+ filter: invert(1) brightness(1.08) contrast(0.96);
679
+ }
680
+
681
+ /* Dark premium material utilities.
682
+ These stay dormant in light mode and use the palette glow tokens in dark contexts. */
683
+ .ak-dark-material:is([data-ak-dark-panel], [data-ak-dark-rail], [data-ak-dark-mobile]),
684
+ .ak-dark-material:is(.dark *),
685
+ .dark .ak-dark-material,
686
+ [data-theme="dark"] .ak-dark-material,
687
+ [data-ak-dark-panel] .ak-dark-material,
688
+ [data-ak-dark-rail] .ak-dark-material,
689
+ [data-ak-dark-mobile] .ak-dark-material {
690
+ background:
691
+ linear-gradient(180deg, color-mix(in srgb, var(--color-ak-on-surface, #fff) 5%, transparent), transparent 42%),
692
+ radial-gradient(90% 64% at 50% 0%, color-mix(in srgb, var(--color-ak-glow-primary, #818cf8) 10%, transparent), transparent 72%),
693
+ color-mix(in srgb, var(--color-ak-bg, #111) 90%, var(--color-ak-mesh-base, #050509) 10%);
694
+ border-color: color-mix(in srgb, var(--color-ak-glow-primary, #818cf8) 18%, var(--color-ak-border, rgba(255,255,255,0.12)));
695
+ color: var(--color-ak-on-surface, var(--color-ak-text));
696
+ }
697
+ .ak-dark-control:is(.dark *),
698
+ .dark .ak-dark-control,
699
+ [data-theme="dark"] .ak-dark-control,
700
+ [data-ak-dark-panel] .ak-dark-control,
701
+ [data-ak-dark-rail] .ak-dark-control,
702
+ [data-ak-dark-mobile] .ak-dark-control {
703
+ background-color: transparent;
704
+ border-color: transparent;
705
+ }
706
+ .ak-dark-outlined-control:is(.dark *),
707
+ .dark .ak-dark-outlined-control,
708
+ [data-theme="dark"] .ak-dark-outlined-control,
709
+ [data-ak-dark-panel] .ak-dark-outlined-control,
710
+ [data-ak-dark-rail] .ak-dark-outlined-control,
711
+ [data-ak-dark-mobile] .ak-dark-outlined-control {
712
+ background:
713
+ linear-gradient(180deg, color-mix(in srgb, var(--color-ak-on-surface, #fff) 3%, transparent), transparent 58%),
714
+ color-mix(in srgb, var(--color-ak-bg, #111) 86%, var(--color-ak-on-surface, #fff) 5%);
715
+ border-color: color-mix(in srgb, var(--color-ak-glow-primary, #818cf8) 26%, var(--color-ak-border, rgba(255,255,255,0.12)));
716
+ }
717
+ .ak-dark-avatar-tile:is(.dark *),
718
+ .dark .ak-dark-avatar-tile,
719
+ [data-theme="dark"] .ak-dark-avatar-tile,
720
+ [data-ak-dark-panel] .ak-dark-avatar-tile,
721
+ [data-ak-dark-rail] .ak-dark-avatar-tile,
722
+ [data-ak-dark-mobile] .ak-dark-avatar-tile {
723
+ background:
724
+ radial-gradient(circle at 35% 22%, color-mix(in srgb, var(--color-ak-glow-primary, #818cf8) 30%, transparent), transparent 62%),
725
+ color-mix(in srgb, var(--color-ak-primary-container, #31245a) 72%, var(--color-ak-bg, #111) 28%);
726
+ color: var(--color-ak-on-primary-container, var(--color-ak-on-surface, #fff));
727
+ }
728
+ .ak-dark-control:is(button, a, [role="button"], [tabindex]):not([aria-disabled="true"]):not(:disabled):is(:hover, [data-highlighted]),
729
+ .ak-dark-control:is(button, a, [role="button"], [tabindex]):not([aria-disabled="true"]):not(:disabled)[data-highlighted],
730
+ .dark .ak-dark-control:is(button, a, [role="button"], [tabindex]):not([aria-disabled="true"]):not(:disabled):hover,
731
+ [data-theme="dark"] .ak-dark-control:is(button, a, [role="button"], [tabindex]):not([aria-disabled="true"]):not(:disabled):hover,
732
+ [data-ak-dark-panel] .ak-dark-control:is(button, a, [role="button"], [tabindex]):not([aria-disabled="true"]):not(:disabled):hover,
733
+ [data-ak-dark-rail] .ak-dark-control:is(button, a, [role="button"], [tabindex]):not([aria-disabled="true"]):not(:disabled):hover,
734
+ [data-ak-dark-mobile] .ak-dark-control:is(button, a, [role="button"], [tabindex]):not([aria-disabled="true"]):not(:disabled):hover {
735
+ background:
736
+ linear-gradient(135deg, color-mix(in srgb, var(--color-ak-glow-primary, #818cf8) 10%, transparent), transparent 64%),
737
+ color-mix(in srgb, var(--color-ak-on-surface, #fff) 6%, transparent);
738
+ color: var(--color-ak-on-surface, var(--color-ak-text));
739
+ }
740
+ .ak-dark-control-selected:is(.dark *),
741
+ .dark .ak-dark-control-selected,
742
+ [data-theme="dark"] .ak-dark-control-selected,
743
+ [data-ak-dark-panel] .ak-dark-control-selected,
744
+ [data-ak-dark-rail] .ak-dark-control-selected,
745
+ [data-ak-dark-mobile] .ak-dark-control-selected {
746
+ background:
747
+ radial-gradient(circle at 18% 14%, color-mix(in srgb, var(--color-ak-on-primary, #fff) 22%, transparent), transparent 36%),
748
+ linear-gradient(135deg, var(--color-ak-gradient-start, var(--color-ak-primary-hover)) 0%, var(--color-ak-gradient-mid, var(--color-ak-primary)) 52%, var(--color-ak-gradient-end, var(--color-ak-primary-active)) 100%);
749
+ border-color: color-mix(in srgb, var(--color-ak-glow-primary, #818cf8) 64%, var(--color-ak-border, rgba(255,255,255,0.12)));
750
+ box-shadow:
751
+ inset 0 0 0 1px color-mix(in srgb, var(--color-ak-glow-primary, #818cf8) 46%, transparent),
752
+ inset 0 1px 0 color-mix(in srgb, var(--color-ak-neutral-0, #fff) 16%, transparent),
753
+ 0 0 0 1px color-mix(in srgb, var(--color-ak-glow-primary, #818cf8) 14%, transparent),
754
+ 0 12px 28px -22px color-mix(in srgb, var(--color-ak-glow-primary, #818cf8) 78%, transparent);
755
+ color: var(--color-ak-on-primary-selection, var(--color-ak-on-primary, #fff));
756
+ }
757
+ .dark .ak-dark-control-selected.ak-selection-ink,
758
+ [data-theme="dark"] .ak-dark-control-selected.ak-selection-ink,
759
+ [data-ak-dark-panel] .ak-dark-control-selected.ak-selection-ink,
760
+ [data-ak-dark-rail] .ak-dark-control-selected.ak-selection-ink,
761
+ [data-ak-dark-mobile] .ak-dark-control-selected.ak-selection-ink,
762
+ .dark .ak-dark-control-selected :where(.ak-selection-ink, i, svg, .ph),
763
+ [data-theme="dark"] .ak-dark-control-selected :where(.ak-selection-ink, i, svg, .ph),
764
+ [data-ak-dark-panel] .ak-dark-control-selected :where(.ak-selection-ink, i, svg, .ph),
765
+ [data-ak-dark-rail] .ak-dark-control-selected :where(.ak-selection-ink, i, svg, .ph),
766
+ [data-ak-dark-mobile] .ak-dark-control-selected :where(.ak-selection-ink, i, svg, .ph) {
767
+ color: var(--color-ak-on-primary-selection, var(--color-ak-on-primary, #fff));
768
+ }
769
+ .ak-dark-accent-tile:is(.dark *),
770
+ .dark .ak-dark-accent-tile,
771
+ [data-theme="dark"] .ak-dark-accent-tile,
772
+ [data-ak-dark-panel] .ak-dark-accent-tile,
773
+ [data-ak-dark-rail] .ak-dark-accent-tile,
774
+ [data-ak-dark-mobile] .ak-dark-accent-tile {
775
+ background:
776
+ radial-gradient(circle at 22% 16%, color-mix(in srgb, var(--color-ak-on-primary, #fff) 20%, transparent), transparent 38%),
777
+ linear-gradient(135deg, var(--color-ak-gradient-start, var(--color-ak-primary-hover)) 0%, var(--color-ak-gradient-mid, var(--color-ak-primary)) 50%, var(--color-ak-gradient-end, var(--color-ak-primary-active)) 100%);
778
+ border-color: color-mix(in srgb, var(--color-ak-glow-primary, #818cf8) 62%, transparent);
779
+ box-shadow:
780
+ inset 0 0 0 1px color-mix(in srgb, var(--color-ak-on-primary, #fff) 16%, transparent),
781
+ 0 10px 28px -18px color-mix(in srgb, var(--color-ak-glow-primary, #818cf8) 90%, transparent);
782
+ color: var(--color-ak-on-primary, #fff);
783
+ }
784
+ .ak-dark-accent-tile:is(.dark *) :where(i, svg, .ph),
785
+ .dark .ak-dark-accent-tile :where(i, svg, .ph),
786
+ [data-theme="dark"] .ak-dark-accent-tile :where(i, svg, .ph),
787
+ [data-ak-dark-panel] .ak-dark-accent-tile :where(i, svg, .ph),
788
+ [data-ak-dark-rail] .ak-dark-accent-tile :where(i, svg, .ph),
789
+ [data-ak-dark-mobile] .ak-dark-accent-tile :where(i, svg, .ph) {
790
+ color: var(--color-ak-on-primary, #fff);
791
+ }
792
+ .ak-dark-vivid-ink:is(.dark *),
793
+ .dark .ak-dark-vivid-ink,
794
+ [data-theme="dark"] .ak-dark-vivid-ink,
795
+ [data-ak-dark-panel] .ak-dark-vivid-ink,
796
+ [data-ak-dark-rail] .ak-dark-vivid-ink,
797
+ [data-ak-dark-mobile] .ak-dark-vivid-ink {
798
+ color: var(--color-ak-glow-primary, var(--color-ak-primary));
799
+ }
800
+
527
801
  /* ── Focus Ring Utility ── */
528
- .ak-focus-ring:focus-visible { outline: 2px solid var(--color-ak-primary); outline-offset: 2px; }
802
+ .ak-focus-ring:focus-visible { outline: 2px solid var(--color-ak-border-focus, var(--color-ak-primary)); outline-offset: 2px; }
529
803
 
530
804
  /* ── Price Fade Transition ── */
531
805
  .ak-price-fade { transition: opacity 0.15s ease-in-out; }
@@ -0,0 +1,17 @@
1
+ import * as React from 'react'
2
+
3
+ export interface AkThemeContextValue {
4
+ dark: boolean
5
+ }
6
+
7
+ /**
8
+ * Provides dark mode state to descendants — including Radix portaled content,
9
+ * which escapes the data-ak-dark-* attribute scope on ancestor elements.
10
+ */
11
+ export declare function AkThemeProvider(props: {
12
+ dark: boolean
13
+ children: React.ReactNode
14
+ }): React.ReactElement
15
+
16
+ /** Read the nearest AkThemeProvider's dark flag. Defaults to { dark: false }. */
17
+ export declare function useAkTheme(): AkThemeContextValue
@@ -0,0 +1,33 @@
1
+ 'use client'
2
+
3
+ import { createContext, createElement, useContext } from 'react'
4
+
5
+ /**
6
+ * AkThemeContext — propagates dark mode state to Radix portaled content.
7
+ *
8
+ * Problem: Radix Dialog/DropdownMenu/Popover portal content to document.body,
9
+ * which exits the CSS custom property inheritance chain from data-ak-dark-*
10
+ * attributes on ancestor elements.
11
+ *
12
+ * Solution: Every component that uses Radix portals reads this context and
13
+ * applies the dark mode data attributes directly onto the portaled content.
14
+ *
15
+ * Usage:
16
+ * <AkThemeProvider dark={isDark}>
17
+ * <MyComponentWithRadixPortals />
18
+ * </AkThemeProvider>
19
+ *
20
+ * // Inside the component:
21
+ * const { dark } = useAkTheme()
22
+ * <DropdownMenu.Content data-ak-dark-panel={dark || undefined}>
23
+ */
24
+
25
+ const AkThemeContext = createContext({ dark: false })
26
+
27
+ export function AkThemeProvider({ dark, children }) {
28
+ return createElement(AkThemeContext.Provider, { value: { dark } }, children)
29
+ }
30
+
31
+ export function useAkTheme() {
32
+ return useContext(AkThemeContext)
33
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "astralkit",
3
- "version": "0.4.0",
3
+ "version": "0.6.0",
4
4
  "description": "Design tokens and component primitives for accessible UI — Tailwind CSS v3 & v4",
5
5
  "type": "module",
6
6
  "exports": {
@@ -11,6 +11,7 @@
11
11
  "./tailwind.cjs": "./tailwind.cjs",
12
12
  "./utils": "./lib/utils.js",
13
13
  "./motion": "./lib/motion.js",
14
+ "./theme-context": "./lib/theme-context.js",
14
15
  "./ai-rules": "./ai-rules.md",
15
16
  "./palettes": "./palettes.css"
16
17
  },
@@ -32,11 +33,15 @@
32
33
  "tailwind-merge": "^2.2.0 || ^3.0.0"
33
34
  },
34
35
  "peerDependencies": {
35
- "tailwindcss": ">=3.0.0"
36
+ "tailwindcss": ">=3.0.0",
37
+ "react": ">=18.0.0"
36
38
  },
37
39
  "peerDependenciesMeta": {
38
40
  "tailwindcss": {
39
41
  "optional": false
42
+ },
43
+ "react": {
44
+ "optional": true
40
45
  }
41
46
  },
42
47
  "keywords": [