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
@@ -1,18 +1,44 @@
1
1
  /* Dropdown Variables */
2
2
  .px-dropdown .px-dropdown__menu {
3
- --px-dropdown-menuItem-hover-fill: var(--px-hover-bg-color);
4
- --px-dropdown-menuItem-hover-color: var(--px-hover-text-color);
3
+ --px-dropdown-menuItem-hover-fill: var(--px-color-primary);
4
+ --px-dropdown-menuItem-hover-color: #fff;
5
5
  --px-dropdown-menuItem-disabled-color: var(--px-text-color-disabled);
6
- --px-dropdown-menuItem-divided-color: var(--px-border-color-dark);
6
+ --px-dropdown-menuItem-divided-color: var(--px-border-color-lighter);
7
7
  --px-dropdown-shadow-color: var(--px-shadow-color-dark);
8
+ --px-dropdown-border-color: var(--px-border-color);
9
+ --px-dropdown-bg-color: var(--px-bg-color);
10
+
11
+ /* Beveled inset for 3D raised-panel depth */
12
+ --px-dropdown-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.6);
13
+ --px-dropdown-inset-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.25);
8
14
  }
9
15
  /* Base Dropdown Styles - Pixel Game Menu */
10
16
  .px-dropdown {
11
17
  display: inline-block;
12
18
  font-family: var(--px-font-family);
19
+
20
+ outline: none;
13
21
  }
14
22
  .px-dropdown .px-tooltip {
15
- --px-popover-padding: 4px 0;
23
+ /* 6px vertical clears staircase corners; 4px horizontal matches border inset */
24
+ --px-tooltip-padding: 6px 4px;
25
+ --px-tooltip-border-color: transparent;
26
+ --px-tooltip-shadow-color: transparent;
27
+ --px-shadow-offset-x: 0px;
28
+ --px-shadow-offset-y: 0px;
29
+ }
30
+ .px-dropdown .px-tooltip .px-tooltip__popper {
31
+ filter: none;
32
+ }
33
+ /* Remove staircase border layer from popup */
34
+ .px-dropdown .px-tooltip .px-tooltip__popper::before {
35
+ display: none;
36
+ }
37
+ /* Enhanced pixel-art bevel on fill layer */
38
+ .px-dropdown .px-tooltip .px-tooltip__popper::after {
39
+ box-shadow:
40
+ inset 2px 2px 0 0 rgba(255, 255, 255, 0.6),
41
+ inset -2px -2px 0 0 rgba(0, 0, 0, 0.15);
16
42
  }
17
43
  /* Disabled state */
18
44
  .px-dropdown.is-disabled > * {
@@ -24,7 +50,24 @@
24
50
  list-style-type: none;
25
51
  margin: 0;
26
52
  padding: 4px 0;
27
- background: var(--px-bg-color);
53
+ background: var(--px-dropdown-bg-color);
54
+ position: relative;
55
+ outline: none;
56
+ }
57
+ /* Pixel-art scrollbar */
58
+ .px-dropdown__menu::-webkit-scrollbar {
59
+ width: 10px;
60
+ }
61
+ .px-dropdown__menu::-webkit-scrollbar-track {
62
+ background: var(--px-fill-color-light);
63
+ border-left: 2px solid var(--px-dropdown-border-color);
64
+ }
65
+ .px-dropdown__menu::-webkit-scrollbar-thumb {
66
+ background: var(--px-fill-color-darker, var(--px-border-color));
67
+ border: 2px solid var(--px-dropdown-border-color);
68
+ }
69
+ .px-dropdown__menu::-webkit-scrollbar-thumb:hover {
70
+ background: var(--px-dropdown-menuItem-hover-fill);
28
71
  }
29
72
  /* Menu items - Pixel RPG menu style */
