@proyecto-viviana/ui 0.6.2 → 0.6.3

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 (298) hide show
  1. package/dist/_chunk/LinkButton.js +9 -9
  2. package/dist/_chunk/LinkButton.js.map +1 -1
  3. package/dist/_chunk/LinkButton.jsx +9 -9
  4. package/dist/_chunk/LinkButton.jsx.map +1 -1
  5. package/dist/_chunk/RangeCalendar.js +7 -7
  6. package/dist/_chunk/RangeCalendar.js.map +1 -1
  7. package/dist/_chunk/RangeCalendar.jsx +7 -7
  8. package/dist/_chunk/RangeCalendar.jsx.map +1 -1
  9. package/dist/_chunk/Tabs.js +2 -2
  10. package/dist/_chunk/Tabs.jsx +2 -2
  11. package/dist/_chunk/breadcrumbs.js +2 -2
  12. package/dist/_chunk/breadcrumbs.js.map +1 -1
  13. package/dist/_chunk/breadcrumbs.jsx +2 -2
  14. package/dist/_chunk/breadcrumbs.jsx.map +1 -1
  15. package/dist/_chunk/button.js +3 -3
  16. package/dist/_chunk/button.jsx +3 -3
  17. package/dist/_chunk/color.js +4 -4
  18. package/dist/_chunk/color.jsx +4 -4
  19. package/dist/_chunk/form.js +5 -7
  20. package/dist/_chunk/form.js.map +1 -1
  21. package/dist/_chunk/form.jsx +5 -8
  22. package/dist/_chunk/form.jsx.map +1 -1
  23. package/dist/_chunk/layout.js +5 -1
  24. package/dist/_chunk/layout.js.map +1 -1
  25. package/dist/_chunk/layout.jsx +5 -1
  26. package/dist/_chunk/layout.jsx.map +1 -1
  27. package/dist/_chunk/list.js +4 -4
  28. package/dist/_chunk/list.jsx +4 -4
  29. package/dist/_chunk/menu.js +1 -1
  30. package/dist/_chunk/menu.js.map +1 -1
  31. package/dist/_chunk/menu.jsx +1 -1
  32. package/dist/_chunk/menu.jsx.map +1 -1
  33. package/dist/_chunk/numberfield.js +2 -2
  34. package/dist/_chunk/numberfield.jsx +2 -2
  35. package/dist/_chunk/s2-action-button-styles.js +8 -8
  36. package/dist/_chunk/s2-action-button-styles.js.map +1 -1
  37. package/dist/_chunk/s2-action-button-styles.jsx +8 -8
  38. package/dist/_chunk/s2-action-button-styles.jsx.map +1 -1
  39. package/dist/_chunk/s2-menu-styles.js +1 -1
  40. package/dist/_chunk/s2-menu-styles.jsx +1 -1
  41. package/dist/_chunk/slider.js +6 -6
  42. package/dist/_chunk/slider.jsx +6 -6
  43. package/dist/_chunk/switch.js +2 -2
  44. package/dist/_chunk/switch.jsx +2 -2
  45. package/dist/_chunk/table.js +3 -3
  46. package/dist/_chunk/table.js.map +1 -1
  47. package/dist/_chunk/table.jsx +3 -3
  48. package/dist/_chunk/table.jsx.map +1 -1
  49. package/dist/_chunk/text.js +1 -1
  50. package/dist/_chunk/text.jsx +1 -1
  51. package/dist/_chunk/textfield.js +4 -4
  52. package/dist/_chunk/textfield.jsx +4 -4
  53. package/dist/_chunk/toast.js +3 -3
  54. package/dist/_chunk/toast.jsx +3 -3
  55. package/dist/actiongroup/index.js +2 -2
  56. package/dist/actiongroup/index.jsx +2 -2
  57. package/dist/badge/index.js +6 -6
  58. package/dist/badge/index.jsx +6 -6
  59. package/dist/breadcrumbs/index.d.ts.map +1 -1
  60. package/dist/calendar/DateField.d.ts.map +1 -1
  61. package/dist/calendar/DateField.js +2 -2
  62. package/dist/calendar/DateField.js.map +1 -1
  63. package/dist/calendar/DateField.jsx +2 -2
  64. package/dist/calendar/DateField.jsx.map +1 -1
  65. package/dist/calendar/DatePicker.d.ts.map +1 -1
  66. package/dist/calendar/DatePicker.js +2 -2
  67. package/dist/calendar/DatePicker.js.map +1 -1
  68. package/dist/calendar/DatePicker.jsx +2 -2
  69. package/dist/calendar/DatePicker.jsx.map +1 -1
  70. package/dist/calendar/DateRangePicker.js +2 -2
  71. package/dist/calendar/DateRangePicker.jsx +2 -2
  72. package/dist/calendar/RangeCalendar.d.ts.map +1 -1
  73. package/dist/calendar/TimeField.d.ts.map +1 -1
  74. package/dist/calendar/TimeField.js +2 -2
  75. package/dist/calendar/TimeField.js.map +1 -1
  76. package/dist/calendar/TimeField.jsx +2 -2
  77. package/dist/calendar/TimeField.jsx.map +1 -1
  78. package/dist/calendar/index.js +5 -5
  79. package/dist/calendar/index.js.map +1 -1
  80. package/dist/calendar/index.jsx +5 -5
  81. package/dist/calendar/index.jsx.map +1 -1
  82. package/dist/checkbox/index.js +3 -3
  83. package/dist/checkbox/index.jsx +3 -3
  84. package/dist/combobox/index.js +2 -2
  85. package/dist/combobox/index.jsx +2 -2
  86. package/dist/dropzone/index.js +1 -1
  87. package/dist/dropzone/index.jsx +1 -1
  88. package/dist/form/index.d.ts.map +1 -1
  89. package/dist/icon/pixel-icons/PixelChartIcon.d.ts.map +1 -1
  90. package/dist/icon/pixel-icons/PixelChartIcon.js.map +1 -1
  91. package/dist/icon/pixel-icons/PixelChartIcon.jsx.map +1 -1
  92. package/dist/icon/pixel-icons/PixelCheckIcon.d.ts.map +1 -1
  93. package/dist/icon/pixel-icons/PixelCheckIcon.js.map +1 -1
  94. package/dist/icon/pixel-icons/PixelCheckIcon.jsx.map +1 -1
  95. package/dist/icon/pixel-icons/PixelChevronDownIcon.d.ts.map +1 -1
  96. package/dist/icon/pixel-icons/PixelChevronDownIcon.js.map +1 -1
  97. package/dist/icon/pixel-icons/PixelChevronDownIcon.jsx.map +1 -1
  98. package/dist/icon/pixel-icons/PixelChevronRightIcon.d.ts.map +1 -1
  99. package/dist/icon/pixel-icons/PixelChevronRightIcon.js.map +1 -1
  100. package/dist/icon/pixel-icons/PixelChevronRightIcon.jsx.map +1 -1
  101. package/dist/icon/pixel-icons/PixelClockIcon.d.ts.map +1 -1
  102. package/dist/icon/pixel-icons/PixelClockIcon.js.map +1 -1
  103. package/dist/icon/pixel-icons/PixelClockIcon.jsx.map +1 -1
  104. package/dist/icon/pixel-icons/PixelCodeIcon.d.ts.map +1 -1
  105. package/dist/icon/pixel-icons/PixelCodeIcon.js.map +1 -1
  106. package/dist/icon/pixel-icons/PixelCodeIcon.jsx.map +1 -1
  107. package/dist/icon/pixel-icons/PixelCommunityIcon.d.ts.map +1 -1
  108. package/dist/icon/pixel-icons/PixelCommunityIcon.js.map +1 -1
  109. package/dist/icon/pixel-icons/PixelCommunityIcon.jsx.map +1 -1
  110. package/dist/icon/pixel-icons/PixelCubeIcon.d.ts.map +1 -1
  111. package/dist/icon/pixel-icons/PixelCubeIcon.js.map +1 -1
  112. package/dist/icon/pixel-icons/PixelCubeIcon.jsx.map +1 -1
  113. package/dist/icon/pixel-icons/PixelFlameIcon.d.ts.map +1 -1
  114. package/dist/icon/pixel-icons/PixelFlameIcon.js.map +1 -1
  115. package/dist/icon/pixel-icons/PixelFlameIcon.jsx.map +1 -1
  116. package/dist/icon/pixel-icons/PixelHomeIcon.d.ts.map +1 -1
  117. package/dist/icon/pixel-icons/PixelHomeIcon.js.map +1 -1
  118. package/dist/icon/pixel-icons/PixelHomeIcon.jsx.map +1 -1
  119. package/dist/icon/pixel-icons/PixelLayoutIcon.d.ts.map +1 -1
  120. package/dist/icon/pixel-icons/PixelLayoutIcon.js.map +1 -1
  121. package/dist/icon/pixel-icons/PixelLayoutIcon.jsx.map +1 -1
  122. package/dist/icon/pixel-icons/PixelMessageIcon.d.ts.map +1 -1
  123. package/dist/icon/pixel-icons/PixelMessageIcon.js.map +1 -1
  124. package/dist/icon/pixel-icons/PixelMessageIcon.jsx.map +1 -1
  125. package/dist/icon/pixel-icons/PixelNavCommunityIcon.d.ts.map +1 -1
  126. package/dist/icon/pixel-icons/PixelNavCommunityIcon.js.map +1 -1
  127. package/dist/icon/pixel-icons/PixelNavCommunityIcon.jsx.map +1 -1
  128. package/dist/icon/pixel-icons/PixelNavExploreIcon.d.ts.map +1 -1
  129. package/dist/icon/pixel-icons/PixelNavExploreIcon.js.map +1 -1
  130. package/dist/icon/pixel-icons/PixelNavExploreIcon.jsx.map +1 -1
  131. package/dist/icon/pixel-icons/PixelNavLiveIcon.d.ts.map +1 -1
  132. package/dist/icon/pixel-icons/PixelNavLiveIcon.js.map +1 -1
  133. package/dist/icon/pixel-icons/PixelNavLiveIcon.jsx.map +1 -1
  134. package/dist/icon/pixel-icons/PixelNavPathwaysIcon.d.ts.map +1 -1
  135. package/dist/icon/pixel-icons/PixelNavPathwaysIcon.js.map +1 -1
  136. package/dist/icon/pixel-icons/PixelNavPathwaysIcon.jsx.map +1 -1
  137. package/dist/icon/pixel-icons/PixelNavPlaygroundIcon.d.ts.map +1 -1
  138. package/dist/icon/pixel-icons/PixelNavPlaygroundIcon.js.map +1 -1
  139. package/dist/icon/pixel-icons/PixelNavPlaygroundIcon.jsx.map +1 -1
  140. package/dist/icon/pixel-icons/PixelNavProjectsIcon.d.ts.map +1 -1
  141. package/dist/icon/pixel-icons/PixelNavProjectsIcon.js.map +1 -1
  142. package/dist/icon/pixel-icons/PixelNavProjectsIcon.jsx.map +1 -1
  143. package/dist/icon/pixel-icons/PixelNavReferenceIcon.d.ts.map +1 -1
  144. package/dist/icon/pixel-icons/PixelNavReferenceIcon.js.map +1 -1
  145. package/dist/icon/pixel-icons/PixelNavReferenceIcon.jsx.map +1 -1
  146. package/dist/icon/pixel-icons/PixelNavSettingsIcon.d.ts.map +1 -1
  147. package/dist/icon/pixel-icons/PixelNavSettingsIcon.js.map +1 -1
  148. package/dist/icon/pixel-icons/PixelNavSettingsIcon.jsx.map +1 -1
  149. package/dist/icon/pixel-icons/PixelNavTopicsIcon.d.ts.map +1 -1
  150. package/dist/icon/pixel-icons/PixelNavTopicsIcon.js.map +1 -1
  151. package/dist/icon/pixel-icons/PixelNavTopicsIcon.jsx.map +1 -1
  152. package/dist/icon/pixel-icons/PixelNotificationIcon.d.ts.map +1 -1
  153. package/dist/icon/pixel-icons/PixelNotificationIcon.js.map +1 -1
  154. package/dist/icon/pixel-icons/PixelNotificationIcon.jsx.map +1 -1
  155. package/dist/icon/pixel-icons/PixelPathwaysIcon.d.ts.map +1 -1
  156. package/dist/icon/pixel-icons/PixelPathwaysIcon.js.map +1 -1
  157. package/dist/icon/pixel-icons/PixelPathwaysIcon.jsx.map +1 -1
  158. package/dist/icon/pixel-icons/PixelPlayIcon.d.ts.map +1 -1
  159. package/dist/icon/pixel-icons/PixelPlayIcon.js.map +1 -1
  160. package/dist/icon/pixel-icons/PixelPlayIcon.jsx.map +1 -1
  161. package/dist/icon/pixel-icons/PixelSearchIcon.d.ts.map +1 -1
  162. package/dist/icon/pixel-icons/PixelSearchIcon.js.map +1 -1
  163. package/dist/icon/pixel-icons/PixelSearchIcon.jsx.map +1 -1
  164. package/dist/icon/pixel-icons/PixelSettingsIcon.d.ts.map +1 -1
  165. package/dist/icon/pixel-icons/PixelSettingsIcon.js.map +1 -1
  166. package/dist/icon/pixel-icons/PixelSettingsIcon.jsx.map +1 -1
  167. package/dist/icon/pixel-icons/PixelSparkleIcon.d.ts.map +1 -1
  168. package/dist/icon/pixel-icons/PixelSparkleIcon.js.map +1 -1
  169. package/dist/icon/pixel-icons/PixelSparkleIcon.jsx.map +1 -1
  170. package/dist/icon/pixel-icons/PixelTopicsIcon.d.ts.map +1 -1
  171. package/dist/icon/pixel-icons/PixelTopicsIcon.js.map +1 -1
  172. package/dist/icon/pixel-icons/PixelTopicsIcon.jsx.map +1 -1
  173. package/dist/icon/pixel-icons/PixelUserIcon.d.ts.map +1 -1
  174. package/dist/icon/pixel-icons/PixelUserIcon.js.map +1 -1
  175. package/dist/icon/pixel-icons/PixelUserIcon.jsx.map +1 -1
  176. package/dist/icon/pixel-icons/PixelZapIcon.d.ts.map +1 -1
  177. package/dist/icon/pixel-icons/PixelZapIcon.js.map +1 -1
  178. package/dist/icon/pixel-icons/PixelZapIcon.jsx.map +1 -1
  179. package/dist/inlinealert/index.js +6 -6
  180. package/dist/inlinealert/index.jsx +6 -6
  181. package/dist/labeledvalue/index.js +1 -1
  182. package/dist/labeledvalue/index.jsx +1 -1
  183. package/dist/layout/Flex.d.ts +2 -0
  184. package/dist/layout/Flex.d.ts.map +1 -1
  185. package/dist/link/index.d.ts.map +1 -1
  186. package/dist/link/index.js +1 -4
  187. package/dist/link/index.js.map +1 -1
  188. package/dist/link/index.jsx +1 -4
  189. package/dist/link/index.jsx.map +1 -1
  190. package/dist/listbox/index.js +3 -3
  191. package/dist/listbox/index.jsx +4 -4
  192. package/dist/menu/index.d.ts.map +1 -1
  193. package/dist/meter/index.d.ts.map +1 -1
  194. package/dist/meter/index.js +2 -2
  195. package/dist/meter/index.js.map +1 -1
  196. package/dist/meter/index.jsx +2 -2
  197. package/dist/meter/index.jsx.map +1 -1
  198. package/dist/notificationbadge/index.js +1 -1
  199. package/dist/notificationbadge/index.jsx +1 -1
  200. package/dist/picker/index.js +3 -3
  201. package/dist/picker/index.jsx +3 -3
  202. package/dist/popover/index.js +1 -1
  203. package/dist/popover/index.jsx +1 -1
  204. package/dist/progress/ProgressCircle.js +2 -2
  205. package/dist/progress/ProgressCircle.js.map +1 -1
  206. package/dist/progress/ProgressCircle.jsx +2 -2
  207. package/dist/progress/ProgressCircle.jsx.map +1 -1
  208. package/dist/progress-bar/index.js +4 -4
  209. package/dist/progress-bar/index.jsx +4 -4
  210. package/dist/radio/index.js +2 -2
  211. package/dist/radio/index.jsx +2 -2
  212. package/dist/searchfield/index.js +2 -2
  213. package/dist/searchfield/index.jsx +2 -2
  214. package/dist/segmentedcontrol/index.js +2 -5
  215. package/dist/segmentedcontrol/index.js.map +1 -1
  216. package/dist/segmentedcontrol/index.jsx +2 -5
  217. package/dist/segmentedcontrol/index.jsx.map +1 -1
  218. package/dist/select/index.js +3 -3
  219. package/dist/select/index.jsx +3 -3
  220. package/dist/selectboxgroup/index.js +1 -1
  221. package/dist/selectboxgroup/index.jsx +1 -1
  222. package/dist/statuslight/index.js +1 -1
  223. package/dist/statuslight/index.jsx +1 -1
  224. package/dist/steplist/index.js +5 -5
  225. package/dist/steplist/index.jsx +5 -5
  226. package/dist/style/glasselated-ramps.d.ts.map +1 -1
  227. package/dist/style/index.js +18 -9
  228. package/dist/style/index.js.map +1 -1
  229. package/dist/style/spectrum-theme.d.ts +7 -7
  230. package/dist/style/spectrum-theme.d.ts.map +1 -1
  231. package/dist/styles.css +1 -1
  232. package/dist/table/index.d.ts.map +1 -1
  233. package/dist/tag-group/index.js +10 -10
  234. package/dist/tag-group/index.js.map +1 -1
  235. package/dist/tag-group/index.jsx +10 -10
  236. package/dist/tag-group/index.jsx.map +1 -1
  237. package/dist/toolbar/index.d.ts.map +1 -1
  238. package/dist/toolbar/index.js.map +1 -1
  239. package/dist/toolbar/index.jsx.map +1 -1
  240. package/dist/tree/index.d.ts.map +1 -1
  241. package/dist/tree/index.js +5 -5
  242. package/dist/tree/index.js.map +1 -1
  243. package/dist/tree/index.jsx +5 -5
  244. package/dist/tree/index.jsx.map +1 -1
  245. package/dist/viviana-tokens.css +39 -12
  246. package/package.json +18 -5
  247. package/src/breadcrumbs/index.tsx +14 -7
  248. package/src/button/s2-action-button-styles.ts +8 -8
  249. package/src/button/s2-button-styles.ts +8 -8
  250. package/src/calendar/DateField.tsx +2 -6
  251. package/src/calendar/DatePicker.tsx +8 -1
  252. package/src/calendar/RangeCalendar.tsx +13 -7
  253. package/src/calendar/TimeField.tsx +2 -6
  254. package/src/calendar/index.tsx +4 -4
  255. package/src/form/index.tsx +5 -6
  256. package/src/icon/pixel-icons/PixelChartIcon.tsx +4 -1
  257. package/src/icon/pixel-icons/PixelCheckIcon.tsx +4 -1
  258. package/src/icon/pixel-icons/PixelChevronDownIcon.tsx +4 -1
  259. package/src/icon/pixel-icons/PixelChevronRightIcon.tsx +4 -1
  260. package/src/icon/pixel-icons/PixelClockIcon.tsx +4 -1
  261. package/src/icon/pixel-icons/PixelCodeIcon.tsx +4 -1
  262. package/src/icon/pixel-icons/PixelCommunityIcon.tsx +4 -1
  263. package/src/icon/pixel-icons/PixelCubeIcon.tsx +4 -1
  264. package/src/icon/pixel-icons/PixelFlameIcon.tsx +4 -1
  265. package/src/icon/pixel-icons/PixelHomeIcon.tsx +4 -1
  266. package/src/icon/pixel-icons/PixelLayoutIcon.tsx +4 -1
  267. package/src/icon/pixel-icons/PixelMessageIcon.tsx +4 -1
  268. package/src/icon/pixel-icons/PixelNavCommunityIcon.tsx +4 -1
  269. package/src/icon/pixel-icons/PixelNavExploreIcon.tsx +4 -1
  270. package/src/icon/pixel-icons/PixelNavLiveIcon.tsx +4 -1
  271. package/src/icon/pixel-icons/PixelNavPathwaysIcon.tsx +4 -1
  272. package/src/icon/pixel-icons/PixelNavPlaygroundIcon.tsx +4 -1
  273. package/src/icon/pixel-icons/PixelNavProjectsIcon.tsx +4 -1
  274. package/src/icon/pixel-icons/PixelNavReferenceIcon.tsx +4 -1
  275. package/src/icon/pixel-icons/PixelNavSettingsIcon.tsx +4 -1
  276. package/src/icon/pixel-icons/PixelNavTopicsIcon.tsx +4 -1
  277. package/src/icon/pixel-icons/PixelNotificationIcon.tsx +4 -1
  278. package/src/icon/pixel-icons/PixelPathwaysIcon.tsx +4 -1
  279. package/src/icon/pixel-icons/PixelPlayIcon.tsx +4 -1
  280. package/src/icon/pixel-icons/PixelSearchIcon.tsx +4 -1
  281. package/src/icon/pixel-icons/PixelSettingsIcon.tsx +4 -1
  282. package/src/icon/pixel-icons/PixelSparkleIcon.tsx +4 -1
  283. package/src/icon/pixel-icons/PixelTopicsIcon.tsx +4 -1
  284. package/src/icon/pixel-icons/PixelUserIcon.tsx +4 -1
  285. package/src/icon/pixel-icons/PixelZapIcon.tsx +4 -1
  286. package/src/layout/Flex.tsx +7 -0
  287. package/src/link/index.tsx +3 -1
  288. package/src/menu/index.tsx +1 -3
  289. package/src/meter/index.tsx +1 -3
  290. package/src/progress/ProgressCircle.tsx +1 -1
  291. package/src/segmentedcontrol/index.tsx +6 -6
  292. package/src/style/glasselated-ramps.ts +37 -33
  293. package/src/style/spectrum-theme.ts +22 -17
  294. package/src/table/index.tsx +1 -3
  295. package/src/tag-group/index.tsx +8 -8
  296. package/src/toolbar/index.tsx +4 -1
  297. package/src/tree/index.tsx +3 -11
  298. package/src/viviana-tokens.css +39 -12
