@stridge/noctis 1.0.0-beta.3 → 1.0.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/styles.css CHANGED
@@ -481,7 +481,7 @@
481
481
  }
482
482
 
483
483
  /* ── Authored static palettes (accent-independent; switch on the resolved mode) ─────────
484
- * Chart and avatar series stay categorically stable regardless of the accent (re-theming
484
+ * Chart and categorical-palette series stay categorically stable regardless of the accent (re-theming
485
485
  * them would break legend↔series identity), so they are authored — not engine-derived. Dark
486
486
  * values sit on `:root`; light values under `[data-theme="light"]`, set by the app shell and the
487
487
  * theme provider from the resolved mode. Hues are spread across the wheel and separated in
@@ -497,17 +497,17 @@
497
497
  --noctis-color-chart-7: oklch(0.7 0.17 310);
498
498
  --noctis-color-chart-8: oklch(0.76 0.14 350);
499
499
 
500
- --noctis-color-avatar-1: oklch(0.62 0.17 264);
501
- --noctis-color-avatar-2: oklch(0.62 0.15 196);
502
- --noctis-color-avatar-3: oklch(0.62 0.16 152);
503
- --noctis-color-avatar-4: oklch(0.64 0.15 130);
504
- --noctis-color-avatar-5: oklch(0.66 0.16 70);
505
- --noctis-color-avatar-6: oklch(0.62 0.18 40);
506
- --noctis-color-avatar-7: oklch(0.6 0.2 18);
507
- --noctis-color-avatar-8: oklch(0.6 0.18 330);
508
- --noctis-color-avatar-9: oklch(0.6 0.18 300);
509
- --noctis-color-avatar-10: oklch(0.6 0.15 285);
510
- --noctis-color-avatar-foreground: oklch(0.99 0 0);
500
+ --noctis-color-palette-1: oklch(0.62 0.17 264);
501
+ --noctis-color-palette-2: oklch(0.62 0.15 196);
502
+ --noctis-color-palette-3: oklch(0.62 0.16 152);
503
+ --noctis-color-palette-4: oklch(0.64 0.15 130);
504
+ --noctis-color-palette-5: oklch(0.66 0.16 70);
505
+ --noctis-color-palette-6: oklch(0.62 0.18 40);
506
+ --noctis-color-palette-7: oklch(0.6 0.2 18);
507
+ --noctis-color-palette-8: oklch(0.6 0.18 330);
508
+ --noctis-color-palette-9: oklch(0.6 0.18 300);
509
+ --noctis-color-palette-10: oklch(0.6 0.15 285);
510
+ --noctis-color-palette-foreground: oklch(0.99 0 0);
511
511
  }
512
512
 
513
513
  :root[data-theme="light"] {
@@ -520,16 +520,16 @@
520
520
  --noctis-color-chart-7: oklch(0.55 0.19 310);
521
521
  --noctis-color-chart-8: oklch(0.6 0.16 350);
522
522
 
523
- --noctis-color-avatar-1: oklch(0.58 0.18 264);
524
- --noctis-color-avatar-2: oklch(0.56 0.15 196);
525
- --noctis-color-avatar-3: oklch(0.56 0.16 152);
526
- --noctis-color-avatar-4: oklch(0.58 0.15 130);
527
- --noctis-color-avatar-5: oklch(0.62 0.16 70);
528
- --noctis-color-avatar-6: oklch(0.58 0.19 40);
529
- --noctis-color-avatar-7: oklch(0.56 0.21 18);
530
- --noctis-color-avatar-8: oklch(0.56 0.19 330);
531
- --noctis-color-avatar-9: oklch(0.56 0.19 300);
532
- --noctis-color-avatar-10: oklch(0.56 0.16 285);
523
+ --noctis-color-palette-1: oklch(0.58 0.18 264);
524
+ --noctis-color-palette-2: oklch(0.56 0.15 196);
525
+ --noctis-color-palette-3: oklch(0.56 0.16 152);
526
+ --noctis-color-palette-4: oklch(0.58 0.15 130);
527
+ --noctis-color-palette-5: oklch(0.62 0.16 70);
528
+ --noctis-color-palette-6: oklch(0.58 0.19 40);
529
+ --noctis-color-palette-7: oklch(0.56 0.21 18);
530
+ --noctis-color-palette-8: oklch(0.56 0.19 330);
531
+ --noctis-color-palette-9: oklch(0.56 0.19 300);
532
+ --noctis-color-palette-10: oklch(0.56 0.16 285);
533
533
  }
534
534
 
535
535
  /* ── Light-mode shadows ─────────────────────────────────────────────────────────────────
@@ -2441,6 +2441,31 @@
2441
2441
  [data-slot="noctis-avatar"][data-size="xl"] [data-slot="noctis-avatar-indicator"] {
2442
2442
  --_avatar-indicator-size: var(--noctis-avatar-indicator-size, 1rem);
2443
2443
  }
2444
+ [data-slot="noctis-badge"] {
2445
+ --_badge-padding-inline: var(--noctis-badge-padding-inline, 0.5rem);
2446
+ --_badge-padding-block: var(--noctis-badge-padding-block, 0.1875rem);
2447
+ --_badge-gap: var(--noctis-badge-gap, 0.3125rem);
2448
+ --_badge-font-size: var(--noctis-badge-font-size, var(--noctis-text-mini));
2449
+ --_badge-border-radius: var(--noctis-badge-border-radius, var(--noctis-radius-full));
2450
+ }
2451
+ [data-slot="noctis-badge-dot"] {
2452
+ --_badge-dot-size: var(--noctis-badge-dot-size, 0.375rem);
2453
+ }
2454
+ [data-slot="noctis-badge-icon"] {
2455
+ --_badge-icon-size: var(--noctis-badge-icon-size, 0.875rem);
2456
+ }
2457
+ [data-slot="noctis-badge"][data-size="sm"] {
2458
+ --_badge-padding-inline: var(--noctis-badge-padding-inline, 0.4375rem);
2459
+ --_badge-padding-block: var(--noctis-badge-padding-block, 0.125rem);
2460
+ --_badge-gap: var(--noctis-badge-gap, 0.25rem);
2461
+ --_badge-font-size: var(--noctis-badge-font-size, var(--noctis-text-micro));
2462
+ }
2463
+ [data-slot="noctis-badge"][data-size="sm"] [data-slot="noctis-badge-dot"] {
2464
+ --_badge-dot-size: var(--noctis-badge-dot-size, 0.3125rem);
2465
+ }
2466
+ [data-slot="noctis-badge"][data-size="sm"] [data-slot="noctis-badge-icon"] {
2467
+ --_badge-icon-size: var(--noctis-badge-icon-size, 0.75rem);
2468
+ }
2444
2469
  [data-slot="noctis-otp-field"] {
2445
2470
  --_otp-field-gap: var(--noctis-otp-field-gap, 0.5rem);
2446
2471
  }
@@ -3402,7 +3427,7 @@
3402
3427
  * box-shadow rings) can extend past the edge without being cut off.
3403
3428
  *
3404
3429
  * Avatars are static-identity and accent-independent: the fallback fill is one of ten authored
3405
- * `--noctis-color-avatar-N` roles, selected by the `data-avatar-index` the component hashes from a
3430
+ * `--noctis-color-palette-N` roles, selected by the `data-avatar-index` the component hashes from a
3406
3431
  * stable seed — so categorical identity holds across themes and the fill never re-themes on the accent.
3407
3432
  */