30
73
  .px-dropdown__menu .px-dropdown__item {
@@ -32,8 +75,8 @@
32
75
  align-items: center;
33
76
  white-space: nowrap;
34
77
  list-style: none;
35
- line-height: 1.5;
36
- padding: 8px 16px;
78
+ line-height: 22px;
79
+ padding: 8px 16px 8px 22px;
37
80
  margin: 0;
38
81
  font-size: var(--px-font-size-base);
39
82
  font-family: var(--px-font-family);
@@ -42,69 +85,194 @@
42
85
  outline: none;
43
86
  position: relative;
44
87
  transition: none;
45
- }
46
- /* Hover effect - Pixel highlight */
47
- .px-dropdown__menu .px-dropdown__item:hover {
48
- background-color: var(--px-dropdown-menuItem-hover-fill);
88
+ z-index: 1;
89
+ }
90
+ /* Item icon */
91
+ .px-dropdown__menu .px-dropdown__item .px-dropdown__item-icon {
92
+ margin-right: 8px;
93
+ font-size: var(--px-font-size-base);
94
+ width: 16px;
95
+ flex-shrink: 0;
96
+ display: flex;
97
+ align-items: center;
98
+ }
99
+ /* Pixel arrow indicator — right-pointing staircase triangle */
100
+ .px-dropdown__menu .px-dropdown__item::before {
101
+ content: '';
102
+ position: absolute;
103
+ left: 8px;
104
+ top: 50%;
105
+ transform: translateY(-50%);
106
+ width: 6px;
107
+ height: 8px;
108
+ background: var(--px-dropdown-menuItem-hover-color);
109
+ clip-path: polygon(
110
+ 0 0, 2px 0,
111
+ 2px 2px, 4px 2px,
112
+ 4px 4px, 6px 4px,
113
+ 6px 4px, 4px 4px,
114
+ 4px 6px, 2px 6px,
115
+ 2px 8px, 0 8px
116
+ );
117
+ opacity: 0;
118
+ z-index: 2;
119
+ }
120
+ /* Background highlight layer — full width selection bar */
121
+ .px-dropdown__menu .px-dropdown__item::after {
122
+ content: '';
123
+ position: absolute;
124
+ inset: 0;
125
+ background: transparent;
126
+ z-index: -1;
127
+ }
128
+ /* Hover & focus effect - Pixel highlight with beveled 3D bar */
129
+ .px-dropdown__menu .px-dropdown__item:hover,
130
+ .px-dropdown__menu .px-dropdown__item:focus {
49
131
  color: var(--px-dropdown-menuItem-hover-color);
50
132
  }
