@duskmoon-dev/core 1.19.5 → 1.19.6

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.
@@ -4,6 +4,100 @@ export const css = `/**
4
4
  * DuskMoonUI - Material Design 3 inspired navigation system
5
5
  */
6
6
 
7
+ /* Preserve the Navigation entrypoint's published Dropdown coverage. */
8
+ /**
9
+ * Dropdown Component Styles
10
+ * Native Popover disclosure with logical CSS anchor positioning.
11
+ */
12
+
13
+ @layer components {
14
+ .dropdown {
15
+ position: relative;
16
+ display: inline-block;
17
+ }
18
+
19
+ .dropdown > .dropdown-content[popover] {
20
+ display: none;
21
+ position: fixed;
22
+ inset-block-start: auto;
23
+ inset-block-end: max(0.5rem, env(safe-area-inset-bottom, 0px));
24
+ inset-inline-start: auto;
25
+ inset-inline-end: max(
26
+ 0.5rem,
27
+ env(safe-area-inset-left, 0px),
28
+ env(safe-area-inset-right, 0px)
29
+ );
30
+ z-index: 50;
31
+ min-inline-size: 12rem;
32
+ max-inline-size: min(24rem, calc(100dvw - 1rem));
33
+ max-block-size: calc(100dvh - 1rem);
34
+ margin: 0;
35
+ padding: 0.5rem;
36
+ overflow: auto;
37
+ color: var(--color-on-surface);
38
+ background-color: var(--color-surface);
39
+ border: 1px solid var(--color-outline);
40
+ border-radius: var(--radius-sm);
41
+ box-shadow: var(--shadow-lg);
42
+ opacity: 0;
43
+ visibility: hidden;
44
+ pointer-events: none;
45
+ transform: translateY(-0.5rem);
46
+ transition:
47
+ opacity 150ms ease-out,
48
+ transform 150ms ease-out,
49
+ overlay 150ms ease-out allow-discrete,
50
+ display 150ms ease-out allow-discrete;
51
+ }
52
+
53
+ .dropdown > .dropdown-content[popover]:popover-open {
54
+ display: block;
55
+ opacity: 1;
56
+ visibility: visible;
57
+ pointer-events: auto;
58
+ transform: translateY(0);
59
+ }
60
+
61
+ @starting-style {
62
+ .dropdown > .dropdown-content[popover]:popover-open {
63
+ opacity: 0;
64
+ transform: translateY(-0.5rem);
65
+ }
66
+ }
67
+
68
+ @supports (position-area: block-end) {
69
+ .dropdown > .dropdown-content[popover] {
70
+ inset: auto;
71
+ margin: 0.25rem;
72
+ position-area: block-end span-inline-end;
73
+ position-try-fallbacks: flip-block, flip-inline, flip-block flip-inline;
74
+ }
75
+
76
+ .dropdown.dropdown-block-start > .dropdown-content[popover] {
77
+ position-area: block-start span-inline-end;
78
+ }
79
+
80
+ .dropdown.dropdown-block-end > .dropdown-content[popover] {
81
+ position-area: block-end span-inline-end;
82
+ }
83
+
84
+ .dropdown.dropdown-inline-start > .dropdown-content[popover] {
85
+ position-area: inline-start span-block-end;
86
+ }
87
+
88
+ .dropdown.dropdown-inline-end > .dropdown-content[popover] {
89
+ position-area: inline-end span-block-end;
90
+ }
91
+ }
92
+
93
+ @media (prefers-reduced-motion: reduce) {
94
+ .dropdown > .dropdown-content[popover] {
95
+ transition: none;
96
+ }
97
+ }
98
+ }
99
+
100
+
7
101
  @layer components {
8
102
  /* Navbar Base */
9
103
  .navbar {
@@ -590,60 +684,6 @@ export const css = `/**
590
684
  font-size: 1rem;
591
685
  }
592
686
 
593
- /* Dropdown */
594
- .dropdown {
595
- position: relative;
596
- display: inline-block;
597
- }
598
-
599
- .dropdown-content {
600
- position: absolute;
601
- z-index: 50;
602
- min-width: 12rem;
603
- padding: 0.5rem;
604
- background-color: var(--color-surface);
605
- border: 1px solid var(--color-outline);
606
- border-radius: var(--radius-sm);
607
- box-shadow: var(--shadow-lg);
608
- opacity: 0;
609
- visibility: hidden;
610
- transform: translateY(-0.5rem);
611
- transition: all 150ms ease-in-out;
612
- }
613
-
614
- .dropdown:hover .dropdown-content,
615
- .dropdown:focus-within .dropdown-content,
616
- .dropdown.dropdown-open .dropdown-content {
617
- opacity: 1;
618
- visibility: visible;
619
- transform: translateY(0);
620
- }
621
-
622
- /* Dropdown Positions */
623
- .dropdown-end .dropdown-content {
624
- right: 0;
625
- }
626
-
627
- .dropdown-top .dropdown-content {
628
- bottom: 100%;
629
- top: auto;
630
- margin-bottom: 0.25rem;
631
- }
632
-
633
- .dropdown-left .dropdown-content {
634
- right: 100%;
635
- left: auto;
636
- top: 0;
637
- margin-right: 0.25rem;
638
- }
639
-
640
- .dropdown-right .dropdown-content {
641
- left: 100%;
642
- right: auto;
643
- top: 0;
644
- margin-left: 0.25rem;
645
- }
646
-
647
687
  /* Pagination */
