sakana-element 2.2.0 → 2.4.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.
Files changed (155) hide show
  1. package/README.md +98 -25
  2. package/dist/es/{Alert-C76ZWSVk.js → Alert-DfLsJvQD.js} +2 -2
  3. package/dist/es/Avatar-Ci4OKsv7.js +9 -0
  4. package/dist/es/{Badge-CoFWwBwv.js → Badge-B4wEToK6.js} +2 -2
  5. package/dist/es/{Breadcrumb-BtrwTVKW.js → Breadcrumb-BFzww8jd.js} +2 -2
  6. package/dist/es/{Button-S_31-UWJ.js → Button-DbFviVWb.js} +3 -3
  7. package/dist/es/{Card-DcW6nHYD.js → Card-ClRqKkc_.js} +2 -2
  8. package/dist/es/ChatBubble-DFEV_lVI.js +9 -0
  9. package/dist/es/Checkbox-l86YI3Fr.js +51 -0
  10. package/dist/es/{Collapse-DsS7M-m3.js → Collapse-B67v6RSE.js} +4 -4
  11. package/dist/es/{ConfigProvider-BgIewHXP.js → ConfigProvider-BCoGbcS5.js} +2 -2
  12. package/dist/es/Diff-BLiniLom.js +64 -0
  13. package/dist/es/Divider-DDSOHv8G.js +9 -0
  14. package/dist/es/Drawer-apeXw6EO.js +40 -0
  15. package/dist/es/Dropdown-By9qIErf.js +104 -0
  16. package/dist/es/{FileInput-BQ59woas.js → FileInput-CZ5jTfB_.js} +3 -3
  17. package/dist/es/Filter-B_1zU4Dq.js +40 -0
  18. package/dist/es/Form-B_XDnSjK.js +123 -0
  19. package/dist/es/{Icon-DpJyuj7c.js → Icon-D6qRB3pq.js} +1 -1
  20. package/dist/es/Indicator-C6Ip4dpP.js +9 -0
  21. package/dist/es/{Input-CiE4bPJN.js → Input-bThwBbNZ.js} +7 -7
  22. package/dist/es/Kbd-DXNjs7at.js +13 -0
  23. package/dist/es/{Link-B9B2APZq.js → Link-08Ee61Fv.js} +1 -1
  24. package/dist/es/{Loading-BW99pE5N.js → Loading-ByI9mjss.js} +13 -13
  25. package/dist/es/Message-CGG-lV5I.js +152 -0
  26. package/dist/es/Notification-B4clKY5h.js +69 -0
  27. package/dist/es/{Overlay-BRDSWspM.js → Overlay-6iPenJB1.js} +1 -1
  28. package/dist/es/Pixelate-A8J7jxDW.js +39 -0
  29. package/dist/es/Popconfirm-gcHGcOTz.js +23 -0
  30. package/dist/es/Progress-DFUBJQ4X.js +12 -0
  31. package/dist/es/Radio-CLBa1XIM.js +33 -0
  32. package/dist/es/Resizable-BWrFr2oj.js +151 -0
  33. package/dist/es/{Select-Dwqv8isB.js → Select-BtLqds1d.js} +20 -20
  34. package/dist/es/Skeleton-CGUQv3nQ.js +15 -0
  35. package/dist/es/{Switch-B1Gnv1tB.js → Switch-CZJ-S77_.js} +3 -3
  36. package/dist/es/Table-lHbxiyGq.js +10 -0
  37. package/dist/es/Tooltip-CdPqNYdn.js +74 -0
  38. package/dist/es/Validator-7ZT_nXDZ.js +40 -0
  39. package/dist/es/hooks-pU4JmsO3.js +171 -0
  40. package/dist/es/index.js +107 -70
  41. package/dist/es/utils-BXICIEsD.js +139 -0
  42. package/dist/es/{vendor-DXmGx29U.js → vendor-DrBJKLFW.js} +254 -210
  43. package/dist/index.css +1 -1
  44. package/dist/theme/Avatar.css +13 -43
  45. package/dist/theme/Badge.css +151 -151
  46. package/dist/theme/Breadcrumb.css +46 -4
  47. package/dist/theme/Button.css +72 -8
  48. package/dist/theme/Card.css +177 -93
  49. package/dist/theme/ChatBubble.css +218 -0
  50. package/dist/theme/Checkbox.css +604 -0
  51. package/dist/theme/Collapse.css +96 -96
  52. package/dist/theme/Diff.css +110 -0
  53. package/dist/theme/Divider.css +150 -0
  54. package/dist/theme/Drawer.css +206 -0
  55. package/dist/theme/Dropdown.css +359 -75
  56. package/dist/theme/FileInput.css +32 -0
  57. package/dist/theme/Filter.css +598 -0
  58. package/dist/theme/Indicator.css +159 -0
  59. package/dist/theme/Input.css +414 -406
  60. package/dist/theme/Kbd.css +104 -0
  61. package/dist/theme/Link.css +22 -3
  62. package/dist/theme/Loading.css +50 -12
  63. package/dist/theme/Message.css +250 -41
  64. package/dist/theme/Notification.css +232 -42
  65. package/dist/theme/Popconfirm.css +23 -7
  66. package/dist/theme/Progress.css +278 -0
  67. package/dist/theme/Radio.css +492 -0
  68. package/dist/theme/Resizable.css +95 -0
  69. package/dist/theme/Select.css +198 -88
  70. package/dist/theme/Skeleton.css +192 -0
  71. package/dist/theme/Switch.css +22 -3
  72. package/dist/theme/Table.css +680 -0
  73. package/dist/theme/Tooltip.css +150 -26
  74. package/dist/theme/Validator.css +25 -0
  75. package/dist/types/components/Avatar/types.d.ts +0 -2
  76. package/dist/types/components/ChatBubble/constants.d.ts +2 -0
  77. package/dist/types/components/ChatBubble/index.d.ts +27 -0
  78. package/dist/types/components/ChatBubble/types.d.ts +10 -0
  79. package/dist/types/components/Checkbox/constants.d.ts +5 -0
  80. package/dist/types/components/Checkbox/index.d.ts +94 -0
  81. package/dist/types/components/Checkbox/types.d.ts +46 -0
  82. package/dist/types/components/Collapse/index.d.ts +5 -5
  83. package/dist/types/components/Diff/constants.d.ts +4 -0
  84. package/dist/types/components/Diff/index.d.ts +67 -0
  85. package/dist/types/components/Diff/types.d.ts +29 -0
  86. package/dist/types/components/Divider/index.d.ts +30 -0
  87. package/dist/types/components/Divider/types.d.ts +10 -0
  88. package/dist/types/components/Drawer/constants.d.ts +1 -0
  89. package/dist/types/components/Drawer/index.d.ts +72 -0
  90. package/dist/types/components/Drawer/types.d.ts +20 -0
  91. package/dist/types/components/Dropdown/index.d.ts +13 -3
  92. package/dist/types/components/Dropdown/types.d.ts +3 -0
  93. package/dist/types/components/Dropdown/useDropdownKeyboard.d.ts +8 -0
  94. package/dist/types/components/FileInput/index.d.ts +5 -5
  95. package/dist/types/components/Filter/constants.d.ts +5 -0
  96. package/dist/types/components/Filter/index.d.ts +59 -0
  97. package/dist/types/components/Filter/types.d.ts +38 -0
  98. package/dist/types/components/Indicator/constants.d.ts +2 -0
  99. package/dist/types/components/Indicator/index.d.ts +28 -0
  100. package/dist/types/components/Indicator/types.d.ts +10 -0
  101. package/dist/types/components/Input/index.d.ts +10 -10
  102. package/dist/types/components/Kbd/constants.d.ts +3 -0
  103. package/dist/types/components/Kbd/index.d.ts +24 -0
  104. package/dist/types/components/Kbd/types.d.ts +10 -0
  105. package/dist/types/components/Message/methods.d.ts +2 -0
  106. package/dist/types/components/Message/types.d.ts +7 -1
  107. package/dist/types/components/MessageBox/types.d.ts +14 -2
  108. package/dist/types/components/Notification/methods.d.ts +3 -0
  109. package/dist/types/components/Notification/types.d.ts +8 -2
  110. package/dist/types/components/Pixelate/constants.d.ts +2 -0
  111. package/dist/types/components/Pixelate/index.d.ts +71 -0
  112. package/dist/types/components/Pixelate/types.d.ts +23 -0
  113. package/dist/types/components/Popconfirm/index.d.ts +18 -9
  114. package/dist/types/components/Popconfirm/types.d.ts +2 -1
  115. package/dist/types/components/Progress/constants.d.ts +2 -0
  116. package/dist/types/components/Progress/index.d.ts +50 -0
  117. package/dist/types/components/Progress/types.d.ts +22 -0
  118. package/dist/types/components/Radio/constants.d.ts +5 -0
  119. package/dist/types/components/Radio/index.d.ts +88 -0
  120. package/dist/types/components/Radio/types.d.ts +43 -0
  121. package/dist/types/components/Resizable/constants.d.ts +3 -0
  122. package/dist/types/components/Resizable/index.d.ts +135 -0
  123. package/dist/types/components/Resizable/types.d.ts +52 -0
  124. package/dist/types/components/Select/index.d.ts +32 -23
  125. package/dist/types/components/Skeleton/index.d.ts +36 -0
  126. package/dist/types/components/Skeleton/types.d.ts +12 -0
  127. package/dist/types/components/Switch/index.d.ts +5 -5
  128. package/dist/types/components/Table/index.d.ts +27 -0
  129. package/dist/types/components/Table/types.d.ts +20 -0
  130. package/dist/types/components/Tooltip/index.d.ts +9 -3
  131. package/dist/types/components/Tooltip/types.d.ts +7 -0
  132. package/dist/types/components/Validator/index.d.ts +52 -0
  133. package/dist/types/components/Validator/types.d.ts +13 -0
  134. package/dist/types/components/index.d.ts +15 -0
  135. package/dist/types/hooks/index.d.ts +3 -1
  136. package/dist/types/hooks/useDraggable.d.ts +7 -0
  137. package/dist/types/hooks/useFocusTrap.d.ts +5 -0
  138. package/dist/types/utils/index.d.ts +2 -0
  139. package/dist/types/utils/instance-management.d.ts +40 -0
  140. package/dist/types/utils/pixelate.d.ts +10 -0
  141. package/dist/types/utils/style.d.ts +1 -0
  142. package/dist/umd/index.css +1 -1
  143. package/dist/umd/index.css.gz +0 -0
  144. package/dist/umd/index.umd.cjs +4 -4
  145. package/dist/umd/index.umd.cjs.gz +0 -0
  146. package/package.json +59 -59
  147. package/dist/es/Avatar-CxsRW-wl.js +0 -9
  148. package/dist/es/Dropdown-GcomGMAI.js +0 -40
  149. package/dist/es/Form-j90EzLXU.js +0 -122
  150. package/dist/es/Message-DCNnTUje.js +0 -123
  151. package/dist/es/Notification-CBzY5904.js +0 -58
  152. package/dist/es/Popconfirm-DF6d2ORS.js +0 -23
  153. package/dist/es/Tooltip-k6gKnMyt.js +0 -74
  154. package/dist/es/hooks-BaG7l8K5.js +0 -116
  155. package/dist/es/utils-bsCscZfS.js +0 -84