3408
3433
 
@@ -3456,48 +3481,48 @@
3456
3481
  font-weight: 500;
3457
3482
  line-height: 1;
3458
3483
  text-transform: uppercase;
3459
- color: var(--noctis-color-avatar-foreground);
3484
+ color: var(--noctis-color-palette-foreground);
3460
3485
  background-color: var(--noctis-color-muted);
3461
3486
  }
3462
3487
 
3463
3488
  [data-slot="noctis-avatar-fallback"][data-avatar-index="1"] {
3464
- background-color: var(--noctis-color-avatar-1);
3489
+ background-color: var(--noctis-color-palette-1);
3465
3490
  }
3466
3491
 
3467
3492
  [data-slot="noctis-avatar-fallback"][data-avatar-index="2"] {
3468
- background-color: var(--noctis-color-avatar-2);
3493
+ background-color: var(--noctis-color-palette-2);
3469
3494
  }
3470
3495
 
3471
3496
  [data-slot="noctis-avatar-fallback"][data-avatar-index="3"] {
3472
- background-color: var(--noctis-color-avatar-3);
3497
+ background-color: var(--noctis-color-palette-3);
3473
3498
  }
3474
3499
 
3475
3500
  [data-slot="noctis-avatar-fallback"][data-avatar-index="4"] {
3476
- background-color: var(--noctis-color-avatar-4);
3501
+ background-color: var(--noctis-color-palette-4);
3477
3502
  }
