@entropix/react 0.3.0 → 1.0.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.
@@ -1,127 +1,125 @@
1
1
  /* Layout Primitives — @entropix/react */
2
2
 
3
- @layer entropix {
4
- /* === Stack (vertical flex layout) === */
3
+ /* === Stack (vertical flex layout) === */
5
4
 
6
- .entropix-stack {
7
- display: flex;
8
- flex-direction: column;
9
- gap: var(--entropix-space-layout-stack);
10
- }
11
-
12
- .entropix-stack--gap-none { gap: 0; }
13
- .entropix-stack--gap-xs { gap: var(--entropix-spacing-1); }
14
- .entropix-stack--gap-sm { gap: var(--entropix-spacing-2); }
15
- .entropix-stack--gap-md { gap: var(--entropix-spacing-4); }
16
- .entropix-stack--gap-lg { gap: var(--entropix-spacing-6); }
17
- .entropix-stack--gap-xl { gap: var(--entropix-spacing-8); }
18
- .entropix-stack--gap-2xl { gap: var(--entropix-spacing-12); }
19
-
20
- .entropix-stack--align-start { align-items: flex-start; }
21
- .entropix-stack--align-center { align-items: center; }
22
- .entropix-stack--align-end { align-items: flex-end; }
23
- .entropix-stack--align-stretch { align-items: stretch; }
24
-
25
- .entropix-stack--full-width { width: 100%; }
26
-
27
- /* === Inline (horizontal flex layout) === */
28
-
29
- .entropix-inline {
30
- display: flex;
31
- flex-direction: row;
32
- align-items: center;
33
- gap: var(--entropix-space-layout-inline);
34
- }
5
+ .entropix-stack {
6
+ display: flex;
7
+ flex-direction: column;
8
+ gap: var(--entropix-space-layout-stack);
9
+ }
35
10
 
36
- .entropix-inline--gap-none { gap: 0; }
37
- .entropix-inline--gap-xs { gap: var(--entropix-spacing-1); }
38
- .entropix-inline--gap-sm { gap: var(--entropix-spacing-2); }
39
- .entropix-inline--gap-md { gap: var(--entropix-spacing-4); }
40
- .entropix-inline--gap-lg { gap: var(--entropix-spacing-6); }
41
- .entropix-inline--gap-xl { gap: var(--entropix-spacing-8); }
42
- .entropix-inline--gap-2xl { gap: var(--entropix-spacing-12); }
11
+ .entropix-stack--gap-none { gap: 0; }
12
+ .entropix-stack--gap-xs { gap: var(--entropix-spacing-1); }
13
+ .entropix-stack--gap-sm { gap: var(--entropix-spacing-2); }
14
+ .entropix-stack--gap-md { gap: var(--entropix-spacing-4); }
15
+ .entropix-stack--gap-lg { gap: var(--entropix-spacing-6); }
16
+ .entropix-stack--gap-xl { gap: var(--entropix-spacing-8); }
17
+ .entropix-stack--gap-2xl { gap: var(--entropix-spacing-12); }
43
18
 
44
- .entropix-inline--align-start { align-items: flex-start; }
45
- .entropix-inline--align-center { align-items: center; }
46
- .entropix-inline--align-end { align-items: flex-end; }
47
- .entropix-inline--align-stretch { align-items: stretch; }
48
- .entropix-inline--align-baseline { align-items: baseline; }
19
+ .entropix-stack--align-start { align-items: flex-start; }
20
+ .entropix-stack--align-center { align-items: center; }
21
+ .entropix-stack--align-end { align-items: flex-end; }
22
+ .entropix-stack--align-stretch { align-items: stretch; }
49
23
 
50
- .entropix-inline--justify-start { justify-content: flex-start; }
51
- .entropix-inline--justify-center { justify-content: center; }
52
- .entropix-inline--justify-end { justify-content: flex-end; }
53
- .entropix-inline--justify-between { justify-content: space-between; }
54
- .entropix-inline--justify-around { justify-content: space-around; }
24
+ .entropix-stack--full-width { width: 100%; }
55
25
 
56
- .entropix-inline--wrap { flex-wrap: wrap; }
26
+ /* === Inline (horizontal flex layout) === */
57
27
 
58
- /* === Container (page-level wrapper) === */
28
+ .entropix-inline {
29
+ display: flex;
30
+ flex-direction: row;
31
+ align-items: center;
32
+ gap: var(--entropix-space-layout-inline);
33
+ }
59
34
 
60
- .entropix-container {
61
- width: 100%;
62
- margin-left: auto;
63
- margin-right: auto;
64
- padding-left: var(--entropix-space-layout-page-margin);
65
- padding-right: var(--entropix-space-layout-page-margin);
66
- }
35
+ .entropix-inline--gap-none { gap: 0; }
36
+ .entropix-inline--gap-xs { gap: var(--entropix-spacing-1); }
37
+ .entropix-inline--gap-sm { gap: var(--entropix-spacing-2); }
38
+ .entropix-inline--gap-md { gap: var(--entropix-spacing-4); }
39
+ .entropix-inline--gap-lg { gap: var(--entropix-spacing-6); }
40
+ .entropix-inline--gap-xl { gap: var(--entropix-spacing-8); }
41
+ .entropix-inline--gap-2xl { gap: var(--entropix-spacing-12); }
42
+
43
+ .entropix-inline--align-start { align-items: flex-start; }
44
+ .entropix-inline--align-center { align-items: center; }
45
+ .entropix-inline--align-end { align-items: flex-end; }
46
+ .entropix-inline--align-stretch { align-items: stretch; }
47
+ .entropix-inline--align-baseline { align-items: baseline; }
48
+
49
+ .entropix-inline--justify-start { justify-content: flex-start; }
50
+ .entropix-inline--justify-center { justify-content: center; }
51
+ .entropix-inline--justify-end { justify-content: flex-end; }
52
+ .entropix-inline--justify-between { justify-content: space-between; }
53
+ .entropix-inline--justify-around { justify-content: space-around; }
54
+
55
+ .entropix-inline--wrap { flex-wrap: wrap; }
56
+
57
+ /* === Container (page-level wrapper) === */
58
+
59
+ .entropix-container {
60
+ width: 100%;
61
+ margin-left: auto;
62
+ margin-right: auto;
63
+ padding-left: var(--entropix-space-layout-page-margin);
64
+ padding-right: var(--entropix-space-layout-page-margin);
65
+ }
67
66
 
68
- .entropix-container--xs { max-width: 480px; }
69
- .entropix-container--sm { max-width: 640px; }
70
- .entropix-container--md { max-width: 768px; }
71
- .entropix-container--lg { max-width: 1024px; }
72
- .entropix-container--xl { max-width: 1280px; }
73
- .entropix-container--full { max-width: 100%; }
74
-
75
- .entropix-container--center {
76
- display: flex;
77
- flex-direction: column;
78
- align-items: center;
79
- }
67
+ .entropix-container--xs { max-width: 480px; }
68
+ .entropix-container--sm { max-width: 640px; }
69
+ .entropix-container--md { max-width: 768px; }
70
+ .entropix-container--lg { max-width: 1024px; }
71
+ .entropix-container--xl { max-width: 1280px; }
72
+ .entropix-container--full { max-width: 100%; }
73
+
74
+ .entropix-container--center {
75
+ display: flex;
76
+ flex-direction: column;
77
+ align-items: center;
78
+ }
80
79
 
81
- /* === Divider (visual separator) === */
80
+ /* === Divider (visual separator) === */
82
81
 
83
- .entropix-divider {
84
- border: 0;
85
- border-top: 1px solid var(--entropix-color-border-default);
86
- margin: 0;
87
- width: 100%;
88
- }
82
+ .entropix-divider {
83
+ border: 0;
84
+ border-top: 1px solid var(--entropix-color-border-default);
85
+ margin: 0;
86
+ width: 100%;
87
+ }
89
88
 
90
- .entropix-divider--vertical {
91
- border-top: 0;
92
- border-left: 1px solid var(--entropix-color-border-default);
93
- width: auto;
94
- height: auto;
95
- align-self: stretch;
96
- }
89
+ .entropix-divider--vertical {
90
+ border-top: 0;
91
+ border-left: 1px solid var(--entropix-color-border-default);
92
+ width: auto;
93
+ height: auto;
94
+ align-self: stretch;
95
+ }
97
96
 
98
- .entropix-divider--spacing-sm { margin: var(--entropix-spacing-2) 0; }
99
- .entropix-divider--spacing-md { margin: var(--entropix-spacing-4) 0; }
100
- .entropix-divider--spacing-lg { margin: var(--entropix-spacing-6) 0; }
97
+ .entropix-divider--spacing-sm { margin: var(--entropix-spacing-2) 0; }
98
+ .entropix-divider--spacing-md { margin: var(--entropix-spacing-4) 0; }
99
+ .entropix-divider--spacing-lg { margin: var(--entropix-spacing-6) 0; }
101
100
 
102
- .entropix-divider--vertical.entropix-divider--spacing-sm { margin: 0 var(--entropix-spacing-2); }
103
- .entropix-divider--vertical.entropix-divider--spacing-md { margin: 0 var(--entropix-spacing-4); }
104
- .entropix-divider--vertical.entropix-divider--spacing-lg { margin: 0 var(--entropix-spacing-6); }
101
+ .entropix-divider--vertical.entropix-divider--spacing-sm { margin: 0 var(--entropix-spacing-2); }
102
+ .entropix-divider--vertical.entropix-divider--spacing-md { margin: 0 var(--entropix-spacing-4); }
103
+ .entropix-divider--vertical.entropix-divider--spacing-lg { margin: 0 var(--entropix-spacing-6); }
105
104
 
106
- /* ═══════════════════════════════════════════════════════════════════════════
107
- RESPONSIVE — Tablet and up (>=768px)
108
- ═══════════════════════════════════════════════════════════════════════════ */
105
+ /* ═══════════════════════════════════════════════════════════════════════════
106
+ RESPONSIVE — Tablet and up (>=768px)
107
+ ═══════════════════════════════════════════════════════════════════════════ */
109
108
 
110
- @media (min-width: 768px) {
111
- .entropix-container {
112
- padding-left: var(--entropix-space-layout-page-margin-md);
113
- padding-right: var(--entropix-space-layout-page-margin-md);
114
- }
109
+ @media (min-width: 768px) {
110
+ .entropix-container {
111
+ padding-left: var(--entropix-space-layout-page-margin-md);
112
+ padding-right: var(--entropix-space-layout-page-margin-md);
115
113
  }
114
+ }
116
115
 
117
- /* ═══════════════════════════════════════════════════════════════════════════
118
- RESPONSIVE — Desktop and up (>=1024px)
119
- ═══════════════════════════════════════════════════════════════════════════ */
116
+ /* ═══════════════════════════════════════════════════════════════════════════
117
+ RESPONSIVE — Desktop and up (>=1024px)
118
+ ═══════════════════════════════════════════════════════════════════════════ */
120
119
 
121
- @media (min-width: 1024px) {
122
- .entropix-container {
123
- padding-left: var(--entropix-space-layout-page-margin-lg);
124
- padding-right: var(--entropix-space-layout-page-margin-lg);
125
- }
120
+ @media (min-width: 1024px) {
121
+ .entropix-container {
122
+ padding-left: var(--entropix-space-layout-page-margin-lg);
123
+ padding-right: var(--entropix-space-layout-page-margin-lg);
126
124
  }
127
125
  }
@@ -1,64 +1,62 @@
1
1
  /* Menu — @entropix/react */
2
2
 
3
- @layer entropix {
4
- .entropix-menu-trigger {
5
- /* Inherits button styles if also .entropix-button */
6
- }
3
+ .entropix-menu-trigger {
4
+ /* Inherits button styles if also .entropix-button */
5
+ }
7
6
 
8
- .entropix-menu-content {
9
- min-width: 160px;
10
- padding: var(--entropix-spacing-1);
11
- background: var(--entropix-color-bg-primary);
12
- border: 1px solid var(--entropix-color-border-default);
13
- border-radius: var(--entropix-radius-md);
14
- box-shadow: var(--entropix-shadow-lg);
15
- z-index: 50;
16
- }
7
+ .entropix-menu-content {
8
+ min-width: 160px;
9
+ padding: var(--entropix-spacing-1);
10
+ background: var(--entropix-color-bg-primary);
11
+ border: 1px solid var(--entropix-color-border-default);
12
+ border-radius: var(--entropix-radius-md);
13
+ box-shadow: var(--entropix-shadow-lg);
14
+ z-index: 50;
15
+ }
17
16
 
18
- .entropix-menu-item {
19
- display: flex;
20
- align-items: center;
21
- padding: var(--entropix-spacing-2) var(--entropix-spacing-3);
22
- border-radius: var(--entropix-radius-sm);
23
- font-family: var(--entropix-font-family-sans);
24
- font-size: var(--entropix-font-size-sm);
25
- color: var(--entropix-color-text-primary);
26
- cursor: pointer;
27
- user-select: none;
28
- transition: background var(--entropix-duration-fast) var(--entropix-easing-default);
29
- }
17
+ .entropix-menu-item {
18
+ display: flex;
19
+ align-items: center;
20
+ padding: var(--entropix-spacing-2) var(--entropix-spacing-3);
21
+ border-radius: var(--entropix-radius-sm);
22
+ font-family: var(--entropix-font-family-sans);
23
+ font-size: var(--entropix-font-size-sm);
24
+ color: var(--entropix-color-text-primary);
25
+ cursor: pointer;
26
+ user-select: none;
27
+ transition: background var(--entropix-duration-fast) var(--entropix-easing-default);
28
+ }
30
29
 
31
- .entropix-menu-item:hover {
32
- background: var(--entropix-color-action-secondary-default);
33
- }
30
+ .entropix-menu-item:hover {
31
+ background: var(--entropix-color-action-secondary-default);
32
+ }
34
33
 
35
- .entropix-menu-item[data-state="active"] {
36
- background: var(--entropix-color-action-secondary-default);
37
- }
34
+ .entropix-menu-item[data-state="active"] {
35
+ background: var(--entropix-color-action-secondary-default);
36
+ }
38
37
 
39
- .entropix-menu-item[data-disabled="true"],
40
- .entropix-menu-item[aria-disabled="true"] {
41
- opacity: 0.5;
42
- cursor: not-allowed;
43
- pointer-events: none;
44
- }
38
+ .entropix-menu-item[data-disabled="true"],
39
+ .entropix-menu-item[aria-disabled="true"] {
40
+ opacity: 0.5;
41
+ cursor: not-allowed;
42
+ pointer-events: none;
43
+ }
45
44
 
46
- .entropix-menu-item:focus-visible {
47
- outline: 2px solid var(--entropix-color-border-focus);
48
- outline-offset: -2px;
49
- }
45
+ .entropix-menu-item:focus-visible {
46
+ outline: 2px solid var(--entropix-color-border-focus);
47
+ outline-offset: -2px;
48
+ }
50
49
 
51
- /* === Responsive — Larger touch targets on mobile === */
50
+ /* === Responsive — Larger touch targets on mobile === */
52
51
 
53
- @media (max-width: 767px) {
54
- .entropix-menu-content {
55
- min-width: 200px;
56
- }
52
+ @media (max-width: 767px) {
53
+ .entropix-menu-content {
54
+ min-width: 200px;
55
+ }
57
56
 
58
- .entropix-menu-item {
59
- padding: var(--entropix-spacing-3) var(--entropix-spacing-4);
60
- font-size: var(--entropix-font-size-base);
61
- min-height: 44px;
62
- }
57
+ .entropix-menu-item {
58
+ padding: var(--entropix-spacing-3) var(--entropix-spacing-4);
59
+ font-size: var(--entropix-font-size-base);
60
+ min-height: 44px;
63
61
  }
64
62
  }
@@ -1,130 +1,128 @@
1
1
  /* Radio — @entropix/react */
2
2
 
3
- @layer entropix {
4
- .entropix-radio-group {
5
- display: flex;
6
- gap: var(--entropix-spacing-2);
7
- }
3
+ .entropix-radio-group {
4
+ display: flex;
5
+ gap: var(--entropix-spacing-2);
6
+ }
8
7
 
9
- .entropix-radio-group[data-orientation="vertical"] {
10
- flex-direction: column;
11
- }
8
+ .entropix-radio-group[data-orientation="vertical"] {
9
+ flex-direction: column;
10
+ }
12
11
 
13
- .entropix-radio-group[data-orientation="horizontal"] {
14
- flex-direction: row;
15
- flex-wrap: wrap;
16
- }
12
+ .entropix-radio-group[data-orientation="horizontal"] {
13
+ flex-direction: row;
14
+ flex-wrap: wrap;
15
+ }
17
16
 
18
- /* === Radio Item === */
17
+ /* === Radio Item === */
18
+
19
+ .entropix-radio-item {
20
+ --radio-size: 20px;
21
+ --radio-border-color: var(--entropix-color-border-default);
22
+ --radio-checked-color: var(--entropix-color-action-primary-default);
23
+ --radio-dot-size: 10px;
24
+
25
+ display: inline-flex;
26
+ align-items: center;
27
+ gap: var(--entropix-spacing-2);
28
+ padding: var(--entropix-spacing-1) 0;
29
+ border: none;
30
+ background: transparent;
31
+ cursor: pointer;
32
+ user-select: none;
33
+ font-family: var(--entropix-font-family-sans);
34
+ font-size: var(--entropix-font-size-sm);
35
+ color: var(--entropix-color-text-primary);
36
+ line-height: var(--entropix-line-height-normal);
37
+ }
19
38
 
20
- .entropix-radio-item {
21
- --radio-size: 20px;
22
- --radio-border-color: var(--entropix-color-border-default);
23
- --radio-checked-color: var(--entropix-color-action-primary-default);
24
- --radio-dot-size: 10px;
25
-
26
- display: inline-flex;
27
- align-items: center;
28
- gap: var(--entropix-spacing-2);
29
- padding: var(--entropix-spacing-1) 0;
30
- border: none;
31
- background: transparent;
32
- cursor: pointer;
33
- user-select: none;
34
- font-family: var(--entropix-font-family-sans);
35
- font-size: var(--entropix-font-size-sm);
36
- color: var(--entropix-color-text-primary);
37
- line-height: var(--entropix-line-height-normal);
38
- }
39
+ /* === Indicator (circle) === */
40
+
41
+ .entropix-radio-item__indicator {
42
+ display: inline-flex;
43
+ align-items: center;
44
+ justify-content: center;
45
+ width: var(--radio-size);
46
+ height: var(--radio-size);
47
+ border: 2px solid var(--radio-border-color);
48
+ border-radius: 50%;
49
+ background: var(--entropix-color-bg-primary);
50
+ flex-shrink: 0;
51
+ transition:
52
+ border-color var(--entropix-duration-fast) var(--entropix-easing-default),
53
+ background var(--entropix-duration-fast) var(--entropix-easing-default);
54
+ }
39
55
 
40
- /* === Indicator (circle) === */
56
+ .entropix-radio-item__indicator[data-state="checked"] {
57
+ border-color: var(--radio-checked-color);
58
+ }
41
59
 
42
- .entropix-radio-item__indicator {
43
- display: inline-flex;
44
- align-items: center;
45
- justify-content: center;
46
- width: var(--radio-size);
47
- height: var(--radio-size);
48
- border: 2px solid var(--radio-border-color);
49
- border-radius: 50%;
50
- background: var(--entropix-color-bg-primary);
51
- flex-shrink: 0;
52
- transition:
53
- border-color var(--entropix-duration-fast) var(--entropix-easing-default),
54
- background var(--entropix-duration-fast) var(--entropix-easing-default);
55
- }
60
+ /* Inner filled circle via ::after */
61
+ .entropix-radio-item__indicator[data-state="checked"]::after {
62
+ content: "";
63
+ display: block;
64
+ width: var(--radio-dot-size);
65
+ height: var(--radio-dot-size);
66
+ border-radius: 50%;
67
+ background: var(--radio-checked-color);
68
+ }
56
69
 
57
- .entropix-radio-item__indicator[data-state="checked"] {
58
- border-color: var(--radio-checked-color);
59
- }
70
+ /* === Label === */
60
71
 
61
- /* Inner filled circle via ::after */
62
- .entropix-radio-item__indicator[data-state="checked"]::after {
63
- content: "";
64
- display: block;
65
- width: var(--radio-dot-size);
66
- height: var(--radio-dot-size);
67
- border-radius: 50%;
68
- background: var(--radio-checked-color);
69
- }
72
+ .entropix-radio-item__label {
73
+ font-family: var(--entropix-font-family-sans);
74
+ font-size: var(--entropix-font-size-sm);
75
+ color: var(--entropix-color-text-primary);
76
+ line-height: var(--entropix-line-height-normal);
77
+ }
70
78
 
71
- /* === Label === */
79
+ /* === Hover === */
72
80
 
73
- .entropix-radio-item__label {
74
- font-family: var(--entropix-font-family-sans);
75
- font-size: var(--entropix-font-size-sm);
76
- color: var(--entropix-color-text-primary);
77
- line-height: var(--entropix-line-height-normal);
78
- }
81
+ .entropix-radio-item:hover:not(:disabled) .entropix-radio-item__indicator {
82
+ border-color: var(--entropix-color-border-hover);
83
+ }
79
84
 
80
- /* === Hover === */
85
+ .entropix-radio-item:hover:not(:disabled)
86
+ .entropix-radio-item__indicator[data-state="checked"] {
87
+ border-color: var(--entropix-color-action-primary-hover);
88
+ }
81
89
 
82
- .entropix-radio-item:hover:not(:disabled) .entropix-radio-item__indicator {
83
- border-color: var(--entropix-color-border-hover);
84
- }
90
+ .entropix-radio-item:hover:not(:disabled)
91
+ .entropix-radio-item__indicator[data-state="checked"]::after {
92
+ background: var(--entropix-color-action-primary-hover);
93
+ }
85
94
 
86
- .entropix-radio-item:hover:not(:disabled)
87
- .entropix-radio-item__indicator[data-state="checked"] {
88
- border-color: var(--entropix-color-action-primary-hover);
89
- }
95
+ /* === Focus === */
90
96
 
91
- .entropix-radio-item:hover:not(:disabled)
92
- .entropix-radio-item__indicator[data-state="checked"]::after {
93
- background: var(--entropix-color-action-primary-hover);
94
- }
97
+ .entropix-radio-item:focus-visible {
98
+ outline: 2px solid var(--entropix-color-border-focus);
99
+ outline-offset: 2px;
100
+ border-radius: var(--entropix-radius-sm);
101
+ }
95
102
 
96
- /* === Focus === */
103
+ /* === Disabled === */
97
104
 
98
- .entropix-radio-item:focus-visible {
99
- outline: 2px solid var(--entropix-color-border-focus);
100
- outline-offset: 2px;
101
- border-radius: var(--entropix-radius-sm);
102
- }
105
+ .entropix-radio-item:disabled,
106
+ .entropix-radio-item[data-disabled] {
107
+ opacity: 0.5;
108
+ cursor: not-allowed;
109
+ pointer-events: none;
110
+ }
103
111
 
104
- /* === Disabled === */
112
+ /* === Responsive — Touch-friendly sizing on mobile === */
105
113
 
106
- .entropix-radio-item:disabled,
107
- .entropix-radio-item[data-disabled] {
108
- opacity: 0.5;
109
- cursor: not-allowed;
110
- pointer-events: none;
114
+ @media (max-width: 767px) {
115
+ .entropix-radio-item {
116
+ min-height: 44px;
111
117
  }
112
118
 
113
- /* === Responsive — Touch-friendly sizing on mobile === */
114
-
115
- @media (max-width: 767px) {
116
- .entropix-radio-item {
117
- min-height: 44px;
118
- }
119
-
120
- .entropix-radio-item__indicator {
121
- width: 22px;
122
- height: 22px;
123
- }
119
+ .entropix-radio-item__indicator {
120
+ width: 22px;
121
+ height: 22px;
122
+ }
124
123
 
125
- .entropix-radio-item__indicator[data-state="checked"]::after {
126
- width: 10px;
127
- height: 10px;
128
- }
124
+ .entropix-radio-item__indicator[data-state="checked"]::after {
125
+ width: 10px;
126
+ height: 10px;
129
127
  }
130
128
  }