@@ -0,0 +1,604 @@
1
+ /* Checkbox Variables */
2
+ .px-checkbox {
3
+ --px-checkbox-size: 18px;
4
+ --px-checkbox-checked-color: var(--px-color-primary);
5
+ --px-checkbox-checked-border-color: var(--px-color-primary-dark);
6
+ --px-checkbox-border-color: var(--px-border-color);
7
+ --px-checkbox-bg-color: var(--px-fill-color-blank);
8
+ --px-checkbox-shadow-color: var(--px-shadow-color);
9
+
10
+ /* 3D bevel — sunken look (unchecked) */
11
+ --px-checkbox-inset-highlight: inset -2px -2px 0 0 rgba(255, 255, 255, 0.2);
12
+ --px-checkbox-inset-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.1);
13
+ }
14
+ /* Base Checkbox Styles */
15
+ .px-checkbox {
16
+ display: inline-flex;
17
+ align-items: center;
18
+ font-size: var(--px-font-size-base);
19
+ font-family: var(--px-font-family);
20
+ line-height: 1;
21
+ cursor: pointer;
22
+ user-select: none;
23
+ white-space: nowrap;
24
+ }
25
+ /* Disabled state */
26
+ .px-checkbox.is-disabled {
27
+ opacity: 0.5;
28
+ cursor: not-allowed;
29
+ }
30
+ .px-checkbox.is-disabled .px-checkbox__inner {
31
+ cursor: not-allowed;
32
+ }
33
+ /* Checked & Indeterminate shared styles */
34
+ .px-checkbox.is-checked .px-checkbox__inner::before, .px-checkbox.is-indeterminate .px-checkbox__inner::before {
35
+ background: var(--px-checkbox-checked-border-color);
36
+ }
37
+ .px-checkbox.is-checked .px-checkbox__inner::after, .px-checkbox.is-indeterminate .px-checkbox__inner::after {
38
+ background: var(--px-checkbox-checked-color);
39
+ }
40
+ .px-checkbox.is-checked .px-checkbox__inner .px-checkbox__tick, .px-checkbox.is-indeterminate .px-checkbox__inner .px-checkbox__tick {
41
+ opacity: 1;
42
+ }
43
+ /* Checked state — raised bevel */
44
+ .px-checkbox.is-checked {
45
+ --px-checkbox-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.2);
46
+ --px-checkbox-inset-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.1);
47
+ }
48
+ .px-checkbox.is-checked .px-checkbox__input {
49
+ filter: drop-shadow(
50
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-checkbox-checked-border-color)
51
+ );
52
+ }
53
+ /* Hover feedback */
54
+ .px-checkbox:hover:not(.is-disabled) .px-checkbox__inner::after {
55
+ --px-checkbox-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.35);
56
+ }
57
+ /* Active/pressed feedback */
58
+ .px-checkbox:active:not(.is-disabled) .px-checkbox__inner::after {
59
+ --px-checkbox-inset-highlight: inset -2px -2px 0 0 rgba(255, 255, 255, 0.2);
60
+ --px-checkbox-inset-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.15);
61
+ }
62
+ /* Indeterminate state */
63
+ .px-checkbox.is-indeterminate .px-checkbox__inner .px-checkbox__tick {
64
+ /* Override checkmark with a pixel-art horizontal dash */
65
+ clip-path: none;
66
+ position: absolute;
67
+ width: 8px;
68
+ height: 2px;
69
+ background: var(--px-fill-color-blank);
70
+ top: 50%;
71
+ left: 50%;
72
+ transform: translate(-50%, -50%);
73
+ }
74
+ .px-checkbox.is-indeterminate .px-checkbox__input {
75
+ filter: none;
76
+ }
77
+ /* Size variants */
78
+ .px-checkbox--large {
79
+ --px-checkbox-size: 22px;
80
+ font-size: var(--px-font-size-base);
81
+ }
82
+ .px-checkbox--large .px-checkbox__tick {
83
+ width: 12px;
84
+ height: 12px;
85
+ }
86
+ .px-checkbox--large.is-indeterminate .px-checkbox__inner .px-checkbox__tick {
87
+ width: 10px;
88
+ height: 2px;
89
+ }
90
+ .px-checkbox--small {
91
+ --px-checkbox-size: 14px;
92
+ font-size: var(--px-font-size-small);
93
+ }
94
+ .px-checkbox--small .px-checkbox__input {
95
+ filter: drop-shadow(2px 2px 0px var(--px-checkbox-shadow-color));
96
+ }
97
+ .px-checkbox--small .px-checkbox__tick {
98
+ width: 8px;
99
+ height: 8px;
100
+ }
101
+ .px-checkbox--small.is-checked .px-checkbox__input {
102
+ filter: drop-shadow(2px 2px 0px var(--px-checkbox-checked-border-color));
103
+ }
104
+ .px-checkbox--small.is-indeterminate .px-checkbox__input {
105
+ filter: none;
106
+ }
107
+ .px-checkbox--small.is-indeterminate .px-checkbox__inner .px-checkbox__tick {
108
+ width: 6px;
109
+ height: 2px;
110
+ }
111
+ /* Hidden native input */
112
+ .px-checkbox__original {
113
+ position: absolute;
114
+ width: 0;
115
+ height: 0;
116
+ opacity: 0;
117
+ margin: 0;
118
+ outline: none;
119
+ }
120
+ .px-checkbox__original:focus-visible ~ .px-checkbox__inner {
121
+ outline: 2px dashed var(--px-checkbox-checked-color);
122
+ outline-offset: 2px;
123
+ }
124
+ /* Input wrapper */
125
+ .px-checkbox__input {
126
+ position: relative;
127
+ display: inline-flex;
128
+ align-items: center;
129
+ justify-content: center;
130
+ flex-shrink: 0;
131
+
132
+ /* Pixel shadow via drop-shadow */
133
+ filter: drop-shadow(
134
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-checkbox-shadow-color)
135
+ );
136
+ }
137
+ /* The pixel-art checkbox box */
138
+ .px-checkbox__inner {
139
+ position: relative;
140
+ display: inline-flex;
141
+ align-items: center;
142
+ justify-content: center;
143
+ width: var(--px-checkbox-size);
144
+ height: var(--px-checkbox-size);
145
+ box-sizing: border-box;
146
+ background: transparent;
147
+
148
+ --px-checkbox-pixel-corners: polygon(
149
+ 0 2px,
150
+ 2px 2px,
151
+ 2px 0,
152
+ calc(100% - 2px) 0,
153
+ calc(100% - 2px) 2px,
154
+ 100% 2px,
155
+ 100% calc(100% - 2px),
156
+ calc(100% - 2px) calc(100% - 2px),
157
+ calc(100% - 2px) 100%,
158
+ 2px 100%,
159
+ 2px calc(100% - 2px),
160
+ 0 calc(100% - 2px)
161
+ );
162
+ }
163
+ /* Border layer - pixel shape */
164
+ .px-checkbox__inner::before {
165
+ content: "";
166
+ position: absolute;
167
+ inset: 0;
168
+ background: var(--px-checkbox-border-color);
169
+ clip-path: var(--px-checkbox-pixel-corners);
170
+ z-index: 0;
171
+ }
172
+ /* Fill layer - pixel shape with 3D bevel */
173
+ .px-checkbox__inner::after {
174
+ content: "";
175
+ position: absolute;
176
+ inset: 2px;
177
+ background: var(--px-checkbox-bg-color);
178
+ clip-path: var(--px-checkbox-pixel-corners);
179
+ box-shadow:
180
+ var(--px-checkbox-inset-highlight),
181
+ var(--px-checkbox-inset-shadow);
182
+ z-index: 0;
183
+ }
184
+ /* Pixel checkmark */
185
+ .px-checkbox__tick {
186
+ position: relative;
187
+ z-index: 1;
188
+ width: 10px;
189
+ height: 10px;
190
+ opacity: 0;
191
+ /* Pixel staircase checkmark (✓) — stepped 2px increments */
192
+ clip-path: polygon(
193
+ /* Left arm descending */
194
+ 10% 40%,
195
+ 10% 60%,
196
+ 20% 60%,
197
+ 20% 70%,
198
+ 30% 70%,
199
+ 30% 80%,
200
+ /* Bottom vertex */
201
+ 40% 80%,
202
+ 40% 90%,
203
+ 50% 90%,
204
+ 50% 80%,
205
+ /* Right arm ascending */
206
+ 60% 80%,
207
+ 60% 70%,
208
+ 70% 70%,
209
+ 70% 60%,
210
+ 80% 60%,
211
+ 80% 50%,
212
+ 90% 50%,
213
+ 90% 30%,
214
+ /* Top of right arm */
215
+ 80% 30%,
216
+ 80% 40%,
217
+ 70% 40%,
218
+ 70% 50%,
219
+ 60% 50%,
220
+ 60% 60%,
221
+ 50% 60%,
222
+ 50% 70%,
223
+ /* Return along inner edge */
224
+ 40% 70%,
225
+ 40% 60%,
226
+ 30% 60%,
227
+ 30% 50%,
228
+ 20% 50%,
229
+ 20% 40%
230
+ );
231
+ background: var(--px-fill-color-blank);
232
+ }
233
+ /* Label */
234
+ .px-checkbox__label {
235
+ padding-left: 8px;
236
+ font-family: var(--px-font-family);
237
+ font-size: inherit;
238
+ line-height: 1.2;
239
+ color: var(--px-text-color-primary);
240
+ }
241
+ /* Type variants */
242
+ .px-checkbox--primary {
243
+ --px-checkbox-checked-color: var(--px-color-primary);
244
+ --px-checkbox-checked-border-color: var(--px-color-primary-dark);
245
+ }
246
+ .px-checkbox--primary.is-checked .px-checkbox__input {
247
+ filter: drop-shadow(
248
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-primary-dark)
249
+ );
250
+ }
251
+ .px-checkbox--success {
252
+ --px-checkbox-checked-color: var(--px-color-success);
253
+ --px-checkbox-checked-border-color: var(--px-color-success-dark);
254
+ }
255
+ .px-checkbox--success.is-checked .px-checkbox__input {
256
+ filter: drop-shadow(
257
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-success-dark)
258
+ );
259
+ }
260
+ .px-checkbox--info {
261
+ --px-checkbox-checked-color: var(--px-color-info);
262
+ --px-checkbox-checked-border-color: var(--px-color-info-dark);
263
+ }
264
+ .px-checkbox--info.is-checked .px-checkbox__input {
265
+ filter: drop-shadow(
266
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-info-dark)
267
+ );
268
+ }
269
+ .px-checkbox--warning {
270
+ --px-checkbox-checked-color: var(--px-color-warning);
271
+ --px-checkbox-checked-border-color: var(--px-color-warning-dark);
272
+ }
273
+ .px-checkbox--warning.is-checked .px-checkbox__input {
274
+ filter: drop-shadow(
275
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-warning-dark)
276
+ );
277
+ }
278
+ .px-checkbox--danger {
279
+ --px-checkbox-checked-color: var(--px-color-danger);
280
+ --px-checkbox-checked-border-color: var(--px-color-danger-dark);
281
+ }
282
+ .px-checkbox--danger.is-checked .px-checkbox__input {
283
+ filter: drop-shadow(
284
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-danger-dark)
285
+ );
286
+ }
287
+ /* Dark mode bevel adjustment */
288
+ html.dark .px-checkbox {
289
+ --px-checkbox-inset-highlight: inset -2px -2px 0 0 rgba(255, 255, 255, 0.08);
290
+ --px-checkbox-inset-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.2);
291
+ }
292
+ html.dark .px-checkbox.is-checked {
293
+ --px-checkbox-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.08);
294
+ --px-checkbox-inset-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.2);
295
+ }
296
+ /* Checkbox Group */
297
+ .px-checkbox-group {
298
+ display: inline-flex;
299
+ flex-wrap: wrap;
300
+ gap: 16px;
301
+ align-items: center;
302
+ }
303
+ /* Checkbox Variables */
304
+ .px-checkbox {
305
+ --px-checkbox-size: 18px;
306
+ --px-checkbox-checked-color: var(--px-color-primary);
307
+ --px-checkbox-checked-border-color: var(--px-color-primary-dark);
308
+ --px-checkbox-border-color: var(--px-border-color);
309
+ --px-checkbox-bg-color: var(--px-fill-color-blank);
310
+ --px-checkbox-shadow-color: var(--px-shadow-color);
311
+
312
+ /* 3D bevel — sunken look (unchecked) */
313
+ --px-checkbox-inset-highlight: inset -2px -2px 0 0 rgba(255, 255, 255, 0.2);
314
+ --px-checkbox-inset-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.1);
315
+ }
316
+ /* Base Checkbox Styles */
317
+ .px-checkbox {
318
+ display: inline-flex;
319
+ align-items: center;
320
+ font-size: var(--px-font-size-base);
321
+ font-family: var(--px-font-family);
322
+ line-height: 1;
323
+ cursor: pointer;
324
+ user-select: none;
325
+ white-space: nowrap;
326
+ }
327
+ /* Disabled state */
328
+ .px-checkbox.is-disabled {
329
+ opacity: 0.5;
330
+ cursor: not-allowed;
331
+ }
332
+ .px-checkbox.is-disabled .px-checkbox__inner {
333
+ cursor: not-allowed;
334
+ }
335
+ /* Checked & Indeterminate shared styles */
336
+ .px-checkbox.is-checked .px-checkbox__inner::before, .px-checkbox.is-indeterminate .px-checkbox__inner::before {
337
+ background: var(--px-checkbox-checked-border-color);
338
+ }
339
+ .px-checkbox.is-checked .px-checkbox__inner::after, .px-checkbox.is-indeterminate .px-checkbox__inner::after {
340
+ background: var(--px-checkbox-checked-color);
341
+ }
342
+ .px-checkbox.is-checked .px-checkbox__inner .px-checkbox__tick, .px-checkbox.is-indeterminate .px-checkbox__inner .px-checkbox__tick {
343
+ opacity: 1;
344
+ }
345
+ /* Checked state — raised bevel */
346
+ .px-checkbox.is-checked {
347
+ --px-checkbox-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.2);
348
+ --px-checkbox-inset-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.1);
349
+ }
350
+ .px-checkbox.is-checked .px-checkbox__input {
351
+ filter: drop-shadow(
352
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-checkbox-checked-border-color)
353
+ );
354
+ }
355
+ /* Hover feedback */
356
+ .px-checkbox:hover:not(.is-disabled) .px-checkbox__inner::after {
357
+ --px-checkbox-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.35);
358
+ }
359
+ /* Active/pressed feedback */
360
+ .px-checkbox:active:not(.is-disabled) .px-checkbox__inner::after {
361
+ --px-checkbox-inset-highlight: inset -2px -2px 0 0 rgba(255, 255, 255, 0.2);
362
+ --px-checkbox-inset-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.15);
363
+ }
364
+ /* Indeterminate state */
365
+ .px-checkbox.is-indeterminate .px-checkbox__inner .px-checkbox__tick {
366
+ /* Override checkmark with a pixel-art horizontal dash */
367
+ clip-path: none;
368
+ position: absolute;
369
+ width: 8px;
370
+ height: 2px;
371
+ background: var(--px-fill-color-blank);
372
+ top: 50%;
373
+ left: 50%;
374
+ transform: translate(-50%, -50%);
375
+ }
376
+ .px-checkbox.is-indeterminate .px-checkbox__input {
377
+ filter: none;
378
+ }
379
+ /* Size variants */
380
+ .px-checkbox--large {
381
+ --px-checkbox-size: 22px;
382
+ font-size: var(--px-font-size-base);
383
+ }
384
+ .px-checkbox--large .px-checkbox__tick {
385
+ width: 12px;
386
+ height: 12px;
387
+ }
388
+ .px-checkbox--large.is-indeterminate .px-checkbox__inner .px-checkbox__tick {
389
+ width: 10px;
390
+ height: 2px;
391
+ }
392
+ .px-checkbox--small {
393
+ --px-checkbox-size: 14px;
394
+ font-size: var(--px-font-size-small);
395
+ }
396
+ .px-checkbox--small .px-checkbox__input {
397
+ filter: drop-shadow(2px 2px 0px var(--px-checkbox-shadow-color));
398
+ }
399
+ .px-checkbox--small .px-checkbox__tick {
400
+ width: 8px;
401
+ height: 8px;
402
+ }
403
+ .px-checkbox--small.is-checked .px-checkbox__input {
404
+ filter: drop-shadow(2px 2px 0px var(--px-checkbox-checked-border-color));
405
+ }
406
+ .px-checkbox--small.is-indeterminate .px-checkbox__input {
407
+ filter: none;
408
+ }
409
+ .px-checkbox--small.is-indeterminate .px-checkbox__inner .px-checkbox__tick {
410
+ width: 6px;
411
+ height: 2px;
412
+ }
413
+ /* Hidden native input */
414
+ .px-checkbox__original {
415
+ position: absolute;
416
+ width: 0;
417
+ height: 0;
418
+ opacity: 0;
419
+ margin: 0;
420
+ outline: none;
421
+ }
422
+ .px-checkbox__original:focus-visible ~ .px-checkbox__inner {
423
+ outline: 2px dashed var(--px-checkbox-checked-color);
424
+ outline-offset: 2px;
425
+ }
426
+ /* Input wrapper */
427
+ .px-checkbox__input {
428
+ position: relative;
429
+ display: inline-flex;
430
+ align-items: center;
431
+ justify-content: center;
432
+ flex-shrink: 0;
433
+
434
+ /* Pixel shadow via drop-shadow */
435
+ filter: drop-shadow(
436
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-checkbox-shadow-color)
437
+ );
438
+ }
439
+ /* The pixel-art checkbox box */
440
+ .px-checkbox__inner {
441
+ position: relative;
442
+ display: inline-flex;
443
+ align-items: center;
444
+ justify-content: center;
445
+ width: var(--px-checkbox-size);
446
+ height: var(--px-checkbox-size);
447
+ box-sizing: border-box;
448
+ background: transparent;
449
+
450
+ --px-checkbox-pixel-corners: polygon(
451
+ 0 2px,
452
+ 2px 2px,
453
+ 2px 0,
454
+ calc(100% - 2px) 0,
455
+ calc(100% - 2px) 2px,
456
+ 100% 2px,
457
+ 100% calc(100% - 2px),
458
+ calc(100% - 2px) calc(100% - 2px),
459
+ calc(100% - 2px) 100%,
460
+ 2px 100%,
461
+ 2px calc(100% - 2px),
462
+ 0 calc(100% - 2px)
463
+ );
464
+ }
465
+ /* Border layer - pixel shape */
466
+ .px-checkbox__inner::before {
467
+ content: "";
468
+ position: absolute;
469
+ inset: 0;
470
+ background: var(--px-checkbox-border-color);
471
+ clip-path: var(--px-checkbox-pixel-corners);
472
+ z-index: 0;
473
+ }
474
+ /* Fill layer - pixel shape with 3D bevel */
475
+ .px-checkbox__inner::after {
476
+ content: "";
477
+ position: absolute;
478
+ inset: 2px;
479
+ background: var(--px-checkbox-bg-color);
480
+ clip-path: var(--px-checkbox-pixel-corners);
481
+ box-shadow:
482
+ var(--px-checkbox-inset-highlight),
483
+ var(--px-checkbox-inset-shadow);
484
+ z-index: 0;
485
+ }
486
+ /* Pixel checkmark */
487
+ .px-checkbox__tick {
488
+ position: relative;
489
+ z-index: 1;
490
+ width: 10px;
491
+ height: 10px;
492
+ opacity: 0;
493
+ /* Pixel staircase checkmark (✓) — stepped 2px increments */
494
+ clip-path: polygon(
495
+ /* Left arm descending */
496
+ 10% 40%,
497
+ 10% 60%,
498
+ 20% 60%,
499
+ 20% 70%,
500
+ 30% 70%,
501
+ 30% 80%,
502
+ /* Bottom vertex */
503
+ 40% 80%,
504
+ 40% 90%,
505
+ 50% 90%,
506
+ 50% 80%,
507
+ /* Right arm ascending */
508
+ 60% 80%,
509
+ 60% 70%,
510
+ 70% 70%,
511
+ 70% 60%,
512
+ 80% 60%,
513
+ 80% 50%,
514
+ 90% 50%,
515
+ 90% 30%,
516
+ /* Top of right arm */
517
+ 80% 30%,
518
+ 80% 40%,
519
+ 70% 40%,
520
+ 70% 50%,
521
+ 60% 50%,
522
+ 60% 60%,
523
+ 50% 60%,
524
+ 50% 70%,
525
+ /* Return along inner edge */
526
+ 40% 70%,
527
+ 40% 60%,
528
+ 30% 60%,
529
+ 30% 50%,
530
+ 20% 50%,
531
+ 20% 40%
532
+ );
533
+ background: var(--px-fill-color-blank);
534
+ }
535
+ /* Label */
536
+ .px-checkbox__label {
537
+ padding-left: 8px;
538
+ font-family: var(--px-font-family);
539
+ font-size: inherit;
540
+ line-height: 1.2;
541
+ color: var(--px-text-color-primary);
542
+ }
543
+ /* Type variants */
544
+ .px-checkbox--primary {
545
+ --px-checkbox-checked-color: var(--px-color-primary);
546
+ --px-checkbox-checked-border-color: var(--px-color-primary-dark);
547
+ }
548
+ .px-checkbox--primary.is-checked .px-checkbox__input {
549
+ filter: drop-shadow(
550
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-primary-dark)
551
+ );
552
+ }
553
+ .px-checkbox--success {
554
+ --px-checkbox-checked-color: var(--px-color-success);
555
+ --px-checkbox-checked-border-color: var(--px-color-success-dark);
556
+ }
557
+ .px-checkbox--success.is-checked .px-checkbox__input {
558
+ filter: drop-shadow(
559
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-success-dark)
560
+ );
561
+ }
562
+ .px-checkbox--info {
563
+ --px-checkbox-checked-color: var(--px-color-info);
564
+ --px-checkbox-checked-border-color: var(--px-color-info-dark);
565
+ }
566
+ .px-checkbox--info.is-checked .px-checkbox__input {
567
+ filter: drop-shadow(
568
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-info-dark)
569
+ );
570
+ }
571
+ .px-checkbox--warning {
572
+ --px-checkbox-checked-color: var(--px-color-warning);
573
+ --px-checkbox-checked-border-color: var(--px-color-warning-dark);
574
+ }
575
+ .px-checkbox--warning.is-checked .px-checkbox__input {
576
+ filter: drop-shadow(
577
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-warning-dark)
578
+ );
579
+ }
580
+ .px-checkbox--danger {
581
+ --px-checkbox-checked-color: var(--px-color-danger);
582
+ --px-checkbox-checked-border-color: var(--px-color-danger-dark);
583
+ }
584
+ .px-checkbox--danger.is-checked .px-checkbox__input {
585
+ filter: drop-shadow(
586
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-danger-dark)
587
+ );
588
+ }
589
+ /* Dark mode bevel adjustment */
590
+ html.dark .px-checkbox {
591
+ --px-checkbox-inset-highlight: inset -2px -2px 0 0 rgba(255, 255, 255, 0.08);
592
+ --px-checkbox-inset-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.2);
593
+ }
594
+ html.dark .px-checkbox.is-checked {
595
+ --px-checkbox-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.08);
596
+ --px-checkbox-inset-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.2);
597
+ }
598
+ /* Checkbox Group */
599
+ .px-checkbox-group {
600
+ display: inline-flex;
601
+ flex-wrap: wrap;
602
+ gap: 16px;
603
+ align-items: center;
604
+ }