3478
3503
 
3479
3504
  [data-slot="noctis-avatar-fallback"][data-avatar-index="5"] {
3480
- background-color: var(--noctis-color-avatar-5);
3505
+ background-color: var(--noctis-color-palette-5);
3481
3506
  }
3482
3507
 
3483
3508
  [data-slot="noctis-avatar-fallback"][data-avatar-index="6"] {
3484
- background-color: var(--noctis-color-avatar-6);
3509
+ background-color: var(--noctis-color-palette-6);
3485
3510
  }
3486
3511
 
3487
3512
  [data-slot="noctis-avatar-fallback"][data-avatar-index="7"] {
3488
- background-color: var(--noctis-color-avatar-7);
3513
+ background-color: var(--noctis-color-palette-7);
3489
3514
  }
3490
3515
 
3491
3516
  [data-slot="noctis-avatar-fallback"][data-avatar-index="8"] {
3492
- background-color: var(--noctis-color-avatar-8);
3517
+ background-color: var(--noctis-color-palette-8);
3493
3518
  }
3494
3519
 
3495
3520
  [data-slot="noctis-avatar-fallback"][data-avatar-index="9"] {
3496
- background-color: var(--noctis-color-avatar-9);
3521
+ background-color: var(--noctis-color-palette-9);
3497
3522
  }
3498
3523
 
3499
3524
  [data-slot="noctis-avatar-fallback"][data-avatar-index="10"] {
3500
- background-color: var(--noctis-color-avatar-10);
3525
+ background-color: var(--noctis-color-palette-10);
3501
3526
  }
3502
3527
 