51
- /* Pixel cursor indicator */
52
- .px-dropdown__menu .px-dropdown__item:hover::before {
53
- content: ">";
54
- position: absolute;
55
- left: 6px;
56
- color: var(--px-dropdown-menuItem-hover-color);
57
- font-weight: bold;
133
+ .px-dropdown__menu .px-dropdown__item:hover::before, .px-dropdown__menu .px-dropdown__item:focus::before {
134
+ opacity: 1;
135
+ }
136
+ .px-dropdown__menu .px-dropdown__item:hover::after, .px-dropdown__menu .px-dropdown__item:focus::after {
137
+ background-color: var(--px-dropdown-menuItem-hover-fill);
138
+ box-shadow: var(--px-dropdown-inset-highlight), var(--px-dropdown-inset-shadow);
139
+ }
140
+ /* Active/pressed - reversed bevel for "pressed in" feel */
141
+ .px-dropdown__menu .px-dropdown__item:active:not(.is-disabled)::after {
142
+ box-shadow: var(--px-dropdown-inset-shadow), var(--px-dropdown-inset-highlight);
58
143
  }
59
144
  /* Disabled state */
60
145
  .px-dropdown__menu .px-dropdown__item.is-disabled {
61
146
  color: var(--px-dropdown-menuItem-disabled-color);
62
147
  cursor: not-allowed;
63
- background-image: none;
64
- }
65
- .px-dropdown__menu .px-dropdown__item.is-disabled:hover {
66
- background-color: transparent;
67
- }
68
- .px-dropdown__menu .px-dropdown__item.is-disabled:hover::before {
69
- content: none;
148
+ opacity: 0.55;
149
+ }
150
+ .px-dropdown__menu .px-dropdown__item.is-disabled::before {
151
+ opacity: 0 !important;
152
+ }
153
+ .px-dropdown__menu .px-dropdown__item.is-disabled:hover,
154
+ .px-dropdown__menu .px-dropdown__item.is-disabled:focus {
155
+ color: var(--px-dropdown-menuItem-disabled-color);
156
+ }
157
+ .px-dropdown__menu .px-dropdown__item.is-disabled:hover::after, .px-dropdown__menu .px-dropdown__item.is-disabled:focus::after {
158
+ background-color: transparent;
159
+ box-shadow: none;
160
+ }
161
+ /* First item — top staircase corners on highlight layer */
162
+ .px-dropdown__menu .px-dropdown__item:first-child::after {
163
+ top: 2px;
164
+ clip-path: polygon(
165
+ 0 2px, 2px 2px, 2px 0, 4px 0,
166
+ calc(100% - 4px) 0, calc(100% - 4px) 2px, calc(100% - 2px) 2px, 100% 2px,
167
+ 100% 100%,
168
+ 0 100%
169
+ );
170
+ }
171
+ /* Last item — bottom staircase corners on highlight layer */
172
+ .px-dropdown__menu .px-dropdown__item:last-child::after {
173
+ bottom: 2px;
174
+ clip-path: polygon(
175
+ 0 0,
176
+ 100% 0,
177
+ 100% calc(100% - 2px), calc(100% - 2px) calc(100% - 2px), calc(100% - 2px) 100%, calc(100% - 4px) 100%,
178
+ 4px 100%, 4px 100%, 2px calc(100% - 2px), 0 calc(100% - 2px)
179
+ );
180
+ }
181
+ /* Single item — both top and bottom staircase corners */
182
+ .px-dropdown__menu .px-dropdown__item:first-child:last-child::after {
183
+ top: 2px;
184
+ bottom: 2px;
185
+ clip-path: polygon(
186
+ 0 2px, 2px 2px, 2px 0, 4px 0,
187
+ calc(100% - 4px) 0, calc(100% - 4px) 2px, calc(100% - 2px) 2px, 100% 2px,
188
+ 100% calc(100% - 2px), calc(100% - 2px) calc(100% - 2px), calc(100% - 2px) 100%, calc(100% - 4px) 100%,
189
+ 4px 100%, 4px 100%, 2px calc(100% - 2px), 0 calc(100% - 2px)
190
+ );
70
191
  }
71
192
  /* Size variants */
72
193
  .px-dropdown__menu .px-dropdown__item--large {
73
- padding: 10px 20px;
74
- line-height: 1.5;
194
+ padding: 10px 20px 10px 26px;
195
+ line-height: 26px;
75
196
  font-size: var(--px-font-size-large);
76
197
  }
77
- .px-dropdown__menu .px-dropdown__item--large:hover::before {
78
- left: 8px;
198
+ .px-dropdown__menu .px-dropdown__item--large::before {
199
+ left: 10px;
200
+ width: 8px;
201
+ height: 12px;
202
+ clip-path: polygon(
203
+ 0 0, 2px 0,
204
+ 2px 2px, 4px 2px,
205
+ 4px 4px, 6px 4px,
206
+ 6px 6px, 8px 6px,
207
+ 8px 6px, 6px 6px,
208
+ 6px 8px, 4px 8px,
209
+ 4px 10px, 2px 10px,
210
+ 2px 12px, 0 12px
211
+ );
79
212
  }
80
213
  .px-dropdown__menu .px-dropdown__item--small {
81
- padding: 4px 12px;
82
- line-height: 1.4;
214
+ padding: 5px 12px 5px 18px;
215
+ line-height: 18px;
83
216
  font-size: var(--px-font-size-small);
84
217
  }
85
- .px-dropdown__menu .px-dropdown__item--small:hover::before {
86
- left: 4px;
218
+ .px-dropdown__menu .px-dropdown__item--small::before {
219
+ left: 6px;
220
+ width: 4px;
221
+ height: 6px;
87
222
  }
88
- /* Divider - Pixel style dashed line */
223
+ /* Divider - Pixel-dashed gradient line */
89
224
  .px-dropdown__menu .divided-placeholder {
90
- margin: 6px 8px;
91
- border-top: 2px dashed var(--px-dropdown-menuItem-divided-color);
225
+ margin: 4px 6px;
226
+ height: 2px;
227
+ background-image: repeating-linear-gradient(
228
+ to right,
229
+ var(--px-dropdown-menuItem-divided-color) 0px,
230
+ var(--px-dropdown-menuItem-divided-color) 6px,
231
+ transparent 6px,
232
+ transparent 12px
233
+ );
92
234
  }
93
235
  /* Dropdown Variables */
94
236
  .px-dropdown .px-dropdown__menu {
95
- --px-dropdown-menuItem-hover-fill: var(--px-hover-bg-color);
96
- --px-dropdown-menuItem-hover-color: var(--px-hover-text-color);
237
+ --px-dropdown-menuItem-hover-fill: var(--px-color-primary);
238
+ --px-dropdown-menuItem-hover-color: #fff;
97
239
  --px-dropdown-menuItem-disabled-color: var(--px-text-color-disabled);
98
- --px-dropdown-menuItem-divided-color: var(--px-border-color-dark);
240
+ --px-dropdown-menuItem-divided-color: var(--px-border-color-lighter);
99
241
  --px-dropdown-shadow-color: var(--px-shadow-color-dark);
242
+ --px-dropdown-border-color: var(--px-border-color);
243
+ --px-dropdown-bg-color: var(--px-bg-color);
244
+
245
+ /* Beveled inset for 3D raised-panel depth */
246
+ --px-dropdown-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.6);
247
+ --px-dropdown-inset-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.25);
100
248
  }
101
249
  /* Base Dropdown Styles - Pixel Game Menu */
102
250
  .px-dropdown {
103
251
  display: inline-block;
104
252
  font-family: var(--px-font-family);
253
+
254
+ outline: none;
105
255
  }
106
256
  .px-dropdown .px-tooltip {
107
- --px-popover-padding: 4px 0;
257
+ /* 6px vertical clears staircase corners; 4px horizontal matches border inset */
258
+ --px-tooltip-padding: 6px 4px;
259
+ --px-tooltip-border-color: transparent;
260
+ --px-tooltip-shadow-color: transparent;
261
+ --px-shadow-offset-x: 0px;
262
+ --px-shadow-offset-y: 0px;
263
+ }
264
+ .px-dropdown .px-tooltip .px-tooltip__popper {
265
+ filter: none;
266
+ }
267
+ /* Remove staircase border layer from popup */
268
+ .px-dropdown .px-tooltip .px-tooltip__popper::before {
269
+ display: none;
270
+ }
271
+ /* Enhanced pixel-art bevel on fill layer */
272
+ .px-dropdown .px-tooltip .px-tooltip__popper::after {
273
+ box-shadow:
274
+ inset 2px 2px 0 0 rgba(255, 255, 255, 0.6),
275
+ inset -2px -2px 0 0 rgba(0, 0, 0, 0.15);
108
276
  }
109
277
  /* Disabled state */
110
278
  .px-dropdown.is-disabled > * {
@@ -116,7 +284,24 @@
116
284
  list-style-type: none;
117
285
  margin: 0;
118
286
  padding: 4px 0;
119
- background: var(--px-bg-color);
287
+ background: var(--px-dropdown-bg-color);
288
+ position: relative;
289
+ outline: none;
290
+ }
291
+ /* Pixel-art scrollbar */
292
+ .px-dropdown__menu::-webkit-scrollbar {
293
+ width: 10px;
294
+ }
295
+ .px-dropdown__menu::-webkit-scrollbar-track {
296
+ background: var(--px-fill-color-light);
297
+ border-left: 2px solid var(--px-dropdown-border-color);
298
+ }
299
+ .px-dropdown__menu::-webkit-scrollbar-thumb {
300
+ background: var(--px-fill-color-darker, var(--px-border-color));
301
+ border: 2px solid var(--px-dropdown-border-color);
302
+ }
303
+ .px-dropdown__menu::-webkit-scrollbar-thumb:hover {
304
+ background: var(--px-dropdown-menuItem-hover-fill);
120
305
  }
121
306
  /* Menu items - Pixel RPG menu style */
122
307
  .px-dropdown__menu .px-dropdown__item {
@@ -124,8 +309,8 @@
124
309
  align-items: center;
125
310
  white-space: nowrap;
126
311
  list-style: none;
127
- line-height: 1.5;
128
- padding: 8px 16px;
312
+ line-height: 22px;
313
+ padding: 8px 16px 8px 22px;
129
314
  margin: 0;
130
315
  font-size: var(--px-font-size-base);
131
316
  font-family: var(--px-font-family);
@@ -134,54 +319,153 @@
134
319
  outline: none;
135
320
  position: relative;
136
321
  transition: none;
137
- }
138
- /* Hover effect - Pixel highlight */
139
- .px-dropdown__menu .px-dropdown__item:hover {
140
- background-color: var(--px-dropdown-menuItem-hover-fill);
322
+ z-index: 1;
323
+ }
324
+ /* Item icon */
325
+ .px-dropdown__menu .px-dropdown__item .px-dropdown__item-icon {
326
+ margin-right: 8px;
327
+ font-size: var(--px-font-size-base);
328
+ width: 16px;
329
+ flex-shrink: 0;
330
+ display: flex;
331
+ align-items: center;
332
+ }
333
+ /* Pixel arrow indicator — right-pointing staircase triangle */
334
+ .px-dropdown__menu .px-dropdown__item::before {
335
+ content: '';
336
+ position: absolute;
337
+ left: 8px;
338
+ top: 50%;
339
+ transform: translateY(-50%);
340
+ width: 6px;
341
+ height: 8px;
342
+ background: var(--px-dropdown-menuItem-hover-color);
343
+ clip-path: polygon(
344
+ 0 0, 2px 0,
345
+ 2px 2px, 4px 2px,
346
+ 4px 4px, 6px 4px,
347
+ 6px 4px, 4px 4px,
348
+ 4px 6px, 2px 6px,
349
+ 2px 8px, 0 8px
350
+ );
351
+ opacity: 0;
352
+ z-index: 2;
353
+ }
354
+ /* Background highlight layer — full width selection bar */
355
+ .px-dropdown__menu .px-dropdown__item::after {
356
+ content: '';
357
+ position: absolute;
358
+ inset: 0;
359
+ background: transparent;
360
+ z-index: -1;
361
+ }
362
+ /* Hover & focus effect - Pixel highlight with beveled 3D bar */
363
+ .px-dropdown__menu .px-dropdown__item:hover,
364
+ .px-dropdown__menu .px-dropdown__item:focus {
141
365
  color: var(--px-dropdown-menuItem-hover-color);
142
366
  }
143
- /* Pixel cursor indicator */
144
- .px-dropdown__menu .px-dropdown__item:hover::before {
145
- content: ">";
146
- position: absolute;
147
- left: 6px;
148
- color: var(--px-dropdown-menuItem-hover-color);
149
- font-weight: bold;
367
+ .px-dropdown__menu .px-dropdown__item:hover::before, .px-dropdown__menu .px-dropdown__item:focus::before {
368
+ opacity: 1;
369
+ }
370
+ .px-dropdown__menu .px-dropdown__item:hover::after, .px-dropdown__menu .px-dropdown__item:focus::after {
371
+ background-color: var(--px-dropdown-menuItem-hover-fill);
372
+ box-shadow: var(--px-dropdown-inset-highlight), var(--px-dropdown-inset-shadow);
373
+ }
374
+ /* Active/pressed - reversed bevel for "pressed in" feel */
375
+ .px-dropdown__menu .px-dropdown__item:active:not(.is-disabled)::after {
376
+ box-shadow: var(--px-dropdown-inset-shadow), var(--px-dropdown-inset-highlight);
150
377
  }
151
378
  /* Disabled state */
152
379
  .px-dropdown__menu .px-dropdown__item.is-disabled {
153
380
  color: var(--px-dropdown-menuItem-disabled-color);
154
381
  cursor: not-allowed;
155
- background-image: none;
156
- }
157
- .px-dropdown__menu .px-dropdown__item.is-disabled:hover {
158
- background-color: transparent;
159
- }
160
- .px-dropdown__menu .px-dropdown__item.is-disabled:hover::before {
161
- content: none;
382
+ opacity: 0.55;
383
+ }
384
+ .px-dropdown__menu .px-dropdown__item.is-disabled::before {
385
+ opacity: 0 !important;
386
+ }
387
+ .px-dropdown__menu .px-dropdown__item.is-disabled:hover,
388
+ .px-dropdown__menu .px-dropdown__item.is-disabled:focus {
389
+ color: var(--px-dropdown-menuItem-disabled-color);
390
+ }
391
+ .px-dropdown__menu .px-dropdown__item.is-disabled:hover::after, .px-dropdown__menu .px-dropdown__item.is-disabled:focus::after {
392
+ background-color: transparent;
393
+ box-shadow: none;
394
+ }
395
+ /* First item — top staircase corners on highlight layer */
396
+ .px-dropdown__menu .px-dropdown__item:first-child::after {
397
+ top: 2px;
398
+ clip-path: polygon(
399
+ 0 2px, 2px 2px, 2px 0, 4px 0,
400
+ calc(100% - 4px) 0, calc(100% - 4px) 2px, calc(100% - 2px) 2px, 100% 2px,
401
+ 100% 100%,
402
+ 0 100%
403
+ );
404
+ }
405
+ /* Last item — bottom staircase corners on highlight layer */
406
+ .px-dropdown__menu .px-dropdown__item:last-child::after {
407
+ bottom: 2px;
408
+ clip-path: polygon(
409
+ 0 0,
410
+ 100% 0,
411
+ 100% calc(100% - 2px), calc(100% - 2px) calc(100% - 2px), calc(100% - 2px) 100%, calc(100% - 4px) 100%,
412
+ 4px 100%, 4px 100%, 2px calc(100% - 2px), 0 calc(100% - 2px)
413
+ );
414
+ }
415
+ /* Single item — both top and bottom staircase corners */
416
+ .px-dropdown__menu .px-dropdown__item:first-child:last-child::after {
417
+ top: 2px;
418
+ bottom: 2px;
419
+ clip-path: polygon(
420
+ 0 2px, 2px 2px, 2px 0, 4px 0,
421
+ calc(100% - 4px) 0, calc(100% - 4px) 2px, calc(100% - 2px) 2px, 100% 2px,
422
+ 100% calc(100% - 2px), calc(100% - 2px) calc(100% - 2px), calc(100% - 2px) 100%, calc(100% - 4px) 100%,
423
+ 4px 100%, 4px 100%, 2px calc(100% - 2px), 0 calc(100% - 2px)
424
+ );
162
425
  }
163
426
  /* Size variants */
164
427
  .px-dropdown__menu .px-dropdown__item--large {
165
- padding: 10px 20px;
166
- line-height: 1.5;
428
+ padding: 10px 20px 10px 26px;
429
+ line-height: 26px;
167
430
  font-size: var(--px-font-size-large);
168
431
  }
169
- .px-dropdown__menu .px-dropdown__item--large:hover::before {
170
- left: 8px;
432
+ .px-dropdown__menu .px-dropdown__item--large::before {
433
+ left: 10px;
434
+ width: 8px;
435
+ height: 12px;
436
+ clip-path: polygon(
437
+ 0 0, 2px 0,
438
+ 2px 2px, 4px 2px,
439
+ 4px 4px, 6px 4px,
440
+ 6px 6px, 8px 6px,
441
+ 8px 6px, 6px 6px,
442
+ 6px 8px, 4px 8px,
443
+ 4px 10px, 2px 10px,
444
+ 2px 12px, 0 12px
445
+ );
171
446
  }
172
447
  .px-dropdown__menu .px-dropdown__item--small {
173
- padding: 4px 12px;
174
- line-height: 1.4;
448
+ padding: 5px 12px 5px 18px;
449
+ line-height: 18px;
175
450
  font-size: var(--px-font-size-small);
176
451
  }
177
- .px-dropdown__menu .px-dropdown__item--small:hover::before {
178
- left: 4px;
452
+ .px-dropdown__menu .px-dropdown__item--small::before {
453
+ left: 6px;
454
+ width: 4px;
455
+ height: 6px;
179
456
  }
180
- /* Divider - Pixel style dashed line */
457
+ /* Divider - Pixel-dashed gradient line */
181
458
  .px-dropdown__menu .divided-placeholder {
182
- margin: 6px 8px;
183
- border-top: 2px dashed var(--px-dropdown-menuItem-divided-color);
184
- }
185
- .px-dropdown .px-button-group > :last-child {
459
+ margin: 4px 6px;
460
+ height: 2px;
461
+ background-image: repeating-linear-gradient(
462
+ to right,
463
+ var(--px-dropdown-menuItem-divided-color) 0px,
464
+ var(--px-dropdown-menuItem-divided-color) 6px,
465
+ transparent 6px,
466
+ transparent 12px
467
+ );
468
+ }
469
+ .px-dropdown .px-button-group > :last-child {
186
470
  padding: 5px 7px;
187
- }
471
+ }
@@ -12,6 +12,18 @@
12
12
  --px-file-input-trigger-hover-bg-color: var(--px-fill-color-darker);
13
13
  --px-file-input-icon-color: var(--px-text-color-secondary);
14
14
  --px-file-input-clear-hover-color: var(--px-text-color-primary);
15
+
16
+ /* Raised bevel for trigger button (same as PxButton) */
17
+ --px-file-input-trigger-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.2);
18
+ --px-file-input-trigger-inset-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.1);
19
+
20
+ /* Sunken bevel for filename area (same as PxInput) */
21
+ --px-file-input-inset-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.08);
22
+ --px-file-input-inset-highlight: inset -2px -2px 0 0 rgba(255, 255, 255, 0.15);
23
+
24
+ /* Hover-state bevel (slightly stronger) */
25
+ --px-file-input-trigger-hover-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.3);
26
+ --px-file-input-trigger-hover-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.12);
15
27
  }