648
688
  .pagination {
649
689
  display: flex;
@@ -0,0 +1,5 @@
1
+ // Auto-generated type declaration for swap
2
+ export declare const css: string;
3
+ export declare const styles: CSSStyleSheet | null;
4
+ declare const sheet: CSSStyleSheet | null;
5
+ export default sheet;
@@ -0,0 +1,125 @@
1
+ // Auto-generated from swap.css
2
+ export const css = `/**
3
+ * Swap Component Styles
4
+ * Displays one of two non-interactive state indicators.
5
+ */
6
+
7
+ @layer components {
8
+ .swap {
9
+ position: relative;
10
+ display: inline-grid;
11
+ place-items: center;
12
+ vertical-align: middle;
13
+ cursor: pointer;
14
+ user-select: none;
15
+ }
16
+
17
+ .swap-input {
18
+ position: absolute;
19
+ inset: 0;
20
+ z-index: 1;
21
+ width: 100%;
22
+ height: 100%;
23
+ margin: 0;
24
+ opacity: 0;
25
+ cursor: pointer;
26
+ }
27
+
28
+ .swap-on,
29
+ .swap-off {
30
+ grid-area: 1 / 1;
31
+ display: inline-flex;
32
+ align-items: center;
33
+ justify-content: center;
34
+ inline-size: max-content;
35
+ max-inline-size: 100%;
36
+ transition: opacity 150ms ease-out, transform 150ms ease-out;
37
+ }
38
+
39
+ .swap-on {
40
+ opacity: 0;
41
+ visibility: hidden;
42
+ pointer-events: none;
43
+ }
44
+
45
+ .swap-off {
46
+ opacity: 1;
47
+ visibility: visible;
48
+ pointer-events: none;
49
+ }
50
+
51
+ .swap-input:checked ~ .swap-on,
52
+ .swap[aria-pressed="true"] > .swap-on {
53
+ opacity: 1;
54
+ visibility: visible;
55
+ }
56
+
57
+ .swap-input:checked ~ .swap-off,
58
+ .swap[aria-pressed="true"] > .swap-off {
59
+ opacity: 0;
60
+ visibility: hidden;
61
+ }
62
+
63
+ .swap:focus-visible,
64
+ .swap:has(.swap-input:focus-visible) {
65
+ outline: none;
66
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
67
+ border-radius: var(--radius-sm);
68
+ }
69
+
70
+ .swap:disabled,
71
+ .swap:has(.swap-input:disabled) {
72
+ cursor: not-allowed;
73
+ opacity: 0.5;
74
+ }
75
+
76
+ .swap-input:disabled {
77
+ cursor: not-allowed;
78
+ }
79
+
80
+ .swap-rotate .swap-on {
81
+ transform: rotate(-90deg) scale(0.8);
82
+ }
83
+
84
+ .swap-rotate .swap-off {
85
+ transform: rotate(0deg) scale(1);
86
+ }
87
+
88
+ .swap-rotate .swap-input:checked ~ .swap-on,
89
+ .swap-rotate[aria-pressed="true"] > .swap-on {
90
+ transform: rotate(0deg) scale(1);
91
+ }
92
+
93
+ .swap-rotate .swap-input:checked ~ .swap-off,
94
+ .swap-rotate[aria-pressed="true"] > .swap-off {
95
+ transform: rotate(90deg) scale(0.8);
96
+ }
97
+
98
+ /* Presentation-only override. It intentionally wins over semantic state. */
99
+ .swap.swap-active > .swap-on {
100
+ opacity: 1;
101
+ visibility: visible;
102
+ transform: rotate(0deg) scale(1);
103
+ }
104
+
105
+ .swap.swap-active > .swap-off {
106
+ opacity: 0;
107
+ visibility: hidden;
108
+ transform: rotate(90deg) scale(0.8);
109
+ }
110
+
111
+ @media (prefers-reduced-motion: reduce) {
112
+ .swap-on,
113
+ .swap-off {
114
+ transition: none;
115
+ }
116
+ }
117
+ }
118
+ `;
119
+
120
+ const sheet = typeof CSSStyleSheet !== 'undefined' ? new CSSStyleSheet() : null;
121
+ if (sheet) {
122
+ sheet.replaceSync(css);
123
+ }
124
+ export const styles = sheet;
125
+ export default sheet;