3503
3528
  /*
@@ -3672,6 +3697,381 @@
3672
3697
  }
3673
3698
  }
3674
3699
 
3700
+ @layer noctis.components {
3701
+ /*
3702
+ * Badge is self-contained, so every rule keys off the element's own `data-slot`. The chip metrics
3703
+ * flow through the `--_badge-*` internals, whose per-size defaults live in the generated component
3704
+ * layer (`tokens.css`) keyed off the `data-size` the root stamps.
3705
+ *
3706
+ * Colour is a two-axis grid: `data-variant` (the emphasis — a `solid` fill, a `soft` tint, a
3707
+ * transparent `outline`, or a neutral `dot` chip) crossed with `data-tone` (the colour identity). In
3708
+ * every variant but `dot` the tone tints the whole chip and the dot/icon ride `currentColor`; the
3709
+ * `dot` variant keeps the chip neutral and colours the leading dot alone. Like Avatar's swatch rules,
3710
+ * the grid is hand-authored flat rules reading a declared role or palette swatch directly — no
3711
+ * `--_badge-*` colour internal and no mint re-point, so a global retheme of a status/accent role (or
3712
+ * the shared categorical palette) propagates for free, and the decorative tones never re-derive off
3713
+ * the accent.
3714
+ *
3715
+ * The six semantic tones (neutral/accent/success/warning/danger/info) paint from their role families
3716
+ * — `solid` from the role, `soft` from its `-muted` tint, `outline` from its `-border`. The eight
3717
+ * decorative tones (red…pink) map onto the accent-independent `--noctis-color-palette-N` palette,
3718
+ * authored for a white knockout, so a `solid` decorative chip stays legible; `soft` shows the swatch
3719
+ * as the label on the neutral chip tint and `outline` draws the swatch as the edge (the palette ships
3720
+ * no engine tint of its own, and a derived tint isn't expressible in component CSS).
3721
+ *
3722
+ * The dot and icon take no tone rules of their own: the dot fills with `currentColor` and the icon
3723
+ * inherits it, so both track the chip's text colour and stay legible in every variant automatically.
3724
+ */
3725
+
3726
+ /* root — the pill. A transparent 1px border holds the box geometry stable across variants, so the
3727
+ * `outline` variant (which colours that border) never shifts the chip's size. The base colours are
3728
+ * the default neutral `soft` look; the variant×tone rules below override them. */
3729
+ [data-slot="noctis-badge"] {
3730
+ display: inline-flex;
3731
+ align-items: center;
3732
+ justify-content: center;
3733
+ gap: var(--_badge-gap);
3734
+ inline-size: fit-content;
3735
+ max-inline-size: 100%;
3736
+ padding-block: var(--_badge-padding-block);
3737
+ padding-inline: var(--_badge-padding-inline);
3738
+ border: 1px solid transparent;
3739
+ border-radius: var(--_badge-border-radius);
3740
+ font-family: var(--noctis-font-sans);
3741
+ font-size: var(--_badge-font-size);
3742
+ font-weight: 500;
3743
+ line-height: 1;
3744
+ white-space: nowrap;
3745
+ vertical-align: middle;
3746
+ color: var(--noctis-color-foreground);
3747
+ background-color: var(--noctis-color-control);
3748
+ }
3749
+
3750
+ /* A badge rendered on an anchor joins the chip, not the link — keep the chip's own colour, drop the
3751
+ * underline. */
3752
+ a[data-slot="noctis-badge"] {
3753
+ text-decoration: none;
3754
+ }
3755
+
3756
+ /* dot — a small leading status dot. Fills with the chip's text colour, so it reads on the fill in
3757
+ * `solid` (a knockout dot) and shows the saturated tone in `soft`/`outline`. */
3758
+ [data-slot="noctis-badge-dot"] {
3759
+ flex-shrink: 0;
3760
+ inline-size: var(--_badge-dot-size);
3761
+ block-size: var(--_badge-dot-size);
3762
+ border-radius: var(--noctis-radius-full);
3763
+ background-color: currentcolor;
3764
+ }
3765
+
3766
+ /* icon — a leading glyph clamped to the chip's icon size; inherits the chip's text colour. */
3767
+ [data-slot="noctis-badge-icon"] {
3768
+ display: inline-flex;
3769
+ flex-shrink: 0;
3770
+ align-items: center;
3771
+ justify-content: center;
3772
+ }
3773
+
3774
+ [data-slot="noctis-badge-icon"] svg {
3775
+ inline-size: var(--_badge-icon-size);
3776
+ block-size: var(--_badge-icon-size);
3777
+ }
3778
+
3779
+ /* ─── solid: a filled chip with a knockout label ─────────────────────────────────────────────── */
3780
+
3781
+ [data-slot="noctis-badge"][data-variant="solid"][data-tone="neutral"] {
3782
+ background-color: var(--noctis-color-primary);
3783
+ color: var(--noctis-color-primary-foreground);
3784
+ }
3785
+
3786
+ [data-slot="noctis-badge"][data-variant="solid"][data-tone="accent"] {
3787
+ background-color: var(--noctis-color-accent);
3788
+ color: var(--noctis-color-accent-foreground);
3789
+ }
3790
+
3791
+ [data-slot="noctis-badge"][data-variant="solid"][data-tone="success"] {
3792
+ background-color: var(--noctis-color-success);
3793
+ color: var(--noctis-color-success-foreground);
3794
+ }
3795
+
3796
+ [data-slot="noctis-badge"][data-variant="solid"][data-tone="warning"] {
3797
+ background-color: var(--noctis-color-warning);
3798
+ color: var(--noctis-color-warning-foreground);
3799
+ }
3800
+
3801
+ [data-slot="noctis-badge"][data-variant="solid"][data-tone="danger"] {
3802
+ background-color: var(--noctis-color-danger);
3803
+ color: var(--noctis-color-danger-foreground);
3804
+ }
3805
+
3806
+ [data-slot="noctis-badge"][data-variant="solid"][data-tone="info"] {
3807
+ background-color: var(--noctis-color-info);
3808
+ color: var(--noctis-color-info-foreground);
3809
+ }
3810
+
3811
+ [data-slot="noctis-badge"][data-variant="solid"][data-tone="red"] {
3812
+ background-color: var(--noctis-color-palette-7);
3813
+ color: var(--noctis-color-palette-foreground);
3814
+ }
3815
+
3816
+ [data-slot="noctis-badge"][data-variant="solid"][data-tone="orange"] {
3817
+ background-color: var(--noctis-color-palette-6);
3818
+ color: var(--noctis-color-palette-foreground);
3819
+ }
3820
+
3821
+ [data-slot="noctis-badge"][data-variant="solid"][data-tone="amber"] {
3822
+ background-color: var(--noctis-color-palette-5);
3823
+ color: var(--noctis-color-palette-foreground);
3824
+ }
3825
+
3826
+ [data-slot="noctis-badge"][data-variant="solid"][data-tone="green"] {
3827
+ background-color: var(--noctis-color-palette-4);
3828
+ color: var(--noctis-color-palette-foreground);
3829
+ }
3830
+
3831
+ [data-slot="noctis-badge"][data-variant="solid"][data-tone="teal"] {
3832
+ background-color: var(--noctis-color-palette-3);
3833
+ color: var(--noctis-color-palette-foreground);
3834
+ }
3835
+
3836
+ [data-slot="noctis-badge"][data-variant="solid"][data-tone="blue"] {
3837
+ background-color: var(--noctis-color-palette-1);
3838
+ color: var(--noctis-color-palette-foreground);
3839
+ }
3840
+
3841
+ [data-slot="noctis-badge"][data-variant="solid"][data-tone="purple"] {
3842
+ background-color: var(--noctis-color-palette-9);
3843
+ color: var(--noctis-color-palette-foreground);
3844
+ }
3845
+
3846
+ [data-slot="noctis-badge"][data-variant="solid"][data-tone="pink"] {
3847
+ background-color: var(--noctis-color-palette-8);
3848
+ color: var(--noctis-color-palette-foreground);
3849
+ }
3850
+
3851
+ /* ─── soft: a quiet tint behind saturated text ──────────────────────────────────────────────── */
3852
+
3853
+ [data-slot="noctis-badge"][data-variant="soft"][data-tone="neutral"] {
3854
+ background-color: var(--noctis-color-control);
3855
+ color: var(--noctis-color-foreground);
3856
+ }
3857
+
3858
+ [data-slot="noctis-badge"][data-variant="soft"][data-tone="accent"] {
3859
+ background-color: var(--noctis-color-accent-muted);
3860
+ color: var(--noctis-color-accent);
3861
+ }
3862
+
3863
+ [data-slot="noctis-badge"][data-variant="soft"][data-tone="success"] {
3864
+ background-color: var(--noctis-color-success-muted);
3865
+ color: var(--noctis-color-success-muted-foreground);
3866
+ }
3867
+
3868
+ [data-slot="noctis-badge"][data-variant="soft"][data-tone="warning"] {
3869
+ background-color: var(--noctis-color-warning-muted);
3870
+ color: var(--noctis-color-warning-muted-foreground);
3871
+ }
3872
+
3873
+ [data-slot="noctis-badge"][data-variant="soft"][data-tone="danger"] {
3874
+ background-color: var(--noctis-color-danger-muted);
3875
+ color: var(--noctis-color-danger-muted-foreground);
3876
+ }
3877
+
3878
+ [data-slot="noctis-badge"][data-variant="soft"][data-tone="info"] {
3879
+ background-color: var(--noctis-color-info-muted);
3880
+ color: var(--noctis-color-info-muted-foreground);
3881
+ }
3882
+
3883
+ /* Decorative `soft` sits the saturated palette colour as text on the neutral chip tint — the
3884
+ * the palette swatches ship no engine tint of their own (unlike the semantic `-muted` roles), and a
3885
+ * faint tint can't be derived in component CSS (no `color-mix`), so the colour reads through the
3886
+ * label while the chip stays a quiet neutral. */
3887
+ [data-slot="noctis-badge"][data-variant="soft"][data-tone="red"] {
3888
+ color: var(--noctis-color-palette-7);
3889
+ }
3890
+
3891
+ [data-slot="noctis-badge"][data-variant="soft"][data-tone="orange"] {
3892
+ color: var(--noctis-color-palette-6);
3893
+ }
3894
+
3895
+ [data-slot="noctis-badge"][data-variant="soft"][data-tone="amber"] {
3896
+ color: var(--noctis-color-palette-5);
3897
+ }
3898
+
3899
+ [data-slot="noctis-badge"][data-variant="soft"][data-tone="green"] {
3900
+ color: var(--noctis-color-palette-4);
3901
+ }
3902
+
3903
+ [data-slot="noctis-badge"][data-variant="soft"][data-tone="teal"] {
3904
+ color: var(--noctis-color-palette-3);
3905
+ }
3906
+
3907
+ [data-slot="noctis-badge"][data-variant="soft"][data-tone="blue"] {
3908
+ color: var(--noctis-color-palette-1);
3909
+ }
3910
+
3911
+ [data-slot="noctis-badge"][data-variant="soft"][data-tone="purple"] {
3912
+ color: var(--noctis-color-palette-9);
3913
+ }
3914
+
3915
+ [data-slot="noctis-badge"][data-variant="soft"][data-tone="pink"] {
3916
+ color: var(--noctis-color-palette-8);
3917
+ }
3918
+
3919
+ /* ─── outline: a transparent chip with a coloured edge ──────────────────────────────────────── */
3920
+
3921
+ [data-slot="noctis-badge"][data-variant="outline"][data-tone="neutral"] {
3922
+ background-color: transparent;
3923
+ border-color: var(--noctis-color-border);
3924
+ color: var(--noctis-color-foreground);
3925
+ }
3926
+
3927
+ [data-slot="noctis-badge"][data-variant="outline"][data-tone="accent"] {
3928
+ background-color: transparent;
3929
+ border-color: var(--noctis-color-accent);
3930
+ color: var(--noctis-color-accent);
3931
+ }
3932
+
3933
+ [data-slot="noctis-badge"][data-variant="outline"][data-tone="success"] {
3934
+ background-color: transparent;
3935
+ border-color: var(--noctis-color-success-border);
3936
+ color: var(--noctis-color-success-muted-foreground);
3937
+ }
3938
+
3939
+ [data-slot="noctis-badge"][data-variant="outline"][data-tone="warning"] {
3940
+ background-color: transparent;
3941
+ border-color: var(--noctis-color-warning-border);
3942
+ color: var(--noctis-color-warning-muted-foreground);
3943
+ }
3944
+
3945
+ [data-slot="noctis-badge"][data-variant="outline"][data-tone="danger"] {
3946
+ background-color: transparent;
3947
+ border-color: var(--noctis-color-danger-border);
3948
+ color: var(--noctis-color-danger-muted-foreground);
3949
+ }
3950
+
3951
+ [data-slot="noctis-badge"][data-variant="outline"][data-tone="info"] {
3952
+ background-color: transparent;
3953
+ border-color: var(--noctis-color-info-border);
3954
+ color: var(--noctis-color-info-muted-foreground);
3955
+ }
3956
+
3957
+ /* Decorative `outline` draws the saturated palette swatch as both the edge and the label colour on a
3958
+ * transparent chip — the full swatch (no derived alpha) keeps the rule a declared-role read. */
3959
+ [data-slot="noctis-badge"][data-variant="outline"][data-tone="red"] {
3960
+ background-color: transparent;
3961
+ border-color: var(--noctis-color-palette-7);
3962
+ color: var(--noctis-color-palette-7);
3963
+ }
3964
+
3965
+ [data-slot="noctis-badge"][data-variant="outline"][data-tone="orange"] {
3966
+ background-color: transparent;
3967
+ border-color: var(--noctis-color-palette-6);
3968
+ color: var(--noctis-color-palette-6);
3969
+ }
3970
+
3971
+ [data-slot="noctis-badge"][data-variant="outline"][data-tone="amber"] {
3972
+ background-color: transparent;
3973
+ border-color: var(--noctis-color-palette-5);
3974
+ color: var(--noctis-color-palette-5);
3975
+ }
3976
+
3977
+ [data-slot="noctis-badge"][data-variant="outline"][data-tone="green"] {
3978
+ background-color: transparent;
3979
+ border-color: var(--noctis-color-palette-4);
3980
+ color: var(--noctis-color-palette-4);
3981
+ }
3982
+
3983
+ [data-slot="noctis-badge"][data-variant="outline"][data-tone="teal"] {
3984
+ background-color: transparent;
3985
+ border-color: var(--noctis-color-palette-3);
3986
+ color: var(--noctis-color-palette-3);
3987
+ }
3988
+
3989
+ [data-slot="noctis-badge"][data-variant="outline"][data-tone="blue"] {
3990
+ background-color: transparent;
3991
+ border-color: var(--noctis-color-palette-1);
3992
+ color: var(--noctis-color-palette-1);
3993
+ }
3994
+
3995
+ [data-slot="noctis-badge"][data-variant="outline"][data-tone="purple"] {
3996
+ background-color: transparent;
3997
+ border-color: var(--noctis-color-palette-9);
3998
+ color: var(--noctis-color-palette-9);
3999
+ }
4000
+
4001
+ [data-slot="noctis-badge"][data-variant="outline"][data-tone="pink"] {
4002
+ background-color: transparent;
4003
+ border-color: var(--noctis-color-palette-8);
4004
+ color: var(--noctis-color-palette-8);
4005
+ }
4006
+
4007
+ /* ─── dot: a neutral chip whose only colour is its leading status dot ───────────────────────────
4008
+ * Unlike the variants above (where the tone tints the whole chip), the `dot` variant keeps the chip
4009
+ * neutral — a transparent fill, a hairline border, neutral text for every tone — and lets the dot
4010
+ * alone carry the status colour. So the dot must NOT ride `currentColor` here (that would render it
4011
+ * neutral); each tone re-points the dot fill to its saturated role/swatch. */
4012
+ [data-slot="noctis-badge"][data-variant="dot"] {
4013
+ background-color: transparent;
4014
+ border-color: var(--noctis-color-border);
4015
+ color: var(--noctis-color-foreground);
4016
+ }
4017
+
4018
+ [data-slot="noctis-badge"][data-variant="dot"][data-tone="neutral"] [data-slot="noctis-badge-dot"] {
4019
+ background-color: var(--noctis-color-muted);
4020
+ }
4021
+
4022
+ [data-slot="noctis-badge"][data-variant="dot"][data-tone="accent"] [data-slot="noctis-badge-dot"] {
4023
+ background-color: var(--noctis-color-accent);
4024
+ }
4025
+
4026
+ [data-slot="noctis-badge"][data-variant="dot"][data-tone="success"] [data-slot="noctis-badge-dot"] {
4027
+ background-color: var(--noctis-color-success);
4028
+ }
4029
+
4030
+ [data-slot="noctis-badge"][data-variant="dot"][data-tone="warning"] [data-slot="noctis-badge-dot"] {
4031
+ background-color: var(--noctis-color-warning);
4032
+ }
4033
+
4034
+ [data-slot="noctis-badge"][data-variant="dot"][data-tone="danger"] [data-slot="noctis-badge-dot"] {
4035
+ background-color: var(--noctis-color-danger);
4036
+ }
4037
+
4038
+ [data-slot="noctis-badge"][data-variant="dot"][data-tone="info"] [data-slot="noctis-badge-dot"] {
4039
+ background-color: var(--noctis-color-info);
4040
+ }
4041
+
4042
+ [data-slot="noctis-badge"][data-variant="dot"][data-tone="red"] [data-slot="noctis-badge-dot"] {
4043
+ background-color: var(--noctis-color-palette-7);
4044
+ }
4045
+
4046
+ [data-slot="noctis-badge"][data-variant="dot"][data-tone="orange"] [data-slot="noctis-badge-dot"] {
4047
+ background-color: var(--noctis-color-palette-6);
4048
+ }
4049
+
4050
+ [data-slot="noctis-badge"][data-variant="dot"][data-tone="amber"] [data-slot="noctis-badge-dot"] {
4051
+ background-color: var(--noctis-color-palette-5);
4052
+ }
4053
+
4054
+ [data-slot="noctis-badge"][data-variant="dot"][data-tone="green"] [data-slot="noctis-badge-dot"] {
4055
+ background-color: var(--noctis-color-palette-4);
4056
+ }
4057
+
4058
+ [data-slot="noctis-badge"][data-variant="dot"][data-tone="teal"] [data-slot="noctis-badge-dot"] {
4059
+ background-color: var(--noctis-color-palette-3);
4060
+ }
4061
+
4062
+ [data-slot="noctis-badge"][data-variant="dot"][data-tone="blue"] [data-slot="noctis-badge-dot"] {
4063
+ background-color: var(--noctis-color-palette-1);
4064
+ }
4065
+
4066
+ [data-slot="noctis-badge"][data-variant="dot"][data-tone="purple"] [data-slot="noctis-badge-dot"] {
4067
+ background-color: var(--noctis-color-palette-9);
4068
+ }
4069
+
4070
+ [data-slot="noctis-badge"][data-variant="dot"][data-tone="pink"] [data-slot="noctis-badge-dot"] {
4071
+ background-color: var(--noctis-color-palette-8);
4072
+ }
4073
+ }
4074
+
3675
4075
  @layer noctis.components {
3676
4076
  /*
3677
4077
  * Button is a class-escape-hatch primitive: `Button.props()` styles a *foreign* element (the rail's
package/dist/tailwind.css CHANGED
@@ -167,17 +167,17 @@
167
167
  --color-chart-6: var(--noctis-color-chart-6);
168
168
  --color-chart-7: var(--noctis-color-chart-7);
169
169
  --color-chart-8: var(--noctis-color-chart-8);
170
- --color-avatar-1: var(--noctis-color-avatar-1);
171
- --color-avatar-2: var(--noctis-color-avatar-2);
172
- --color-avatar-3: var(--noctis-color-avatar-3);
173
- --color-avatar-4: var(--noctis-color-avatar-4);
174
- --color-avatar-5: var(--noctis-color-avatar-5);
175
- --color-avatar-6: var(--noctis-color-avatar-6);
176
- --color-avatar-7: var(--noctis-color-avatar-7);
177
- --color-avatar-8: var(--noctis-color-avatar-8);
178
- --color-avatar-9: var(--noctis-color-avatar-9);
179
- --color-avatar-10: var(--noctis-color-avatar-10);
180
- --color-avatar-foreground: var(--noctis-color-avatar-foreground);
170
+ --color-palette-1: var(--noctis-color-palette-1);
171
+ --color-palette-2: var(--noctis-color-palette-2);
172
+ --color-palette-3: var(--noctis-color-palette-3);
173
+ --color-palette-4: var(--noctis-color-palette-4);
174
+ --color-palette-5: var(--noctis-color-palette-5);
175
+ --color-palette-6: var(--noctis-color-palette-6);
176
+ --color-palette-7: var(--noctis-color-palette-7);
177
+ --color-palette-8: var(--noctis-color-palette-8);
178
+ --color-palette-9: var(--noctis-color-palette-9);
179
+ --color-palette-10: var(--noctis-color-palette-10);
180
+ --color-palette-foreground: var(--noctis-color-palette-foreground);
181
181
 
182
182
  /* Named text sizes + their paired line-height keys (`--text-<size>--line-height`). */
183
183
  --text-micro: var(--noctis-text-micro);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stridge/noctis",
3
- "version": "1.0.0-beta.3",
3
+ "version": "1.0.0-beta.4",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -69,9 +69,9 @@
69
69
  "culori": "4.0.2",
70
70
  "lucide-react": "1.17.0",
71
71
  "simple-icons": "16.23.0",
72
- "@stridge/noctis-design-tokens": "1.0.0-beta.3",
73
- "@stridge/noctis-theme-engine": "1.0.0-beta.3",
74
- "@stridge/noctis-intl": "1.0.0-beta.3"
72
+ "@stridge/noctis-intl": "1.0.0-beta.4",
73
+ "@stridge/noctis-theme-engine": "1.0.0-beta.4",
74
+ "@stridge/noctis-design-tokens": "1.0.0-beta.4"
75
75
  },
76
76
  "peerDependencies": {
77
77
  "react": "19.2.7",