@@ -88,7 +88,7 @@ const s2Button = function anonymous(props, overrides) {
88
88
  else if (props.variant === "secondary") if (props.isPressed) rules += " pQKeKoe151";
89
89
  else if (props.isFocusVisible) rules += " pQKeKoe151";
90
90
  else if (props.isHovered) rules += " pQKeKoe151";
91
- else rules += " pUUi0Fe151";
91
+ else rules += " pWQ7V3d151";
92
92
  else if (props.isPressed) rules += " pMwyHo151";
93
93
  else if (props.isFocusVisible) rules += " pMwyHo151";
94
94
  else if (props.isHovered) rules += " pMwyHo151";
@@ -182,10 +182,10 @@ const s2Button = function anonymous(props, overrides) {
182
182
  else if (props.isPressed) rules += " itq3xC151";
183
183
  else if (props.isHovered) rules += " itq3xC151";
184
184
  else rules += " i7xrik151";
185
- else if (props.variant === "accent") if (props.isFocusVisible) rules += " iJLwrv151";
186
- else if (props.isPressed) rules += " iJLwrv151";
187
- else if (props.isHovered) rules += " iJLwrv151";
188
- else rules += " iI9Ko6c151";
185
+ else if (props.variant === "accent") if (props.isFocusVisible) rules += " iKDgA3151";
186
+ else if (props.isPressed) rules += " iKDgA3151";
187
+ else if (props.isHovered) rules += " iKDgA3151";
188
+ else rules += " inhAeB151";
189
189
  else if (props.variant === "create") rules += " iruR7Yc151";
190
190
  else if (props.variant === "secondary") rules += " irHHOgb151";
191
191
  else if (props.variant === "primary") if (props.isPressed) rules += " iMwyHo151";
@@ -256,10 +256,10 @@ const s2Button = function anonymous(props, overrides) {
256
256
  else if (props.isPressed) rules += " -g_-gtq3xC151";
257
257
  else if (props.isHovered) rules += " -g_-gtq3xC151";
258
258
  else rules += " -g_-g7xrik151";
259
- else if (props.variant === "accent") if (props.isFocusVisible) rules += " -g_-gJLwrv151";
260
- else if (props.isPressed) rules += " -g_-gJLwrv151";
261
- else if (props.isHovered) rules += " -g_-gJLwrv151";
262
- else rules += " -g_-gI9Ko6c151";
259
+ else if (props.variant === "accent") if (props.isFocusVisible) rules += " -g_-gKDgA3151";
260
+ else if (props.isPressed) rules += " -g_-gKDgA3151";
261
+ else if (props.isHovered) rules += " -g_-gKDgA3151";
262
+ else rules += " -g_-gnhAeB151";
263
263
  else if (props.variant === "secondary") if (props.isFocusVisible) rules += " -g_-gG1H3ce151";
264
264
  else if (props.isPressed) rules += " -g_-gG1H3ce151";
265
265
  else if (props.isHovered) rules += " -g_-gG1H3ce151";
@@ -1 +1 @@
1
- {"version":3,"file":"LinkButton.js","names":[],"sources":["../../src/button/s2-button-styles.ts","../../src/button/LinkButton.tsx"],"sourcesContent":["// @ts-nocheck\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { baseColor, focusRing, lightDark, style } from \"../style\" with { type: \"macro\" };\nimport {\n control,\n getAllowedOverrides,\n staticColor,\n} from \"../s2-internal/style-utils\" with { type: \"macro\" };\nimport type { ButtonFillStyle, ButtonSize, ButtonVariant, StaticColor } from \"./types\";\n\nexport interface S2ButtonRenderState {\n isHovered?: boolean;\n isPressed?: boolean;\n isFocused?: boolean;\n isFocusVisible?: boolean;\n isDisabled?: boolean;\n isPending?: boolean;\n}\n\nexport interface S2ButtonStyleProps extends S2ButtonRenderState {\n variant: ButtonVariant;\n fillStyle: ButtonFillStyle;\n size: ButtonSize;\n staticColor?: StaticColor;\n isStaticColor: boolean;\n}\n\nexport const s2Button = style<S2ButtonStyleProps>(\n {\n ...focusRing(),\n ...staticColor(),\n ...control({ shape: \"default\", wrap: true, icon: true }),\n position: \"relative\",\n justifyContent: \"center\",\n textAlign: \"start\",\n /* The Glasselated register — 5px corner, `--edge-glass` rim, mono 400 — now\n * arrives with `control()` above, which reads it off the handoff's own button\n * (TerminalGlassLab.tsx:230 `btnBase` over design-handoff-v2.css:283\n * `--type-button`). It used to be spelled out here, which is exactly why Button\n * was the only control that converted. Size and padding still come from\n * `control()`'s S/M/L/XL ramp rather than the mock's single fixed 7px/14px.\n *\n * No blur: the handoff's buttons are opaque. Glass is a surface treatment. */\n userSelect: \"none\",\n width: \"fit\",\n textDecoration: \"none\",\n transition: \"default\",\n borderStyle: \"solid\",\n borderWidth: {\n fillStyle: {\n /* Filled buttons carry the edge too. Every button the handoff draws has one,\n * with no exception: accent `1px solid var(--interactive-fill)` over the same\n * fill (TerminalGlassLab.tsx:303-304), secondary `1px solid var(--border-subtle)`\n * (:315), create (:326), ghost over a transparent fill (:352), the well-filled\n * RUN (:365). `btnBase` (:230-235) declares only radius/padding/cursor/shadow,\n * so each variant spells its own edge — and every one of them does.\n *\n * This was 0, which is why `variant.create: 1` below was the only edge in the\n * component that ever drew. `control()` sets `boxSizing: \"border-box\"`, so the\n * S/M/L/XL height ramp is unchanged; only the content box narrows by 2px. */\n fill: 1,\n /* 1px, not Spectrum's 2px: the handoff's secondary and ghost buttons are\n * hairline-edged like everything else it draws (TerminalGlassLab.tsx:231),\n * and a 2px edge beside a 1px field reads as a different weight class. */\n outline: 1,\n },\n variant: {\n /* The handoff draws create with an explicit 1px rim in its own border token,\n * not the fill colour — the pale wash needs the edge to hold its shape against\n * a light surface. `variant` is applied after `fillStyle`, so this is 1px in\n * both fill and outline, which is what the handoff shows. */\n create: 1,\n },\n },\n borderColor: {\n variant: {\n /* `primary` deliberately stays on the neutral ramp. The handoff's filled CTA\n * draws its border in its own FILL colour — `1px solid var(--interactive-fill)`\n * over `background-color: var(--interactive-fill)` (TerminalGlassLab.tsx:303-304)\n * — so gray-800 tracking the `baseColor(\"neutral\")` fill below is already the\n * right idiom. A hairline here would break that fill/edge pairing. */\n primary: baseColor(\"gray-800\"),\n /* `var(--border-subtle)` — the handoff's secondary (TerminalGlassLab.tsx:315)\n * and ghost (:352) buttons are both hairlines in it. gray-300 is a solid mid-gray\n * (#c5d0de light, #67717d dark), a full rule weight rather than an edge.\n *\n * Plain string, not `baseColor()`: --border-subtle has no ramp to step along, so\n * this intentionally drops the hover/press border steps `baseColor()` was emitting\n * — the handoff declares no hover border change on any button. The sibling\n * `isStaticColor` branch below stays on `baseColor(\"transparent-overlay-300\")`\n * on purpose; that is the over-imagery case and keeps its overlay ramp. */\n secondary: \"border-subtle\",\n create: \"create-border\",\n },\n /* Every FILLED variant needs its border colour spelled out HERE, under\n * `fillStyle.fill.variant`. The earlier note claimed variants with no entry\n * \"fall through to `variant` above\" the way `borderWidth` does — that is\n * WRONG for a colour value, and it shipped Today (secondary-fill) and Create\n * (create-fill) with a black rim. The reason `borderWidth` falls through is\n * that BOTH its keys (`fillStyle.fill` and `variant.create`) name a width, so\n * a fill button always has one to land on. `borderColor` does not: once the\n * higher-priority `fillStyle` key matches (fillStyle === \"fill\"), it OWNS the\n * result, and a fill variant with no leaf in this sub-map resolves to nothing\n * from the winning branch — it does NOT consult the sibling `variant` map\n * below. The only value left is the `forcedColors` fallback, `ButtonBorder`,\n * which paints black in a normal viewport. So each fill variant is listed\n * explicitly, mirroring the proven accent path stop for stop.\n *\n * The `variant` map below is kept for the OUTLINE variants (Ghost), which do\n * not match `fillStyle.fill` and so still read secondary/create from it.\n *\n * accent/negative border the button in the same token as their fill\n * (handoff :303-304), so they mirror the `backgroundColor` map stop for stop,\n * hover included. secondary and create carry no hover-border step (the\n * handoff declares none), so each is a flat token: `border-subtle` for the\n * secondary hairline, `create-border` for the create rim (the pale wash needs\n * the edge to hold its shape). primary tracks its neutral fill in gray-800,\n * matching the `variant.primary` idiom. Placed before\n * `isDisabled`/`isStaticColor`/`forcedColors` so those still win. */\n fillStyle: {\n fill: {\n variant: {\n primary: baseColor(\"gray-800\"),\n secondary: \"border-subtle\",\n create: \"create-border\",\n accent: {\n default: lightDark(\"accent-900\", \"accent-700\"),\n isHovered: lightDark(\"accent-1000\", \"accent-800\"),\n isPressed: lightDark(\"accent-1000\", \"accent-800\"),\n isFocusVisible: lightDark(\"accent-1000\", \"accent-800\"),\n },\n negative: {\n default: lightDark(\"negative-900\", \"negative-700\"),\n isHovered: lightDark(\"negative-1000\", \"negative-600\"),\n isPressed: lightDark(\"negative-1000\", \"negative-600\"),\n isFocusVisible: lightDark(\"negative-1000\", \"negative-600\"),\n },\n /* warning/success are negative's status counterparts: the same saturated-fill\n * idiom on the warm (notice -> amber) and success (positive -> green) channels.\n * Border mirrors the fill stop for stop, exactly as accent/negative do. */\n warning: {\n default: lightDark(\"notice-900\", \"notice-700\"),\n isHovered: lightDark(\"notice-1000\", \"notice-600\"),\n isPressed: lightDark(\"notice-1000\", \"notice-600\"),\n isFocusVisible: lightDark(\"notice-1000\", \"notice-600\"),\n },\n success: {\n default: lightDark(\"positive-900\", \"positive-700\"),\n isHovered: lightDark(\"positive-1000\", \"positive-600\"),\n isPressed: lightDark(\"positive-1000\", \"positive-600\"),\n isFocusVisible: lightDark(\"positive-1000\", \"positive-600\"),\n },\n },\n },\n },\n isDisabled: \"disabled\",\n isStaticColor: {\n variant: {\n primary: baseColor(\"transparent-overlay-800\"),\n secondary: baseColor(\"transparent-overlay-300\"),\n },\n isDisabled: \"transparent-overlay-300\",\n },\n forcedColors: {\n default: \"ButtonBorder\",\n isHovered: \"Highlight\",\n isDisabled: \"GrayText\",\n },\n },\n backgroundColor: {\n fillStyle: {\n fill: {\n variant: {\n primary: baseColor(\"neutral\"),\n secondary: {\n /* `var(--btn-secondary-bg)` (TerminalGlassLab.tsx:314) — #e9eff6 in light,\n * `var(--surface-raised)` = rgb(51,58,68) in dark (design-handoff-v2.css:73,\n * :196, :179). No pre-existing token covered both schemes: `raised` is\n * #ffffff in light and `well` is #0a0f14 in dark, so each matches only one.\n * The backgroundColor map therefore gained a `btn-secondary` entry pointing\n * at the variable the island already ships. gray-100 (#e5eaf1 / #43474d) was\n * a step off in both schemes and lost the slate cast in dark.\n *\n * The hover/press/focus stops stay on gray-200 (#dbe3ed / #555c64). Against\n * the new resting fill that darkens in light and lightens in dark, which is\n * the correct direction in each scheme — hover moves toward contrast with\n * the page, so it necessarily reverses between schemes. --surface-hover is\n * NOT usable here: it is an alpha wash (rgba(255,255,255,.75) light,\n * rgba(58,62,70,.48) dark) meant to composite over a surface, and the macro\n * bakes fills with no knowledge of the backdrop — see the gray-100/200 note\n * in style/glasselated-ramps.ts. As a replacement fill it would turn an\n * opaque button translucent on hover and, composited over the panel, invert\n * the step in both schemes. */\n default: \"btn-secondary\",\n isHovered: \"gray-200\",\n isPressed: \"gray-200\",\n isFocusVisible: \"gray-200\",\n },\n accent: {\n default: lightDark(\"accent-900\", \"accent-700\"),\n isHovered: lightDark(\"accent-1000\", \"accent-800\"),\n isPressed: lightDark(\"accent-1000\", \"accent-800\"),\n isFocusVisible: lightDark(\"accent-1000\", \"accent-800\"),\n },\n negative: {\n default: lightDark(\"negative-900\", \"negative-700\"),\n isHovered: lightDark(\"negative-1000\", \"negative-600\"),\n isPressed: lightDark(\"negative-1000\", \"negative-600\"),\n isFocusVisible: lightDark(\"negative-1000\", \"negative-600\"),\n },\n /* warning/success fills mirror negative on the warm (notice -> amber) and success\n * (positive -> green) channels. The green ramp is L-solved to carry the same\n * white-ink contrast as amber, so all three status fills clear AA identically\n * (see style/glasselated-ramps.ts). */\n warning: {\n default: lightDark(\"notice-900\", \"notice-700\"),\n isHovered: lightDark(\"notice-1000\", \"notice-600\"),\n isPressed: lightDark(\"notice-1000\", \"notice-600\"),\n isFocusVisible: lightDark(\"notice-1000\", \"notice-600\"),\n },\n success: {\n default: lightDark(\"positive-900\", \"positive-700\"),\n isHovered: lightDark(\"positive-1000\", \"positive-600\"),\n isPressed: lightDark(\"positive-1000\", \"positive-600\"),\n isFocusVisible: lightDark(\"positive-1000\", \"positive-600\"),\n },\n /* The create CTA does not follow the semantic-fill pattern above. Those step\n * along a ramp for hover; create-bg has no ramp, so the deeper wash is a named\n * token. Both schemes are declared in the token itself, hence no lightDark(). */\n create: {\n default: \"create-bg\",\n isHovered: \"create-bg-deep\",\n isPressed: \"create-bg-deep\",\n isFocusVisible: \"create-bg-deep\",\n },\n },\n isDisabled: \"disabled\",\n },\n outline: {\n default: \"transparent\",\n isHovered: \"gray-100\",\n isPressed: \"gray-100\",\n isFocusVisible: \"gray-100\",\n isDisabled: \"transparent\",\n },\n },\n isStaticColor: {\n fillStyle: {\n fill: {\n variant: {\n primary: baseColor(\"transparent-overlay-800\"),\n secondary: baseColor(\"transparent-overlay-100\"),\n },\n isDisabled: \"transparent-overlay-100\",\n },\n outline: {\n default: \"transparent\",\n isHovered: \"transparent-overlay-100\",\n isPressed: \"transparent-overlay-100\",\n isFocusVisible: \"transparent-overlay-100\",\n isDisabled: \"transparent\",\n },\n },\n },\n forcedColors: {\n fillStyle: {\n fill: {\n default: \"ButtonText\",\n isHovered: \"Highlight\",\n isDisabled: \"GrayText\",\n },\n outline: \"ButtonFace\",\n },\n },\n },\n color: {\n fillStyle: {\n fill: {\n variant: {\n primary: \"gray-25\",\n secondary: baseColor(\"neutral\"),\n accent: \"white\",\n negative: \"white\",\n /* warning/success carry white ink on their saturated fills, like accent/negative.\n * The fill stops (notice/positive -900/-700) are pinned >= 4.5:1 on white. */\n warning: \"white\",\n success: \"white\",\n /* Dark ink on a pale fill — the inverse of every Spectrum variant. #7a5600 on\n * #ffedb0 is 6.4:1, so this clears AA comfortably in both schemes. */\n create: \"create-ink\",\n },\n isDisabled: \"disabled\",\n },\n outline: {\n default: baseColor(\"neutral\"),\n variant: {\n /* Ghost is the register's outlined SECONDARY, and the handoff inks it in the\n * MUTED slate, not the strong neutral its filled twin (Today) wears: the\n * `Ghost` button is drawn `color: var(--text-secondary)` on a transparent fill\n * inside `--border-subtle` (TerminalGlassLab.tsx:273-277), whereas the filled\n * secondary is `--text-primary`. `--text-secondary` is pinned to `gray-500` in\n * both schemes (glasselated-ramps.ts:114,855 — #64748b light / #9aa0a8 dark),\n * so a secondary+outline button de-emphasises its label exactly the way the\n * register draws it. Every other outline variant keeps `outline.default`'s\n * neutral ink; only secondary steps down. */\n secondary: baseColor(\"gray-500\"),\n /* create-ink is near-black in the dark scheme — legible ON the pale fill, not\n * against a dark page. Outline drops the fill, so the dark scheme takes the\n * fill colour as its ink instead. */\n create: lightDark(\"create-ink\", \"create-bg\"),\n },\n isDisabled: \"disabled\",\n },\n },\n isStaticColor: {\n fillStyle: {\n fill: {\n variant: {\n primary: \"auto\",\n secondary: {\n default: \"transparent-overlay-1000\",\n isHovered: \"transparent-overlay-1000\",\n isFocusVisible: \"transparent-overlay-1000\",\n isPressed: \"transparent-overlay-1000\",\n },\n },\n },\n outline: {\n default: {\n default: \"transparent-overlay-1000\",\n isHovered: \"transparent-overlay-1000\",\n isFocusVisible: \"transparent-overlay-1000\",\n isPressed: \"transparent-overlay-1000\",\n },\n },\n },\n isDisabled: \"transparent-overlay-400\",\n },\n forcedColors: {\n fillStyle: {\n fill: {\n default: \"ButtonFace\",\n isDisabled: \"HighlightText\",\n },\n outline: {\n default: \"ButtonText\",\n isDisabled: \"GrayText\",\n },\n },\n },\n },\n \"--iconPrimary\": {\n type: \"fill\",\n value: \"currentColor\",\n },\n outlineColor: {\n default: \"focus-ring\",\n isStaticColor: \"transparent-overlay-1000\",\n forcedColors: \"Highlight\",\n },\n forcedColorAdjust: \"none\",\n disableTapHighlight: true,\n },\n getAllowedOverrides(),\n);\n\nexport const s2ButtonText = style<{ isProgressVisible?: boolean }>({\n paddingY: \"--labelPadding\",\n order: 1,\n visibility: {\n isProgressVisible: \"hidden\",\n },\n});\n\nexport const s2ButtonPendingIndicator = style<{\n isPending?: boolean;\n isProgressVisible?: boolean;\n}>({\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n visibility: {\n default: \"hidden\",\n isProgressVisible: \"visible\",\n },\n});\n","import {\n children as resolveChildren,\n mergeProps,\n splitProps,\n useContext,\n type JSX,\n} from \"solid-js\";\nimport {\n DialogTriggerContext,\n Link as HeadlessLink,\n PopoverTriggerContext,\n type LinkProps as HeadlessLinkProps,\n type LinkRenderProps,\n} from \"@proyecto-viviana/solidaria-components\";\nimport type { StyleString } from \"../style\";\nimport { fontRelative, style } from \"../style\" with { type: \"macro\" };\nimport { IconContext } from \"../icon/spectrum-icon\";\nimport { centerBaseline } from \"../icon/center-baseline\";\nimport { SkeletonContext } from \"../skeleton\";\nimport { TextContext } from \"../text\";\nimport { useProviderProps } from \"../provider\";\nimport { pressScale } from \"../pressScale\";\nimport { useLinkButtonContext } from \"./context\";\nimport { s2Button, s2ButtonText } from \"./s2-button-styles\";\nimport {\n getSlottedContextProps,\n mergeContextRefs,\n mergeContextStyles,\n mergeContextUnsafeStyle,\n type RefLike,\n} from \"./spectrum-context\";\nimport type { ButtonFillStyle, ButtonSize, ButtonVariant, StaticColor } from \"./types\";\nimport { getSingleTextChild } from \"./text-child\";\n\ntype StyledLinkButtonBaseProps = Omit<\n HeadlessLinkProps,\n \"class\" | \"style\" | \"children\" | \"onClick\"\n>;\n\nexport interface LinkButtonProps extends StyledLinkButtonBaseProps {\n /** The content to display in the LinkButton. */\n children?: JSX.Element;\n /** The visual style of the LinkButton. */\n variant?: ButtonVariant;\n /** The background style of the LinkButton. */\n fillStyle?: ButtonFillStyle;\n /** The size of the LinkButton. */\n size?: ButtonSize;\n /** The static color style to apply. Useful when the LinkButton appears over a color background. */\n staticColor?: StaticColor;\n /** Spectrum-defined generated classes. */\n styles?: StyleString;\n /** Additional CSS class name. Use only as a last resort. */\n UNSAFE_className?: string;\n /** Additional inline styles. Use only as a last resort. */\n UNSAFE_style?: JSX.CSSProperties;\n}\n\n/**\n * A LinkButton navigates like a link while using the S2 Button visual treatment.\n */\nexport function LinkButton(props: LinkButtonProps): JSX.Element {\n const providerProps = useProviderProps(props);\n const contextProps = getSlottedContextProps(useLinkButtonContext(), props.slot);\n const defaultProps: Partial<LinkButtonProps> = {\n variant: \"primary\",\n size: \"M\",\n fillStyle: \"fill\",\n };\n const merged = mergeProps(defaultProps, providerProps, contextProps ?? {}, props);\n const [local, headlessProps] = splitProps(merged, [\n \"variant\",\n \"fillStyle\",\n \"size\",\n \"staticColor\",\n \"styles\",\n \"UNSAFE_className\",\n \"UNSAFE_style\",\n \"children\",\n \"ref\",\n ]);\n\n const variant = (): ButtonVariant => local.variant ?? \"primary\";\n const fillStyle = (): ButtonFillStyle => local.fillStyle ?? \"fill\";\n const size = (): ButtonSize => local.size ?? \"M\";\n const mergedStyles = () => mergeContextStyles(contextProps?.styles, props.styles);\n const mergedUnsafeStyle = () =>\n mergeContextUnsafeStyle(contextProps?.UNSAFE_style, props.UNSAFE_style);\n const dialogTriggerContext = useContext(DialogTriggerContext);\n const popoverTriggerContext = useContext(PopoverTriggerContext);\n let linkElement: HTMLAnchorElement | undefined;\n const assignLinkRefs = mergeContextRefs(\n (contextProps as { ref?: RefLike<HTMLElement> } | null)?.ref,\n props.ref,\n );\n const isOverlayTriggerOpen = () =>\n !!linkElement &&\n ((dialogTriggerContext?.triggerRef() === linkElement && dialogTriggerContext.state.isOpen()) ||\n (popoverTriggerContext?.triggerRef() === linkElement &&\n popoverTriggerContext.state.isOpen()));\n\n const getClassName = (renderProps: LinkRenderProps): string =>\n [\n local.UNSAFE_className,\n s2Button(\n {\n isHovered: renderProps.isHovered || isOverlayTriggerOpen(),\n isPressed: renderProps.isPressed,\n isFocused: renderProps.isFocused,\n isFocusVisible: renderProps.isFocusVisible,\n isDisabled: renderProps.isDisabled,\n isPending: false,\n variant: variant(),\n fillStyle: fillStyle(),\n size: size(),\n staticColor: local.staticColor,\n isStaticColor: !!local.staticColor,\n },\n mergedStyles(),\n ),\n ]\n .filter(Boolean)\n .join(\" \");\n\n const getStyle = (renderProps: LinkRenderProps): JSX.CSSProperties =>\n pressScale(() => linkElement, mergedUnsafeStyle())(renderProps);\n\n function LinkButtonContent() {\n const iconContextValue = {\n slot: \"icon\",\n render: centerBaseline({ slot: \"icon\", styles: style({ order: 0 }) }),\n styles: style({\n size: fontRelative(20),\n marginStart: \"--iconMargin\",\n flexShrink: 0,\n }),\n };\n const textContextValue = {\n styles: () => s2ButtonText({ isProgressVisible: false }),\n \"data-rsp-slot\": \"text\",\n };\n\n function ResolvedContent() {\n const resolvedChildren = resolveChildren(() => local.children);\n const content = () => resolvedChildren();\n const textChild = () => getSingleTextChild(content());\n\n return textChild() !== undefined ? (\n <span class={s2ButtonText({ isProgressVisible: false })} data-rsp-slot=\"text\">\n {textChild()}\n </span>\n ) : (\n content()\n );\n }\n\n return (\n <>\n <SkeletonContext.Provider value={null}>\n <TextContext.Provider value={textContextValue}>\n <IconContext.Provider value={iconContextValue}>\n <ResolvedContent />\n </IconContext.Provider>\n </TextContext.Provider>\n </SkeletonContext.Provider>\n </>\n );\n }\n\n return (\n <HeadlessLink\n {...headlessProps}\n class={getClassName}\n style={getStyle}\n ref={(element: HTMLElement) => {\n linkElement = element as HTMLAnchorElement;\n assignLinkRefs(element);\n }}\n >\n <LinkButtonContent />\n </HeadlessLink>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"LinkButton.js","names":[],"sources":["../../src/button/s2-button-styles.ts","../../src/button/LinkButton.tsx"],"sourcesContent":["// @ts-nocheck\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { baseColor, focusRing, lightDark, style } from \"../style\" with { type: \"macro\" };\nimport {\n control,\n getAllowedOverrides,\n staticColor,\n} from \"../s2-internal/style-utils\" with { type: \"macro\" };\nimport type { ButtonFillStyle, ButtonSize, ButtonVariant, StaticColor } from \"./types\";\n\nexport interface S2ButtonRenderState {\n isHovered?: boolean;\n isPressed?: boolean;\n isFocused?: boolean;\n isFocusVisible?: boolean;\n isDisabled?: boolean;\n isPending?: boolean;\n}\n\nexport interface S2ButtonStyleProps extends S2ButtonRenderState {\n variant: ButtonVariant;\n fillStyle: ButtonFillStyle;\n size: ButtonSize;\n staticColor?: StaticColor;\n isStaticColor: boolean;\n}\n\nexport const s2Button = style<S2ButtonStyleProps>(\n {\n ...focusRing(),\n ...staticColor(),\n ...control({ shape: \"default\", wrap: true, icon: true }),\n position: \"relative\",\n justifyContent: \"center\",\n textAlign: \"start\",\n /* The Glasselated register — 5px corner, `--edge-glass` rim, mono 400 — now\n * arrives with `control()` above, which reads it off the handoff's own button\n * (TerminalGlassLab.tsx:230 `btnBase` over design-handoff-v2.css:283\n * `--type-button`). It used to be spelled out here, which is exactly why Button\n * was the only control that converted. Size and padding still come from\n * `control()`'s S/M/L/XL ramp rather than the mock's single fixed 7px/14px.\n *\n * No blur: the handoff's buttons are opaque. Glass is a surface treatment. */\n userSelect: \"none\",\n width: \"fit\",\n textDecoration: \"none\",\n transition: \"default\",\n borderStyle: \"solid\",\n borderWidth: {\n fillStyle: {\n /* Filled buttons carry the edge too. Every button the handoff draws has one,\n * with no exception: accent `1px solid var(--interactive-fill)` over the same\n * fill (TerminalGlassLab.tsx:303-304), secondary `1px solid var(--border-subtle)`\n * (:315), create (:326), ghost over a transparent fill (:352), the well-filled\n * RUN (:365). `btnBase` (:230-235) declares only radius/padding/cursor/shadow,\n * so each variant spells its own edge — and every one of them does.\n *\n * This was 0, which is why `variant.create: 1` below was the only edge in the\n * component that ever drew. `control()` sets `boxSizing: \"border-box\"`, so the\n * S/M/L/XL height ramp is unchanged; only the content box narrows by 2px. */\n fill: 1,\n /* 1px, not Spectrum's 2px: the handoff's secondary and ghost buttons are\n * hairline-edged like everything else it draws (TerminalGlassLab.tsx:231),\n * and a 2px edge beside a 1px field reads as a different weight class. */\n outline: 1,\n },\n variant: {\n /* The handoff draws create with an explicit 1px rim in its own border token,\n * not the fill colour — the pale wash needs the edge to hold its shape against\n * a light surface. `variant` is applied after `fillStyle`, so this is 1px in\n * both fill and outline, which is what the handoff shows. */\n create: 1,\n },\n },\n borderColor: {\n variant: {\n /* `primary` deliberately stays on the neutral ramp. The handoff's filled CTA\n * draws its border in its own FILL colour — `1px solid var(--interactive-fill)`\n * over `background-color: var(--interactive-fill)` (TerminalGlassLab.tsx:303-304)\n * — so gray-800 tracking the `baseColor(\"neutral\")` fill below is already the\n * right idiom. A hairline here would break that fill/edge pairing. */\n primary: baseColor(\"gray-800\"),\n /* `var(--border-subtle)` — the handoff's secondary (TerminalGlassLab.tsx:315)\n * and ghost (:352) buttons are both hairlines in it. gray-300 is a solid mid-gray\n * (#c5d0de light, #67717d dark), a full rule weight rather than an edge.\n *\n * Plain string, not `baseColor()`: --border-subtle has no ramp to step along, so\n * this intentionally drops the hover/press border steps `baseColor()` was emitting\n * — the handoff declares no hover border change on any button. The sibling\n * `isStaticColor` branch below stays on `baseColor(\"transparent-overlay-300\")`\n * on purpose; that is the over-imagery case and keeps its overlay ramp. */\n secondary: \"border-subtle\",\n create: \"create-border\",\n },\n /* Every FILLED variant needs its border colour spelled out HERE, under\n * `fillStyle.fill.variant`. The earlier note claimed variants with no entry\n * \"fall through to `variant` above\" the way `borderWidth` does — that is\n * WRONG for a colour value, and it shipped Today (secondary-fill) and Create\n * (create-fill) with a black rim. The reason `borderWidth` falls through is\n * that BOTH its keys (`fillStyle.fill` and `variant.create`) name a width, so\n * a fill button always has one to land on. `borderColor` does not: once the\n * higher-priority `fillStyle` key matches (fillStyle === \"fill\"), it OWNS the\n * result, and a fill variant with no leaf in this sub-map resolves to nothing\n * from the winning branch — it does NOT consult the sibling `variant` map\n * below. The only value left is the `forcedColors` fallback, `ButtonBorder`,\n * which paints black in a normal viewport. So each fill variant is listed\n * explicitly, mirroring the proven accent path stop for stop.\n *\n * The `variant` map below is kept for the OUTLINE variants (Ghost), which do\n * not match `fillStyle.fill` and so still read secondary/create from it.\n *\n * accent/negative border the button in the same token as their fill\n * (handoff :303-304), so they mirror the `backgroundColor` map stop for stop,\n * hover included. secondary and create carry no hover-border step (the\n * handoff declares none), so each is a flat token: `border-subtle` for the\n * secondary hairline, `create-border` for the create rim (the pale wash needs\n * the edge to hold its shape). primary tracks its neutral fill in gray-800,\n * matching the `variant.primary` idiom. Placed before\n * `isDisabled`/`isStaticColor`/`forcedColors` so those still win. */\n fillStyle: {\n fill: {\n variant: {\n primary: baseColor(\"gray-800\"),\n secondary: \"border-subtle\",\n create: \"create-border\",\n accent: {\n default: \"interactive-fill\",\n isHovered: lightDark(\"accent-1000\", \"accent-600\"),\n isPressed: lightDark(\"accent-1000\", \"accent-600\"),\n isFocusVisible: lightDark(\"accent-1000\", \"accent-600\"),\n },\n negative: {\n default: lightDark(\"negative-900\", \"negative-700\"),\n isHovered: lightDark(\"negative-1000\", \"negative-600\"),\n isPressed: lightDark(\"negative-1000\", \"negative-600\"),\n isFocusVisible: lightDark(\"negative-1000\", \"negative-600\"),\n },\n /* warning/success are negative's status counterparts: the same saturated-fill\n * idiom on the warm (notice -> amber) and success (positive -> green) channels.\n * Border mirrors the fill stop for stop, exactly as accent/negative do. */\n warning: {\n default: lightDark(\"notice-900\", \"notice-700\"),\n isHovered: lightDark(\"notice-1000\", \"notice-600\"),\n isPressed: lightDark(\"notice-1000\", \"notice-600\"),\n isFocusVisible: lightDark(\"notice-1000\", \"notice-600\"),\n },\n success: {\n default: lightDark(\"positive-900\", \"positive-700\"),\n isHovered: lightDark(\"positive-1000\", \"positive-600\"),\n isPressed: lightDark(\"positive-1000\", \"positive-600\"),\n isFocusVisible: lightDark(\"positive-1000\", \"positive-600\"),\n },\n },\n },\n },\n isDisabled: \"disabled\",\n isStaticColor: {\n variant: {\n primary: baseColor(\"transparent-overlay-800\"),\n secondary: baseColor(\"transparent-overlay-300\"),\n },\n isDisabled: \"transparent-overlay-300\",\n },\n forcedColors: {\n default: \"ButtonBorder\",\n isHovered: \"Highlight\",\n isDisabled: \"GrayText\",\n },\n },\n backgroundColor: {\n fillStyle: {\n fill: {\n variant: {\n primary: baseColor(\"neutral\"),\n secondary: {\n /* `var(--btn-secondary-bg)` (TerminalGlassLab.tsx:314) — #e9eff6 in light,\n * `var(--surface-raised)` = rgb(51,58,68) in dark (design-handoff-v2.css:73,\n * :196, :179). No pre-existing token covered both schemes: `raised` is\n * #ffffff in light and `well` is #0a0f14 in dark, so each matches only one.\n * The backgroundColor map therefore gained a `btn-secondary` entry pointing\n * at the variable the island already ships. gray-100 (#e5eaf1 / #43474d) was\n * a step off in both schemes and lost the slate cast in dark.\n *\n * The hover/press/focus stops stay on gray-200 (#dbe3ed / #555c64). Against\n * the new resting fill that darkens in light and lightens in dark, which is\n * the correct direction in each scheme — hover moves toward contrast with\n * the page, so it necessarily reverses between schemes. --surface-hover is\n * NOT usable here: it is an alpha wash (rgba(255,255,255,.75) light,\n * rgba(58,62,70,.48) dark) meant to composite over a surface, and the macro\n * bakes fills with no knowledge of the backdrop — see the gray-100/200 note\n * in style/glasselated-ramps.ts. As a replacement fill it would turn an\n * opaque button translucent on hover and, composited over the panel, invert\n * the step in both schemes. */\n default: \"btn-secondary\",\n isHovered: \"gray-200\",\n isPressed: \"gray-200\",\n isFocusVisible: \"gray-200\",\n },\n accent: {\n default: \"interactive-fill\",\n isHovered: lightDark(\"accent-1000\", \"accent-600\"),\n isPressed: lightDark(\"accent-1000\", \"accent-600\"),\n isFocusVisible: lightDark(\"accent-1000\", \"accent-600\"),\n },\n negative: {\n default: lightDark(\"negative-900\", \"negative-700\"),\n isHovered: lightDark(\"negative-1000\", \"negative-600\"),\n isPressed: lightDark(\"negative-1000\", \"negative-600\"),\n isFocusVisible: lightDark(\"negative-1000\", \"negative-600\"),\n },\n /* warning/success fills mirror negative on the warm (notice -> amber) and success\n * (positive -> green) channels. The green ramp is L-solved to carry the same\n * white-ink contrast as amber, so all three status fills clear AA identically\n * (see style/glasselated-ramps.ts). */\n warning: {\n default: lightDark(\"notice-900\", \"notice-700\"),\n isHovered: lightDark(\"notice-1000\", \"notice-600\"),\n isPressed: lightDark(\"notice-1000\", \"notice-600\"),\n isFocusVisible: lightDark(\"notice-1000\", \"notice-600\"),\n },\n success: {\n default: lightDark(\"positive-900\", \"positive-700\"),\n isHovered: lightDark(\"positive-1000\", \"positive-600\"),\n isPressed: lightDark(\"positive-1000\", \"positive-600\"),\n isFocusVisible: lightDark(\"positive-1000\", \"positive-600\"),\n },\n /* The create CTA does not follow the semantic-fill pattern above. Those step\n * along a ramp for hover; create-bg has no ramp, so the deeper wash is a named\n * token. Both schemes are declared in the token itself, hence no lightDark(). */\n create: {\n default: \"create-bg\",\n isHovered: \"create-bg-deep\",\n isPressed: \"create-bg-deep\",\n isFocusVisible: \"create-bg-deep\",\n },\n },\n isDisabled: \"disabled\",\n },\n outline: {\n default: \"transparent\",\n isHovered: \"gray-100\",\n isPressed: \"gray-100\",\n isFocusVisible: \"gray-100\",\n isDisabled: \"transparent\",\n },\n },\n isStaticColor: {\n fillStyle: {\n fill: {\n variant: {\n primary: baseColor(\"transparent-overlay-800\"),\n secondary: baseColor(\"transparent-overlay-100\"),\n },\n isDisabled: \"transparent-overlay-100\",\n },\n outline: {\n default: \"transparent\",\n isHovered: \"transparent-overlay-100\",\n isPressed: \"transparent-overlay-100\",\n isFocusVisible: \"transparent-overlay-100\",\n isDisabled: \"transparent\",\n },\n },\n },\n forcedColors: {\n fillStyle: {\n fill: {\n default: \"ButtonText\",\n isHovered: \"Highlight\",\n isDisabled: \"GrayText\",\n },\n outline: \"ButtonFace\",\n },\n },\n },\n color: {\n fillStyle: {\n fill: {\n variant: {\n primary: \"gray-25\",\n secondary: baseColor(\"neutral\"),\n accent: \"white\",\n negative: \"white\",\n /* warning/success carry white ink on their saturated fills, like accent/negative.\n * The fill stops (notice/positive -900/-700) are pinned >= 4.5:1 on white. */\n warning: \"white\",\n success: \"white\",\n /* Dark ink on a pale fill — the inverse of every Spectrum variant. #7a5600 on\n * #ffedb0 is 6.4:1, so this clears AA comfortably in both schemes. */\n create: \"create-ink\",\n },\n isDisabled: \"disabled\",\n },\n outline: {\n default: baseColor(\"neutral\"),\n variant: {\n /* Ghost is the register's outlined SECONDARY, and the handoff inks it in the\n * MUTED slate, not the strong neutral its filled twin (Today) wears: the\n * `Ghost` button is drawn `color: var(--text-secondary)` on a transparent fill\n * inside `--border-subtle` (TerminalGlassLab.tsx:273-277), whereas the filled\n * secondary is `--text-primary`. `--text-secondary` is pinned to `gray-500` in\n * both schemes (glasselated-ramps.ts:114,855 — #64748b light / #9aa0a8 dark),\n * so a secondary+outline button de-emphasises its label exactly the way the\n * register draws it. Every other outline variant keeps `outline.default`'s\n * neutral ink; only secondary steps down. */\n secondary: baseColor(\"gray-500\"),\n /* create-ink is near-black in the dark scheme — legible ON the pale fill, not\n * against a dark page. Outline drops the fill, so the dark scheme takes the\n * fill colour as its ink instead. */\n create: lightDark(\"create-ink\", \"create-bg\"),\n },\n isDisabled: \"disabled\",\n },\n },\n isStaticColor: {\n fillStyle: {\n fill: {\n variant: {\n primary: \"auto\",\n secondary: {\n default: \"transparent-overlay-1000\",\n isHovered: \"transparent-overlay-1000\",\n isFocusVisible: \"transparent-overlay-1000\",\n isPressed: \"transparent-overlay-1000\",\n },\n },\n },\n outline: {\n default: {\n default: \"transparent-overlay-1000\",\n isHovered: \"transparent-overlay-1000\",\n isFocusVisible: \"transparent-overlay-1000\",\n isPressed: \"transparent-overlay-1000\",\n },\n },\n },\n isDisabled: \"transparent-overlay-400\",\n },\n forcedColors: {\n fillStyle: {\n fill: {\n default: \"ButtonFace\",\n isDisabled: \"HighlightText\",\n },\n outline: {\n default: \"ButtonText\",\n isDisabled: \"GrayText\",\n },\n },\n },\n },\n \"--iconPrimary\": {\n type: \"fill\",\n value: \"currentColor\",\n },\n outlineColor: {\n default: \"focus-ring\",\n isStaticColor: \"transparent-overlay-1000\",\n forcedColors: \"Highlight\",\n },\n forcedColorAdjust: \"none\",\n disableTapHighlight: true,\n },\n getAllowedOverrides(),\n);\n\nexport const s2ButtonText = style<{ isProgressVisible?: boolean }>({\n paddingY: \"--labelPadding\",\n order: 1,\n visibility: {\n isProgressVisible: \"hidden\",\n },\n});\n\nexport const s2ButtonPendingIndicator = style<{\n isPending?: boolean;\n isProgressVisible?: boolean;\n}>({\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n visibility: {\n default: \"hidden\",\n isProgressVisible: \"visible\",\n },\n});\n","import {\n children as resolveChildren,\n mergeProps,\n splitProps,\n useContext,\n type JSX,\n} from \"solid-js\";\nimport {\n DialogTriggerContext,\n Link as HeadlessLink,\n PopoverTriggerContext,\n type LinkProps as HeadlessLinkProps,\n type LinkRenderProps,\n} from \"@proyecto-viviana/solidaria-components\";\nimport type { StyleString } from \"../style\";\nimport { fontRelative, style } from \"../style\" with { type: \"macro\" };\nimport { IconContext } from \"../icon/spectrum-icon\";\nimport { centerBaseline } from \"../icon/center-baseline\";\nimport { SkeletonContext } from \"../skeleton\";\nimport { TextContext } from \"../text\";\nimport { useProviderProps } from \"../provider\";\nimport { pressScale } from \"../pressScale\";\nimport { useLinkButtonContext } from \"./context\";\nimport { s2Button, s2ButtonText } from \"./s2-button-styles\";\nimport {\n getSlottedContextProps,\n mergeContextRefs,\n mergeContextStyles,\n mergeContextUnsafeStyle,\n type RefLike,\n} from \"./spectrum-context\";\nimport type { ButtonFillStyle, ButtonSize, ButtonVariant, StaticColor } from \"./types\";\nimport { getSingleTextChild } from \"./text-child\";\n\ntype StyledLinkButtonBaseProps = Omit<\n HeadlessLinkProps,\n \"class\" | \"style\" | \"children\" | \"onClick\"\n>;\n\nexport interface LinkButtonProps extends StyledLinkButtonBaseProps {\n /** The content to display in the LinkButton. */\n children?: JSX.Element;\n /** The visual style of the LinkButton. */\n variant?: ButtonVariant;\n /** The background style of the LinkButton. */\n fillStyle?: ButtonFillStyle;\n /** The size of the LinkButton. */\n size?: ButtonSize;\n /** The static color style to apply. Useful when the LinkButton appears over a color background. */\n staticColor?: StaticColor;\n /** Spectrum-defined generated classes. */\n styles?: StyleString;\n /** Additional CSS class name. Use only as a last resort. */\n UNSAFE_className?: string;\n /** Additional inline styles. Use only as a last resort. */\n UNSAFE_style?: JSX.CSSProperties;\n}\n\n/**\n * A LinkButton navigates like a link while using the S2 Button visual treatment.\n */\nexport function LinkButton(props: LinkButtonProps): JSX.Element {\n const providerProps = useProviderProps(props);\n const contextProps = getSlottedContextProps(useLinkButtonContext(), props.slot);\n const defaultProps: Partial<LinkButtonProps> = {\n variant: \"primary\",\n size: \"M\",\n fillStyle: \"fill\",\n };\n const merged = mergeProps(defaultProps, providerProps, contextProps ?? {}, props);\n const [local, headlessProps] = splitProps(merged, [\n \"variant\",\n \"fillStyle\",\n \"size\",\n \"staticColor\",\n \"styles\",\n \"UNSAFE_className\",\n \"UNSAFE_style\",\n \"children\",\n \"ref\",\n ]);\n\n const variant = (): ButtonVariant => local.variant ?? \"primary\";\n const fillStyle = (): ButtonFillStyle => local.fillStyle ?? \"fill\";\n const size = (): ButtonSize => local.size ?? \"M\";\n const mergedStyles = () => mergeContextStyles(contextProps?.styles, props.styles);\n const mergedUnsafeStyle = () =>\n mergeContextUnsafeStyle(contextProps?.UNSAFE_style, props.UNSAFE_style);\n const dialogTriggerContext = useContext(DialogTriggerContext);\n const popoverTriggerContext = useContext(PopoverTriggerContext);\n let linkElement: HTMLAnchorElement | undefined;\n const assignLinkRefs = mergeContextRefs(\n (contextProps as { ref?: RefLike<HTMLElement> } | null)?.ref,\n props.ref,\n );\n const isOverlayTriggerOpen = () =>\n !!linkElement &&\n ((dialogTriggerContext?.triggerRef() === linkElement && dialogTriggerContext.state.isOpen()) ||\n (popoverTriggerContext?.triggerRef() === linkElement &&\n popoverTriggerContext.state.isOpen()));\n\n const getClassName = (renderProps: LinkRenderProps): string =>\n [\n local.UNSAFE_className,\n s2Button(\n {\n isHovered: renderProps.isHovered || isOverlayTriggerOpen(),\n isPressed: renderProps.isPressed,\n isFocused: renderProps.isFocused,\n isFocusVisible: renderProps.isFocusVisible,\n isDisabled: renderProps.isDisabled,\n isPending: false,\n variant: variant(),\n fillStyle: fillStyle(),\n size: size(),\n staticColor: local.staticColor,\n isStaticColor: !!local.staticColor,\n },\n mergedStyles(),\n ),\n ]\n .filter(Boolean)\n .join(\" \");\n\n const getStyle = (renderProps: LinkRenderProps): JSX.CSSProperties =>\n pressScale(() => linkElement, mergedUnsafeStyle())(renderProps);\n\n function LinkButtonContent() {\n const iconContextValue = {\n slot: \"icon\",\n render: centerBaseline({ slot: \"icon\", styles: style({ order: 0 }) }),\n styles: style({\n size: fontRelative(20),\n marginStart: \"--iconMargin\",\n flexShrink: 0,\n }),\n };\n const textContextValue = {\n styles: () => s2ButtonText({ isProgressVisible: false }),\n \"data-rsp-slot\": \"text\",\n };\n\n function ResolvedContent() {\n const resolvedChildren = resolveChildren(() => local.children);\n const content = () => resolvedChildren();\n const textChild = () => getSingleTextChild(content());\n\n return textChild() !== undefined ? (\n <span class={s2ButtonText({ isProgressVisible: false })} data-rsp-slot=\"text\">\n {textChild()}\n </span>\n ) : (\n content()\n );\n }\n\n return (\n <>\n <SkeletonContext.Provider value={null}>\n <TextContext.Provider value={textContextValue}>\n <IconContext.Provider value={iconContextValue}>\n <ResolvedContent />\n </IconContext.Provider>\n </TextContext.Provider>\n </SkeletonContext.Provider>\n </>\n );\n }\n\n return (\n <HeadlessLink\n {...headlessProps}\n class={getClassName}\n style={getStyle}\n ref={(element: HTMLElement) => {\n linkElement = element as HTMLAnchorElement;\n assignLinkRefs(element);\n }}\n >\n <LinkButtonContent />\n </HeadlessLink>\n );\n}\n"],"mappings":"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"}
@@ -84,7 +84,7 @@ const s2Button = function anonymous(props, overrides) {
84
84
  else if (props.variant === "secondary") if (props.isPressed) rules += " pQKeKoe151";
85
85
  else if (props.isFocusVisible) rules += " pQKeKoe151";
86
86
  else if (props.isHovered) rules += " pQKeKoe151";
87
- else rules += " pUUi0Fe151";
87
+ else rules += " pWQ7V3d151";
88
88
  else if (props.isPressed) rules += " pMwyHo151";
89
89
  else if (props.isFocusVisible) rules += " pMwyHo151";
90
90
  else if (props.isHovered) rules += " pMwyHo151";
@@ -178,10 +178,10 @@ const s2Button = function anonymous(props, overrides) {
178
178
  else if (props.isPressed) rules += " itq3xC151";
179
179
  else if (props.isHovered) rules += " itq3xC151";
180
180
  else rules += " i7xrik151";
181
- else if (props.variant === "accent") if (props.isFocusVisible) rules += " iJLwrv151";
182
- else if (props.isPressed) rules += " iJLwrv151";
183
- else if (props.isHovered) rules += " iJLwrv151";
184
- else rules += " iI9Ko6c151";
181
+ else if (props.variant === "accent") if (props.isFocusVisible) rules += " iKDgA3151";
182
+ else if (props.isPressed) rules += " iKDgA3151";
183
+ else if (props.isHovered) rules += " iKDgA3151";
184
+ else rules += " inhAeB151";
185
185
  else if (props.variant === "create") rules += " iruR7Yc151";
186
186
  else if (props.variant === "secondary") rules += " irHHOgb151";
187
187
  else if (props.variant === "primary") if (props.isPressed) rules += " iMwyHo151";
@@ -252,10 +252,10 @@ const s2Button = function anonymous(props, overrides) {
252
252
  else if (props.isPressed) rules += " -g_-gtq3xC151";
253
253
  else if (props.isHovered) rules += " -g_-gtq3xC151";
254
254
  else rules += " -g_-g7xrik151";
255
- else if (props.variant === "accent") if (props.isFocusVisible) rules += " -g_-gJLwrv151";
256
- else if (props.isPressed) rules += " -g_-gJLwrv151";
257
- else if (props.isHovered) rules += " -g_-gJLwrv151";
258
- else rules += " -g_-gI9Ko6c151";
255
+ else if (props.variant === "accent") if (props.isFocusVisible) rules += " -g_-gKDgA3151";
256
+ else if (props.isPressed) rules += " -g_-gKDgA3151";
257
+ else if (props.isHovered) rules += " -g_-gKDgA3151";
258
+ else rules += " -g_-gnhAeB151";
259
259
  else if (props.variant === "secondary") if (props.isFocusVisible) rules += " -g_-gG1H3ce151";
260
260
  else if (props.isPressed) rules += " -g_-gG1H3ce151";
261
261
  else if (props.isHovered) rules += " -g_-gG1H3ce151";
@@ -1 +1 @@
1
- {"version":3,"file":"LinkButton.jsx","names":[],"sources":["../../src/button/s2-button-styles.ts","../../src/button/LinkButton.tsx"],"sourcesContent":["// @ts-nocheck\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { baseColor, focusRing, lightDark, style } from \"../style\" with { type: \"macro\" };\nimport {\n control,\n getAllowedOverrides,\n staticColor,\n} from \"../s2-internal/style-utils\" with { type: \"macro\" };\nimport type { ButtonFillStyle, ButtonSize, ButtonVariant, StaticColor } from \"./types\";\n\nexport interface S2ButtonRenderState {\n isHovered?: boolean;\n isPressed?: boolean;\n isFocused?: boolean;\n isFocusVisible?: boolean;\n isDisabled?: boolean;\n isPending?: boolean;\n}\n\nexport interface S2ButtonStyleProps extends S2ButtonRenderState {\n variant: ButtonVariant;\n fillStyle: ButtonFillStyle;\n size: ButtonSize;\n staticColor?: StaticColor;\n isStaticColor: boolean;\n}\n\nexport const s2Button = style<S2ButtonStyleProps>(\n {\n ...focusRing(),\n ...staticColor(),\n ...control({ shape: \"default\", wrap: true, icon: true }),\n position: \"relative\",\n justifyContent: \"center\",\n textAlign: \"start\",\n /* The Glasselated register — 5px corner, `--edge-glass` rim, mono 400 — now\n * arrives with `control()` above, which reads it off the handoff's own button\n * (TerminalGlassLab.tsx:230 `btnBase` over design-handoff-v2.css:283\n * `--type-button`). It used to be spelled out here, which is exactly why Button\n * was the only control that converted. Size and padding still come from\n * `control()`'s S/M/L/XL ramp rather than the mock's single fixed 7px/14px.\n *\n * No blur: the handoff's buttons are opaque. Glass is a surface treatment. */\n userSelect: \"none\",\n width: \"fit\",\n textDecoration: \"none\",\n transition: \"default\",\n borderStyle: \"solid\",\n borderWidth: {\n fillStyle: {\n /* Filled buttons carry the edge too. Every button the handoff draws has one,\n * with no exception: accent `1px solid var(--interactive-fill)` over the same\n * fill (TerminalGlassLab.tsx:303-304), secondary `1px solid var(--border-subtle)`\n * (:315), create (:326), ghost over a transparent fill (:352), the well-filled\n * RUN (:365). `btnBase` (:230-235) declares only radius/padding/cursor/shadow,\n * so each variant spells its own edge — and every one of them does.\n *\n * This was 0, which is why `variant.create: 1` below was the only edge in the\n * component that ever drew. `control()` sets `boxSizing: \"border-box\"`, so the\n * S/M/L/XL height ramp is unchanged; only the content box narrows by 2px. */\n fill: 1,\n /* 1px, not Spectrum's 2px: the handoff's secondary and ghost buttons are\n * hairline-edged like everything else it draws (TerminalGlassLab.tsx:231),\n * and a 2px edge beside a 1px field reads as a different weight class. */\n outline: 1,\n },\n variant: {\n /* The handoff draws create with an explicit 1px rim in its own border token,\n * not the fill colour — the pale wash needs the edge to hold its shape against\n * a light surface. `variant` is applied after `fillStyle`, so this is 1px in\n * both fill and outline, which is what the handoff shows. */\n create: 1,\n },\n },\n borderColor: {\n variant: {\n /* `primary` deliberately stays on the neutral ramp. The handoff's filled CTA\n * draws its border in its own FILL colour — `1px solid var(--interactive-fill)`\n * over `background-color: var(--interactive-fill)` (TerminalGlassLab.tsx:303-304)\n * — so gray-800 tracking the `baseColor(\"neutral\")` fill below is already the\n * right idiom. A hairline here would break that fill/edge pairing. */\n primary: baseColor(\"gray-800\"),\n /* `var(--border-subtle)` — the handoff's secondary (TerminalGlassLab.tsx:315)\n * and ghost (:352) buttons are both hairlines in it. gray-300 is a solid mid-gray\n * (#c5d0de light, #67717d dark), a full rule weight rather than an edge.\n *\n * Plain string, not `baseColor()`: --border-subtle has no ramp to step along, so\n * this intentionally drops the hover/press border steps `baseColor()` was emitting\n * — the handoff declares no hover border change on any button. The sibling\n * `isStaticColor` branch below stays on `baseColor(\"transparent-overlay-300\")`\n * on purpose; that is the over-imagery case and keeps its overlay ramp. */\n secondary: \"border-subtle\",\n create: \"create-border\",\n },\n /* Every FILLED variant needs its border colour spelled out HERE, under\n * `fillStyle.fill.variant`. The earlier note claimed variants with no entry\n * \"fall through to `variant` above\" the way `borderWidth` does — that is\n * WRONG for a colour value, and it shipped Today (secondary-fill) and Create\n * (create-fill) with a black rim. The reason `borderWidth` falls through is\n * that BOTH its keys (`fillStyle.fill` and `variant.create`) name a width, so\n * a fill button always has one to land on. `borderColor` does not: once the\n * higher-priority `fillStyle` key matches (fillStyle === \"fill\"), it OWNS the\n * result, and a fill variant with no leaf in this sub-map resolves to nothing\n * from the winning branch — it does NOT consult the sibling `variant` map\n * below. The only value left is the `forcedColors` fallback, `ButtonBorder`,\n * which paints black in a normal viewport. So each fill variant is listed\n * explicitly, mirroring the proven accent path stop for stop.\n *\n * The `variant` map below is kept for the OUTLINE variants (Ghost), which do\n * not match `fillStyle.fill` and so still read secondary/create from it.\n *\n * accent/negative border the button in the same token as their fill\n * (handoff :303-304), so they mirror the `backgroundColor` map stop for stop,\n * hover included. secondary and create carry no hover-border step (the\n * handoff declares none), so each is a flat token: `border-subtle` for the\n * secondary hairline, `create-border` for the create rim (the pale wash needs\n * the edge to hold its shape). primary tracks its neutral fill in gray-800,\n * matching the `variant.primary` idiom. Placed before\n * `isDisabled`/`isStaticColor`/`forcedColors` so those still win. */\n fillStyle: {\n fill: {\n variant: {\n primary: baseColor(\"gray-800\"),\n secondary: \"border-subtle\",\n create: \"create-border\",\n accent: {\n default: lightDark(\"accent-900\", \"accent-700\"),\n isHovered: lightDark(\"accent-1000\", \"accent-800\"),\n isPressed: lightDark(\"accent-1000\", \"accent-800\"),\n isFocusVisible: lightDark(\"accent-1000\", \"accent-800\"),\n },\n negative: {\n default: lightDark(\"negative-900\", \"negative-700\"),\n isHovered: lightDark(\"negative-1000\", \"negative-600\"),\n isPressed: lightDark(\"negative-1000\", \"negative-600\"),\n isFocusVisible: lightDark(\"negative-1000\", \"negative-600\"),\n },\n /* warning/success are negative's status counterparts: the same saturated-fill\n * idiom on the warm (notice -> amber) and success (positive -> green) channels.\n * Border mirrors the fill stop for stop, exactly as accent/negative do. */\n warning: {\n default: lightDark(\"notice-900\", \"notice-700\"),\n isHovered: lightDark(\"notice-1000\", \"notice-600\"),\n isPressed: lightDark(\"notice-1000\", \"notice-600\"),\n isFocusVisible: lightDark(\"notice-1000\", \"notice-600\"),\n },\n success: {\n default: lightDark(\"positive-900\", \"positive-700\"),\n isHovered: lightDark(\"positive-1000\", \"positive-600\"),\n isPressed: lightDark(\"positive-1000\", \"positive-600\"),\n isFocusVisible: lightDark(\"positive-1000\", \"positive-600\"),\n },\n },\n },\n },\n isDisabled: \"disabled\",\n isStaticColor: {\n variant: {\n primary: baseColor(\"transparent-overlay-800\"),\n secondary: baseColor(\"transparent-overlay-300\"),\n },\n isDisabled: \"transparent-overlay-300\",\n },\n forcedColors: {\n default: \"ButtonBorder\",\n isHovered: \"Highlight\",\n isDisabled: \"GrayText\",\n },\n },\n backgroundColor: {\n fillStyle: {\n fill: {\n variant: {\n primary: baseColor(\"neutral\"),\n secondary: {\n /* `var(--btn-secondary-bg)` (TerminalGlassLab.tsx:314) — #e9eff6 in light,\n * `var(--surface-raised)` = rgb(51,58,68) in dark (design-handoff-v2.css:73,\n * :196, :179). No pre-existing token covered both schemes: `raised` is\n * #ffffff in light and `well` is #0a0f14 in dark, so each matches only one.\n * The backgroundColor map therefore gained a `btn-secondary` entry pointing\n * at the variable the island already ships. gray-100 (#e5eaf1 / #43474d) was\n * a step off in both schemes and lost the slate cast in dark.\n *\n * The hover/press/focus stops stay on gray-200 (#dbe3ed / #555c64). Against\n * the new resting fill that darkens in light and lightens in dark, which is\n * the correct direction in each scheme — hover moves toward contrast with\n * the page, so it necessarily reverses between schemes. --surface-hover is\n * NOT usable here: it is an alpha wash (rgba(255,255,255,.75) light,\n * rgba(58,62,70,.48) dark) meant to composite over a surface, and the macro\n * bakes fills with no knowledge of the backdrop — see the gray-100/200 note\n * in style/glasselated-ramps.ts. As a replacement fill it would turn an\n * opaque button translucent on hover and, composited over the panel, invert\n * the step in both schemes. */\n default: \"btn-secondary\",\n isHovered: \"gray-200\",\n isPressed: \"gray-200\",\n isFocusVisible: \"gray-200\",\n },\n accent: {\n default: lightDark(\"accent-900\", \"accent-700\"),\n isHovered: lightDark(\"accent-1000\", \"accent-800\"),\n isPressed: lightDark(\"accent-1000\", \"accent-800\"),\n isFocusVisible: lightDark(\"accent-1000\", \"accent-800\"),\n },\n negative: {\n default: lightDark(\"negative-900\", \"negative-700\"),\n isHovered: lightDark(\"negative-1000\", \"negative-600\"),\n isPressed: lightDark(\"negative-1000\", \"negative-600\"),\n isFocusVisible: lightDark(\"negative-1000\", \"negative-600\"),\n },\n /* warning/success fills mirror negative on the warm (notice -> amber) and success\n * (positive -> green) channels. The green ramp is L-solved to carry the same\n * white-ink contrast as amber, so all three status fills clear AA identically\n * (see style/glasselated-ramps.ts). */\n warning: {\n default: lightDark(\"notice-900\", \"notice-700\"),\n isHovered: lightDark(\"notice-1000\", \"notice-600\"),\n isPressed: lightDark(\"notice-1000\", \"notice-600\"),\n isFocusVisible: lightDark(\"notice-1000\", \"notice-600\"),\n },\n success: {\n default: lightDark(\"positive-900\", \"positive-700\"),\n isHovered: lightDark(\"positive-1000\", \"positive-600\"),\n isPressed: lightDark(\"positive-1000\", \"positive-600\"),\n isFocusVisible: lightDark(\"positive-1000\", \"positive-600\"),\n },\n /* The create CTA does not follow the semantic-fill pattern above. Those step\n * along a ramp for hover; create-bg has no ramp, so the deeper wash is a named\n * token. Both schemes are declared in the token itself, hence no lightDark(). */\n create: {\n default: \"create-bg\",\n isHovered: \"create-bg-deep\",\n isPressed: \"create-bg-deep\",\n isFocusVisible: \"create-bg-deep\",\n },\n },\n isDisabled: \"disabled\",\n },\n outline: {\n default: \"transparent\",\n isHovered: \"gray-100\",\n isPressed: \"gray-100\",\n isFocusVisible: \"gray-100\",\n isDisabled: \"transparent\",\n },\n },\n isStaticColor: {\n fillStyle: {\n fill: {\n variant: {\n primary: baseColor(\"transparent-overlay-800\"),\n secondary: baseColor(\"transparent-overlay-100\"),\n },\n isDisabled: \"transparent-overlay-100\",\n },\n outline: {\n default: \"transparent\",\n isHovered: \"transparent-overlay-100\",\n isPressed: \"transparent-overlay-100\",\n isFocusVisible: \"transparent-overlay-100\",\n isDisabled: \"transparent\",\n },\n },\n },\n forcedColors: {\n fillStyle: {\n fill: {\n default: \"ButtonText\",\n isHovered: \"Highlight\",\n isDisabled: \"GrayText\",\n },\n outline: \"ButtonFace\",\n },\n },\n },\n color: {\n fillStyle: {\n fill: {\n variant: {\n primary: \"gray-25\",\n secondary: baseColor(\"neutral\"),\n accent: \"white\",\n negative: \"white\",\n /* warning/success carry white ink on their saturated fills, like accent/negative.\n * The fill stops (notice/positive -900/-700) are pinned >= 4.5:1 on white. */\n warning: \"white\",\n success: \"white\",\n /* Dark ink on a pale fill — the inverse of every Spectrum variant. #7a5600 on\n * #ffedb0 is 6.4:1, so this clears AA comfortably in both schemes. */\n create: \"create-ink\",\n },\n isDisabled: \"disabled\",\n },\n outline: {\n default: baseColor(\"neutral\"),\n variant: {\n /* Ghost is the register's outlined SECONDARY, and the handoff inks it in the\n * MUTED slate, not the strong neutral its filled twin (Today) wears: the\n * `Ghost` button is drawn `color: var(--text-secondary)` on a transparent fill\n * inside `--border-subtle` (TerminalGlassLab.tsx:273-277), whereas the filled\n * secondary is `--text-primary`. `--text-secondary` is pinned to `gray-500` in\n * both schemes (glasselated-ramps.ts:114,855 — #64748b light / #9aa0a8 dark),\n * so a secondary+outline button de-emphasises its label exactly the way the\n * register draws it. Every other outline variant keeps `outline.default`'s\n * neutral ink; only secondary steps down. */\n secondary: baseColor(\"gray-500\"),\n /* create-ink is near-black in the dark scheme — legible ON the pale fill, not\n * against a dark page. Outline drops the fill, so the dark scheme takes the\n * fill colour as its ink instead. */\n create: lightDark(\"create-ink\", \"create-bg\"),\n },\n isDisabled: \"disabled\",\n },\n },\n isStaticColor: {\n fillStyle: {\n fill: {\n variant: {\n primary: \"auto\",\n secondary: {\n default: \"transparent-overlay-1000\",\n isHovered: \"transparent-overlay-1000\",\n isFocusVisible: \"transparent-overlay-1000\",\n isPressed: \"transparent-overlay-1000\",\n },\n },\n },\n outline: {\n default: {\n default: \"transparent-overlay-1000\",\n isHovered: \"transparent-overlay-1000\",\n isFocusVisible: \"transparent-overlay-1000\",\n isPressed: \"transparent-overlay-1000\",\n },\n },\n },\n isDisabled: \"transparent-overlay-400\",\n },\n forcedColors: {\n fillStyle: {\n fill: {\n default: \"ButtonFace\",\n isDisabled: \"HighlightText\",\n },\n outline: {\n default: \"ButtonText\",\n isDisabled: \"GrayText\",\n },\n },\n },\n },\n \"--iconPrimary\": {\n type: \"fill\",\n value: \"currentColor\",\n },\n outlineColor: {\n default: \"focus-ring\",\n isStaticColor: \"transparent-overlay-1000\",\n forcedColors: \"Highlight\",\n },\n forcedColorAdjust: \"none\",\n disableTapHighlight: true,\n },\n getAllowedOverrides(),\n);\n\nexport const s2ButtonText = style<{ isProgressVisible?: boolean }>({\n paddingY: \"--labelPadding\",\n order: 1,\n visibility: {\n isProgressVisible: \"hidden\",\n },\n});\n\nexport const s2ButtonPendingIndicator = style<{\n isPending?: boolean;\n isProgressVisible?: boolean;\n}>({\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n visibility: {\n default: \"hidden\",\n isProgressVisible: \"visible\",\n },\n});\n","import {\n children as resolveChildren,\n mergeProps,\n splitProps,\n useContext,\n type JSX,\n} from \"solid-js\";\nimport {\n DialogTriggerContext,\n Link as HeadlessLink,\n PopoverTriggerContext,\n type LinkProps as HeadlessLinkProps,\n type LinkRenderProps,\n} from \"@proyecto-viviana/solidaria-components\";\nimport type { StyleString } from \"../style\";\nimport { fontRelative, style } from \"../style\" with { type: \"macro\" };\nimport { IconContext } from \"../icon/spectrum-icon\";\nimport { centerBaseline } from \"../icon/center-baseline\";\nimport { SkeletonContext } from \"../skeleton\";\nimport { TextContext } from \"../text\";\nimport { useProviderProps } from \"../provider\";\nimport { pressScale } from \"../pressScale\";\nimport { useLinkButtonContext } from \"./context\";\nimport { s2Button, s2ButtonText } from \"./s2-button-styles\";\nimport {\n getSlottedContextProps,\n mergeContextRefs,\n mergeContextStyles,\n mergeContextUnsafeStyle,\n type RefLike,\n} from \"./spectrum-context\";\nimport type { ButtonFillStyle, ButtonSize, ButtonVariant, StaticColor } from \"./types\";\nimport { getSingleTextChild } from \"./text-child\";\n\ntype StyledLinkButtonBaseProps = Omit<\n HeadlessLinkProps,\n \"class\" | \"style\" | \"children\" | \"onClick\"\n>;\n\nexport interface LinkButtonProps extends StyledLinkButtonBaseProps {\n /** The content to display in the LinkButton. */\n children?: JSX.Element;\n /** The visual style of the LinkButton. */\n variant?: ButtonVariant;\n /** The background style of the LinkButton. */\n fillStyle?: ButtonFillStyle;\n /** The size of the LinkButton. */\n size?: ButtonSize;\n /** The static color style to apply. Useful when the LinkButton appears over a color background. */\n staticColor?: StaticColor;\n /** Spectrum-defined generated classes. */\n styles?: StyleString;\n /** Additional CSS class name. Use only as a last resort. */\n UNSAFE_className?: string;\n /** Additional inline styles. Use only as a last resort. */\n UNSAFE_style?: JSX.CSSProperties;\n}\n\n/**\n * A LinkButton navigates like a link while using the S2 Button visual treatment.\n */\nexport function LinkButton(props: LinkButtonProps): JSX.Element {\n const providerProps = useProviderProps(props);\n const contextProps = getSlottedContextProps(useLinkButtonContext(), props.slot);\n const defaultProps: Partial<LinkButtonProps> = {\n variant: \"primary\",\n size: \"M\",\n fillStyle: \"fill\",\n };\n const merged = mergeProps(defaultProps, providerProps, contextProps ?? {}, props);\n const [local, headlessProps] = splitProps(merged, [\n \"variant\",\n \"fillStyle\",\n \"size\",\n \"staticColor\",\n \"styles\",\n \"UNSAFE_className\",\n \"UNSAFE_style\",\n \"children\",\n \"ref\",\n ]);\n\n const variant = (): ButtonVariant => local.variant ?? \"primary\";\n const fillStyle = (): ButtonFillStyle => local.fillStyle ?? \"fill\";\n const size = (): ButtonSize => local.size ?? \"M\";\n const mergedStyles = () => mergeContextStyles(contextProps?.styles, props.styles);\n const mergedUnsafeStyle = () =>\n mergeContextUnsafeStyle(contextProps?.UNSAFE_style, props.UNSAFE_style);\n const dialogTriggerContext = useContext(DialogTriggerContext);\n const popoverTriggerContext = useContext(PopoverTriggerContext);\n let linkElement: HTMLAnchorElement | undefined;\n const assignLinkRefs = mergeContextRefs(\n (contextProps as { ref?: RefLike<HTMLElement> } | null)?.ref,\n props.ref,\n );\n const isOverlayTriggerOpen = () =>\n !!linkElement &&\n ((dialogTriggerContext?.triggerRef() === linkElement && dialogTriggerContext.state.isOpen()) ||\n (popoverTriggerContext?.triggerRef() === linkElement &&\n popoverTriggerContext.state.isOpen()));\n\n const getClassName = (renderProps: LinkRenderProps): string =>\n [\n local.UNSAFE_className,\n s2Button(\n {\n isHovered: renderProps.isHovered || isOverlayTriggerOpen(),\n isPressed: renderProps.isPressed,\n isFocused: renderProps.isFocused,\n isFocusVisible: renderProps.isFocusVisible,\n isDisabled: renderProps.isDisabled,\n isPending: false,\n variant: variant(),\n fillStyle: fillStyle(),\n size: size(),\n staticColor: local.staticColor,\n isStaticColor: !!local.staticColor,\n },\n mergedStyles(),\n ),\n ]\n .filter(Boolean)\n .join(\" \");\n\n const getStyle = (renderProps: LinkRenderProps): JSX.CSSProperties =>\n pressScale(() => linkElement, mergedUnsafeStyle())(renderProps);\n\n function LinkButtonContent() {\n const iconContextValue = {\n slot: \"icon\",\n render: centerBaseline({ slot: \"icon\", styles: style({ order: 0 }) }),\n styles: style({\n size: fontRelative(20),\n marginStart: \"--iconMargin\",\n flexShrink: 0,\n }),\n };\n const textContextValue = {\n styles: () => s2ButtonText({ isProgressVisible: false }),\n \"data-rsp-slot\": \"text\",\n };\n\n function ResolvedContent() {\n const resolvedChildren = resolveChildren(() => local.children);\n const content = () => resolvedChildren();\n const textChild = () => getSingleTextChild(content());\n\n return textChild() !== undefined ? (\n <span class={s2ButtonText({ isProgressVisible: false })} data-rsp-slot=\"text\">\n {textChild()}\n </span>\n ) : (\n content()\n );\n }\n\n return (\n <>\n <SkeletonContext.Provider value={null}>\n <TextContext.Provider value={textContextValue}>\n <IconContext.Provider value={iconContextValue}>\n <ResolvedContent />\n </IconContext.Provider>\n </TextContext.Provider>\n </SkeletonContext.Provider>\n </>\n );\n }\n\n return (\n <HeadlessLink\n {...headlessProps}\n class={getClassName}\n style={getStyle}\n ref={(element: HTMLElement) => {\n linkElement = element as HTMLAnchorElement;\n assignLinkRefs(element);\n }}\n >\n <LinkButtonContent />\n </HeadlessLink>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"LinkButton.jsx","names":[],"sources":["../../src/button/s2-button-styles.ts","../../src/button/LinkButton.tsx"],"sourcesContent":["// @ts-nocheck\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { baseColor, focusRing, lightDark, style } from \"../style\" with { type: \"macro\" };\nimport {\n control,\n getAllowedOverrides,\n staticColor,\n} from \"../s2-internal/style-utils\" with { type: \"macro\" };\nimport type { ButtonFillStyle, ButtonSize, ButtonVariant, StaticColor } from \"./types\";\n\nexport interface S2ButtonRenderState {\n isHovered?: boolean;\n isPressed?: boolean;\n isFocused?: boolean;\n isFocusVisible?: boolean;\n isDisabled?: boolean;\n isPending?: boolean;\n}\n\nexport interface S2ButtonStyleProps extends S2ButtonRenderState {\n variant: ButtonVariant;\n fillStyle: ButtonFillStyle;\n size: ButtonSize;\n staticColor?: StaticColor;\n isStaticColor: boolean;\n}\n\nexport const s2Button = style<S2ButtonStyleProps>(\n {\n ...focusRing(),\n ...staticColor(),\n ...control({ shape: \"default\", wrap: true, icon: true }),\n position: \"relative\",\n justifyContent: \"center\",\n textAlign: \"start\",\n /* The Glasselated register — 5px corner, `--edge-glass` rim, mono 400 — now\n * arrives with `control()` above, which reads it off the handoff's own button\n * (TerminalGlassLab.tsx:230 `btnBase` over design-handoff-v2.css:283\n * `--type-button`). It used to be spelled out here, which is exactly why Button\n * was the only control that converted. Size and padding still come from\n * `control()`'s S/M/L/XL ramp rather than the mock's single fixed 7px/14px.\n *\n * No blur: the handoff's buttons are opaque. Glass is a surface treatment. */\n userSelect: \"none\",\n width: \"fit\",\n textDecoration: \"none\",\n transition: \"default\",\n borderStyle: \"solid\",\n borderWidth: {\n fillStyle: {\n /* Filled buttons carry the edge too. Every button the handoff draws has one,\n * with no exception: accent `1px solid var(--interactive-fill)` over the same\n * fill (TerminalGlassLab.tsx:303-304), secondary `1px solid var(--border-subtle)`\n * (:315), create (:326), ghost over a transparent fill (:352), the well-filled\n * RUN (:365). `btnBase` (:230-235) declares only radius/padding/cursor/shadow,\n * so each variant spells its own edge — and every one of them does.\n *\n * This was 0, which is why `variant.create: 1` below was the only edge in the\n * component that ever drew. `control()` sets `boxSizing: \"border-box\"`, so the\n * S/M/L/XL height ramp is unchanged; only the content box narrows by 2px. */\n fill: 1,\n /* 1px, not Spectrum's 2px: the handoff's secondary and ghost buttons are\n * hairline-edged like everything else it draws (TerminalGlassLab.tsx:231),\n * and a 2px edge beside a 1px field reads as a different weight class. */\n outline: 1,\n },\n variant: {\n /* The handoff draws create with an explicit 1px rim in its own border token,\n * not the fill colour — the pale wash needs the edge to hold its shape against\n * a light surface. `variant` is applied after `fillStyle`, so this is 1px in\n * both fill and outline, which is what the handoff shows. */\n create: 1,\n },\n },\n borderColor: {\n variant: {\n /* `primary` deliberately stays on the neutral ramp. The handoff's filled CTA\n * draws its border in its own FILL colour — `1px solid var(--interactive-fill)`\n * over `background-color: var(--interactive-fill)` (TerminalGlassLab.tsx:303-304)\n * — so gray-800 tracking the `baseColor(\"neutral\")` fill below is already the\n * right idiom. A hairline here would break that fill/edge pairing. */\n primary: baseColor(\"gray-800\"),\n /* `var(--border-subtle)` — the handoff's secondary (TerminalGlassLab.tsx:315)\n * and ghost (:352) buttons are both hairlines in it. gray-300 is a solid mid-gray\n * (#c5d0de light, #67717d dark), a full rule weight rather than an edge.\n *\n * Plain string, not `baseColor()`: --border-subtle has no ramp to step along, so\n * this intentionally drops the hover/press border steps `baseColor()` was emitting\n * — the handoff declares no hover border change on any button. The sibling\n * `isStaticColor` branch below stays on `baseColor(\"transparent-overlay-300\")`\n * on purpose; that is the over-imagery case and keeps its overlay ramp. */\n secondary: \"border-subtle\",\n create: \"create-border\",\n },\n /* Every FILLED variant needs its border colour spelled out HERE, under\n * `fillStyle.fill.variant`. The earlier note claimed variants with no entry\n * \"fall through to `variant` above\" the way `borderWidth` does — that is\n * WRONG for a colour value, and it shipped Today (secondary-fill) and Create\n * (create-fill) with a black rim. The reason `borderWidth` falls through is\n * that BOTH its keys (`fillStyle.fill` and `variant.create`) name a width, so\n * a fill button always has one to land on. `borderColor` does not: once the\n * higher-priority `fillStyle` key matches (fillStyle === \"fill\"), it OWNS the\n * result, and a fill variant with no leaf in this sub-map resolves to nothing\n * from the winning branch — it does NOT consult the sibling `variant` map\n * below. The only value left is the `forcedColors` fallback, `ButtonBorder`,\n * which paints black in a normal viewport. So each fill variant is listed\n * explicitly, mirroring the proven accent path stop for stop.\n *\n * The `variant` map below is kept for the OUTLINE variants (Ghost), which do\n * not match `fillStyle.fill` and so still read secondary/create from it.\n *\n * accent/negative border the button in the same token as their fill\n * (handoff :303-304), so they mirror the `backgroundColor` map stop for stop,\n * hover included. secondary and create carry no hover-border step (the\n * handoff declares none), so each is a flat token: `border-subtle` for the\n * secondary hairline, `create-border` for the create rim (the pale wash needs\n * the edge to hold its shape). primary tracks its neutral fill in gray-800,\n * matching the `variant.primary` idiom. Placed before\n * `isDisabled`/`isStaticColor`/`forcedColors` so those still win. */\n fillStyle: {\n fill: {\n variant: {\n primary: baseColor(\"gray-800\"),\n secondary: \"border-subtle\",\n create: \"create-border\",\n accent: {\n default: \"interactive-fill\",\n isHovered: lightDark(\"accent-1000\", \"accent-600\"),\n isPressed: lightDark(\"accent-1000\", \"accent-600\"),\n isFocusVisible: lightDark(\"accent-1000\", \"accent-600\"),\n },\n negative: {\n default: lightDark(\"negative-900\", \"negative-700\"),\n isHovered: lightDark(\"negative-1000\", \"negative-600\"),\n isPressed: lightDark(\"negative-1000\", \"negative-600\"),\n isFocusVisible: lightDark(\"negative-1000\", \"negative-600\"),\n },\n /* warning/success are negative's status counterparts: the same saturated-fill\n * idiom on the warm (notice -> amber) and success (positive -> green) channels.\n * Border mirrors the fill stop for stop, exactly as accent/negative do. */\n warning: {\n default: lightDark(\"notice-900\", \"notice-700\"),\n isHovered: lightDark(\"notice-1000\", \"notice-600\"),\n isPressed: lightDark(\"notice-1000\", \"notice-600\"),\n isFocusVisible: lightDark(\"notice-1000\", \"notice-600\"),\n },\n success: {\n default: lightDark(\"positive-900\", \"positive-700\"),\n isHovered: lightDark(\"positive-1000\", \"positive-600\"),\n isPressed: lightDark(\"positive-1000\", \"positive-600\"),\n isFocusVisible: lightDark(\"positive-1000\", \"positive-600\"),\n },\n },\n },\n },\n isDisabled: \"disabled\",\n isStaticColor: {\n variant: {\n primary: baseColor(\"transparent-overlay-800\"),\n secondary: baseColor(\"transparent-overlay-300\"),\n },\n isDisabled: \"transparent-overlay-300\",\n },\n forcedColors: {\n default: \"ButtonBorder\",\n isHovered: \"Highlight\",\n isDisabled: \"GrayText\",\n },\n },\n backgroundColor: {\n fillStyle: {\n fill: {\n variant: {\n primary: baseColor(\"neutral\"),\n secondary: {\n /* `var(--btn-secondary-bg)` (TerminalGlassLab.tsx:314) — #e9eff6 in light,\n * `var(--surface-raised)` = rgb(51,58,68) in dark (design-handoff-v2.css:73,\n * :196, :179). No pre-existing token covered both schemes: `raised` is\n * #ffffff in light and `well` is #0a0f14 in dark, so each matches only one.\n * The backgroundColor map therefore gained a `btn-secondary` entry pointing\n * at the variable the island already ships. gray-100 (#e5eaf1 / #43474d) was\n * a step off in both schemes and lost the slate cast in dark.\n *\n * The hover/press/focus stops stay on gray-200 (#dbe3ed / #555c64). Against\n * the new resting fill that darkens in light and lightens in dark, which is\n * the correct direction in each scheme — hover moves toward contrast with\n * the page, so it necessarily reverses between schemes. --surface-hover is\n * NOT usable here: it is an alpha wash (rgba(255,255,255,.75) light,\n * rgba(58,62,70,.48) dark) meant to composite over a surface, and the macro\n * bakes fills with no knowledge of the backdrop — see the gray-100/200 note\n * in style/glasselated-ramps.ts. As a replacement fill it would turn an\n * opaque button translucent on hover and, composited over the panel, invert\n * the step in both schemes. */\n default: \"btn-secondary\",\n isHovered: \"gray-200\",\n isPressed: \"gray-200\",\n isFocusVisible: \"gray-200\",\n },\n accent: {\n default: \"interactive-fill\",\n isHovered: lightDark(\"accent-1000\", \"accent-600\"),\n isPressed: lightDark(\"accent-1000\", \"accent-600\"),\n isFocusVisible: lightDark(\"accent-1000\", \"accent-600\"),\n },\n negative: {\n default: lightDark(\"negative-900\", \"negative-700\"),\n isHovered: lightDark(\"negative-1000\", \"negative-600\"),\n isPressed: lightDark(\"negative-1000\", \"negative-600\"),\n isFocusVisible: lightDark(\"negative-1000\", \"negative-600\"),\n },\n /* warning/success fills mirror negative on the warm (notice -> amber) and success\n * (positive -> green) channels. The green ramp is L-solved to carry the same\n * white-ink contrast as amber, so all three status fills clear AA identically\n * (see style/glasselated-ramps.ts). */\n warning: {\n default: lightDark(\"notice-900\", \"notice-700\"),\n isHovered: lightDark(\"notice-1000\", \"notice-600\"),\n isPressed: lightDark(\"notice-1000\", \"notice-600\"),\n isFocusVisible: lightDark(\"notice-1000\", \"notice-600\"),\n },\n success: {\n default: lightDark(\"positive-900\", \"positive-700\"),\n isHovered: lightDark(\"positive-1000\", \"positive-600\"),\n isPressed: lightDark(\"positive-1000\", \"positive-600\"),\n isFocusVisible: lightDark(\"positive-1000\", \"positive-600\"),\n },\n /* The create CTA does not follow the semantic-fill pattern above. Those step\n * along a ramp for hover; create-bg has no ramp, so the deeper wash is a named\n * token. Both schemes are declared in the token itself, hence no lightDark(). */\n create: {\n default: \"create-bg\",\n isHovered: \"create-bg-deep\",\n isPressed: \"create-bg-deep\",\n isFocusVisible: \"create-bg-deep\",\n },\n },\n isDisabled: \"disabled\",\n },\n outline: {\n default: \"transparent\",\n isHovered: \"gray-100\",\n isPressed: \"gray-100\",\n isFocusVisible: \"gray-100\",\n isDisabled: \"transparent\",\n },\n },\n isStaticColor: {\n fillStyle: {\n fill: {\n variant: {\n primary: baseColor(\"transparent-overlay-800\"),\n secondary: baseColor(\"transparent-overlay-100\"),\n },\n isDisabled: \"transparent-overlay-100\",\n },\n outline: {\n default: \"transparent\",\n isHovered: \"transparent-overlay-100\",\n isPressed: \"transparent-overlay-100\",\n isFocusVisible: \"transparent-overlay-100\",\n isDisabled: \"transparent\",\n },\n },\n },\n forcedColors: {\n fillStyle: {\n fill: {\n default: \"ButtonText\",\n isHovered: \"Highlight\",\n isDisabled: \"GrayText\",\n },\n outline: \"ButtonFace\",\n },\n },\n },\n color: {\n fillStyle: {\n fill: {\n variant: {\n primary: \"gray-25\",\n secondary: baseColor(\"neutral\"),\n accent: \"white\",\n negative: \"white\",\n /* warning/success carry white ink on their saturated fills, like accent/negative.\n * The fill stops (notice/positive -900/-700) are pinned >= 4.5:1 on white. */\n warning: \"white\",\n success: \"white\",\n /* Dark ink on a pale fill — the inverse of every Spectrum variant. #7a5600 on\n * #ffedb0 is 6.4:1, so this clears AA comfortably in both schemes. */\n create: \"create-ink\",\n },\n isDisabled: \"disabled\",\n },\n outline: {\n default: baseColor(\"neutral\"),\n variant: {\n /* Ghost is the register's outlined SECONDARY, and the handoff inks it in the\n * MUTED slate, not the strong neutral its filled twin (Today) wears: the\n * `Ghost` button is drawn `color: var(--text-secondary)` on a transparent fill\n * inside `--border-subtle` (TerminalGlassLab.tsx:273-277), whereas the filled\n * secondary is `--text-primary`. `--text-secondary` is pinned to `gray-500` in\n * both schemes (glasselated-ramps.ts:114,855 — #64748b light / #9aa0a8 dark),\n * so a secondary+outline button de-emphasises its label exactly the way the\n * register draws it. Every other outline variant keeps `outline.default`'s\n * neutral ink; only secondary steps down. */\n secondary: baseColor(\"gray-500\"),\n /* create-ink is near-black in the dark scheme — legible ON the pale fill, not\n * against a dark page. Outline drops the fill, so the dark scheme takes the\n * fill colour as its ink instead. */\n create: lightDark(\"create-ink\", \"create-bg\"),\n },\n isDisabled: \"disabled\",\n },\n },\n isStaticColor: {\n fillStyle: {\n fill: {\n variant: {\n primary: \"auto\",\n secondary: {\n default: \"transparent-overlay-1000\",\n isHovered: \"transparent-overlay-1000\",\n isFocusVisible: \"transparent-overlay-1000\",\n isPressed: \"transparent-overlay-1000\",\n },\n },\n },\n outline: {\n default: {\n default: \"transparent-overlay-1000\",\n isHovered: \"transparent-overlay-1000\",\n isFocusVisible: \"transparent-overlay-1000\",\n isPressed: \"transparent-overlay-1000\",\n },\n },\n },\n isDisabled: \"transparent-overlay-400\",\n },\n forcedColors: {\n fillStyle: {\n fill: {\n default: \"ButtonFace\",\n isDisabled: \"HighlightText\",\n },\n outline: {\n default: \"ButtonText\",\n isDisabled: \"GrayText\",\n },\n },\n },\n },\n \"--iconPrimary\": {\n type: \"fill\",\n value: \"currentColor\",\n },\n outlineColor: {\n default: \"focus-ring\",\n isStaticColor: \"transparent-overlay-1000\",\n forcedColors: \"Highlight\",\n },\n forcedColorAdjust: \"none\",\n disableTapHighlight: true,\n },\n getAllowedOverrides(),\n);\n\nexport const s2ButtonText = style<{ isProgressVisible?: boolean }>({\n paddingY: \"--labelPadding\",\n order: 1,\n visibility: {\n isProgressVisible: \"hidden\",\n },\n});\n\nexport const s2ButtonPendingIndicator = style<{\n isPending?: boolean;\n isProgressVisible?: boolean;\n}>({\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n visibility: {\n default: \"hidden\",\n isProgressVisible: \"visible\",\n },\n});\n","import {\n children as resolveChildren,\n mergeProps,\n splitProps,\n useContext,\n type JSX,\n} from \"solid-js\";\nimport {\n DialogTriggerContext,\n Link as HeadlessLink,\n PopoverTriggerContext,\n type LinkProps as HeadlessLinkProps,\n type LinkRenderProps,\n} from \"@proyecto-viviana/solidaria-components\";\nimport type { StyleString } from \"../style\";\nimport { fontRelative, style } from \"../style\" with { type: \"macro\" };\nimport { IconContext } from \"../icon/spectrum-icon\";\nimport { centerBaseline } from \"../icon/center-baseline\";\nimport { SkeletonContext } from \"../skeleton\";\nimport { TextContext } from \"../text\";\nimport { useProviderProps } from \"../provider\";\nimport { pressScale } from \"../pressScale\";\nimport { useLinkButtonContext } from \"./context\";\nimport { s2Button, s2ButtonText } from \"./s2-button-styles\";\nimport {\n getSlottedContextProps,\n mergeContextRefs,\n mergeContextStyles,\n mergeContextUnsafeStyle,\n type RefLike,\n} from \"./spectrum-context\";\nimport type { ButtonFillStyle, ButtonSize, ButtonVariant, StaticColor } from \"./types\";\nimport { getSingleTextChild } from \"./text-child\";\n\ntype StyledLinkButtonBaseProps = Omit<\n HeadlessLinkProps,\n \"class\" | \"style\" | \"children\" | \"onClick\"\n>;\n\nexport interface LinkButtonProps extends StyledLinkButtonBaseProps {\n /** The content to display in the LinkButton. */\n children?: JSX.Element;\n /** The visual style of the LinkButton. */\n variant?: ButtonVariant;\n /** The background style of the LinkButton. */\n fillStyle?: ButtonFillStyle;\n /** The size of the LinkButton. */\n size?: ButtonSize;\n /** The static color style to apply. Useful when the LinkButton appears over a color background. */\n staticColor?: StaticColor;\n /** Spectrum-defined generated classes. */\n styles?: StyleString;\n /** Additional CSS class name. Use only as a last resort. */\n UNSAFE_className?: string;\n /** Additional inline styles. Use only as a last resort. */\n UNSAFE_style?: JSX.CSSProperties;\n}\n\n/**\n * A LinkButton navigates like a link while using the S2 Button visual treatment.\n */\nexport function LinkButton(props: LinkButtonProps): JSX.Element {\n const providerProps = useProviderProps(props);\n const contextProps = getSlottedContextProps(useLinkButtonContext(), props.slot);\n const defaultProps: Partial<LinkButtonProps> = {\n variant: \"primary\",\n size: \"M\",\n fillStyle: \"fill\",\n };\n const merged = mergeProps(defaultProps, providerProps, contextProps ?? {}, props);\n const [local, headlessProps] = splitProps(merged, [\n \"variant\",\n \"fillStyle\",\n \"size\",\n \"staticColor\",\n \"styles\",\n \"UNSAFE_className\",\n \"UNSAFE_style\",\n \"children\",\n \"ref\",\n ]);\n\n const variant = (): ButtonVariant => local.variant ?? \"primary\";\n const fillStyle = (): ButtonFillStyle => local.fillStyle ?? \"fill\";\n const size = (): ButtonSize => local.size ?? \"M\";\n const mergedStyles = () => mergeContextStyles(contextProps?.styles, props.styles);\n const mergedUnsafeStyle = () =>\n mergeContextUnsafeStyle(contextProps?.UNSAFE_style, props.UNSAFE_style);\n const dialogTriggerContext = useContext(DialogTriggerContext);\n const popoverTriggerContext = useContext(PopoverTriggerContext);\n let linkElement: HTMLAnchorElement | undefined;\n const assignLinkRefs = mergeContextRefs(\n (contextProps as { ref?: RefLike<HTMLElement> } | null)?.ref,\n props.ref,\n );\n const isOverlayTriggerOpen = () =>\n !!linkElement &&\n ((dialogTriggerContext?.triggerRef() === linkElement && dialogTriggerContext.state.isOpen()) ||\n (popoverTriggerContext?.triggerRef() === linkElement &&\n popoverTriggerContext.state.isOpen()));\n\n const getClassName = (renderProps: LinkRenderProps): string =>\n [\n local.UNSAFE_className,\n s2Button(\n {\n isHovered: renderProps.isHovered || isOverlayTriggerOpen(),\n isPressed: renderProps.isPressed,\n isFocused: renderProps.isFocused,\n isFocusVisible: renderProps.isFocusVisible,\n isDisabled: renderProps.isDisabled,\n isPending: false,\n variant: variant(),\n fillStyle: fillStyle(),\n size: size(),\n staticColor: local.staticColor,\n isStaticColor: !!local.staticColor,\n },\n mergedStyles(),\n ),\n ]\n .filter(Boolean)\n .join(\" \");\n\n const getStyle = (renderProps: LinkRenderProps): JSX.CSSProperties =>\n pressScale(() => linkElement, mergedUnsafeStyle())(renderProps);\n\n function LinkButtonContent() {\n const iconContextValue = {\n slot: \"icon\",\n render: centerBaseline({ slot: \"icon\", styles: style({ order: 0 }) }),\n styles: style({\n size: fontRelative(20),\n marginStart: \"--iconMargin\",\n flexShrink: 0,\n }),\n };\n const textContextValue = {\n styles: () => s2ButtonText({ isProgressVisible: false }),\n \"data-rsp-slot\": \"text\",\n };\n\n function ResolvedContent() {\n const resolvedChildren = resolveChildren(() => local.children);\n const content = () => resolvedChildren();\n const textChild = () => getSingleTextChild(content());\n\n return textChild() !== undefined ? (\n <span class={s2ButtonText({ isProgressVisible: false })} data-rsp-slot=\"text\">\n {textChild()}\n </span>\n ) : (\n content()\n );\n }\n\n return (\n <>\n <SkeletonContext.Provider value={null}>\n <TextContext.Provider value={textContextValue}>\n <IconContext.Provider value={iconContextValue}>\n <ResolvedContent />\n </IconContext.Provider>\n </TextContext.Provider>\n </SkeletonContext.Provider>\n </>\n );\n }\n\n return (\n <HeadlessLink\n {...headlessProps}\n class={getClassName}\n style={getStyle}\n ref={(element: HTMLElement) => {\n linkElement = element as HTMLAnchorElement;\n assignLinkRefs(element);\n }}\n >\n <LinkButtonContent />\n </HeadlessLink>\n );\n}\n"],"mappings":"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"}
@@ -257,17 +257,17 @@ const rangeCalendarCellInner = function anonymous(props) {
257
257
  else rules += " gtq3xC151";
258
258
  else rules += " g7xrik151";
259
259
  else if (props.isDisabled) rules += " g9151";
260
- else if (props.isPressed) rules += " gJLwrv151";
261
- else if (props.isHovered) rules += " gJLwrv151";
262
- else rules += " gI9Ko6c151";
260
+ else if (props.isPressed) rules += " gKDgA3151";
261
+ else if (props.isHovered) rules += " gKDgA3151";
262
+ else rules += " gnhAeB151";
263
263
  else if (props.isSelectionStart) if (props.isInvalid) if (props.isPressed) rules += " gtq3xC151";
264
264
  else if (props.isHovered) if (props.isUnavailable) rules += " g7xrik151";
265
265
  else rules += " gtq3xC151";
266
266
  else rules += " g7xrik151";
267
267
  else if (props.isDisabled) rules += " g9151";
268
- else if (props.isPressed) rules += " gJLwrv151";
269
- else if (props.isHovered) rules += " gJLwrv151";
270
- else rules += " gI9Ko6c151";
268
+ else if (props.isPressed) rules += " gKDgA3151";
269
+ else if (props.isHovered) rules += " gKDgA3151";
270
+ else rules += " gnhAeB151";
271
271
  else if (props.isSelected) {
272
272
  if (props.isHovered) if (props.isInvalid) if (props.isUnavailable) rules += " g9151";
273
273
  else rules += " g055REd151";
@@ -407,7 +407,7 @@ const rangeCalendarHelpText = function anonymous(props) {
407
407
  } else if (props.isInvalid) {
408
408
  rules += " pYjUhNc151";
409
409
  rules += " plQBRyrc151";
410
- } else rules += " pUUi0Fe151";
410
+ } else rules += " pWQ7V3d151";
411
411
  rules += " -_8sjo0b-t5ZbAob151";
412
412
  rules += " _qb151";
413
413
  rules += " TgOnRt151";