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,598 @@
1
+ /* Filter Container */
2
+ .px-filter {
3
+ display: inline-flex;
4
+ flex-wrap: wrap;
5
+ gap: 8px;
6
+ align-items: center;
7
+
8
+ /* Shared pixel corner clip-path — 2px staircase */
9
+ --px-filter-clip: polygon(
10
+ 0 2px,
11
+ 2px 2px,
12
+ 2px 0,
13
+ calc(100% - 2px) 0,
14
+ calc(100% - 2px) 2px,
15
+ 100% 2px,
16
+ 100% calc(100% - 2px),
17
+ calc(100% - 2px) calc(100% - 2px),
18
+ calc(100% - 2px) 100%,
19
+ 2px 100%,
20
+ 2px calc(100% - 2px),
21
+ 0 calc(100% - 2px)
22
+ );
23
+ }
24
+ /* Reset Button — pixel chip with close icon */
25
+ .px-filter__reset {
26
+ display: inline-flex;
27
+ align-items: center;
28
+ justify-content: center;
29
+ width: 30px;
30
+ height: 30px;
31
+ font-size: 14px;
32
+ color: var(--px-text-color-primary);
33
+ background: transparent;
34
+ cursor: pointer;
35
+ user-select: none;
36
+ position: relative;
37
+ transition: transform 0.1s;
38
+ }
39
+ /* Border layer */
40
+ .px-filter__reset::before {
41
+ content: "";
42
+ position: absolute;
43
+ inset: 0;
44
+ background: var(--px-border-color);
45
+ clip-path: var(--px-filter-clip);
46
+ z-index: 0;
47
+ }
48
+ /* Fill layer with 3D bevel */
49
+ .px-filter__reset::after {
50
+ content: "";
51
+ position: absolute;
52
+ inset: 2px;
53
+ background: var(--px-fill-color-blank);
54
+ clip-path: var(--px-filter-clip);
55
+ box-shadow:
56
+ inset 2px 2px 0 0 rgba(255, 255, 255, 0.2),
57
+ inset -2px -2px 0 0 rgba(0, 0, 0, 0.1);
58
+ z-index: 0;
59
+ }
60
+ .px-filter__reset {
61
+
62
+ filter: drop-shadow(
63
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-shadow-color)
64
+ );
65
+ }
66
+ /* Icon sits above pseudo-elements */
67
+ .px-filter__reset > * {
68
+ position: relative;
69
+ z-index: 1;
70
+ }
71
+ .px-filter__reset:hover {
72
+ transform: translateY(-1px);
73
+ }
74
+ .px-filter__reset:hover::after {
75
+ box-shadow:
76
+ inset 2px 2px 0 0 rgba(255, 255, 255, 0.35),
77
+ inset -2px -2px 0 0 rgba(0, 0, 0, 0.1);
78
+ }
79
+ .px-filter__reset:active {
80
+ transform: translateY(1px);
81
+ filter: drop-shadow(2px 2px 0px var(--px-shadow-color));
82
+ }
83
+ .px-filter__reset:active::after {
84
+ box-shadow:
85
+ inset -2px -2px 0 0 rgba(255, 255, 255, 0.2),
86
+ inset 2px 2px 0 0 rgba(0, 0, 0, 0.1);
87
+ }
88
+ /* Filter Item Variables */
89
+ .px-filter-item {
90
+ --px-filter-item-height: 30px;
91
+ --px-filter-item-color: var(--px-text-color-primary);
92
+ --px-filter-item-bg-color: var(--px-fill-color-blank);
93
+ --px-filter-item-border-color: var(--px-border-color);
94
+ --px-filter-item-shadow-color: var(--px-shadow-color);
95
+ --px-filter-item-active-color: var(--px-color-primary);
96
+ --px-filter-item-active-border-color: var(--px-color-primary-dark);
97
+ --px-filter-item-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.2);
98
+ --px-filter-item-inset-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.1);
99
+ }
100
+ /* Base Filter Item Styles — Pixel Chip */
101
+ .px-filter-item {
102
+ display: inline-flex;
103
+ align-items: center;
104
+ justify-content: center;
105
+ height: var(--px-filter-item-height);
106
+ padding: 0 12px;
107
+ font-family: var(--px-font-family);
108
+ font-size: var(--px-font-size-base);
109
+ line-height: 1;
110
+ color: var(--px-filter-item-color);
111
+ background: transparent;
112
+ cursor: pointer;
113
+ user-select: none;
114
+ position: relative;
115
+ transition: transform 0.1s, width 0.2s, padding 0.2s, opacity 0.15s;
116
+ }
117
+ /* Border layer */
118
+ .px-filter-item::before {
119
+ content: "";
120
+ position: absolute;
121
+ inset: 0;
122
+ background: var(--px-filter-item-border-color);
123
+ clip-path: var(--px-filter-clip);
124
+ z-index: 0;
125
+ }
126
+ /* Fill layer with 3D bevel */
127
+ .px-filter-item::after {
128
+ content: "";
129
+ position: absolute;
130
+ inset: 2px;
131
+ background: var(--px-filter-item-bg-color);
132
+ clip-path: var(--px-filter-clip);
133
+ box-shadow:
134
+ var(--px-filter-item-inset-highlight),
135
+ var(--px-filter-item-inset-shadow);
136
+ z-index: 0;
137
+ }
138
+ .px-filter-item {
139
+ filter: drop-shadow(
140
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-filter-item-shadow-color)
141
+ );
142
+ }
143
+ /* Pixel shadow via filter */
144
+ /* Hover: lift */
145
+ .px-filter-item:hover:not(.is-disabled):not(.is-hidden) {
146
+ transform: translateY(-1px);
147
+ }
148
+ .px-filter-item:hover:not(.is-disabled):not(.is-hidden)::after {
149
+ --px-filter-item-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.35);
150
+ }
151
+ /* Active/pressed: push down */
152
+ .px-filter-item:active:not(.is-disabled):not(.is-hidden) {
153
+ transform: translateY(1px);
154
+ filter: drop-shadow(2px 2px 0px var(--px-filter-item-shadow-color));
155
+ }
156
+ .px-filter-item:active:not(.is-disabled):not(.is-hidden)::after {
157
+ --px-filter-item-inset-highlight: inset -2px -2px 0 0 rgba(255, 255, 255, 0.2);
158
+ --px-filter-item-inset-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.1);
159
+ }
160
+ /* Selected / Active state */
161
+ .px-filter-item.is-active {
162
+ --px-filter-item-color: var(--px-fill-color-blank);
163
+ }
164
+ .px-filter-item.is-active::before {
165
+ background: var(--px-filter-item-active-border-color);
166
+ }
167
+ .px-filter-item.is-active::after {
168
+ background: var(--px-filter-item-active-color);
169
+ }
170
+ .px-filter-item.is-active {
171
+
172
+ filter: drop-shadow(
173
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-filter-item-active-border-color)
174
+ );
175
+ }
176
+ /* Disabled state */
177
+ .px-filter-item.is-disabled {
178
+ opacity: 0.5;
179
+ cursor: not-allowed;
180
+ }
181
+ /* Hidden / collapsed state (single-select with active selection) */
182
+ .px-filter-item.is-hidden {
183
+ width: 0;
184
+ height: 0;
185
+ padding: 0;
186
+ overflow: hidden;
187
+ opacity: 0;
188
+ pointer-events: none;
189
+ filter: none;
190
+ margin: 0;
191
+ border: 0;
192
+ }
193
+ .px-filter-item.is-hidden::before,
194
+ .px-filter-item.is-hidden::after {
195
+ display: none;
196
+ }
197
+ /* Hidden native input */
198
+ .px-filter-item__original {
199
+ position: absolute;
200
+ width: 0;
201
+ height: 0;
202
+ opacity: 0;
203
+ margin: 0;
204
+ outline: none;
205
+ }
206
+ .px-filter-item__original:focus-visible ~ .px-filter-item__label {
207
+ outline: 2px dashed var(--px-filter-item-active-color);
208
+ outline-offset: 2px;
209
+ }
210
+ /* Label */
211
+ .px-filter-item__label {
212
+ position: relative;
213
+ z-index: 1;
214
+ font-family: var(--px-font-family);
215
+ font-size: inherit;
216
+ line-height: 1;
217
+ color: inherit;
218
+ pointer-events: none;
219
+ }
220
+ /* Size variants */
221
+ .px-filter-item--large {
222
+ --px-filter-item-height: 36px;
223
+ padding: 0 16px;
224
+ font-size: var(--px-font-size-base);
225
+ }
226
+ .px-filter-item--small {
227
+ --px-filter-item-height: 24px;
228
+ padding: 0 8px;
229
+ font-size: var(--px-font-size-small);
230
+
231
+ filter: drop-shadow(2px 2px 0px var(--px-filter-item-shadow-color));
232
+ }
233
+ .px-filter-item--small.is-active {
234
+ filter: drop-shadow(2px 2px 0px var(--px-filter-item-active-border-color));
235
+ }
236
+ /* Reset button size matching */
237
+ .px-filter-item--large ~ .px-filter__reset,
238
+ .px-filter__reset:has(~ .px-filter-item--large) {
239
+ width: 36px;
240
+ height: 36px;
241
+ font-size: 16px;
242
+ }
243
+ .px-filter-item--small ~ .px-filter__reset,
244
+ .px-filter__reset:has(~ .px-filter-item--small) {
245
+ width: 24px;
246
+ height: 24px;
247
+ font-size: 12px;
248
+ }
249
+ /* Type variants */
250
+ .px-filter-item--primary {
251
+ --px-filter-item-active-color: var(--px-color-primary);
252
+ --px-filter-item-active-border-color: var(--px-color-primary-dark);
253
+ }
254
+ .px-filter-item--primary.is-active {
255
+ filter: drop-shadow(
256
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-primary-dark)
257
+ );
258
+ }
259
+ .px-filter-item--success {
260
+ --px-filter-item-active-color: var(--px-color-success);
261
+ --px-filter-item-active-border-color: var(--px-color-success-dark);
262
+ }
263
+ .px-filter-item--success.is-active {
264
+ filter: drop-shadow(
265
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-success-dark)
266
+ );
267
+ }
268
+ .px-filter-item--info {
269
+ --px-filter-item-active-color: var(--px-color-info);
270
+ --px-filter-item-active-border-color: var(--px-color-info-dark);
271
+ }
272
+ .px-filter-item--info.is-active {
273
+ filter: drop-shadow(
274
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-info-dark)
275
+ );
276
+ }
277
+ .px-filter-item--warning {
278
+ --px-filter-item-active-color: var(--px-color-warning);
279
+ --px-filter-item-active-border-color: var(--px-color-warning-dark);
280
+ }
281
+ .px-filter-item--warning.is-active {
282
+ filter: drop-shadow(
283
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-warning-dark)
284
+ );
285
+ }
286
+ .px-filter-item--danger {
287
+ --px-filter-item-active-color: var(--px-color-danger);
288
+ --px-filter-item-active-border-color: var(--px-color-danger-dark);
289
+ }
290
+ .px-filter-item--danger.is-active {
291
+ filter: drop-shadow(
292
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-danger-dark)
293
+ );
294
+ }
295
+ /* Dark mode bevel adjustment */
296
+ html.dark .px-filter-item {
297
+ --px-filter-item-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.08);
298
+ --px-filter-item-inset-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.2);
299
+ }
300
+ /* Filter Container */
301
+ .px-filter {
302
+ display: inline-flex;
303
+ flex-wrap: wrap;
304
+ gap: 8px;
305
+ align-items: center;
306
+
307
+ /* Shared pixel corner clip-path — 2px staircase */
308
+ --px-filter-clip: polygon(
309
+ 0 2px,
310
+ 2px 2px,
311
+ 2px 0,
312
+ calc(100% - 2px) 0,
313
+ calc(100% - 2px) 2px,
314
+ 100% 2px,
315
+ 100% calc(100% - 2px),
316
+ calc(100% - 2px) calc(100% - 2px),
317
+ calc(100% - 2px) 100%,
318
+ 2px 100%,
319
+ 2px calc(100% - 2px),
320
+ 0 calc(100% - 2px)
321
+ );
322
+ }
323
+ /* Reset Button — pixel chip with close icon */
324
+ .px-filter__reset {
325
+ display: inline-flex;
326
+ align-items: center;
327
+ justify-content: center;
328
+ width: 30px;
329
+ height: 30px;
330
+ font-size: 14px;
331
+ color: var(--px-text-color-primary);
332
+ background: transparent;
333
+ cursor: pointer;
334
+ user-select: none;
335
+ position: relative;
336
+ transition: transform 0.1s;
337
+ }
338
+ /* Border layer */
339
+ .px-filter__reset::before {
340
+ content: "";
341
+ position: absolute;
342
+ inset: 0;
343
+ background: var(--px-border-color);
344
+ clip-path: var(--px-filter-clip);
345
+ z-index: 0;
346
+ }
347
+ /* Fill layer with 3D bevel */
348
+ .px-filter__reset::after {
349
+ content: "";
350
+ position: absolute;
351
+ inset: 2px;
352
+ background: var(--px-fill-color-blank);
353
+ clip-path: var(--px-filter-clip);
354
+ box-shadow:
355
+ inset 2px 2px 0 0 rgba(255, 255, 255, 0.2),
356
+ inset -2px -2px 0 0 rgba(0, 0, 0, 0.1);
357
+ z-index: 0;
358
+ }
359
+ .px-filter__reset {
360
+
361
+ filter: drop-shadow(
362
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-shadow-color)
363
+ );
364
+ }
365
+ /* Icon sits above pseudo-elements */
366
+ .px-filter__reset > * {
367
+ position: relative;
368
+ z-index: 1;
369
+ }
370
+ .px-filter__reset:hover {
371
+ transform: translateY(-1px);
372
+ }
373
+ .px-filter__reset:hover::after {
374
+ box-shadow:
375
+ inset 2px 2px 0 0 rgba(255, 255, 255, 0.35),
376
+ inset -2px -2px 0 0 rgba(0, 0, 0, 0.1);
377
+ }
378
+ .px-filter__reset:active {
379
+ transform: translateY(1px);
380
+ filter: drop-shadow(2px 2px 0px var(--px-shadow-color));
381
+ }
382
+ .px-filter__reset:active::after {
383
+ box-shadow:
384
+ inset -2px -2px 0 0 rgba(255, 255, 255, 0.2),
385
+ inset 2px 2px 0 0 rgba(0, 0, 0, 0.1);
386
+ }
387
+ /* Filter Item Variables */
388
+ .px-filter-item {
389
+ --px-filter-item-height: 30px;
390
+ --px-filter-item-color: var(--px-text-color-primary);
391
+ --px-filter-item-bg-color: var(--px-fill-color-blank);
392
+ --px-filter-item-border-color: var(--px-border-color);
393
+ --px-filter-item-shadow-color: var(--px-shadow-color);
394
+ --px-filter-item-active-color: var(--px-color-primary);
395
+ --px-filter-item-active-border-color: var(--px-color-primary-dark);
396
+ --px-filter-item-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.2);
397
+ --px-filter-item-inset-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.1);
398
+ }
399
+ /* Base Filter Item Styles — Pixel Chip */
400
+ .px-filter-item {
401
+ display: inline-flex;
402
+ align-items: center;
403
+ justify-content: center;
404
+ height: var(--px-filter-item-height);
405
+ padding: 0 12px;
406
+ font-family: var(--px-font-family);
407
+ font-size: var(--px-font-size-base);
408
+ line-height: 1;
409
+ color: var(--px-filter-item-color);
410
+ background: transparent;
411
+ cursor: pointer;
412
+ user-select: none;
413
+ position: relative;
414
+ transition: transform 0.1s, width 0.2s, padding 0.2s, opacity 0.15s;
415
+ }
416
+ /* Border layer */
417
+ .px-filter-item::before {
418
+ content: "";
419
+ position: absolute;
420
+ inset: 0;
421
+ background: var(--px-filter-item-border-color);
422
+ clip-path: var(--px-filter-clip);
423
+ z-index: 0;
424
+ }
425
+ /* Fill layer with 3D bevel */
426
+ .px-filter-item::after {
427
+ content: "";
428
+ position: absolute;
429
+ inset: 2px;
430
+ background: var(--px-filter-item-bg-color);
431
+ clip-path: var(--px-filter-clip);
432
+ box-shadow:
433
+ var(--px-filter-item-inset-highlight),
434
+ var(--px-filter-item-inset-shadow);
435
+ z-index: 0;
436
+ }
437
+ .px-filter-item {
438
+ filter: drop-shadow(
439
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-filter-item-shadow-color)
440
+ );
441
+ }
442
+ /* Pixel shadow via filter */
443
+ /* Hover: lift */
444
+ .px-filter-item:hover:not(.is-disabled):not(.is-hidden) {
445
+ transform: translateY(-1px);
446
+ }
447
+ .px-filter-item:hover:not(.is-disabled):not(.is-hidden)::after {
448
+ --px-filter-item-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.35);
449
+ }
450
+ /* Active/pressed: push down */
451
+ .px-filter-item:active:not(.is-disabled):not(.is-hidden) {
452
+ transform: translateY(1px);
453
+ filter: drop-shadow(2px 2px 0px var(--px-filter-item-shadow-color));
454
+ }
455
+ .px-filter-item:active:not(.is-disabled):not(.is-hidden)::after {
456
+ --px-filter-item-inset-highlight: inset -2px -2px 0 0 rgba(255, 255, 255, 0.2);
457
+ --px-filter-item-inset-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.1);
458
+ }
459
+ /* Selected / Active state */
460
+ .px-filter-item.is-active {
461
+ --px-filter-item-color: var(--px-fill-color-blank);
462
+ }
463
+ .px-filter-item.is-active::before {
464
+ background: var(--px-filter-item-active-border-color);
465
+ }
466
+ .px-filter-item.is-active::after {
467
+ background: var(--px-filter-item-active-color);
468
+ }
469
+ .px-filter-item.is-active {
470
+
471
+ filter: drop-shadow(
472
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-filter-item-active-border-color)
473
+ );
474
+ }
475
+ /* Disabled state */
476
+ .px-filter-item.is-disabled {
477
+ opacity: 0.5;
478
+ cursor: not-allowed;
479
+ }
480
+ /* Hidden / collapsed state (single-select with active selection) */
481
+ .px-filter-item.is-hidden {
482
+ width: 0;
483
+ height: 0;
484
+ padding: 0;
485
+ overflow: hidden;
486
+ opacity: 0;
487
+ pointer-events: none;
488
+ filter: none;
489
+ margin: 0;
490
+ border: 0;
491
+ }
492
+ .px-filter-item.is-hidden::before,
493
+ .px-filter-item.is-hidden::after {
494
+ display: none;
495
+ }
496
+ /* Hidden native input */
497
+ .px-filter-item__original {
498
+ position: absolute;
499
+ width: 0;
500
+ height: 0;
501
+ opacity: 0;
502
+ margin: 0;
503
+ outline: none;
504
+ }
505
+ .px-filter-item__original:focus-visible ~ .px-filter-item__label {
506
+ outline: 2px dashed var(--px-filter-item-active-color);
507
+ outline-offset: 2px;
508
+ }
509
+ /* Label */
510
+ .px-filter-item__label {
511
+ position: relative;
512
+ z-index: 1;
513
+ font-family: var(--px-font-family);
514
+ font-size: inherit;
515
+ line-height: 1;
516
+ color: inherit;
517
+ pointer-events: none;
518
+ }
519
+ /* Size variants */
520
+ .px-filter-item--large {
521
+ --px-filter-item-height: 36px;
522
+ padding: 0 16px;
523
+ font-size: var(--px-font-size-base);
524
+ }
525
+ .px-filter-item--small {
526
+ --px-filter-item-height: 24px;
527
+ padding: 0 8px;
528
+ font-size: var(--px-font-size-small);
529
+
530
+ filter: drop-shadow(2px 2px 0px var(--px-filter-item-shadow-color));
531
+ }
532
+ .px-filter-item--small.is-active {
533
+ filter: drop-shadow(2px 2px 0px var(--px-filter-item-active-border-color));
534
+ }
535
+ /* Reset button size matching */
536
+ .px-filter-item--large ~ .px-filter__reset,
537
+ .px-filter__reset:has(~ .px-filter-item--large) {
538
+ width: 36px;
539
+ height: 36px;
540
+ font-size: 16px;
541
+ }
542
+ .px-filter-item--small ~ .px-filter__reset,
543
+ .px-filter__reset:has(~ .px-filter-item--small) {
544
+ width: 24px;
545
+ height: 24px;
546
+ font-size: 12px;
547
+ }
548
+ /* Type variants */
549
+ .px-filter-item--primary {
550
+ --px-filter-item-active-color: var(--px-color-primary);
551
+ --px-filter-item-active-border-color: var(--px-color-primary-dark);
552
+ }
553
+ .px-filter-item--primary.is-active {
554
+ filter: drop-shadow(
555
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-primary-dark)
556
+ );
557
+ }
558
+ .px-filter-item--success {
559
+ --px-filter-item-active-color: var(--px-color-success);
560
+ --px-filter-item-active-border-color: var(--px-color-success-dark);
561
+ }
562
+ .px-filter-item--success.is-active {
563
+ filter: drop-shadow(
564
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-success-dark)
565
+ );
566
+ }
567
+ .px-filter-item--info {
568
+ --px-filter-item-active-color: var(--px-color-info);
569
+ --px-filter-item-active-border-color: var(--px-color-info-dark);
570
+ }
571
+ .px-filter-item--info.is-active {
572
+ filter: drop-shadow(
573
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-info-dark)
574
+ );
575
+ }
576
+ .px-filter-item--warning {
577
+ --px-filter-item-active-color: var(--px-color-warning);
578
+ --px-filter-item-active-border-color: var(--px-color-warning-dark);
579
+ }
580
+ .px-filter-item--warning.is-active {
581
+ filter: drop-shadow(
582
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-warning-dark)
583
+ );
584
+ }
585
+ .px-filter-item--danger {
586
+ --px-filter-item-active-color: var(--px-color-danger);
587
+ --px-filter-item-active-border-color: var(--px-color-danger-dark);
588
+ }
589
+ .px-filter-item--danger.is-active {
590
+ filter: drop-shadow(
591
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-danger-dark)
592
+ );
593
+ }
594
+ /* Dark mode bevel adjustment */
595
+ html.dark .px-filter-item {
596
+ --px-filter-item-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.08);
597
+ --px-filter-item-inset-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.2);
598
+ }