16
28
  /* Base FileInput Styles */
17
29
  .px-file-input {
@@ -123,6 +135,12 @@
123
135
  0 calc(100% - 4px)
124
136
  );
125
137
  z-index: -1;
138
+ /* Sunken bevel on the filename area */
139
+ box-shadow: var(--px-file-input-inset-shadow), var(--px-file-input-inset-highlight);
140
+ }
141
+ .px-file-input__wrapper:hover {
142
+ transform: translate(-1px, -1px);
143
+ filter: drop-shadow(4px 4px 0px var(--px-file-input-shadow-color));
126
144
  }
127
145
  .px-file-input__wrapper:hover::before {
128
146
  background: var(--px-file-input-hover-border-color);
@@ -154,6 +172,9 @@
154
172
  border-right: 2px solid var(--px-file-input-border-color);
155
173
  user-select: none;
156
174
 
175
+ /* Raised bevel at rest */
176
+ box-shadow: var(--px-file-input-trigger-inset-highlight), var(--px-file-input-trigger-inset-shadow);
177
+
157
178
  /* Notch top-left and bottom-left corners to match the pixel staircase border */
158
179
  clip-path: polygon(
159
180
  0 2px,
@@ -168,6 +189,10 @@
168
189
  }
169
190
  .px-file-input__trigger:hover {
170
191
  background: var(--px-file-input-trigger-hover-bg-color);
192
+ box-shadow: var(--px-file-input-trigger-hover-highlight), var(--px-file-input-trigger-hover-shadow);
193
+ }
194
+ .px-file-input__trigger:active {
195
+ box-shadow: var(--px-file-input-trigger-inset-shadow), var(--px-file-input-trigger-inset-highlight);
171
196
  }
172
197
  /* File name display */
173
198
  .px-file-input__name {
@@ -363,3 +388,10 @@
363
388
  .px-file-input--danger.is-ghost .px-file-input__wrapper:hover {
364
389
  filter: drop-shadow(var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-file-input-hover-shadow-color));
365
390
  }
391
+ /* Dark mode bevel adjustment */
392
+ html.dark .px-file-input {
393
+ --px-file-input-trigger-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.08);
394
+ --px-file-input-trigger-inset-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.3);
395
+ --px-file-input-inset-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.2);
396
+ --px-file-input-inset-highlight: inset -2px -2px 0 0 rgba(255, 255, 255, 0.05);
397
+ }