@entropix/react 0.1.1 → 0.3.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,133 +1,135 @@
1
1
  /* Button — @entropix/react */
2
2
 
3
- .entropix-button {
4
- display: inline-flex;
5
- align-items: center;
6
- justify-content: center;
7
- gap: var(--entropix-button-gap);
8
- border: 1px solid transparent;
9
- font-family: var(--entropix-font-family-sans);
10
- font-size: var(--entropix-button-font-size);
11
- font-weight: var(--entropix-button-font-weight);
12
- line-height: var(--entropix-button-line-height);
13
- border-radius: var(--entropix-button-border-radius);
14
- padding: var(--entropix-button-padding-y) var(--entropix-button-padding-x);
15
- cursor: pointer;
16
- text-decoration: none;
17
- user-select: none;
18
- transition:
19
- background var(--entropix-duration-fast) var(--entropix-easing-default),
20
- color var(--entropix-duration-fast) var(--entropix-easing-default),
21
- border-color var(--entropix-duration-fast) var(--entropix-easing-default),
22
- box-shadow var(--entropix-duration-fast) var(--entropix-easing-default);
23
- }
3
+ @layer entropix {
4
+ .entropix-button {
5
+ display: inline-flex;
6
+ align-items: center;
7
+ justify-content: center;
8
+ gap: var(--entropix-button-gap);
9
+ border: 1px solid transparent;
10
+ font-family: var(--entropix-font-family-sans);
11
+ font-size: var(--entropix-button-font-size);
12
+ font-weight: var(--entropix-button-font-weight);
13
+ line-height: var(--entropix-button-line-height);
14
+ border-radius: var(--entropix-button-border-radius);
15
+ padding: var(--entropix-button-padding-y) var(--entropix-button-padding-x);
16
+ cursor: pointer;
17
+ text-decoration: none;
18
+ user-select: none;
19
+ transition:
20
+ background var(--entropix-duration-fast) var(--entropix-easing-default),
21
+ color var(--entropix-duration-fast) var(--entropix-easing-default),
22
+ border-color var(--entropix-duration-fast) var(--entropix-easing-default),
23
+ box-shadow var(--entropix-duration-fast) var(--entropix-easing-default);
24
+ }
24
25
 
25
- /* === Variants === */
26
+ /* === Variants === */
26
27
 
27
- .entropix-button--primary {
28
- background: var(--entropix-button-primary-bg);
29
- color: var(--entropix-button-primary-text);
30
- border-color: var(--entropix-button-primary-border);
31
- }
32
- .entropix-button--primary:hover:not(:disabled) {
33
- background: var(--entropix-button-primary-bg-hover);
34
- }
35
- .entropix-button--primary:active:not(:disabled) {
36
- background: var(--entropix-button-primary-bg-active);
37
- }
28
+ .entropix-button--primary {
29
+ background: var(--entropix-button-primary-bg);
30
+ color: var(--entropix-button-primary-text);
31
+ border-color: var(--entropix-button-primary-border);
32
+ }
33
+ .entropix-button--primary:hover:not(:disabled) {
34
+ background: var(--entropix-button-primary-bg-hover);
35
+ }
36
+ .entropix-button--primary:active:not(:disabled) {
37
+ background: var(--entropix-button-primary-bg-active);
38
+ }
38
39
 
39
- .entropix-button--secondary {
40
- background: var(--entropix-button-secondary-bg);
41
- color: var(--entropix-button-secondary-text);
42
- border-color: var(--entropix-button-secondary-border);
43
- }
44
- .entropix-button--secondary:hover:not(:disabled) {
45
- background: var(--entropix-button-secondary-bg-hover);
46
- }
47
- .entropix-button--secondary:active:not(:disabled) {
48
- background: var(--entropix-button-secondary-bg-active);
49
- }
40
+ .entropix-button--secondary {
41
+ background: var(--entropix-button-secondary-bg);
42
+ color: var(--entropix-button-secondary-text);
43
+ border-color: var(--entropix-button-secondary-border);
44
+ }
45
+ .entropix-button--secondary:hover:not(:disabled) {
46
+ background: var(--entropix-button-secondary-bg-hover);
47
+ }
48
+ .entropix-button--secondary:active:not(:disabled) {
49
+ background: var(--entropix-button-secondary-bg-active);
50
+ }
50
51
 
51
- .entropix-button--outline {
52
- background: transparent;
53
- color: var(--entropix-color-text-primary);
54
- border-color: var(--entropix-color-border-default);
55
- }
56
- .entropix-button--outline:hover:not(:disabled) {
57
- background: var(--entropix-color-action-secondary-hover);
58
- }
59
- .entropix-button--outline:active:not(:disabled) {
60
- background: var(--entropix-color-action-secondary-active);
61
- }
52
+ .entropix-button--outline {
53
+ background: transparent;
54
+ color: var(--entropix-color-text-primary);
55
+ border-color: var(--entropix-color-border-default);
56
+ }
57
+ .entropix-button--outline:hover:not(:disabled) {
58
+ background: var(--entropix-color-action-secondary-hover);
59
+ }
60
+ .entropix-button--outline:active:not(:disabled) {
61
+ background: var(--entropix-color-action-secondary-active);
62
+ }
62
63
 
63
- .entropix-button--ghost {
64
- background: transparent;
65
- color: var(--entropix-color-text-primary);
66
- border-color: transparent;
67
- }
68
- .entropix-button--ghost:hover:not(:disabled) {
69
- background: var(--entropix-color-action-secondary-default);
70
- }
71
- .entropix-button--ghost:active:not(:disabled) {
72
- background: var(--entropix-color-action-secondary-hover);
73
- }
64
+ .entropix-button--ghost {
65
+ background: transparent;
66
+ color: var(--entropix-color-text-primary);
67
+ border-color: transparent;
68
+ }
69
+ .entropix-button--ghost:hover:not(:disabled) {
70
+ background: var(--entropix-color-action-secondary-default);
71
+ }
72
+ .entropix-button--ghost:active:not(:disabled) {
73
+ background: var(--entropix-color-action-secondary-hover);
74
+ }
74
75
 
75
- .entropix-button--danger {
76
- background: var(--entropix-button-danger-bg);
77
- color: var(--entropix-button-danger-text);
78
- border-color: var(--entropix-button-danger-border);
79
- }
80
- .entropix-button--danger:hover:not(:disabled) {
81
- background: var(--entropix-button-danger-bg-hover);
82
- }
83
- .entropix-button--danger:active:not(:disabled) {
84
- background: var(--entropix-button-danger-bg-active);
85
- }
76
+ .entropix-button--danger {
77
+ background: var(--entropix-button-danger-bg);
78
+ color: var(--entropix-button-danger-text);
79
+ border-color: var(--entropix-button-danger-border);
80
+ }
81
+ .entropix-button--danger:hover:not(:disabled) {
82
+ background: var(--entropix-button-danger-bg-hover);
83
+ }
84
+ .entropix-button--danger:active:not(:disabled) {
85
+ background: var(--entropix-button-danger-bg-active);
86
+ }
86
87
 
87
- /* === Sizes === */
88
+ /* === Sizes === */
88
89
 
89
- .entropix-button--sm {
90
- padding: var(--entropix-spacing-1) var(--entropix-spacing-3);
91
- font-size: var(--entropix-font-size-xs);
92
- border-radius: var(--entropix-radius-sm);
93
- }
90
+ .entropix-button--sm {
91
+ padding: var(--entropix-spacing-1) var(--entropix-spacing-3);
92
+ font-size: var(--entropix-font-size-xs);
93
+ border-radius: var(--entropix-radius-sm);
94
+ }
94
95
 
95
- .entropix-button--md {
96
- padding: var(--entropix-button-padding-y) var(--entropix-button-padding-x);
97
- font-size: var(--entropix-button-font-size);
98
- }
96
+ .entropix-button--md {
97
+ padding: var(--entropix-button-padding-y) var(--entropix-button-padding-x);
98
+ font-size: var(--entropix-button-font-size);
99
+ }
99
100
 
100
- .entropix-button--lg {
101
- padding: var(--entropix-spacing-3) var(--entropix-spacing-6);
102
- font-size: var(--entropix-font-size-base);
103
- border-radius: var(--entropix-radius-lg);
104
- }
101
+ .entropix-button--lg {
102
+ padding: var(--entropix-spacing-3) var(--entropix-spacing-6);
103
+ font-size: var(--entropix-font-size-base);
104
+ border-radius: var(--entropix-radius-lg);
105
+ }
105
106
 
106
- /* === States === */
107
+ /* === States === */
107
108
 
108
- .entropix-button:disabled,
109
- .entropix-button[data-state="disabled"],
110
- .entropix-button[data-state="loading"] {
111
- opacity: 0.5;
112
- cursor: not-allowed;
113
- pointer-events: none;
114
- }
109
+ .entropix-button:disabled,
110
+ .entropix-button[data-state="disabled"],
111
+ .entropix-button[data-state="loading"] {
112
+ opacity: 0.5;
113
+ cursor: not-allowed;
114
+ pointer-events: none;
115
+ }
115
116
 
116
- .entropix-button:focus-visible {
117
- outline: 2px solid var(--entropix-color-border-focus);
118
- outline-offset: 2px;
119
- }
117
+ .entropix-button:focus-visible {
118
+ outline: 2px solid var(--entropix-color-border-focus);
119
+ outline-offset: 2px;
120
+ }
120
121
 
121
- /* === Responsive — Touch-friendly sizing on mobile === */
122
+ /* === Responsive — Touch-friendly sizing on mobile === */
122
123
 
123
- @media (max-width: 767px) {
124
- .entropix-button {
125
- min-height: 44px;
126
- }
124
+ @media (max-width: 767px) {
125
+ .entropix-button {
126
+ min-height: 44px;
127
+ }
127
128
 
128
- .entropix-button--sm {
129
- min-height: 36px;
130
- padding: var(--entropix-spacing-2) var(--entropix-spacing-3);
131
- font-size: var(--entropix-font-size-sm);
129
+ .entropix-button--sm {
130
+ min-height: 36px;
131
+ padding: var(--entropix-spacing-2) var(--entropix-spacing-3);
132
+ font-size: var(--entropix-font-size-sm);
133
+ }
132
134
  }
133
135
  }
@@ -0,0 +1,121 @@
1
+ /* Checkbox — @entropix/react */
2
+
3
+ @layer entropix {
4
+ .entropix-checkbox {
5
+ --checkbox-size: 18px;
6
+ --checkbox-border-color: var(--entropix-color-border-default);
7
+ --checkbox-checked-bg: var(--entropix-color-action-primary-default);
8
+ --checkbox-checked-border: var(--entropix-color-action-primary-default);
9
+ --checkbox-border-radius: var(--entropix-radius-sm);
10
+
11
+ display: inline-flex;
12
+ align-items: center;
13
+ gap: var(--entropix-spacing-2);
14
+ padding: var(--entropix-spacing-1) 0;
15
+ border: none;
16
+ background: transparent;
17
+ cursor: pointer;
18
+ user-select: none;
19
+ font-family: var(--entropix-font-family-sans);
20
+ font-size: var(--entropix-font-size-sm);
21
+ color: var(--entropix-color-text-primary);
22
+ line-height: var(--entropix-line-height-normal);
23
+ }
24
+
25
+ /* === Indicator === */
26
+
27
+ .entropix-checkbox__indicator {
28
+ display: inline-flex;
29
+ align-items: center;
30
+ justify-content: center;
31
+ width: var(--checkbox-size);
32
+ height: var(--checkbox-size);
33
+ border: 2px solid var(--checkbox-border-color);
34
+ border-radius: var(--checkbox-border-radius);
35
+ background: var(--entropix-color-bg-primary);
36
+ flex-shrink: 0;
37
+ transition:
38
+ background var(--entropix-duration-fast) var(--entropix-easing-default),
39
+ border-color var(--entropix-duration-fast) var(--entropix-easing-default);
40
+ }
41
+
42
+ .entropix-checkbox__indicator[data-state="checked"],
43
+ .entropix-checkbox__indicator[data-state="indeterminate"] {
44
+ background: var(--checkbox-checked-bg);
45
+ border-color: var(--checkbox-checked-border);
46
+ }
47
+
48
+ /* Checkmark via ::after pseudo-element */
49
+ .entropix-checkbox__indicator[data-state="checked"]::after {
50
+ content: "";
51
+ display: block;
52
+ width: 5px;
53
+ height: 9px;
54
+ border: solid var(--entropix-color-text-inverse);
55
+ border-width: 0 2px 2px 0;
56
+ transform: rotate(45deg);
57
+ margin-top: -1px;
58
+ }
59
+
60
+ /* Indeterminate minus via ::after pseudo-element */
61
+ .entropix-checkbox__indicator[data-state="indeterminate"]::after {
62
+ content: "";
63
+ display: block;
64
+ width: 8px;
65
+ height: 2px;
66
+ background: var(--entropix-color-text-inverse);
67
+ border-radius: 1px;
68
+ }
69
+
70
+ /* === Label === */
71
+
72
+ .entropix-checkbox__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
+ }
78
+
79
+ /* === Hover === */
80
+
81
+ .entropix-checkbox:hover:not(:disabled) .entropix-checkbox__indicator {
82
+ border-color: var(--entropix-color-border-hover);
83
+ }
84
+
85
+ .entropix-checkbox:hover:not(:disabled)
86
+ .entropix-checkbox__indicator[data-state="checked"],
87
+ .entropix-checkbox:hover:not(:disabled)
88
+ .entropix-checkbox__indicator[data-state="indeterminate"] {
89
+ background: var(--entropix-color-action-primary-hover);
90
+ border-color: var(--entropix-color-action-primary-hover);
91
+ }
92
+
93
+ /* === Focus === */
94
+
95
+ .entropix-checkbox:focus-visible {
96
+ outline: 2px solid var(--entropix-color-border-focus);
97
+ outline-offset: 2px;
98
+ border-radius: var(--checkbox-border-radius);
99
+ }
100
+
101
+ /* === Disabled === */
102
+
103
+ .entropix-checkbox:disabled {
104
+ opacity: 0.5;
105
+ cursor: not-allowed;
106
+ pointer-events: none;
107
+ }
108
+
109
+ /* === Responsive — Touch-friendly sizing on mobile === */
110
+
111
+ @media (max-width: 767px) {
112
+ .entropix-checkbox {
113
+ min-height: 44px;
114
+ }
115
+
116
+ .entropix-checkbox__indicator {
117
+ width: 22px;
118
+ height: 22px;
119
+ }
120
+ }
121
+ }
@@ -1,102 +1,104 @@
1
1
  /* Dialog — @entropix/react */
2
2
 
3
- .entropix-dialog-overlay {
4
- position: fixed;
5
- inset: 0;
6
- background: rgba(0, 0, 0, 0.5);
7
- z-index: 50;
8
- }
3
+ @layer entropix {
4
+ .entropix-dialog-overlay {
5
+ position: fixed;
6
+ inset: 0;
7
+ background: rgba(0, 0, 0, 0.5);
8
+ z-index: 50;
9
+ }
9
10
 
10
- .entropix-dialog-content {
11
- position: fixed;
12
- top: 50%;
13
- left: 50%;
14
- transform: translate(-50%, -50%);
15
- background: var(--entropix-color-bg-primary);
16
- border-radius: var(--entropix-radius-lg);
17
- box-shadow: var(--entropix-shadow-xl);
18
- padding: var(--entropix-spacing-6);
19
- z-index: 51;
20
- max-width: 480px;
21
- width: 90vw;
22
- max-height: 85vh;
23
- overflow-y: auto;
24
- }
11
+ .entropix-dialog-content {
12
+ position: fixed;
13
+ top: 50%;
14
+ left: 50%;
15
+ transform: translate(-50%, -50%);
16
+ background: var(--entropix-color-bg-primary);
17
+ border-radius: var(--entropix-radius-lg);
18
+ box-shadow: var(--entropix-shadow-xl);
19
+ padding: var(--entropix-spacing-6);
20
+ z-index: 51;
21
+ max-width: 480px;
22
+ width: 90vw;
23
+ max-height: 85vh;
24
+ overflow-y: auto;
25
+ }
25
26
 
26
- .entropix-dialog-content:focus {
27
- outline: none;
28
- }
27
+ .entropix-dialog-content:focus {
28
+ outline: none;
29
+ }
29
30
 
30
- .entropix-dialog-title {
31
- margin: 0;
32
- margin-bottom: var(--entropix-spacing-2);
33
- font-family: var(--entropix-text-heading-md-font-family);
34
- font-size: var(--entropix-text-heading-md-font-size);
35
- font-weight: var(--entropix-text-heading-md-font-weight);
36
- line-height: var(--entropix-text-heading-md-line-height);
37
- color: var(--entropix-color-text-primary);
38
- }
31
+ .entropix-dialog-title {
32
+ margin: 0;
33
+ margin-bottom: var(--entropix-spacing-2);
34
+ font-family: var(--entropix-text-heading-md-font-family);
35
+ font-size: var(--entropix-text-heading-md-font-size);
36
+ font-weight: var(--entropix-text-heading-md-font-weight);
37
+ line-height: var(--entropix-text-heading-md-line-height);
38
+ color: var(--entropix-color-text-primary);
39
+ }
39
40
 
40
- .entropix-dialog-description {
41
- margin: 0;
42
- margin-bottom: var(--entropix-spacing-4);
43
- font-family: var(--entropix-text-body-md-font-family);
44
- font-size: var(--entropix-text-body-md-font-size);
45
- font-weight: var(--entropix-text-body-md-font-weight);
46
- line-height: var(--entropix-text-body-md-line-height);
47
- color: var(--entropix-color-text-secondary);
48
- }
41
+ .entropix-dialog-description {
42
+ margin: 0;
43
+ margin-bottom: var(--entropix-spacing-4);
44
+ font-family: var(--entropix-text-body-md-font-family);
45
+ font-size: var(--entropix-text-body-md-font-size);
46
+ font-weight: var(--entropix-text-body-md-font-weight);
47
+ line-height: var(--entropix-text-body-md-line-height);
48
+ color: var(--entropix-color-text-secondary);
49
+ }
49
50
 
50
- .entropix-dialog-close {
51
- position: absolute;
52
- top: var(--entropix-spacing-3);
53
- right: var(--entropix-spacing-3);
54
- display: inline-flex;
55
- align-items: center;
56
- justify-content: center;
57
- width: 32px;
58
- height: 32px;
59
- padding: 0;
60
- border: none;
61
- border-radius: var(--entropix-radius-sm);
62
- background: transparent;
63
- color: var(--entropix-color-text-secondary);
64
- cursor: pointer;
65
- transition: background var(--entropix-duration-fast) var(--entropix-easing-default);
66
- }
51
+ .entropix-dialog-close {
52
+ position: absolute;
53
+ top: var(--entropix-spacing-3);
54
+ right: var(--entropix-spacing-3);
55
+ display: inline-flex;
56
+ align-items: center;
57
+ justify-content: center;
58
+ width: 32px;
59
+ height: 32px;
60
+ padding: 0;
61
+ border: none;
62
+ border-radius: var(--entropix-radius-sm);
63
+ background: transparent;
64
+ color: var(--entropix-color-text-secondary);
65
+ cursor: pointer;
66
+ transition: background var(--entropix-duration-fast) var(--entropix-easing-default);
67
+ }
67
68
 
68
- .entropix-dialog-close:hover {
69
- background: var(--entropix-color-action-secondary-default);
70
- }
69
+ .entropix-dialog-close:hover {
70
+ background: var(--entropix-color-action-secondary-default);
71
+ }
71
72
 
72
- .entropix-dialog-close:focus-visible {
73
- outline: 2px solid var(--entropix-color-border-focus);
74
- outline-offset: 2px;
75
- }
73
+ .entropix-dialog-close:focus-visible {
74
+ outline: 2px solid var(--entropix-color-border-focus);
75
+ outline-offset: 2px;
76
+ }
76
77
 
77
- .entropix-dialog-trigger {
78
- /* Inherits button styles if also .entropix-button */
79
- }
78
+ .entropix-dialog-trigger {
79
+ /* Inherits button styles if also .entropix-button */
80
+ }
80
81
 
81
- /* === Responsive — Full-width bottom sheet on mobile === */
82
+ /* === Responsive — Full-width bottom sheet on mobile === */
82
83
 
83
- @media (max-width: 767px) {
84
- .entropix-dialog-content {
85
- top: auto;
86
- bottom: 0;
87
- left: 0;
88
- right: 0;
89
- transform: none;
90
- width: 100%;
91
- max-width: 100%;
92
- border-radius: var(--entropix-radius-lg) var(--entropix-radius-lg) 0 0;
93
- max-height: 90vh;
94
- padding: var(--entropix-spacing-5);
84
+ @media (max-width: 767px) {
85
+ .entropix-dialog-content {
86
+ top: auto;
87
+ bottom: 0;
88
+ left: 0;
89
+ right: 0;
90
+ transform: none;
91
+ width: 100%;
92
+ max-width: 100%;
93
+ border-radius: var(--entropix-radius-lg) var(--entropix-radius-lg) 0 0;
94
+ max-height: 90vh;
95
+ padding: var(--entropix-spacing-5);
96
+ }
95
97
  }
96
- }
97
98
 
98
- @media (min-width: 768px) {
99
- .entropix-dialog-content {
100
- max-width: 560px;
99
+ @media (min-width: 768px) {
100
+ .entropix-dialog-content {
101
+ max-width: 560px;
102
+ }
101
103
  }
102
104
  }
@@ -1,5 +1,7 @@
1
1
  /* Entropix Design System — All Component Styles */
2
2
 
3
+ @layer entropix;
4
+
3
5
  @import "./button.css";
4
6
  @import "./toggle.css";
5
7
  @import "./switch.css";
@@ -7,3 +9,8 @@
7
9
  @import "./accordion.css";
8
10
  @import "./dialog.css";
9
11
  @import "./menu.css";
12
+ @import "./input.css";
13
+ @import "./checkbox.css";
14
+ @import "./radio.css";
15
+ @import "./select.css";
16
+ @import "./layout.css";