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,492 @@
1
+ /* Radio Variables */
2
+ .px-radio {
3
+ --px-radio-size: 18px;
4
+ --px-radio-checked-color: var(--px-color-primary);
5
+ --px-radio-checked-border-color: var(--px-color-primary-dark);
6
+ --px-radio-border-color: var(--px-border-color);
7
+ --px-radio-bg-color: var(--px-fill-color-blank);
8
+ --px-radio-shadow-color: var(--px-shadow-color);
9
+
10
+ /* 3D bevel — sunken look (unchecked) */
11
+ --px-radio-inset-highlight: inset -2px -2px 0 0 rgba(255, 255, 255, 0.2);
12
+ --px-radio-inset-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.1);
13
+ }
14
+ /* Base Radio Styles */
15
+ .px-radio {
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-radio.is-disabled {
27
+ opacity: 0.5;
28
+ cursor: not-allowed;
29
+ }
30
+ .px-radio.is-disabled .px-radio__inner {
31
+ cursor: not-allowed;
32
+ }
33
+ /* Checked state — raised bevel */
34
+ .px-radio.is-checked {
35
+ --px-radio-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.2);
36
+ --px-radio-inset-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.1);
37
+ }
38
+ .px-radio.is-checked .px-radio__inner::before {
39
+ background: var(--px-radio-checked-border-color);
40
+ }
41
+ .px-radio.is-checked .px-radio__inner::after {
42
+ background: var(--px-radio-checked-color);
43
+ }
44
+ .px-radio.is-checked .px-radio__inner .px-radio__dot {
45
+ opacity: 1;
46
+ }
47
+ .px-radio.is-checked .px-radio__input {
48
+ filter: drop-shadow(
49
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-radio-checked-border-color)
50
+ );
51
+ }
52
+ /* Hover feedback */
53
+ .px-radio:hover:not(.is-disabled) {
54
+ --px-radio-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.35);
55
+ }
56
+ /* Active/pressed feedback */
57
+ .px-radio:active:not(.is-disabled) {
58
+ --px-radio-inset-highlight: inset -2px -2px 0 0 rgba(255, 255, 255, 0.2);
59
+ --px-radio-inset-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.15);
60
+ }
61
+ /* Size variants */
62
+ .px-radio--large {
63
+ --px-radio-size: 22px;
64
+ font-size: var(--px-font-size-base);
65
+ }
66
+ .px-radio--large .px-radio__dot {
67
+ width: 8px;
68
+ height: 8px;
69
+ }
70
+ .px-radio--small {
71
+ --px-radio-size: 14px;
72
+ font-size: var(--px-font-size-small);
73
+ }
74
+ .px-radio--small .px-radio__input {
75
+ filter: drop-shadow(2px 2px 0px var(--px-radio-shadow-color));
76
+ }
77
+ .px-radio--small .px-radio__dot {
78
+ width: 4px;
79
+ height: 4px;
80
+ }
81
+ .px-radio--small.is-checked .px-radio__input {
82
+ filter: drop-shadow(2px 2px 0px var(--px-radio-checked-border-color));
83
+ }
84
+ /* Hidden native input */
85
+ .px-radio__original {
86
+ position: absolute;
87
+ width: 0;
88
+ height: 0;
89
+ opacity: 0;
90
+ margin: 0;
91
+ outline: none;
92
+ }
93
+ .px-radio__original:focus-visible ~ .px-radio__inner {
94
+ outline: 2px dashed var(--px-radio-checked-color);
95
+ outline-offset: 2px;
96
+ }
97
+ /* Input wrapper */
98
+ .px-radio__input {
99
+ position: relative;
100
+ display: inline-flex;
101
+ align-items: center;
102
+ justify-content: center;
103
+ flex-shrink: 0;
104
+
105
+ /* Pixel shadow via drop-shadow */
106
+ filter: drop-shadow(
107
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-radio-shadow-color)
108
+ );
109
+ }
110
+ /* The pixel-art radio — diamond shape with 2px stepped edges */
111
+ .px-radio__inner {
112
+ position: relative;
113
+ display: inline-flex;
114
+ align-items: center;
115
+ justify-content: center;
116
+ width: var(--px-radio-size);
117
+ height: var(--px-radio-size);
118
+ box-sizing: border-box;
119
+ background: transparent;
120
+
121
+ /* Pixel diamond clip-path: 2px staircase steps */
122
+ --px-radio-pixel-shape: polygon(
123
+ /* Top point */
124
+ calc(50% - 2px) 0,
125
+ calc(50% + 2px) 0,
126
+ /* Top-right stepped edge */
127
+ calc(100% - 4px) calc(50% - 4px),
128
+ calc(100% - 2px) calc(50% - 2px),
129
+ 100% calc(50% - 2px),
130
+ 100% calc(50% + 2px),
131
+ calc(100% - 2px) calc(50% + 2px),
132
+ calc(100% - 4px) calc(50% + 4px),
133
+ /* Bottom point */
134
+ calc(50% + 2px) 100%,
135
+ calc(50% - 2px) 100%,
136
+ /* Bottom-left stepped edge */
137
+ 4px calc(50% + 4px),
138
+ 2px calc(50% + 2px),
139
+ 0 calc(50% + 2px),
140
+ 0 calc(50% - 2px),
141
+ 2px calc(50% - 2px),
142
+ 4px calc(50% - 4px)
143
+ );
144
+ }
145
+ /* Border layer – pixel diamond */
146
+ .px-radio__inner::before {
147
+ content: "";
148
+ position: absolute;
149
+ inset: 0;
150
+ background: var(--px-radio-border-color);
151
+ clip-path: var(--px-radio-pixel-shape);
152
+ z-index: 0;
153
+ }
154
+ /* Fill layer – pixel diamond with 3D bevel */
155
+ .px-radio__inner::after {
156
+ content: "";
157
+ position: absolute;
158
+ inset: 2px;
159
+ background: var(--px-radio-bg-color);
160
+ clip-path: var(--px-radio-pixel-shape);
161
+ box-shadow:
162
+ var(--px-radio-inset-highlight),
163
+ var(--px-radio-inset-shadow);
164
+ z-index: 0;
165
+ }
166
+ /* Pixel dot indicator — small diamond */
167
+ .px-radio__dot {
168
+ position: relative;
169
+ z-index: 1;
170
+ width: 6px;
171
+ height: 6px;
172
+ opacity: 0;
173
+ background: var(--px-fill-color-blank);
174
+ /* Simple 4-point diamond at small size */
175
+ clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%);
176
+ }
177
+ /* Label */
178
+ .px-radio__label {
179
+ padding-left: 8px;
180
+ font-family: var(--px-font-family);
181
+ font-size: inherit;
182
+ line-height: 1.2;
183
+ color: var(--px-text-color-primary);
184
+ }
185
+ /* Type variants */
186
+ .px-radio--primary {
187
+ --px-radio-checked-color: var(--px-color-primary);
188
+ --px-radio-checked-border-color: var(--px-color-primary-dark);
189
+ }
190
+ .px-radio--primary.is-checked .px-radio__input {
191
+ filter: drop-shadow(
192
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-primary-dark)
193
+ );
194
+ }
195
+ .px-radio--success {
196
+ --px-radio-checked-color: var(--px-color-success);
197
+ --px-radio-checked-border-color: var(--px-color-success-dark);
198
+ }
199
+ .px-radio--success.is-checked .px-radio__input {
200
+ filter: drop-shadow(
201
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-success-dark)
202
+ );
203
+ }
204
+ .px-radio--info {
205
+ --px-radio-checked-color: var(--px-color-info);
206
+ --px-radio-checked-border-color: var(--px-color-info-dark);
207
+ }
208
+ .px-radio--info.is-checked .px-radio__input {
209
+ filter: drop-shadow(
210
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-info-dark)
211
+ );
212
+ }
213
+ .px-radio--warning {
214
+ --px-radio-checked-color: var(--px-color-warning);
215
+ --px-radio-checked-border-color: var(--px-color-warning-dark);
216
+ }
217
+ .px-radio--warning.is-checked .px-radio__input {
218
+ filter: drop-shadow(
219
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-warning-dark)
220
+ );
221
+ }
222
+ .px-radio--danger {
223
+ --px-radio-checked-color: var(--px-color-danger);
224
+ --px-radio-checked-border-color: var(--px-color-danger-dark);
225
+ }
226
+ .px-radio--danger.is-checked .px-radio__input {
227
+ filter: drop-shadow(
228
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-danger-dark)
229
+ );
230
+ }
231
+ /* Dark mode bevel adjustment */
232
+ html.dark .px-radio {
233
+ --px-radio-inset-highlight: inset -2px -2px 0 0 rgba(255, 255, 255, 0.08);
234
+ --px-radio-inset-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.2);
235
+ }
236
+ html.dark .px-radio.is-checked {
237
+ --px-radio-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.08);
238
+ --px-radio-inset-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.2);
239
+ }
240
+ /* Radio Group */
241
+ .px-radio-group {
242
+ display: inline-flex;
243
+ flex-wrap: wrap;
244
+ gap: 16px;
245
+ align-items: center;
246
+ }
247
+ /* Radio Variables */
248
+ .px-radio {
249
+ --px-radio-size: 18px;
250
+ --px-radio-checked-color: var(--px-color-primary);
251
+ --px-radio-checked-border-color: var(--px-color-primary-dark);
252
+ --px-radio-border-color: var(--px-border-color);
253
+ --px-radio-bg-color: var(--px-fill-color-blank);
254
+ --px-radio-shadow-color: var(--px-shadow-color);
255
+
256
+ /* 3D bevel — sunken look (unchecked) */
257
+ --px-radio-inset-highlight: inset -2px -2px 0 0 rgba(255, 255, 255, 0.2);
258
+ --px-radio-inset-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.1);
259
+ }
260
+ /* Base Radio Styles */
261
+ .px-radio {
262
+ display: inline-flex;
263
+ align-items: center;
264
+ font-size: var(--px-font-size-base);
265
+ font-family: var(--px-font-family);
266
+ line-height: 1;
267
+ cursor: pointer;
268
+ user-select: none;
269
+ white-space: nowrap;
270
+ }
271
+ /* Disabled state */
272
+ .px-radio.is-disabled {
273
+ opacity: 0.5;
274
+ cursor: not-allowed;
275
+ }
276
+ .px-radio.is-disabled .px-radio__inner {
277
+ cursor: not-allowed;
278
+ }
279
+ /* Checked state — raised bevel */
280
+ .px-radio.is-checked {
281
+ --px-radio-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.2);
282
+ --px-radio-inset-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.1);
283
+ }
284
+ .px-radio.is-checked .px-radio__inner::before {
285
+ background: var(--px-radio-checked-border-color);
286
+ }
287
+ .px-radio.is-checked .px-radio__inner::after {
288
+ background: var(--px-radio-checked-color);
289
+ }
290
+ .px-radio.is-checked .px-radio__inner .px-radio__dot {
291
+ opacity: 1;
292
+ }
293
+ .px-radio.is-checked .px-radio__input {
294
+ filter: drop-shadow(
295
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-radio-checked-border-color)
296
+ );
297
+ }
298
+ /* Hover feedback */
299
+ .px-radio:hover:not(.is-disabled) {
300
+ --px-radio-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.35);
301
+ }
302
+ /* Active/pressed feedback */
303
+ .px-radio:active:not(.is-disabled) {
304
+ --px-radio-inset-highlight: inset -2px -2px 0 0 rgba(255, 255, 255, 0.2);
305
+ --px-radio-inset-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.15);
306
+ }
307
+ /* Size variants */
308
+ .px-radio--large {
309
+ --px-radio-size: 22px;
310
+ font-size: var(--px-font-size-base);
311
+ }
312
+ .px-radio--large .px-radio__dot {
313
+ width: 8px;
314
+ height: 8px;
315
+ }
316
+ .px-radio--small {
317
+ --px-radio-size: 14px;
318
+ font-size: var(--px-font-size-small);
319
+ }
320
+ .px-radio--small .px-radio__input {
321
+ filter: drop-shadow(2px 2px 0px var(--px-radio-shadow-color));
322
+ }
323
+ .px-radio--small .px-radio__dot {
324
+ width: 4px;
325
+ height: 4px;
326
+ }
327
+ .px-radio--small.is-checked .px-radio__input {
328
+ filter: drop-shadow(2px 2px 0px var(--px-radio-checked-border-color));
329
+ }
330
+ /* Hidden native input */
331
+ .px-radio__original {
332
+ position: absolute;
333
+ width: 0;
334
+ height: 0;
335
+ opacity: 0;
336
+ margin: 0;
337
+ outline: none;
338
+ }
339
+ .px-radio__original:focus-visible ~ .px-radio__inner {
340
+ outline: 2px dashed var(--px-radio-checked-color);
341
+ outline-offset: 2px;
342
+ }
343
+ /* Input wrapper */
344
+ .px-radio__input {
345
+ position: relative;
346
+ display: inline-flex;
347
+ align-items: center;
348
+ justify-content: center;
349
+ flex-shrink: 0;
350
+
351
+ /* Pixel shadow via drop-shadow */
352
+ filter: drop-shadow(
353
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-radio-shadow-color)
354
+ );
355
+ }
356
+ /* The pixel-art radio — diamond shape with 2px stepped edges */
357
+ .px-radio__inner {
358
+ position: relative;
359
+ display: inline-flex;
360
+ align-items: center;
361
+ justify-content: center;
362
+ width: var(--px-radio-size);
363
+ height: var(--px-radio-size);
364
+ box-sizing: border-box;
365
+ background: transparent;
366
+
367
+ /* Pixel diamond clip-path: 2px staircase steps */
368
+ --px-radio-pixel-shape: polygon(
369
+ /* Top point */
370
+ calc(50% - 2px) 0,
371
+ calc(50% + 2px) 0,
372
+ /* Top-right stepped edge */
373
+ calc(100% - 4px) calc(50% - 4px),
374
+ calc(100% - 2px) calc(50% - 2px),
375
+ 100% calc(50% - 2px),
376
+ 100% calc(50% + 2px),
377
+ calc(100% - 2px) calc(50% + 2px),
378
+ calc(100% - 4px) calc(50% + 4px),
379
+ /* Bottom point */
380
+ calc(50% + 2px) 100%,
381
+ calc(50% - 2px) 100%,
382
+ /* Bottom-left stepped edge */
383
+ 4px calc(50% + 4px),
384
+ 2px calc(50% + 2px),
385
+ 0 calc(50% + 2px),
386
+ 0 calc(50% - 2px),
387
+ 2px calc(50% - 2px),
388
+ 4px calc(50% - 4px)
389
+ );
390
+ }
391
+ /* Border layer – pixel diamond */
392
+ .px-radio__inner::before {
393
+ content: "";
394
+ position: absolute;
395
+ inset: 0;
396
+ background: var(--px-radio-border-color);
397
+ clip-path: var(--px-radio-pixel-shape);
398
+ z-index: 0;
399
+ }
400
+ /* Fill layer – pixel diamond with 3D bevel */
401
+ .px-radio__inner::after {
402
+ content: "";
403
+ position: absolute;
404
+ inset: 2px;
405
+ background: var(--px-radio-bg-color);
406
+ clip-path: var(--px-radio-pixel-shape);
407
+ box-shadow:
408
+ var(--px-radio-inset-highlight),
409
+ var(--px-radio-inset-shadow);
410
+ z-index: 0;
411
+ }
412
+ /* Pixel dot indicator — small diamond */
413
+ .px-radio__dot {
414
+ position: relative;
415
+ z-index: 1;
416
+ width: 6px;
417
+ height: 6px;
418
+ opacity: 0;
419
+ background: var(--px-fill-color-blank);
420
+ /* Simple 4-point diamond at small size */
421
+ clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%);
422
+ }
423
+ /* Label */
424
+ .px-radio__label {
425
+ padding-left: 8px;
426
+ font-family: var(--px-font-family);
427
+ font-size: inherit;
428
+ line-height: 1.2;
429
+ color: var(--px-text-color-primary);
430
+ }
431
+ /* Type variants */
432
+ .px-radio--primary {
433
+ --px-radio-checked-color: var(--px-color-primary);
434
+ --px-radio-checked-border-color: var(--px-color-primary-dark);
435
+ }
436
+ .px-radio--primary.is-checked .px-radio__input {
437
+ filter: drop-shadow(
438
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-primary-dark)
439
+ );
440
+ }
441
+ .px-radio--success {
442
+ --px-radio-checked-color: var(--px-color-success);
443
+ --px-radio-checked-border-color: var(--px-color-success-dark);
444
+ }
445
+ .px-radio--success.is-checked .px-radio__input {
446
+ filter: drop-shadow(
447
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-success-dark)
448
+ );
449
+ }
450
+ .px-radio--info {
451
+ --px-radio-checked-color: var(--px-color-info);
452
+ --px-radio-checked-border-color: var(--px-color-info-dark);
453
+ }
454
+ .px-radio--info.is-checked .px-radio__input {
455
+ filter: drop-shadow(
456
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-info-dark)
457
+ );
458
+ }
459
+ .px-radio--warning {
460
+ --px-radio-checked-color: var(--px-color-warning);
461
+ --px-radio-checked-border-color: var(--px-color-warning-dark);
462
+ }
463
+ .px-radio--warning.is-checked .px-radio__input {
464
+ filter: drop-shadow(
465
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-warning-dark)
466
+ );
467
+ }
468
+ .px-radio--danger {
469
+ --px-radio-checked-color: var(--px-color-danger);
470
+ --px-radio-checked-border-color: var(--px-color-danger-dark);
471
+ }
472
+ .px-radio--danger.is-checked .px-radio__input {
473
+ filter: drop-shadow(
474
+ var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-danger-dark)
475
+ );
476
+ }
477
+ /* Dark mode bevel adjustment */
478
+ html.dark .px-radio {
479
+ --px-radio-inset-highlight: inset -2px -2px 0 0 rgba(255, 255, 255, 0.08);
480
+ --px-radio-inset-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.2);
481
+ }
482
+ html.dark .px-radio.is-checked {
483
+ --px-radio-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.08);
484
+ --px-radio-inset-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.2);
485
+ }
486
+ /* Radio Group */
487
+ .px-radio-group {
488
+ display: inline-flex;
489
+ flex-wrap: wrap;
490
+ gap: 16px;
491
+ align-items: center;
492
+ }
@@ -0,0 +1,95 @@
1
+ /* Resizable Group */
2
+ .px-resizable-group {
3
+ display: flex;
4
+ width: 100%;
5
+ height: 100%;
6
+ overflow: hidden;
7
+ box-sizing: border-box;
8
+ }
9
+ .px-resizable-group.is-horizontal {
10
+ flex-direction: row;
11
+ }
12
+ .px-resizable-group.is-vertical {
13
+ flex-direction: column;
14
+ }
15
+ /* Resizable Panel */
16
+ .px-resizable-panel {
17
+ overflow: auto;
18
+ position: relative;
19
+ box-sizing: border-box;
20
+ }
21
+ .px-resizable-panel.is-collapsed {
22
+ overflow: hidden;
23
+ }
24
+ /* Resizable Handle */
25
+ .px-resizable-handle {
26
+ flex: 0 0 8px;
27
+ position: relative;
28
+ display: flex;
29
+ align-items: center;
30
+ justify-content: center;
31
+ user-select: none;
32
+ z-index: 1;
33
+ cursor: col-resize;
34
+ transition: none;
35
+ background: var(--px-border-color);
36
+ box-sizing: border-box;
37
+
38
+ /* Pixel border effect via clip-path */
39
+ clip-path: polygon(
40
+ 0 2px,
41
+ 2px 2px,
42
+ 2px 0,
43
+ calc(100% - 2px) 0,
44
+ calc(100% - 2px) 2px,
45
+ 100% 2px,
46
+ 100% calc(100% - 2px),
47
+ calc(100% - 2px) calc(100% - 2px),
48
+ calc(100% - 2px) 100%,
49
+ 2px 100%,
50
+ 2px calc(100% - 2px),
51
+ 0 calc(100% - 2px)
52
+ );
53
+ }
54
+ .px-resizable-handle:hover {
55
+ background: var(--px-hover-border-color);
56
+ }
57
+ .px-resizable-handle:focus-visible {
58
+ outline: 2px solid var(--px-color-primary);
59
+ outline-offset: -2px;
60
+ }
61
+ /* Expanded hit area via ::before pseudo-element (not clipped by clip-path) */
62
+ .px-resizable-handle.has-hit-area::before {
63
+ content: '';
64
+ position: absolute;
65
+ inset: calc(-1 * var(--px-handle-hit-area, 0px));
66
+ z-index: -1;
67
+ }
68
+ /* Vertical handle */
69
+ .px-resizable-handle.is-vertical {
70
+ flex: 0 0 8px;
71
+ cursor: row-resize;
72
+ clip-path: polygon(
73
+ 2px 0,
74
+ calc(100% - 2px) 0,
75
+ calc(100% - 2px) 2px,
76
+ 100% 2px,
77
+ 100% calc(100% - 2px),
78
+ calc(100% - 2px) calc(100% - 2px),
79
+ calc(100% - 2px) 100%,
80
+ 2px 100%,
81
+ 2px calc(100% - 2px),
82
+ 0 calc(100% - 2px),
83
+ 0 2px,
84
+ 2px 2px
85
+ );
86
+ }
87
+ /* Dragging state */
88
+ .px-resizable-handle.is-dragging {
89
+ background: var(--px-color-primary);
90
+ }
91
+ /* Disabled state */
92
+ .px-resizable-handle.is-disabled {
93
+ cursor: not-allowed;
94
+ opacity: 0.5;
95
+ }