siesa-ui-kit 1.0.4 → 1.0.5

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 (541) hide show
  1. package/README.md +89 -115
  2. package/bin/install.cjs +502 -502
  3. package/bin/prepare-publish.cjs +28 -28
  4. package/bin/restore-folders.cjs +28 -28
  5. package/claude/agents/siesa-ui-kit-specialist.md +2401 -2445
  6. package/claude/prompts/component-template.md +121 -121
  7. package/claude/settings.local.json +61 -72
  8. package/docs/border-radius.md +1261 -1261
  9. package/docs/colors.md +832 -832
  10. package/docs/dark-mode-guide.md +1426 -1426
  11. package/docs/filters.md +1243 -1243
  12. package/docs/icons.md +1283 -1264
  13. package/docs/shadows.md +1377 -1377
  14. package/docs/spacing.md +1684 -1684
  15. package/docs/typography.md +1268 -1268
  16. package/package.json +83 -111
  17. package/postcss.config.cjs +6 -6
  18. package/src/App.css +42 -42
  19. package/src/App.tsx +8 -8
  20. package/src/ButtonTest.tsx +147 -147
  21. package/src/assets/fonts/README.md +261 -261
  22. package/src/components/Alert/Alert.stories.tsx +332 -332
  23. package/src/components/Alert/Alert.tsx +106 -106
  24. package/src/components/Alert/Alert.types.ts +54 -54
  25. package/src/components/Avatar/Avatar.stories.tsx +494 -494
  26. package/src/components/Avatar/Avatar.tsx +143 -143
  27. package/src/components/Avatar/Avatar.types.ts +53 -53
  28. package/src/components/Badge/Badge.stories.tsx +339 -339
  29. package/src/components/Badge/Badge.tsx +278 -278
  30. package/src/components/Badge/Badge.types.ts +58 -58
  31. package/src/components/Button/Button.stories.tsx +950 -950
  32. package/src/components/Button/Button.tsx +337 -337
  33. package/src/components/Button/Button.types.ts +180 -180
  34. package/src/components/Button/icons.tsx +87 -48
  35. package/src/components/Button/index.ts +3 -3
  36. package/src/components/Checkbox/Checkbox.stories.tsx +453 -453
  37. package/src/components/Checkbox/Checkbox.tsx +208 -208
  38. package/src/components/Checkbox/Checkbox.types.ts +61 -61
  39. package/src/components/DescriptionList/DescriptionList.stories.tsx +250 -250
  40. package/src/components/DescriptionList/DescriptionList.tsx +96 -96
  41. package/src/components/DescriptionList/DescriptionList.types.ts +29 -29
  42. package/src/components/Divider/Divider.stories.tsx +263 -263
  43. package/src/components/Divider/Divider.tsx +80 -80
  44. package/src/components/Divider/Divider.types.ts +24 -24
  45. package/src/components/Dropdown/Dropdown.stories.tsx +552 -552
  46. package/src/components/Dropdown/Dropdown.tsx +422 -422
  47. package/src/components/Dropdown/Dropdown.types.ts +146 -146
  48. package/src/components/Dropdown/README.md +266 -266
  49. package/src/components/Dropdown/icons.tsx +72 -72
  50. package/src/components/Dropdown/index.ts +8 -8
  51. package/src/components/Input/Input.stories.tsx +583 -583
  52. package/src/components/Input/Input.tsx +204 -204
  53. package/src/components/Input/Input.types.ts +80 -80
  54. package/src/components/Input/icons.tsx +145 -145
  55. package/src/components/Input/index.ts +2 -2
  56. package/src/components/LoginView/LoginView.stories.tsx +148 -148
  57. package/src/components/LoginView/LoginView.tsx +426 -426
  58. package/src/components/LoginView/LoginView.types.ts +52 -52
  59. package/src/components/LoginView/README.md +396 -396
  60. package/src/components/LoginView/icons.tsx +85 -85
  61. package/src/components/LoginView/index.ts +3 -3
  62. package/src/components/Navbar/Navbar.stories.tsx +810 -810
  63. package/src/components/Navbar/Navbar.tsx +755 -755
  64. package/src/components/Navbar/Navbar.types.ts +219 -219
  65. package/src/components/Navbar/README.md +279 -279
  66. package/src/components/Navbar/icons.tsx +102 -102
  67. package/src/components/Navbar/index.ts +8 -8
  68. package/src/components/NavigationBar/NavigationBar.stories.tsx +406 -406
  69. package/src/components/NavigationBar/NavigationBar.tsx +246 -246
  70. package/src/components/NavigationBar/NavigationBar.types.ts +74 -74
  71. package/src/components/NavigationBar/README.md +469 -469
  72. package/src/components/NavigationBar/index.ts +2 -2
  73. package/src/components/NavigationRail/NavigationRail.stories.tsx +417 -417
  74. package/src/components/NavigationRail/NavigationRail.tsx +418 -418
  75. package/src/components/NavigationRail/NavigationRail.types.ts +109 -109
  76. package/src/components/NavigationRail/README.md +224 -224
  77. package/src/components/NavigationRail/index.ts +2 -2
  78. package/src/components/Notification/Notification.stories.tsx +513 -513
  79. package/src/components/Notification/Notification.tsx +145 -145
  80. package/src/components/Notification/Notification.types.ts +142 -142
  81. package/src/components/Notification/README.md +409 -409
  82. package/src/components/Notification/index.ts +3 -3
  83. package/src/components/POSConvention/POSConvention.stories.tsx +235 -235
  84. package/src/components/POSConvention/POSConvention.tsx +129 -129
  85. package/src/components/POSConvention/POSConvention.types.ts +38 -38
  86. package/src/components/POSConvention/README.md +123 -123
  87. package/src/components/POSConvention/icons.tsx +45 -45
  88. package/src/components/POSConvention/index.ts +3 -3
  89. package/src/components/POSLocationButton/POSLocationButton.stories.tsx +531 -531
  90. package/src/components/POSLocationButton/POSLocationButton.tsx +247 -247
  91. package/src/components/POSLocationButton/POSLocationButton.types.ts +87 -87
  92. package/src/components/POSLocationButton/README.md +253 -253
  93. package/src/components/POSLocationButton/icons.tsx +120 -120
  94. package/src/components/POSLocationButton/index.ts +14 -14
  95. package/src/components/POSNumberButton/POSNumberButton.stories.tsx +415 -415
  96. package/src/components/POSNumberButton/POSNumberButton.tsx +179 -179
  97. package/src/components/POSNumberButton/POSNumberButton.types.ts +51 -51
  98. package/src/components/POSNumberButton/README.md +321 -321
  99. package/src/components/POSNumberButton/index.ts +3 -3
  100. package/src/components/POSProductButton/POSProductButton.stories.tsx +318 -318
  101. package/src/components/POSProductButton/POSProductButton.tsx +152 -152
  102. package/src/components/POSProductButton/POSProductButton.types.ts +46 -46
  103. package/src/components/POSProductButton/README.md +269 -269
  104. package/src/components/POSProductButton/index.ts +2 -2
  105. package/src/components/POSProductCard/POSProductCard.stories.tsx +642 -642
  106. package/src/components/POSProductCard/POSProductCard.tsx +208 -208
  107. package/src/components/POSProductCard/POSProductCard.types.ts +76 -76
  108. package/src/components/POSProductCard/README.md +179 -179
  109. package/src/components/POSProductCard/icons.tsx +26 -26
  110. package/src/components/POSProductCard/index.ts +2 -2
  111. package/src/components/POSProductSidebarItems/POSProductSidebarItems.stories.tsx +753 -753
  112. package/src/components/POSProductSidebarItems/POSProductSidebarItems.tsx +332 -332
  113. package/src/components/POSProductSidebarItems/POSProductSidebarItems.types.ts +119 -119
  114. package/src/components/POSProductSidebarItems/README.md +198 -198
  115. package/src/components/POSProductSidebarItems/icons.tsx +21 -21
  116. package/src/components/POSProductSidebarItems/index.ts +3 -3
  117. package/src/components/POSTable/POSTable.stories.tsx +737 -737
  118. package/src/components/POSTable/POSTable.tsx +401 -401
  119. package/src/components/POSTable/POSTable.types.ts +83 -83
  120. package/src/components/POSTable/README.md +286 -286
  121. package/src/components/POSTable/index.ts +7 -7
  122. package/src/components/Pagination/Pagination.stories.tsx +555 -555
  123. package/src/components/Pagination/Pagination.tsx +286 -286
  124. package/src/components/Pagination/Pagination.types.ts +93 -93
  125. package/src/components/Pagination/README.md +298 -298
  126. package/src/components/Pagination/icons.tsx +47 -47
  127. package/src/components/Pagination/index.ts +3 -3
  128. package/src/components/Quantity/Quantity.stories.tsx +457 -457
  129. package/src/components/Quantity/Quantity.tsx +289 -289
  130. package/src/components/Quantity/Quantity.types.ts +70 -70
  131. package/src/components/Radio/Radio.stories.tsx +523 -523
  132. package/src/components/Radio/Radio.tsx +170 -170
  133. package/src/components/Radio/Radio.types.ts +122 -122
  134. package/src/components/Select/README.md +299 -299
  135. package/src/components/Select/Select.stories.tsx +673 -705
  136. package/src/components/Select/Select.tsx +454 -457
  137. package/src/components/Select/Select.types.ts +148 -148
  138. package/src/components/Select/icons.tsx +50 -25
  139. package/src/components/Select/index.ts +3 -3
  140. package/src/components/SignUpView/SignUpView.stories.tsx +129 -129
  141. package/src/components/SignUpView/SignUpView.tsx +503 -503
  142. package/src/components/SignUpView/SignUpView.types.ts +58 -58
  143. package/src/components/SignUpView/icons.tsx +71 -71
  144. package/src/components/SignUpView/index.ts +3 -3
  145. package/src/components/Switch/README.md +112 -112
  146. package/src/components/Switch/Switch.stories.tsx +550 -550
  147. package/src/components/Switch/Switch.tsx +246 -246
  148. package/src/components/Switch/Switch.types.ts +67 -67
  149. package/src/components/Table/README.md +369 -369
  150. package/src/components/Table/Table.stories.tsx +805 -805
  151. package/src/components/Table/Table.tsx +688 -688
  152. package/src/components/Table/Table.types.ts +204 -204
  153. package/src/components/Table/index.ts +9 -9
  154. package/src/components/Tabs/README.md +201 -201
  155. package/src/components/Tabs/Tabs.stories.tsx +580 -580
  156. package/src/components/Tabs/Tabs.tsx +356 -356
  157. package/src/components/Tabs/Tabs.types.ts +127 -127
  158. package/src/components/Tabs/icons.tsx +129 -129
  159. package/src/components/Tabs/index.ts +11 -11
  160. package/src/components/Textarea/Textarea.stories.tsx +535 -535
  161. package/src/components/Textarea/Textarea.tsx +188 -188
  162. package/src/components/Textarea/Textarea.types.ts +54 -54
  163. package/src/context/ThemeContext.tsx +99 -99
  164. package/src/context/index.ts +1 -1
  165. package/src/index.css +29 -29
  166. package/src/index.ts +39 -133
  167. package/src/main.tsx +10 -10
  168. package/src/views/ProductsView/ProductsView.stories.tsx +344 -344
  169. package/src/views/ProductsView/ProductsView.tsx +480 -480
  170. package/src/views/ProductsView/ProductsView.types.ts +238 -238
  171. package/src/views/ProductsView/README.md +312 -312
  172. package/src/views/ProductsView/icons.tsx +38 -38
  173. package/src/views/ProductsView/index.ts +8 -8
  174. package/src/views/RecoverPasswordView/README.md +269 -269
  175. package/src/views/RecoverPasswordView/RecoverPasswordView.stories.tsx +131 -131
  176. package/src/views/RecoverPasswordView/RecoverPasswordView.tsx +376 -376
  177. package/src/views/RecoverPasswordView/RecoverPasswordView.types.ts +56 -56
  178. package/src/views/RecoverPasswordView/icons.tsx +17 -17
  179. package/src/views/RecoverPasswordView/index.ts +2 -2
  180. package/src/views/TableLayoutView/README.md +268 -268
  181. package/src/views/TableLayoutView/TableLayoutView.stories.tsx +235 -235
  182. package/src/views/TableLayoutView/TableLayoutView.tsx +461 -461
  183. package/src/views/TableLayoutView/TableLayoutView.types.ts +209 -209
  184. package/src/views/TableLayoutView/icons.tsx +113 -113
  185. package/src/views/TableLayoutView/index.ts +6 -6
  186. package/storybook/main.ts +19 -19
  187. package/storybook/preview.tsx +84 -84
  188. package/storybook/vitest.setup.ts +6 -6
  189. package/tailwind.config.js +128 -128
  190. package/claude/prompts/siesa-ui-kit.md +0 -28
  191. package/dist/ButtonTest.d.ts +0 -6
  192. package/dist/ButtonTest.d.ts.map +0 -1
  193. package/dist/components/Alert/Alert.d.ts +0 -23
  194. package/dist/components/Alert/Alert.d.ts.map +0 -1
  195. package/dist/components/Alert/Alert.types.d.ts +0 -46
  196. package/dist/components/Alert/Alert.types.d.ts.map +0 -1
  197. package/dist/components/Avatar/Avatar.d.ts +0 -41
  198. package/dist/components/Avatar/Avatar.d.ts.map +0 -1
  199. package/dist/components/Avatar/Avatar.types.d.ts +0 -46
  200. package/dist/components/Avatar/Avatar.types.d.ts.map +0 -1
  201. package/dist/components/Badge/Badge.d.ts +0 -42
  202. package/dist/components/Badge/Badge.d.ts.map +0 -1
  203. package/dist/components/Badge/Badge.types.d.ts +0 -32
  204. package/dist/components/Badge/Badge.types.d.ts.map +0 -1
  205. package/dist/components/Button/Button.d.ts +0 -84
  206. package/dist/components/Button/Button.d.ts.map +0 -1
  207. package/dist/components/Button/Button.types.d.ts +0 -162
  208. package/dist/components/Button/Button.types.d.ts.map +0 -1
  209. package/dist/components/Button/icons.d.ts +0 -27
  210. package/dist/components/Button/icons.d.ts.map +0 -1
  211. package/dist/components/Button/index.d.ts +0 -4
  212. package/dist/components/Button/index.d.ts.map +0 -1
  213. package/dist/components/Checkbox/Checkbox.d.ts +0 -31
  214. package/dist/components/Checkbox/Checkbox.d.ts.map +0 -1
  215. package/dist/components/Checkbox/Checkbox.types.d.ts +0 -53
  216. package/dist/components/Checkbox/Checkbox.types.d.ts.map +0 -1
  217. package/dist/components/DescriptionList/DescriptionList.d.ts +0 -38
  218. package/dist/components/DescriptionList/DescriptionList.d.ts.map +0 -1
  219. package/dist/components/DescriptionList/DescriptionList.types.d.ts +0 -27
  220. package/dist/components/DescriptionList/DescriptionList.types.d.ts.map +0 -1
  221. package/dist/components/Divider/Divider.d.ts +0 -33
  222. package/dist/components/Divider/Divider.d.ts.map +0 -1
  223. package/dist/components/Divider/Divider.types.d.ts +0 -22
  224. package/dist/components/Divider/Divider.types.d.ts.map +0 -1
  225. package/dist/components/Dropdown/Dropdown.d.ts +0 -66
  226. package/dist/components/Dropdown/Dropdown.d.ts.map +0 -1
  227. package/dist/components/Dropdown/Dropdown.types.d.ts +0 -124
  228. package/dist/components/Dropdown/Dropdown.types.d.ts.map +0 -1
  229. package/dist/components/Dropdown/icons.d.ts +0 -10
  230. package/dist/components/Dropdown/icons.d.ts.map +0 -1
  231. package/dist/components/Dropdown/index.d.ts +0 -4
  232. package/dist/components/Dropdown/index.d.ts.map +0 -1
  233. package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.d.ts +0 -101
  234. package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.d.ts.map +0 -1
  235. package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.types.d.ts +0 -116
  236. package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.types.d.ts.map +0 -1
  237. package/dist/components/DropdownItemCollapsible/icons.d.ts +0 -19
  238. package/dist/components/DropdownItemCollapsible/icons.d.ts.map +0 -1
  239. package/dist/components/DropdownItemCollapsible/index.d.ts +0 -9
  240. package/dist/components/DropdownItemCollapsible/index.d.ts.map +0 -1
  241. package/dist/components/DropdownItemHeading/DropdownItemHeading.d.ts +0 -75
  242. package/dist/components/DropdownItemHeading/DropdownItemHeading.d.ts.map +0 -1
  243. package/dist/components/DropdownItemHeading/DropdownItemHeading.types.d.ts +0 -85
  244. package/dist/components/DropdownItemHeading/DropdownItemHeading.types.d.ts.map +0 -1
  245. package/dist/components/DropdownItemHeading/icons.d.ts +0 -48
  246. package/dist/components/DropdownItemHeading/icons.d.ts.map +0 -1
  247. package/dist/components/DropdownItemHeading/index.d.ts +0 -4
  248. package/dist/components/DropdownItemHeading/index.d.ts.map +0 -1
  249. package/dist/components/Input/Input.d.ts +0 -40
  250. package/dist/components/Input/Input.d.ts.map +0 -1
  251. package/dist/components/Input/Input.types.d.ts +0 -71
  252. package/dist/components/Input/Input.types.d.ts.map +0 -1
  253. package/dist/components/Input/icons.d.ts +0 -15
  254. package/dist/components/Input/icons.d.ts.map +0 -1
  255. package/dist/components/Input/index.d.ts +0 -3
  256. package/dist/components/Input/index.d.ts.map +0 -1
  257. package/dist/components/LoginView/LoginView.d.ts +0 -36
  258. package/dist/components/LoginView/LoginView.d.ts.map +0 -1
  259. package/dist/components/LoginView/LoginView.types.d.ts +0 -46
  260. package/dist/components/LoginView/LoginView.types.d.ts.map +0 -1
  261. package/dist/components/LoginView/icons.d.ts +0 -18
  262. package/dist/components/LoginView/icons.d.ts.map +0 -1
  263. package/dist/components/LoginView/index.d.ts +0 -4
  264. package/dist/components/LoginView/index.d.ts.map +0 -1
  265. package/dist/components/Navbar/Navbar.d.ts +0 -63
  266. package/dist/components/Navbar/Navbar.d.ts.map +0 -1
  267. package/dist/components/Navbar/Navbar.types.d.ts +0 -194
  268. package/dist/components/Navbar/Navbar.types.d.ts.map +0 -1
  269. package/dist/components/Navbar/icons.d.ts +0 -12
  270. package/dist/components/Navbar/icons.d.ts.map +0 -1
  271. package/dist/components/Navbar/index.d.ts +0 -4
  272. package/dist/components/Navbar/index.d.ts.map +0 -1
  273. package/dist/components/NavigationBar/NavigationBar.d.ts +0 -75
  274. package/dist/components/NavigationBar/NavigationBar.d.ts.map +0 -1
  275. package/dist/components/NavigationBar/NavigationBar.types.d.ts +0 -63
  276. package/dist/components/NavigationBar/NavigationBar.types.d.ts.map +0 -1
  277. package/dist/components/NavigationBar/index.d.ts +0 -3
  278. package/dist/components/NavigationBar/index.d.ts.map +0 -1
  279. package/dist/components/NavigationRail/NavigationRail.d.ts +0 -7
  280. package/dist/components/NavigationRail/NavigationRail.d.ts.map +0 -1
  281. package/dist/components/NavigationRail/NavigationRail.types.d.ts +0 -92
  282. package/dist/components/NavigationRail/NavigationRail.types.d.ts.map +0 -1
  283. package/dist/components/NavigationRail/index.d.ts +0 -3
  284. package/dist/components/NavigationRail/index.d.ts.map +0 -1
  285. package/dist/components/NavigationRailCommercial/NavigationRailCommercial.d.ts +0 -122
  286. package/dist/components/NavigationRailCommercial/NavigationRailCommercial.d.ts.map +0 -1
  287. package/dist/components/NavigationRailCommercial/NavigationRailCommercial.types.d.ts +0 -139
  288. package/dist/components/NavigationRailCommercial/NavigationRailCommercial.types.d.ts.map +0 -1
  289. package/dist/components/NavigationRailCommercial/icons.d.ts +0 -33
  290. package/dist/components/NavigationRailCommercial/icons.d.ts.map +0 -1
  291. package/dist/components/NavigationRailCommercial/index.d.ts +0 -4
  292. package/dist/components/NavigationRailCommercial/index.d.ts.map +0 -1
  293. package/dist/components/NavigationRailItem/NavigationRailItem.d.ts +0 -90
  294. package/dist/components/NavigationRailItem/NavigationRailItem.d.ts.map +0 -1
  295. package/dist/components/NavigationRailItem/NavigationRailItem.types.d.ts +0 -162
  296. package/dist/components/NavigationRailItem/NavigationRailItem.types.d.ts.map +0 -1
  297. package/dist/components/NavigationRailItem/index.d.ts +0 -3
  298. package/dist/components/NavigationRailItem/index.d.ts.map +0 -1
  299. package/dist/components/NavigationRailPanel/NavigationRailPanel.d.ts +0 -124
  300. package/dist/components/NavigationRailPanel/NavigationRailPanel.d.ts.map +0 -1
  301. package/dist/components/NavigationRailPanel/NavigationRailPanel.types.d.ts +0 -154
  302. package/dist/components/NavigationRailPanel/NavigationRailPanel.types.d.ts.map +0 -1
  303. package/dist/components/NavigationRailPanel/index.d.ts +0 -3
  304. package/dist/components/NavigationRailPanel/index.d.ts.map +0 -1
  305. package/dist/components/NavigationRailTypes/NavigationRailTypes.d.ts +0 -99
  306. package/dist/components/NavigationRailTypes/NavigationRailTypes.d.ts.map +0 -1
  307. package/dist/components/NavigationRailTypes/NavigationRailTypes.types.d.ts +0 -152
  308. package/dist/components/NavigationRailTypes/NavigationRailTypes.types.d.ts.map +0 -1
  309. package/dist/components/NavigationRailTypes/icons.d.ts +0 -44
  310. package/dist/components/NavigationRailTypes/icons.d.ts.map +0 -1
  311. package/dist/components/NavigationRailTypes/index.d.ts +0 -4
  312. package/dist/components/NavigationRailTypes/index.d.ts.map +0 -1
  313. package/dist/components/Notification/Notification.d.ts +0 -52
  314. package/dist/components/Notification/Notification.d.ts.map +0 -1
  315. package/dist/components/Notification/Notification.types.d.ts +0 -138
  316. package/dist/components/Notification/Notification.types.d.ts.map +0 -1
  317. package/dist/components/Notification/index.d.ts +0 -3
  318. package/dist/components/Notification/index.d.ts.map +0 -1
  319. package/dist/components/POSConvention/POSConvention.d.ts +0 -55
  320. package/dist/components/POSConvention/POSConvention.d.ts.map +0 -1
  321. package/dist/components/POSConvention/POSConvention.types.d.ts +0 -37
  322. package/dist/components/POSConvention/POSConvention.types.d.ts.map +0 -1
  323. package/dist/components/POSConvention/icons.d.ts +0 -21
  324. package/dist/components/POSConvention/icons.d.ts.map +0 -1
  325. package/dist/components/POSConvention/index.d.ts +0 -4
  326. package/dist/components/POSConvention/index.d.ts.map +0 -1
  327. package/dist/components/POSLocationButton/POSLocationButton.d.ts +0 -73
  328. package/dist/components/POSLocationButton/POSLocationButton.d.ts.map +0 -1
  329. package/dist/components/POSLocationButton/POSLocationButton.types.d.ts +0 -75
  330. package/dist/components/POSLocationButton/POSLocationButton.types.d.ts.map +0 -1
  331. package/dist/components/POSLocationButton/icons.d.ts +0 -37
  332. package/dist/components/POSLocationButton/icons.d.ts.map +0 -1
  333. package/dist/components/POSLocationButton/index.d.ts +0 -4
  334. package/dist/components/POSLocationButton/index.d.ts.map +0 -1
  335. package/dist/components/POSNumberButton/POSNumberButton.d.ts +0 -61
  336. package/dist/components/POSNumberButton/POSNumberButton.d.ts.map +0 -1
  337. package/dist/components/POSNumberButton/POSNumberButton.types.d.ts +0 -43
  338. package/dist/components/POSNumberButton/POSNumberButton.types.d.ts.map +0 -1
  339. package/dist/components/POSNumberButton/index.d.ts +0 -3
  340. package/dist/components/POSNumberButton/index.d.ts.map +0 -1
  341. package/dist/components/POSProductButton/POSProductButton.d.ts +0 -59
  342. package/dist/components/POSProductButton/POSProductButton.d.ts.map +0 -1
  343. package/dist/components/POSProductButton/POSProductButton.types.d.ts +0 -40
  344. package/dist/components/POSProductButton/POSProductButton.types.d.ts.map +0 -1
  345. package/dist/components/POSProductButton/index.d.ts +0 -3
  346. package/dist/components/POSProductButton/index.d.ts.map +0 -1
  347. package/dist/components/POSProductCard/POSProductCard.d.ts +0 -68
  348. package/dist/components/POSProductCard/POSProductCard.d.ts.map +0 -1
  349. package/dist/components/POSProductCard/POSProductCard.types.d.ts +0 -67
  350. package/dist/components/POSProductCard/POSProductCard.types.d.ts.map +0 -1
  351. package/dist/components/POSProductCard/icons.d.ts +0 -10
  352. package/dist/components/POSProductCard/icons.d.ts.map +0 -1
  353. package/dist/components/POSProductCard/index.d.ts +0 -3
  354. package/dist/components/POSProductCard/index.d.ts.map +0 -1
  355. package/dist/components/POSProductSidebarItems/POSProductSidebarItems.d.ts +0 -57
  356. package/dist/components/POSProductSidebarItems/POSProductSidebarItems.d.ts.map +0 -1
  357. package/dist/components/POSProductSidebarItems/POSProductSidebarItems.types.d.ts +0 -85
  358. package/dist/components/POSProductSidebarItems/POSProductSidebarItems.types.d.ts.map +0 -1
  359. package/dist/components/POSProductSidebarItems/icons.d.ts +0 -9
  360. package/dist/components/POSProductSidebarItems/icons.d.ts.map +0 -1
  361. package/dist/components/POSProductSidebarItems/index.d.ts +0 -4
  362. package/dist/components/POSProductSidebarItems/index.d.ts.map +0 -1
  363. package/dist/components/POSTable/POSTable.d.ts +0 -75
  364. package/dist/components/POSTable/POSTable.d.ts.map +0 -1
  365. package/dist/components/POSTable/POSTable.types.d.ts +0 -71
  366. package/dist/components/POSTable/POSTable.types.d.ts.map +0 -1
  367. package/dist/components/POSTable/index.d.ts +0 -3
  368. package/dist/components/POSTable/index.d.ts.map +0 -1
  369. package/dist/components/Pagination/Pagination.d.ts +0 -29
  370. package/dist/components/Pagination/Pagination.d.ts.map +0 -1
  371. package/dist/components/Pagination/Pagination.types.d.ts +0 -79
  372. package/dist/components/Pagination/Pagination.types.d.ts.map +0 -1
  373. package/dist/components/Pagination/icons.d.ts +0 -18
  374. package/dist/components/Pagination/icons.d.ts.map +0 -1
  375. package/dist/components/Pagination/index.d.ts +0 -4
  376. package/dist/components/Pagination/index.d.ts.map +0 -1
  377. package/dist/components/Quantity/Quantity.d.ts +0 -38
  378. package/dist/components/Quantity/Quantity.d.ts.map +0 -1
  379. package/dist/components/Quantity/Quantity.types.d.ts +0 -59
  380. package/dist/components/Quantity/Quantity.types.d.ts.map +0 -1
  381. package/dist/components/Radio/Radio.d.ts +0 -45
  382. package/dist/components/Radio/Radio.d.ts.map +0 -1
  383. package/dist/components/Radio/Radio.types.d.ts +0 -115
  384. package/dist/components/Radio/Radio.types.d.ts.map +0 -1
  385. package/dist/components/Select/Select.d.ts +0 -37
  386. package/dist/components/Select/Select.d.ts.map +0 -1
  387. package/dist/components/Select/Select.types.d.ts +0 -124
  388. package/dist/components/Select/Select.types.d.ts.map +0 -1
  389. package/dist/components/Select/icons.d.ts +0 -20
  390. package/dist/components/Select/icons.d.ts.map +0 -1
  391. package/dist/components/Select/index.d.ts +0 -4
  392. package/dist/components/Select/index.d.ts.map +0 -1
  393. package/dist/components/SignUpView/SignUpView.d.ts +0 -38
  394. package/dist/components/SignUpView/SignUpView.d.ts.map +0 -1
  395. package/dist/components/SignUpView/SignUpView.types.d.ts +0 -51
  396. package/dist/components/SignUpView/SignUpView.types.d.ts.map +0 -1
  397. package/dist/components/SignUpView/icons.d.ts +0 -18
  398. package/dist/components/SignUpView/icons.d.ts.map +0 -1
  399. package/dist/components/SignUpView/index.d.ts +0 -4
  400. package/dist/components/SignUpView/index.d.ts.map +0 -1
  401. package/dist/components/Switch/Switch.d.ts +0 -46
  402. package/dist/components/Switch/Switch.d.ts.map +0 -1
  403. package/dist/components/Switch/Switch.types.d.ts +0 -58
  404. package/dist/components/Switch/Switch.types.d.ts.map +0 -1
  405. package/dist/components/Table/Table.d.ts +0 -64
  406. package/dist/components/Table/Table.d.ts.map +0 -1
  407. package/dist/components/Table/Table.types.d.ts +0 -173
  408. package/dist/components/Table/Table.types.d.ts.map +0 -1
  409. package/dist/components/Table/index.d.ts +0 -3
  410. package/dist/components/Table/index.d.ts.map +0 -1
  411. package/dist/components/Tabs/Tabs.d.ts +0 -76
  412. package/dist/components/Tabs/Tabs.d.ts.map +0 -1
  413. package/dist/components/Tabs/Tabs.types.d.ts +0 -107
  414. package/dist/components/Tabs/Tabs.types.d.ts.map +0 -1
  415. package/dist/components/Tabs/icons.d.ts +0 -45
  416. package/dist/components/Tabs/icons.d.ts.map +0 -1
  417. package/dist/components/Tabs/index.d.ts +0 -4
  418. package/dist/components/Tabs/index.d.ts.map +0 -1
  419. package/dist/components/Textarea/Textarea.d.ts +0 -38
  420. package/dist/components/Textarea/Textarea.d.ts.map +0 -1
  421. package/dist/components/Textarea/Textarea.types.d.ts +0 -46
  422. package/dist/components/Textarea/Textarea.types.d.ts.map +0 -1
  423. package/dist/context/ThemeContext.d.ts +0 -46
  424. package/dist/context/ThemeContext.d.ts.map +0 -1
  425. package/dist/context/index.d.ts +0 -2
  426. package/dist/context/index.d.ts.map +0 -1
  427. package/dist/index.d.ts +0 -88
  428. package/dist/index.d.ts.map +0 -1
  429. package/dist/siesa-ui-kit.cjs +0 -1474
  430. package/dist/siesa-ui-kit.cjs.map +0 -1
  431. package/dist/siesa-ui-kit.mjs +0 -9580
  432. package/dist/siesa-ui-kit.mjs.map +0 -1
  433. package/dist/views/LayoutCommercial/LayoutCommercial.d.ts +0 -48
  434. package/dist/views/LayoutCommercial/LayoutCommercial.d.ts.map +0 -1
  435. package/dist/views/LayoutCommercial/LayoutCommercial.types.d.ts +0 -49
  436. package/dist/views/LayoutCommercial/LayoutCommercial.types.d.ts.map +0 -1
  437. package/dist/views/LayoutCommercial/index.d.ts +0 -3
  438. package/dist/views/LayoutCommercial/index.d.ts.map +0 -1
  439. package/dist/views/ListView/ListView.d.ts +0 -47
  440. package/dist/views/ListView/ListView.d.ts.map +0 -1
  441. package/dist/views/ListView/ListView.types.d.ts +0 -177
  442. package/dist/views/ListView/ListView.types.d.ts.map +0 -1
  443. package/dist/views/ListView/icons.d.ts +0 -60
  444. package/dist/views/ListView/icons.d.ts.map +0 -1
  445. package/dist/views/ListView/index.d.ts +0 -3
  446. package/dist/views/ListView/index.d.ts.map +0 -1
  447. package/dist/views/LoginView/LoginView.d.ts +0 -36
  448. package/dist/views/LoginView/LoginView.d.ts.map +0 -1
  449. package/dist/views/LoginView/LoginView.types.d.ts +0 -46
  450. package/dist/views/LoginView/LoginView.types.d.ts.map +0 -1
  451. package/dist/views/LoginView/icons.d.ts +0 -18
  452. package/dist/views/LoginView/icons.d.ts.map +0 -1
  453. package/dist/views/LoginView/index.d.ts +0 -4
  454. package/dist/views/LoginView/index.d.ts.map +0 -1
  455. package/dist/views/ProductsView/ProductsView.d.ts +0 -56
  456. package/dist/views/ProductsView/ProductsView.d.ts.map +0 -1
  457. package/dist/views/ProductsView/ProductsView.types.d.ts +0 -184
  458. package/dist/views/ProductsView/ProductsView.types.d.ts.map +0 -1
  459. package/dist/views/ProductsView/icons.d.ts +0 -12
  460. package/dist/views/ProductsView/icons.d.ts.map +0 -1
  461. package/dist/views/ProductsView/index.d.ts +0 -3
  462. package/dist/views/ProductsView/index.d.ts.map +0 -1
  463. package/dist/views/RecoverPasswordView/RecoverPasswordView.d.ts +0 -34
  464. package/dist/views/RecoverPasswordView/RecoverPasswordView.d.ts.map +0 -1
  465. package/dist/views/RecoverPasswordView/RecoverPasswordView.types.d.ts +0 -50
  466. package/dist/views/RecoverPasswordView/RecoverPasswordView.types.d.ts.map +0 -1
  467. package/dist/views/RecoverPasswordView/icons.d.ts +0 -9
  468. package/dist/views/RecoverPasswordView/icons.d.ts.map +0 -1
  469. package/dist/views/RecoverPasswordView/index.d.ts +0 -3
  470. package/dist/views/RecoverPasswordView/index.d.ts.map +0 -1
  471. package/dist/views/SignUpView/SignUpView.d.ts +0 -38
  472. package/dist/views/SignUpView/SignUpView.d.ts.map +0 -1
  473. package/dist/views/SignUpView/SignUpView.types.d.ts +0 -51
  474. package/dist/views/SignUpView/SignUpView.types.d.ts.map +0 -1
  475. package/dist/views/SignUpView/icons.d.ts +0 -18
  476. package/dist/views/SignUpView/icons.d.ts.map +0 -1
  477. package/dist/views/SignUpView/index.d.ts +0 -4
  478. package/dist/views/SignUpView/index.d.ts.map +0 -1
  479. package/dist/views/TableLayoutView/TableLayoutView.d.ts +0 -46
  480. package/dist/views/TableLayoutView/TableLayoutView.d.ts.map +0 -1
  481. package/dist/views/TableLayoutView/TableLayoutView.types.d.ts +0 -170
  482. package/dist/views/TableLayoutView/TableLayoutView.types.d.ts.map +0 -1
  483. package/dist/views/TableLayoutView/icons.d.ts +0 -27
  484. package/dist/views/TableLayoutView/icons.d.ts.map +0 -1
  485. package/dist/views/TableLayoutView/index.d.ts +0 -3
  486. package/dist/views/TableLayoutView/index.d.ts.map +0 -1
  487. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.stories.tsx +0 -317
  488. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.tsx +0 -307
  489. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.types.ts +0 -136
  490. package/src/components/DropdownItemCollapsible/README.md +0 -264
  491. package/src/components/DropdownItemCollapsible/icons.tsx +0 -57
  492. package/src/components/DropdownItemCollapsible/index.ts +0 -12
  493. package/src/components/DropdownItemHeading/DropdownItemHeading.stories.tsx +0 -386
  494. package/src/components/DropdownItemHeading/DropdownItemHeading.tsx +0 -216
  495. package/src/components/DropdownItemHeading/DropdownItemHeading.types.ts +0 -93
  496. package/src/components/DropdownItemHeading/README.md +0 -573
  497. package/src/components/DropdownItemHeading/icons.tsx +0 -125
  498. package/src/components/DropdownItemHeading/index.ts +0 -3
  499. package/src/components/NavigationRailCommercial/NavigationRailCommercial.stories.tsx +0 -464
  500. package/src/components/NavigationRailCommercial/NavigationRailCommercial.tsx +0 -301
  501. package/src/components/NavigationRailCommercial/NavigationRailCommercial.types.ts +0 -162
  502. package/src/components/NavigationRailCommercial/README.md +0 -251
  503. package/src/components/NavigationRailCommercial/icons.tsx +0 -54
  504. package/src/components/NavigationRailCommercial/index.ts +0 -6
  505. package/src/components/NavigationRailItem/NavigationRailItem.stories.tsx +0 -667
  506. package/src/components/NavigationRailItem/NavigationRailItem.tsx +0 -314
  507. package/src/components/NavigationRailItem/NavigationRailItem.types.ts +0 -175
  508. package/src/components/NavigationRailItem/README.md +0 -476
  509. package/src/components/NavigationRailItem/index.ts +0 -2
  510. package/src/components/NavigationRailPanel/NavigationRailPanel.stories.tsx +0 -462
  511. package/src/components/NavigationRailPanel/NavigationRailPanel.tsx +0 -332
  512. package/src/components/NavigationRailPanel/NavigationRailPanel.types.ts +0 -178
  513. package/src/components/NavigationRailPanel/README.md +0 -461
  514. package/src/components/NavigationRailPanel/index.ts +0 -6
  515. package/src/components/NavigationRailTypes/NavigationRailTypes.stories.tsx +0 -682
  516. package/src/components/NavigationRailTypes/NavigationRailTypes.tsx +0 -363
  517. package/src/components/NavigationRailTypes/NavigationRailTypes.types.ts +0 -178
  518. package/src/components/NavigationRailTypes/README.md +0 -573
  519. package/src/components/NavigationRailTypes/icons.tsx +0 -76
  520. package/src/components/NavigationRailTypes/index.ts +0 -7
  521. package/src/views/LayoutCommercial/LayoutCommercial.stories.tsx +0 -374
  522. package/src/views/LayoutCommercial/LayoutCommercial.tsx +0 -125
  523. package/src/views/LayoutCommercial/LayoutCommercial.types.ts +0 -54
  524. package/src/views/LayoutCommercial/README.md +0 -286
  525. package/src/views/LayoutCommercial/index.ts +0 -2
  526. package/src/views/ListView/ListView.stories.tsx +0 -329
  527. package/src/views/ListView/ListView.tsx +0 -570
  528. package/src/views/ListView/ListView.types.ts +0 -211
  529. package/src/views/ListView/icons.tsx +0 -282
  530. package/src/views/ListView/index.ts +0 -11
  531. package/src/views/LoginView/LoginView.stories.tsx +0 -148
  532. package/src/views/LoginView/LoginView.tsx +0 -426
  533. package/src/views/LoginView/LoginView.types.ts +0 -52
  534. package/src/views/LoginView/README.md +0 -396
  535. package/src/views/LoginView/icons.tsx +0 -85
  536. package/src/views/LoginView/index.ts +0 -3
  537. package/src/views/SignUpView/SignUpView.stories.tsx +0 -129
  538. package/src/views/SignUpView/SignUpView.tsx +0 -503
  539. package/src/views/SignUpView/SignUpView.types.ts +0 -58
  540. package/src/views/SignUpView/icons.tsx +0 -71
  541. package/src/views/SignUpView/index.ts +0 -3
package/docs/shadows.md CHANGED
@@ -1,1377 +1,1377 @@
1
- # Sistema de Sombras (Shadows) - Siesa UI Kit
2
-
3
- ## 📋 Tabla de Contenidos
4
-
5
- 1. [Introducción](#introducción)
6
- 2. [Drop Shadows](#drop-shadows)
7
- 3. [Inner Shadows](#inner-shadows)
8
- 4. [Sombras Personalizadas](#sombras-personalizadas)
9
- 5. [Guía de Uso](#guía-de-uso)
10
- 6. [Componentes del Sistema](#componentes-del-sistema)
11
- 7. [Ejemplos de Código](#ejemplos-de-código)
12
- 8. [Mejores Prácticas](#mejores-prácticas)
13
- 9. [Referencia Rápida](#referencia-rápida)
14
-
15
- ---
16
-
17
- ## Introducción
18
-
19
- El sistema de sombras de Siesa UI Kit proporciona profundidad y jerarquía visual a los componentes de la interfaz. Las sombras ayudan a establecer la elevación de elementos y mejorar la experiencia del usuario al crear una interfaz más intuitiva y dimensional.
20
-
21
- ### Objetivos del Sistema
22
-
23
- - **Jerarquía Visual**: Establecer niveles de elevación claros entre componentes
24
- - **Profundidad**: Crear sensación de tridimensionalidad en interfaces planas
25
- - **Consistencia**: Uso uniforme de sombras en todo el sistema
26
- - **Sutileza**: Sombras suaves que no distraigan del contenido
27
- - **Accesibilidad**: Sombras que mejoren la usabilidad sin depender solo de ellas
28
-
29
- ### Principios de Diseño
30
-
31
- 1. **Elevación Progresiva**: Las sombras más grandes indican mayor elevación
32
- 2. **Sutileza**: Sombras suaves con opacidad controlada (5% a 25%)
33
- 3. **Múltiples Capas**: Combinación de sombras para efectos más naturales
34
- 4. **Adaptabilidad**: Funciona en modo claro y oscuro
35
-
36
- ---
37
-
38
- ## Drop Shadows
39
-
40
- Las **drop shadows** (sombras externas) se usan para elevar elementos sobre el fondo, creando la ilusión de que flotan.
41
-
42
- ### Escala de Drop Shadows
43
-
44
- | Clase Tailwind | Valor CSS | Elevación | Uso Principal |
45
- |----------------|-----------|-----------|---------------|
46
- | `shadow-sm` | `0px 1px 2px 0px rgba(0,0,0,0.05)` | Muy baja | Bordes sutiles, separadores ligeros |
47
- | `shadow-base` | `0px 1px 2px -1px rgba(0,0,0,0.1), 0px 1px 3px 0px rgba(0,0,0,0.1)` | Baja | **Cards planos, inputs** |
48
- | `shadow-md` | `0px 2px 4px -2px rgba(0,0,0,0.1), 0px 4px 6px -1px rgba(0,0,0,0.1)` | Media-baja | Cards elevados, dropdowns |
49
- | `shadow-lg` | `0px 4px 6px -4px rgba(0,0,0,0.1), 0px 10px 15px -3px rgba(0,0,0,0.1)` | Media | **Modales, popovers** |
50
- | `shadow-xl` | `0px 8px 10px -6px rgba(0,0,0,0.1), 0px 20px 25px -5px rgba(0,0,0,0.1)` | Alta | Modales grandes, overlays |
51
- | `shadow-2xl` | `0px 25px 50px -12px rgba(0,0,0,0.25)` | Muy alta | Elementos flotantes principales |
52
-
53
- ### Características de las Sombras
54
-
55
- **Sombras de Capas Múltiples**: La mayoría incluyen 2 sombras para un efecto más natural:
56
- - **Sombra principal**: Mayor blur, más alejada, simula luz ambiental
57
- - **Sombra de contacto**: Menor blur, más cercana, define los bordes
58
-
59
- **Opacidades Controladas**:
60
- - `0.05` (5%) - Sombras muy sutiles
61
- - `0.1` (10%) - Sombras estándar (más común)
62
- - `0.25` (25%) - Sombras dramáticas
63
-
64
- ### Valores Más Comunes
65
-
66
- En el 80% de los casos, usarás estos 3 valores:
67
-
68
- 1. **`shadow-base`**: Cards y paneles estándar
69
- 2. **`shadow-lg`**: Modales y popovers
70
- 3. **`shadow-xl`**: Overlays importantes
71
-
72
- ---
73
-
74
- ## Inner Shadows
75
-
76
- Las **inner shadows** (sombras internas) crean la ilusión de profundidad hacia adentro, como si el elemento estuviera hundido.
77
-
78
- ### Escala de Inner Shadows
79
-
80
- | Clase Tailwind | Valor CSS | Uso Principal |
81
- |----------------|-----------|---------------|
82
- | `shadow-inner` | `inset 0 2px 4px 0 rgba(0,0,0,0.05)` | Inputs hundidos, áreas presionadas |
83
-
84
- ### Sombra Inner Personalizada
85
-
86
- El sistema incluye una sombra inner especial para botones:
87
-
88
- | Nombre | Valor CSS | Uso |
89
- |--------|-----------|-----|
90
- | `shadow-button-inset` | `0px 2px 0px 0px inset rgba(255,255,255,0.15)` | **Botones default** - Efecto de brillo superior |
91
-
92
- **Nota**: Esta sombra usa **blanco** con 15% de opacidad para crear un efecto de luz desde arriba, dando dimensión a los botones.
93
-
94
- ---
95
-
96
- ## Sombras Personalizadas
97
-
98
- Además de las sombras estándar de Tailwind, el sistema incluye sombras personalizadas para casos específicos.
99
-
100
- ### Tabla de Sombras Personalizadas
101
-
102
- | Nombre | Clase | Valor CSS | Uso |
103
- |--------|-------|-----------|-----|
104
- | **Button Inset** | `shadow-button-inset` | `0px 2px 0px 0px inset rgba(255,255,255,0.15)` | Botones default |
105
- | **Menu** | `shadow-menu` | `0px 4px 4px -1px rgba(12,12,13,0.05), 0px 4px 4px -1px rgba(12,12,13,0.1)` | Menús desplegables, dropdowns |
106
- | **Base** | `shadow-base` | `0px 1px 2px -1px rgba(0,0,0,0.1), 0px 1px 3px 0px rgba(0,0,0,0.1)` | Cards estándar |
107
-
108
- ### Configuración en Tailwind
109
-
110
- ```javascript
111
- // tailwind.config.js
112
- boxShadow: {
113
- // Personalizada para botones (inner shadow)
114
- 'button-inset': '0px 2px 0px 0px inset rgba(255,255,255,0.15)',
115
-
116
- // Personalizada para menús
117
- 'menu': '0px 4px 4px -1px rgba(12, 12, 13, 0.05), 0px 4px 4px -1px rgba(12, 12, 13, 0.1)',
118
- }
119
- ```
120
-
121
- ---
122
-
123
- ## Guía de Uso
124
-
125
- ### Por Tipo de Componente
126
-
127
- #### 1. Botones
128
-
129
- ```tsx
130
- // Botón default con sombra interna
131
- <button className="rounded-md bg-primary-custom-600 text-white px-4 py-2 shadow-button-inset">
132
- Guardar
133
- </button>
134
-
135
- // Botón elevado con sombra externa
136
- <button className="rounded-md bg-white border px-4 py-2 shadow-base hover:shadow-md transition-shadow">
137
- Cancelar
138
- </button>
139
- ```
140
-
141
- **Recomendación**:
142
- - Botones default (rellenos): `shadow-button-inset`
143
- - Botones outline (sin fondo): `shadow-base` en hover
144
-
145
- #### 2. Cards
146
-
147
- ```tsx
148
- // Card plano - shadow-base
149
- <div className="rounded-2xl border bg-white p-6 shadow-base">
150
- <h3>Card Estándar</h3>
151
- <p>Contenido...</p>
152
- </div>
153
-
154
- // Card elevado - shadow-md
155
- <div className="rounded-2xl bg-white p-6 shadow-md">
156
- <h3>Card Destacado</h3>
157
- <p>Contenido importante...</p>
158
- </div>
159
-
160
- // Card flotante - shadow-lg
161
- <div className="rounded-2xl bg-white p-6 shadow-lg">
162
- <h3>Card Flotante</h3>
163
- <p>Elemento prominente...</p>
164
- </div>
165
- ```
166
-
167
- **Recomendación**:
168
- - Cards de lista: `shadow-base`
169
- - Cards destacados: `shadow-md`
170
- - Cards sobre overlay: `shadow-lg` o `shadow-xl`
171
-
172
- #### 3. Modales y Overlays
173
-
174
- ```tsx
175
- // Modal pequeño - shadow-lg
176
- <div className="rounded-3xl bg-white p-6 shadow-lg max-w-md">
177
- <h2>Modal Pequeño</h2>
178
- <p>Contenido...</p>
179
- </div>
180
-
181
- // Modal grande - shadow-xl
182
- <div className="rounded-3xl bg-white p-8 shadow-xl max-w-2xl">
183
- <h2>Modal Grande</h2>
184
- <p>Contenido extenso...</p>
185
- </div>
186
-
187
- // Drawer/Panel lateral - shadow-2xl
188
- <div className="fixed right-0 top-0 h-full bg-white p-6 shadow-2xl w-96">
189
- <h2>Panel Lateral</h2>
190
- <p>Contenido...</p>
191
- </div>
192
- ```
193
-
194
- **Recomendación**:
195
- - Modales pequeños: `shadow-lg`
196
- - Modales grandes: `shadow-xl`
197
- - Drawers/Panels: `shadow-2xl`
198
-
199
- #### 4. Dropdowns y Menus
200
-
201
- ```tsx
202
- // Dropdown simple - shadow-menu
203
- <div className="rounded-lg bg-white border shadow-menu">
204
- <ul>
205
- <li className="px-4 py-2 hover:bg-gray-100">Opción 1</li>
206
- <li className="px-4 py-2 hover:bg-gray-100">Opción 2</li>
207
- </ul>
208
- </div>
209
-
210
- // Menú contextual - shadow-md
211
- <div className="rounded-xl bg-white shadow-md">
212
- <ul className="py-2">
213
- <li className="px-4 py-2 hover:bg-gray-100">Editar</li>
214
- <li className="px-4 py-2 hover:bg-gray-100">Eliminar</li>
215
- </ul>
216
- </div>
217
- ```
218
-
219
- **Recomendación**:
220
- - Dropdowns estándar: `shadow-menu`
221
- - Menús contextuales: `shadow-md`
222
- - Select expandido: `shadow-lg`
223
-
224
- #### 5. Inputs y Controles
225
-
226
- ```tsx
227
- // Input enfocado - shadow-base
228
- <input
229
- type="text"
230
- className="rounded-md border px-4 py-2 focus:shadow-base transition-shadow"
231
- placeholder="Email"
232
- />
233
-
234
- // Input con error - shadow-base + borde rojo
235
- <input
236
- type="text"
237
- className="rounded-md border border-error-border px-4 py-2 shadow-base"
238
- placeholder="Email"
239
- />
240
-
241
- // Input hundido (inner shadow)
242
- <input
243
- type="text"
244
- className="rounded-md border bg-gray-50 px-4 py-2 shadow-inner"
245
- placeholder="Búsqueda"
246
- readOnly
247
- />
248
- ```
249
-
250
- **Recomendación**:
251
- - Input normal: sin sombra
252
- - Input focus: `shadow-base`
253
- - Input disabled/readonly: `shadow-inner`
254
-
255
- #### 6. Tooltips y Popovers
256
-
257
- ```tsx
258
- // Tooltip - shadow-lg
259
- <div className="rounded-lg bg-gray-900 text-white px-3 py-2 text-sm shadow-lg">
260
- Este es un tooltip
261
- </div>
262
-
263
- // Popover - shadow-xl
264
- <div className="rounded-xl bg-white border p-4 shadow-xl max-w-xs">
265
- <h4 className="font-bold mb-2">Información</h4>
266
- <p className="text-sm">Contenido del popover...</p>
267
- </div>
268
- ```
269
-
270
- **Recomendación**:
271
- - Tooltips simples: `shadow-lg`
272
- - Popovers con contenido: `shadow-xl`
273
-
274
- ### Por Elevación
275
-
276
- | Elevación | Shadow | Cuándo Usar |
277
- |-----------|--------|-------------|
278
- | **Nivel 0** | Sin sombra | Elementos integrados, fondos |
279
- | **Nivel 1** | `shadow-sm` | Separadores sutiles, bordes suaves |
280
- | **Nivel 2** | `shadow-base` | **Cards estándar, inputs focus** |
281
- | **Nivel 3** | `shadow-md` | Cards elevados, dropdowns |
282
- | **Nivel 4** | `shadow-lg` | **Modales pequeños, popovers** |
283
- | **Nivel 5** | `shadow-xl` | Modales grandes, overlays |
284
- | **Nivel 6** | `shadow-2xl` | Drawers, panels laterales |
285
-
286
- ### Transiciones de Sombra
287
-
288
- Las sombras pueden animarse para crear interacciones fluidas:
289
-
290
- ```tsx
291
- // Hover que eleva el card
292
- <div className="rounded-2xl bg-white p-6 shadow-base hover:shadow-lg transition-shadow duration-200">
293
- Card Interactivo
294
- </div>
295
-
296
- // Botón que se hunde al hacer click
297
- <button className="rounded-md bg-primary-custom-600 px-4 py-2 shadow-md active:shadow-sm transition-shadow">
298
- Click me
299
- </button>
300
-
301
- // Card que se expande
302
- <div className="rounded-2xl bg-white p-6 shadow-base hover:scale-105 hover:shadow-xl transition-all duration-300">
303
- Card con efecto
304
- </div>
305
- ```
306
-
307
- ---
308
-
309
- ## Componentes del Sistema
310
-
311
- ### Uso Actual en Componentes
312
-
313
- | Componente | Shadow Usada | Ubicación |
314
- |------------|--------------|-----------|
315
- | **Button (default)** | `shadow-button-inset` | Button.tsx:67 |
316
- | **Card** | `shadow-base` o `shadow-md` | (a implementar) |
317
- | **Modal** | `shadow-lg` o `shadow-xl` | (a implementar) |
318
- | **Dropdown** | `shadow-menu` o `shadow-md` | (a implementar) |
319
- | **Tooltip** | `shadow-lg` | (a implementar) |
320
- | **Input (focus)** | `shadow-base` | (a implementar) |
321
-
322
- ### Configuración Completa
323
-
324
- ```javascript
325
- // tailwind.config.js
326
- module.exports = {
327
- theme: {
328
- extend: {
329
- boxShadow: {
330
- // Sombras personalizadas
331
- 'button-inset': '0px 2px 0px 0px inset rgba(255,255,255,0.15)',
332
- 'menu': '0px 4px 4px -1px rgba(12, 12, 13, 0.05), 0px 4px 4px -1px rgba(12, 12, 13, 0.1)',
333
-
334
- // Tailwind defaults (para referencia)
335
- 'sm': '0 1px 2px 0 rgba(0, 0, 0, 0.05)',
336
- 'DEFAULT': '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1)',
337
- 'md': '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)',
338
- 'lg': '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)',
339
- 'xl': '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1)',
340
- '2xl': '0 25px 50px -12px rgba(0, 0, 0, 0.25)',
341
- 'inner': 'inset 0 2px 4px 0 rgba(0, 0, 0, 0.05)',
342
- 'none': 'none',
343
- }
344
- }
345
- }
346
- }
347
- ```
348
-
349
- ---
350
-
351
- ## Ejemplos de Código
352
-
353
- ### Ejemplo 1: Sistema de Cards con Diferentes Elevaciones
354
-
355
- ```tsx
356
- export const CardShowcase = () => {
357
- return (
358
- <div className="grid grid-cols-3 gap-6 p-8">
359
- {/* Card Plano - Nivel 2 */}
360
- <div className="rounded-2xl border border-border-primary bg-white p-6 shadow-base">
361
- <h3 className="text-xl font-bold mb-2">Card Plano</h3>
362
- <p className="text-sm text-content-secondary">
363
- Sombra sutil para cards en lista o grids.
364
- </p>
365
- <span className="inline-block mt-4 text-xs font-bold text-content-tertiary">
366
- shadow-base
367
- </span>
368
- </div>
369
-
370
- {/* Card Elevado - Nivel 3 */}
371
- <div className="rounded-2xl bg-white p-6 shadow-md">
372
- <h3 className="text-xl font-bold mb-2">Card Elevado</h3>
373
- <p className="text-sm text-content-secondary">
374
- Mayor elevación para cards destacados.
375
- </p>
376
- <span className="inline-block mt-4 text-xs font-bold text-content-tertiary">
377
- shadow-md
378
- </span>
379
- </div>
380
-
381
- {/* Card Flotante - Nivel 4 */}
382
- <div className="rounded-2xl bg-white p-6 shadow-lg">
383
- <h3 className="text-xl font-bold mb-2">Card Flotante</h3>
384
- <p className="text-sm text-content-secondary">
385
- Máxima elevación para elementos importantes.
386
- </p>
387
- <span className="inline-block mt-4 text-xs font-bold text-content-tertiary">
388
- shadow-lg
389
- </span>
390
- </div>
391
- </div>
392
- );
393
- };
394
- ```
395
-
396
- ### Ejemplo 2: Modal con Overlay
397
-
398
- ```tsx
399
- export const Modal = ({ isOpen, onClose, children, size = 'small' }) => {
400
- if (!isOpen) return null;
401
-
402
- const sizeClasses = {
403
- small: 'max-w-md shadow-lg',
404
- medium: 'max-w-2xl shadow-xl',
405
- large: 'max-w-4xl shadow-2xl',
406
- };
407
-
408
- return (
409
- <div className="fixed inset-0 z-50 flex items-center justify-center p-4">
410
- {/* Overlay - Sin sombra */}
411
- <div
412
- className="absolute inset-0 bg-black/50 backdrop-blur-sm"
413
- onClick={onClose}
414
- />
415
-
416
- {/* Modal - Sombra según tamaño */}
417
- <div className={`rounded-3xl bg-white relative z-10 ${sizeClasses[size]}`}>
418
- {/* Header */}
419
- <div className="flex items-center justify-between p-6 border-b border-border-primary">
420
- <h2 className="text-2xl font-bold">Modal Title</h2>
421
- <button
422
- onClick={onClose}
423
- className="rounded-full hover:bg-gray-100 p-2 transition-colors"
424
- >
425
- <XIcon />
426
- </button>
427
- </div>
428
-
429
- {/* Body */}
430
- <div className="p-6">{children}</div>
431
-
432
- {/* Footer */}
433
- <div className="flex gap-3 justify-end p-6 border-t border-border-primary">
434
- <button
435
- onClick={onClose}
436
- className="rounded-md border border-border-primary bg-white px-4 py-2 font-bold hover:bg-gray-50 transition-colors"
437
- >
438
- Cancelar
439
- </button>
440
- <button className="rounded-md bg-primary-custom-600 text-white px-4 py-2 font-bold shadow-button-inset hover:bg-primary-custom-500 transition-colors">
441
- Confirmar
442
- </button>
443
- </div>
444
- </div>
445
- </div>
446
- );
447
- };
448
-
449
- // Uso
450
- <Modal isOpen={true} size="medium">
451
- <p>Contenido del modal...</p>
452
- </Modal>
453
- ```
454
-
455
- ### Ejemplo 3: Dropdown Menu
456
-
457
- ```tsx
458
- export const DropdownMenu = ({ trigger, items }) => {
459
- const [isOpen, setIsOpen] = useState(false);
460
-
461
- return (
462
- <div className="relative">
463
- {/* Trigger */}
464
- <button
465
- onClick={() => setIsOpen(!isOpen)}
466
- className="rounded-md border border-border-primary bg-white px-4 py-2 font-bold hover:bg-gray-50 transition-colors"
467
- >
468
- {trigger}
469
- </button>
470
-
471
- {/* Menu - shadow-menu personalizada */}
472
- {isOpen && (
473
- <div className="absolute top-full mt-2 right-0 rounded-lg bg-white border shadow-menu min-w-[200px] z-10">
474
- <ul className="py-2">
475
- {items.map((item, index) => (
476
- <li key={index}>
477
- <button
478
- onClick={() => {
479
- item.onClick();
480
- setIsOpen(false);
481
- }}
482
- className="w-full text-left px-4 py-2 text-sm hover:bg-gray-100 transition-colors"
483
- >
484
- {item.icon && (
485
- <span className="inline-flex mr-3">{item.icon}</span>
486
- )}
487
- {item.label}
488
- </button>
489
- </li>
490
- ))}
491
- </ul>
492
- </div>
493
- )}
494
- </div>
495
- );
496
- };
497
-
498
- // Uso
499
- <DropdownMenu
500
- trigger="Acciones"
501
- items={[
502
- { label: 'Editar', onClick: () => console.log('Editar'), icon: <EditIcon /> },
503
- { label: 'Duplicar', onClick: () => console.log('Duplicar'), icon: <CopyIcon /> },
504
- { label: 'Eliminar', onClick: () => console.log('Eliminar'), icon: <DeleteIcon /> },
505
- ]}
506
- />
507
- ```
508
-
509
- ### Ejemplo 4: Card Interactivo con Hover
510
-
511
- ```tsx
512
- export const ProductCard = ({ product }) => {
513
- return (
514
- <div className="rounded-2xl bg-white overflow-hidden shadow-base hover:shadow-lg transition-all duration-300 hover:-translate-y-1 cursor-pointer">
515
- {/* Imagen */}
516
- <div className="aspect-square bg-gray-100">
517
- <img
518
- src={product.image}
519
- alt={product.name}
520
- className="w-full h-full object-cover"
521
- />
522
- </div>
523
-
524
- {/* Contenido */}
525
- <div className="p-6">
526
- <div className="flex items-start justify-between mb-2">
527
- <h3 className="text-xl font-bold text-content-primary">
528
- {product.name}
529
- </h3>
530
- {product.badge && (
531
- <span className="rounded px-2 py-1 text-xs font-bold bg-primary-custom-100 text-primary-custom-600">
532
- {product.badge}
533
- </span>
534
- )}
535
- </div>
536
-
537
- <p className="text-sm text-content-secondary mb-4">
538
- {product.description}
539
- </p>
540
-
541
- <div className="flex items-center justify-between">
542
- <span className="text-2xl font-bold text-primary-custom-600">
543
- ${product.price}
544
- </span>
545
- <button className="rounded-md bg-primary-custom-600 text-white px-4 py-2 text-sm font-bold shadow-button-inset hover:bg-primary-custom-500 transition-colors">
546
- Añadir al carrito
547
- </button>
548
- </div>
549
- </div>
550
- </div>
551
- );
552
- };
553
- ```
554
-
555
- ### Ejemplo 5: Input States con Sombras
556
-
557
- ```tsx
558
- export const InputWithStates = () => {
559
- const [value, setValue] = useState('');
560
- const [isFocused, setIsFocused] = useState(false);
561
- const [hasError, setHasError] = useState(false);
562
-
563
- return (
564
- <div className="space-y-6 max-w-md">
565
- {/* Input Normal */}
566
- <div>
567
- <label className="text-sm font-bold mb-2 block">Input Normal</label>
568
- <input
569
- type="text"
570
- className="rounded-md border border-border-primary px-4 py-2 w-full transition-shadow"
571
- placeholder="Sin foco, sin sombra"
572
- />
573
- </div>
574
-
575
- {/* Input Focused */}
576
- <div>
577
- <label className="text-sm font-bold mb-2 block">Input con Focus</label>
578
- <input
579
- type="text"
580
- className="rounded-md border border-border-primary px-4 py-2 w-full focus:shadow-base focus:border-primary-custom-400 focus:ring-2 focus:ring-primary-custom-400 transition-all"
581
- placeholder="Click para ver shadow-base"
582
- />
583
- </div>
584
-
585
- {/* Input con Error */}
586
- <div>
587
- <label className="text-sm font-bold mb-2 block">Input con Error</label>
588
- <input
589
- type="text"
590
- className="rounded-md border-2 border-error-border px-4 py-2 w-full shadow-base"
591
- placeholder="Con error"
592
- />
593
- <p className="text-xs text-error-content mt-1">
594
- Este campo es requerido
595
- </p>
596
- </div>
597
-
598
- {/* Input Disabled */}
599
- <div>
600
- <label className="text-sm font-bold mb-2 block text-content-tertiary">
601
- Input Disabled
602
- </label>
603
- <input
604
- type="text"
605
- className="rounded-md border border-border-primary bg-gray-50 px-4 py-2 w-full shadow-inner cursor-not-allowed"
606
- placeholder="Deshabilitado"
607
- disabled
608
- />
609
- </div>
610
- </div>
611
- );
612
- };
613
- ```
614
-
615
- ---
616
-
617
- ## Mejores Prácticas
618
-
619
- ### ✅ Hacer
620
-
621
- 1. **Usar elevación apropiada según importancia**
622
- ```tsx
623
- // ✅ CORRECTO - Jerarquía clara
624
- <div className="shadow-base">Card normal</div>
625
- <div className="shadow-lg">Modal importante</div>
626
- ```
627
-
628
- 2. **Combinar con transiciones para interacciones suaves**
629
- ```tsx
630
- // ✅ CORRECTO - Transición fluida
631
- <div className="shadow-base hover:shadow-md transition-shadow duration-200">
632
- Card interactivo
633
- </div>
634
- ```
635
-
636
- 3. **Usar sombras en conjunto con border-radius**
637
- ```tsx
638
- // ✅ CORRECTO - Sombra + bordes redondeados
639
- <div className="rounded-2xl shadow-base">
640
- Card con bordes suaves
641
- </div>
642
- ```
643
-
644
- 4. **Aplicar sombras internas para elementos hundidos**
645
- ```tsx
646
- // ✅ CORRECTO - Input con apariencia hundida
647
- <input className="rounded-md border bg-gray-50 shadow-inner" readOnly />
648
- ```
649
-
650
- 5. **Usar sombras personalizadas para casos específicos**
651
- ```tsx
652
- // ✅ CORRECTO - Sombra personalizada de botón
653
- <button className="rounded-md bg-primary-custom-600 shadow-button-inset">
654
- Botón Default
655
- </button>
656
- ```
657
-
658
- ### ❌ Evitar
659
-
660
- 1. **No usar sombras muy oscuras o exageradas**
661
- ```tsx
662
- // ❌ INCORRECTO - Sombra demasiado dramática
663
- <div style={{ boxShadow: '0 10px 50px rgba(0,0,0,0.8)' }}>
664
- Sombra exagerada
665
- </div>
666
-
667
- // ✅ CORRECTO - Sombra sutil del sistema
668
- <div className="shadow-lg">Sombra apropiada</div>
669
- ```
670
-
671
- 2. **No apilar múltiples elementos con sombras grandes**
672
- ```tsx
673
- // ❌ INCORRECTO - Demasiadas sombras compiten
674
- <div className="shadow-2xl">
675
- <div className="shadow-2xl">
676
- <div className="shadow-2xl">Contenido</div>
677
- </div>
678
- </div>
679
-
680
- // ✅ CORRECTO - Solo el contenedor tiene sombra
681
- <div className="shadow-2xl">
682
- <div>
683
- <div>Contenido</div>
684
- </div>
685
- </div>
686
- ```
687
-
688
- 3. **No usar sombras en elementos muy pequeños**
689
- ```tsx
690
- // ❌ INCORRECTO - Badge pequeño con sombra grande
691
- <span className="text-xs px-2 py-0.5 shadow-xl">Badge</span>
692
-
693
- // ✅ CORRECTO - Sin sombra o sombra mínima
694
- <span className="text-xs px-2 py-0.5 rounded bg-blue-100">Badge</span>
695
- ```
696
-
697
- 4. **No omitir transiciones en cambios de sombra**
698
- ```tsx
699
- // ❌ INCORRECTO - Cambio abrupto
700
- <div className="shadow-base hover:shadow-xl">Card</div>
701
-
702
- // ✅ CORRECTO - Con transición
703
- <div className="shadow-base hover:shadow-xl transition-shadow">Card</div>
704
- ```
705
-
706
- 5. **No usar sombras como único indicador de interactividad**
707
- ```tsx
708
- // ❌ INCORRECTO - Solo sombra para hover
709
- <button className="hover:shadow-lg">Click</button>
710
-
711
- // ✅ CORRECTO - Múltiples indicadores
712
- <button className="rounded-md bg-primary-custom-600 hover:bg-primary-custom-500 hover:shadow-lg transition-all">
713
- Click
714
- </button>
715
- ```
716
-
717
- ### Accesibilidad
718
-
719
- 1. **No depender solo de sombras para comunicar estados**
720
- - Combinar con colores, bordes, iconos
721
- - Las sombras pueden no ser visibles en todos los contextos
722
-
723
- 2. **Asegurar contraste suficiente**
724
- - Las sombras no deben reducir el contraste del texto
725
- - Verificar WCAG 2.1 AA (4.5:1 para texto normal)
726
-
727
- 3. **Considerar usuarios con baja visión**
728
- - Sombras muy sutiles pueden no ser percibidas
729
- - Usar indicadores adicionales para estados importantes
730
-
731
- 4. **Dark Mode**
732
- - Las sombras negras funcionan bien en fondos claros y oscuros
733
- - No necesitas sombras diferentes para dark mode en la mayoría de casos
734
-
735
- ### Performance
736
-
737
- 1. **Las sombras CSS son eficientes**
738
- - ✅ No requieren imágenes adicionales
739
- - ✅ Son hardware-accelerated en la mayoría de navegadores
740
-
741
- 2. **Evitar blur excesivo**
742
- - Valores de blur muy altos pueden impactar performance
743
- - El sistema usa valores optimizados (1px a 50px)
744
-
745
- 3. **Animar solo transform y opacity cuando sea posible**
746
- ```tsx
747
- // ✅ MEJOR PERFORMANCE - Animar transform
748
- <div className="shadow-base hover:scale-105 transition-transform">
749
- Card
750
- </div>
751
-
752
- // ⚠️ ACEPTABLE - Animar shadow
753
- <div className="shadow-base hover:shadow-lg transition-shadow">
754
- Card
755
- </div>
756
- ```
757
-
758
- ---
759
-
760
- ## Dark Mode
761
-
762
- Las sombras en dark mode requieren consideraciones especiales para mantener la profundidad visual sin que las sombras negras se vuelvan invisibles sobre fondos oscuros.
763
-
764
- ### Configuración de Tailwind CSS
765
-
766
- El modo oscuro en Siesa UI Kit se basa en la estrategia de clases de Tailwind CSS:
767
-
768
- ```javascript
769
- // tailwind.config.js
770
- module.exports = {
771
- darkMode: 'class', // ✅ Estrategia basada en clases (NO 'media')
772
- // ...resto de la configuración
773
- }
774
- ```
775
-
776
- Con esta configuración, el modo oscuro se activa añadiendo la clase `.dark` al elemento `<html>`:
777
-
778
- ```html
779
- <!-- Modo claro -->
780
- <html>
781
- <body>
782
- <!-- Contenido en modo claro -->
783
- </body>
784
- </html>
785
-
786
- <!-- Modo oscuro -->
787
- <html class="dark">
788
- <body>
789
- <!-- Contenido en modo oscuro -->
790
- </body>
791
- </html>
792
- ```
793
-
794
- ### El Modificador `dark:`
795
-
796
- El modificador `dark:` de Tailwind funciona como un **prefijo condicional** que aplica estilos solo cuando la clase `.dark` está presente en un elemento padre.
797
-
798
- #### Principios para Sombras en Dark Mode
799
-
800
- ```tsx
801
- // Patrón básico - Sombras funcionan bien en ambos modos
802
- <div className="rounded-2xl bg-white dark:bg-dark-bg-primary shadow-base p-6">
803
- Card con sombra adaptable
804
- </div>
805
-
806
- // Las sombras negras (rgba(0,0,0,...)) funcionan bien en ambos modos
807
- // porque el contraste se mantiene sobre fondos oscuros
808
- ```
809
-
810
- **Nota Importante**: Las sombras negras con opacidad baja (5%-10%) funcionan bien tanto en fondos claros como oscuros, por lo que **generalmente NO necesitas cambiar las sombras en dark mode**.
811
-
812
- ### Cuándo Ajustar Sombras en Dark Mode
813
-
814
- Hay casos específicos donde puedes querer ajustar las sombras:
815
-
816
- #### 1. Aumentar Opacidad en Dark Mode
817
-
818
- Para elementos que necesitan destacarse más en dark mode:
819
-
820
- ```tsx
821
- // Aumentar intensidad de sombra en dark mode
822
- <div className="
823
- rounded-2xl
824
- bg-white dark:bg-dark-bg-primary
825
- shadow-base dark:shadow-lg
826
- p-6
827
- ">
828
- Card con sombra más intensa en dark mode
829
- </div>
830
-
831
- // Modal que necesita más prominencia en dark mode
832
- <div className="
833
- rounded-3xl
834
- bg-white dark:bg-dark-bg-primary
835
- shadow-xl dark:shadow-2xl
836
- p-8
837
- ">
838
- Modal destacado en dark mode
839
- </div>
840
- ```
841
-
842
- #### 2. Sombras de Color en Dark Mode
843
-
844
- Sombras de color (para efectos especiales) pueden necesitar ajuste:
845
-
846
- ```tsx
847
- // Sombra de color ajustada para dark mode
848
- <button className="
849
- rounded-md
850
- bg-primary-custom-600 dark:bg-dark-bg-inverse
851
- shadow-[0_4px_14px_0_rgba(14,121,253,0.4)]
852
- dark:shadow-[0_4px_14px_0_rgba(147,209,253,0.3)]
853
- px-4 py-2
854
- ">
855
- Botón con sombra de color
856
- </button>
857
- ```
858
-
859
- ### Combinando Sombras con Otros Estados
860
-
861
- El modificador `dark:` se puede combinar con hover, focus, y otros estados:
862
-
863
- ```tsx
864
- // Dark mode + Hover
865
- <div className="
866
- rounded-2xl
867
- bg-white dark:bg-dark-bg-primary
868
- shadow-base dark:shadow-md
869
- hover:shadow-lg dark:hover:shadow-xl
870
- transition-shadow
871
- p-6
872
- ">
873
- Card con hover effect en ambos modos
874
- </div>
875
-
876
- // Dark mode + Focus en inputs
877
- <input className="
878
- rounded-md
879
- border border-border-primary dark:border-dark-border-primary
880
- focus:shadow-lg dark:focus:shadow-xl
881
- focus:ring-2 focus:ring-primary-custom-400/20 dark:focus:ring-dark-border-custom/20
882
- " />
883
- ```
884
-
885
- ### Orden de Modificadores
886
-
887
- Tailwind CSS recomienda un orden específico:
888
-
889
- **Formato**: `{responsive}:{dark}:{state}:{utility}`
890
-
891
- ```tsx
892
- // ✅ CORRECTO - Orden: responsive → dark → state → utility
893
- <div className="
894
- shadow-base
895
- md:shadow-md
896
- md:dark:shadow-lg
897
- md:dark:hover:shadow-xl
898
- transition-shadow
899
- ">
900
- Card con orden correcto
901
- </div>
902
-
903
- // ❌ INCORRECTO - Orden equivocado
904
- <div className="
905
- dark:md:hover:shadow-xl
906
- shadow-base
907
- ">
908
- Orden confuso
909
- </div>
910
- ```
911
-
912
- ### Tabla de Sombras por Modo
913
-
914
- | Componente | Light Mode | Dark Mode | Razón |
915
- |------------|------------|-----------|-------|
916
- | **Card estándar** | `shadow-base` | `shadow-base` | Mismo valor - funciona bien |
917
- | **Card elevado** | `shadow-md` | `shadow-md` o `shadow-lg` | Opcional: aumentar en dark |
918
- | **Modal pequeño** | `shadow-lg` | `shadow-lg` o `shadow-xl` | Opcional: aumentar en dark |
919
- | **Modal grande** | `shadow-xl` | `shadow-xl` o `shadow-2xl` | Opcional: aumentar en dark |
920
- | **Dropdown** | `shadow-menu` | `shadow-menu` o `shadow-lg` | Opcional: aumentar en dark |
921
- | **Button inset** | `shadow-button-inset` | `shadow-button-inset` | Mismo valor |
922
-
923
- ### Ejemplos Completos
924
-
925
- #### Ejemplo 1: Cards con Sombras Adaptativas
926
-
927
- ```tsx
928
- export const CardWithShadow = () => {
929
- return (
930
- <div className="
931
- rounded-2xl
932
- bg-white dark:bg-dark-bg-primary
933
- border border-border-primary dark:border-dark-border-primary
934
- shadow-base dark:shadow-md
935
- p-6
936
- hover:shadow-lg dark:hover:shadow-xl
937
- transition-all
938
- ">
939
- <h3 className="
940
- text-content-primary dark:text-dark-content-primary
941
- font-bold text-xl mb-4
942
- ">
943
- Card Title
944
- </h3>
945
- <p className="
946
- text-content-secondary dark:text-content-secondary
947
- mb-4
948
- ">
949
- Card content con sombra que se adapta al modo oscuro
950
- </p>
951
- <button className="
952
- rounded-md
953
- bg-primary-custom-600 dark:bg-dark-bg-inverse
954
- text-primary-inverse-content dark:text-dark-content-inverse
955
- shadow-button-inset
956
- px-4 py-2
957
- font-bold
958
- ">
959
- Action
960
- </button>
961
- </div>
962
- );
963
- };
964
- ```
965
-
966
- #### Ejemplo 2: Modal con Sombras Intensas en Dark Mode
967
-
968
- ```tsx
969
- export const AdaptiveModal = ({ isOpen, onClose }) => {
970
- if (!isOpen) return null;
971
-
972
- return (
973
- <div className="fixed inset-0 z-50 flex items-center justify-center p-4">
974
- {/* Overlay */}
975
- <div
976
- className="absolute inset-0 bg-black/50 dark:bg-black/70 backdrop-blur-sm"
977
- onClick={onClose}
978
- />
979
-
980
- {/* Modal */}
981
- <div className="
982
- relative z-10
983
- rounded-3xl
984
- bg-white dark:bg-dark-bg-primary
985
- border border-border-primary dark:border-dark-border-primary
986
- shadow-xl dark:shadow-2xl
987
- max-w-md w-full
988
- ">
989
- {/* Header */}
990
- <div className="
991
- flex items-center justify-between
992
- p-6
993
- border-b border-border-primary dark:border-dark-border-primary
994
- ">
995
- <h2 className="
996
- text-content-primary dark:text-dark-content-primary
997
- font-bold text-2xl
998
- ">
999
- Modal Title
1000
- </h2>
1001
- <button
1002
- onClick={onClose}
1003
- className="
1004
- rounded-full p-2
1005
- hover:bg-background-secondary dark:hover:bg-dark-bg-primary
1006
- transition-colors
1007
- "
1008
- >
1009
- <XIcon className="w-5 h-5" />
1010
- </button>
1011
- </div>
1012
-
1013
- {/* Body */}
1014
- <div className="p-6">
1015
- <p className="
1016
- text-content-secondary dark:text-content-secondary
1017
- ">
1018
- Modal content adaptado para dark mode con sombras más intensas
1019
- </p>
1020
- </div>
1021
-
1022
- {/* Footer */}
1023
- <div className="
1024
- flex gap-3 justify-end
1025
- p-6
1026
- border-t border-border-primary dark:border-dark-border-primary
1027
- ">
1028
- <button
1029
- onClick={onClose}
1030
- className="
1031
- rounded-md
1032
- border border-border-primary dark:border-dark-border-custom
1033
- px-4 py-2
1034
- font-bold
1035
- text-content-primary dark:text-dark-content-primary
1036
- hover:bg-background-secondary dark:hover:bg-dark-bg-primary
1037
- "
1038
- >
1039
- Cancel
1040
- </button>
1041
- <button className="
1042
- rounded-md
1043
- bg-primary-custom-600 dark:bg-dark-bg-inverse
1044
- text-primary-inverse-content dark:text-dark-content-inverse
1045
- shadow-button-inset
1046
- px-4 py-2
1047
- font-bold
1048
- ">
1049
- Confirm
1050
- </button>
1051
- </div>
1052
- </div>
1053
- </div>
1054
- );
1055
- };
1056
- ```
1057
-
1058
- #### Ejemplo 3: Dropdown con Sombra Adaptativa
1059
-
1060
- ```tsx
1061
- export const DropdownMenu = ({ isOpen, items }) => {
1062
- if (!isOpen) return null;
1063
-
1064
- return (
1065
- <div className="
1066
- absolute top-full right-0 mt-2
1067
- rounded-xl
1068
- bg-white dark:bg-dark-bg-primary
1069
- border border-border-primary dark:border-dark-border-primary
1070
- shadow-menu dark:shadow-lg
1071
- min-w-[200px]
1072
- py-2
1073
- ">
1074
- {items.map((item, index) => (
1075
- <button
1076
- key={index}
1077
- className="
1078
- w-full px-4 py-2
1079
- text-left
1080
- text-content-primary dark:text-dark-content-primary
1081
- hover:bg-background-secondary dark:hover:bg-dark-bg-primary
1082
- transition-colors
1083
- "
1084
- >
1085
- {item.label}
1086
- </button>
1087
- ))}
1088
- </div>
1089
- );
1090
- };
1091
- ```
1092
-
1093
- #### Ejemplo 4: Grid de Cards con Hover
1094
-
1095
- ```tsx
1096
- export const CardGrid = ({ cards }) => {
1097
- return (
1098
- <div className="
1099
- min-h-screen
1100
- bg-bg-primary dark:bg-dark-bg-primary
1101
- p-8
1102
- ">
1103
- <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
1104
- {cards.map((card) => (
1105
- <div
1106
- key={card.id}
1107
- className="
1108
- rounded-2xl
1109
- bg-white dark:bg-dark-bg-primary
1110
- border border-border-primary dark:border-dark-border-primary
1111
- shadow-base dark:shadow-md
1112
- hover:shadow-lg dark:hover:shadow-xl
1113
- hover:scale-105
1114
- transition-all
1115
- p-6
1116
- cursor-pointer
1117
- "
1118
- >
1119
- <h3 className="
1120
- text-content-primary dark:text-dark-content-primary
1121
- font-bold text-lg mb-2
1122
- ">
1123
- {card.title}
1124
- </h3>
1125
- <p className="
1126
- text-content-secondary dark:text-content-secondary
1127
- text-sm
1128
- ">
1129
- {card.description}
1130
- </p>
1131
- </div>
1132
- ))}
1133
- </div>
1134
- </div>
1135
- );
1136
- };
1137
- ```
1138
-
1139
- ### Mejores Prácticas para Sombras en Dark Mode
1140
-
1141
- #### ✅ Hacer
1142
-
1143
- 1. **Usar las sombras estándar en ambos modos (cuando sea suficiente)**
1144
- ```tsx
1145
- // ✅ CORRECTO - Las sombras negras funcionan bien
1146
- <div className="shadow-base">Card</div>
1147
- ```
1148
-
1149
- 2. **Aumentar la sombra en dark mode solo si es necesario**
1150
- ```tsx
1151
- // ✅ CORRECTO - Más prominencia en dark mode
1152
- <div className="shadow-base dark:shadow-lg">Card destacado</div>
1153
- ```
1154
-
1155
- 3. **Combinar sombras con colores adaptativos**
1156
- ```tsx
1157
- // ✅ CORRECTO - Todo se adapta
1158
- <div className="
1159
- bg-white dark:bg-dark-bg-primary
1160
- border border-border-primary dark:border-dark-border-primary
1161
- shadow-base dark:shadow-md
1162
- ">
1163
- Card completo
1164
- </div>
1165
- ```
1166
-
1167
- 4. **Ajustar overlay opacities en dark mode**
1168
- ```tsx
1169
- // ✅ CORRECTO - Overlay más oscuro en dark mode
1170
- <div className="bg-black/50 dark:bg-black/70 backdrop-blur-sm">
1171
- Overlay
1172
- </div>
1173
- ```
1174
-
1175
- #### ❌ Evitar
1176
-
1177
- 1. **No remover sombras en dark mode**
1178
- ```tsx
1179
- // ❌ INCORRECTO - Perder profundidad en dark
1180
- <div className="shadow-base dark:shadow-none">Card</div>
1181
-
1182
- // ✅ CORRECTO - Mantener o aumentar
1183
- <div className="shadow-base dark:shadow-md">Card</div>
1184
- ```
1185
-
1186
- 2. **No usar sombras blancas en dark mode**
1187
- ```tsx
1188
- // ❌ INCORRECTO - Sombras blancas no funcionan bien
1189
- <div className="dark:shadow-[0_4px_6px_rgba(255,255,255,0.3)]">
1190
- Card
1191
- </div>
1192
-
1193
- // ✅ CORRECTO - Mantener sombras negras o aumentar intensidad
1194
- <div className="shadow-base dark:shadow-lg">Card</div>
1195
- ```
1196
-
1197
- 3. **No olvidar combinar con colores de fondo y borde**
1198
- ```tsx
1199
- // ❌ INCORRECTO - Solo cambiar sombra
1200
- <div className="bg-white shadow-base dark:shadow-lg">
1201
- Fondo no se adapta
1202
- </div>
1203
-
1204
- // ✅ CORRECTO - Adaptar todo
1205
- <div className="
1206
- bg-white dark:bg-dark-bg-primary
1207
- border border-border-primary dark:border-dark-border-primary
1208
- shadow-base dark:shadow-lg
1209
- ">
1210
- Todo adaptado
1211
- </div>
1212
- ```
1213
-
1214
- ### Guía Rápida: Decisiones sobre Sombras en Dark Mode
1215
-
1216
- | Situación | Recomendación |
1217
- |-----------|---------------|
1218
- | **Card de lista** | Mantener `shadow-base` en ambos modos |
1219
- | **Card destacado** | `shadow-base` → `dark:shadow-md` |
1220
- | **Modal** | Aumentar un nivel: `shadow-lg` → `dark:shadow-xl` |
1221
- | **Dropdown** | Aumentar: `shadow-menu` → `dark:shadow-lg` |
1222
- | **Overlay** | Aumentar opacidad: `bg-black/50` → `dark:bg-black/70` |
1223
- | **Button inset** | Mantener `shadow-button-inset` en ambos |
1224
-
1225
- ### Recursos Adicionales sobre Dark Mode
1226
-
1227
- Para más información sobre el modo oscuro:
1228
- - Ver `docs/dark-mode-guide.md` - Guía completa de Dark Mode en Tailwind CSS
1229
- - Ver `docs/colors.md` - Sistema de colores completo con tokens dark mode
1230
- - Ver `docs/border-radius.md` - Border radius con ejemplos de dark mode
1231
- - Ver `docs/typography.md` - Sistema tipográfico adaptado a dark mode
1232
- - [Documentación oficial de Tailwind Dark Mode](https://tailwindcss.com/docs/dark-mode)
1233
-
1234
- ---
1235
-
1236
- ## Referencia Rápida
1237
-
1238
- ### Cheat Sheet: Por Componente
1239
-
1240
- ```tsx
1241
- // ===== BOTONES =====
1242
- <button className="shadow-button-inset">Button default</button>
1243
- <button className="shadow-base hover:shadow-md">Button outline</button>
1244
-
1245
- // ===== CARDS =====
1246
- <div className="shadow-base">Card estándar</div>
1247
- <div className="shadow-md">Card elevado</div>
1248
- <div className="shadow-lg">Card flotante</div>
1249
-
1250
- // ===== MODALES =====
1251
- <div className="shadow-lg">Modal pequeño</div>
1252
- <div className="shadow-xl">Modal grande</div>
1253
- <div className="shadow-2xl">Drawer/Panel</div>
1254
-
1255
- // ===== DROPDOWNS =====
1256
- <div className="shadow-menu">Dropdown simple</div>
1257
- <div className="shadow-md">Menú contextual</div>
1258
-
1259
- // ===== INPUTS =====
1260
- <input className="focus:shadow-base" />
1261
- <input className="shadow-inner" disabled />
1262
-
1263
- // ===== TOOLTIPS =====
1264
- <div className="shadow-lg">Tooltip</div>
1265
- <div className="shadow-xl">Popover</div>
1266
- ```
1267
-
1268
- ### Cheat Sheet: Por Elevación
1269
-
1270
- | Nivel | Clase | Uso |
1271
- |-------|-------|-----|
1272
- | 0 | Sin sombra | Fondos, elementos integrados |
1273
- | 1 | `shadow-sm` | Separadores sutiles |
1274
- | 2 | `shadow-base` | **Cards, inputs focus** |
1275
- | 3 | `shadow-md` | Cards elevados, dropdowns |
1276
- | 4 | `shadow-lg` | **Modales, popovers** |
1277
- | 5 | `shadow-xl` | Modales grandes |
1278
- | 6 | `shadow-2xl` | Drawers, panels |
1279
-
1280
- ### Cheat Sheet: Valores CSS
1281
-
1282
- ```css
1283
- /* Drop Shadows */
1284
- shadow-sm: 0px 1px 2px 0px rgba(0,0,0,0.05)
1285
- shadow-base: 0px 1px 2px -1px rgba(0,0,0,0.1),
1286
- 0px 1px 3px 0px rgba(0,0,0,0.1)
1287
- shadow-md: 0px 2px 4px -2px rgba(0,0,0,0.1),
1288
- 0px 4px 6px -1px rgba(0,0,0,0.1)
1289
- shadow-lg: 0px 4px 6px -4px rgba(0,0,0,0.1),
1290
- 0px 10px 15px -3px rgba(0,0,0,0.1)
1291
- shadow-xl: 0px 8px 10px -6px rgba(0,0,0,0.1),
1292
- 0px 20px 25px -5px rgba(0,0,0,0.1)
1293
- shadow-2xl: 0px 25px 50px -12px rgba(0,0,0,0.25)
1294
-
1295
- /* Inner Shadow */
1296
- shadow-inner: inset 0 2px 4px 0 rgba(0,0,0,0.05)
1297
-
1298
- /* Custom */
1299
- shadow-button-inset: 0px 2px 0px 0px inset rgba(255,255,255,0.15)
1300
- shadow-menu: 0px 4px 4px -1px rgba(12,12,13,0.05),
1301
- 0px 4px 4px -1px rgba(12,12,13,0.1)
1302
- ```
1303
-
1304
- ### Cheat Sheet: Transiciones
1305
-
1306
- ```tsx
1307
- // Transición básica
1308
- <div className="shadow-base hover:shadow-md transition-shadow">...</div>
1309
-
1310
- // Transición con duración
1311
- <div className="shadow-base hover:shadow-lg transition-shadow duration-300">...</div>
1312
-
1313
- // Transición con múltiples propiedades
1314
- <div className="shadow-base hover:shadow-lg hover:scale-105 transition-all duration-200">...</div>
1315
-
1316
- // Transición solo en hover out
1317
- <div className="shadow-lg hover:shadow-base transition-shadow ease-out">...</div>
1318
- ```
1319
-
1320
- ---
1321
-
1322
- ## Recursos Adicionales
1323
-
1324
- ### Enlaces Útiles
1325
-
1326
- - **Tailwind Box Shadow**: https://tailwindcss.com/docs/box-shadow
1327
- - **CSS box-shadow**: https://developer.mozilla.org/en-US/docs/Web/CSS/box-shadow
1328
- - **Shadow Generator**: https://shadows.brumm.af
1329
- - **Material Design Elevation**: https://material.io/design/environment/elevation.html
1330
-
1331
- ### Archivos Relacionados
1332
-
1333
- - `tailwind.config.js` - Configuración de boxShadow (líneas 114-118)
1334
- - `src/components/Button/Button.tsx` - Uso de shadow-button-inset (línea 67)
1335
- - `docs/colors.md` - Sistema de colores
1336
- - `docs/border-radius.md` - Border radius (combina bien con sombras)
1337
- - `docs/typography.md` - Sistema tipográfico
1338
-
1339
- ### Herramientas de Testing
1340
-
1341
- ```tsx
1342
- // Componente para visualizar todas las sombras
1343
- export const ShadowsDemo = () => {
1344
- const shadows = [
1345
- { name: 'shadow-sm', label: 'Small' },
1346
- { name: 'shadow-base', label: 'Base' },
1347
- { name: 'shadow-md', label: 'Medium' },
1348
- { name: 'shadow-lg', label: 'Large' },
1349
- { name: 'shadow-xl', label: 'Extra Large' },
1350
- { name: 'shadow-2xl', label: '2X Large' },
1351
- { name: 'shadow-inner', label: 'Inner' },
1352
- { name: 'shadow-button-inset', label: 'Button Inset' },
1353
- { name: 'shadow-menu', label: 'Menu' },
1354
- ];
1355
-
1356
- return (
1357
- <div className="grid grid-cols-3 gap-8 p-8 bg-gray-50">
1358
- {shadows.map((shadow) => (
1359
- <div key={shadow.name} className="text-center">
1360
- <div
1361
- className={`${shadow.name} rounded-lg bg-white w-32 h-32 mx-auto mb-4 flex items-center justify-center`}
1362
- >
1363
- <span className="text-sm font-bold">{shadow.label}</span>
1364
- </div>
1365
- <p className="font-bold text-sm">{shadow.name}</p>
1366
- </div>
1367
- ))}
1368
- </div>
1369
- );
1370
- };
1371
- ```
1372
-
1373
- ---
1374
-
1375
- **Última actualización**: 2025-11-11
1376
- **Versión**: 1.0.0
1377
- **Mantenedor**: Siesa UI Kit Team
1
+ # Sistema de Sombras (Shadows) - Siesa UI Kit
2
+
3
+ ## 📋 Tabla de Contenidos
4
+
5
+ 1. [Introducción](#introducción)
6
+ 2. [Drop Shadows](#drop-shadows)
7
+ 3. [Inner Shadows](#inner-shadows)
8
+ 4. [Sombras Personalizadas](#sombras-personalizadas)
9
+ 5. [Guía de Uso](#guía-de-uso)
10
+ 6. [Componentes del Sistema](#componentes-del-sistema)
11
+ 7. [Ejemplos de Código](#ejemplos-de-código)
12
+ 8. [Mejores Prácticas](#mejores-prácticas)
13
+ 9. [Referencia Rápida](#referencia-rápida)
14
+
15
+ ---
16
+
17
+ ## Introducción
18
+
19
+ El sistema de sombras de Siesa UI Kit proporciona profundidad y jerarquía visual a los componentes de la interfaz. Las sombras ayudan a establecer la elevación de elementos y mejorar la experiencia del usuario al crear una interfaz más intuitiva y dimensional.
20
+
21
+ ### Objetivos del Sistema
22
+
23
+ - **Jerarquía Visual**: Establecer niveles de elevación claros entre componentes
24
+ - **Profundidad**: Crear sensación de tridimensionalidad en interfaces planas
25
+ - **Consistencia**: Uso uniforme de sombras en todo el sistema
26
+ - **Sutileza**: Sombras suaves que no distraigan del contenido
27
+ - **Accesibilidad**: Sombras que mejoren la usabilidad sin depender solo de ellas
28
+
29
+ ### Principios de Diseño
30
+
31
+ 1. **Elevación Progresiva**: Las sombras más grandes indican mayor elevación
32
+ 2. **Sutileza**: Sombras suaves con opacidad controlada (5% a 25%)
33
+ 3. **Múltiples Capas**: Combinación de sombras para efectos más naturales
34
+ 4. **Adaptabilidad**: Funciona en modo claro y oscuro
35
+
36
+ ---
37
+
38
+ ## Drop Shadows
39
+
40
+ Las **drop shadows** (sombras externas) se usan para elevar elementos sobre el fondo, creando la ilusión de que flotan.
41
+
42
+ ### Escala de Drop Shadows
43
+
44
+ | Clase Tailwind | Valor CSS | Elevación | Uso Principal |
45
+ |----------------|-----------|-----------|---------------|
46
+ | `shadow-sm` | `0px 1px 2px 0px rgba(0,0,0,0.05)` | Muy baja | Bordes sutiles, separadores ligeros |
47
+ | `shadow-base` | `0px 1px 2px -1px rgba(0,0,0,0.1), 0px 1px 3px 0px rgba(0,0,0,0.1)` | Baja | **Cards planos, inputs** |
48
+ | `shadow-md` | `0px 2px 4px -2px rgba(0,0,0,0.1), 0px 4px 6px -1px rgba(0,0,0,0.1)` | Media-baja | Cards elevados, dropdowns |
49
+ | `shadow-lg` | `0px 4px 6px -4px rgba(0,0,0,0.1), 0px 10px 15px -3px rgba(0,0,0,0.1)` | Media | **Modales, popovers** |
50
+ | `shadow-xl` | `0px 8px 10px -6px rgba(0,0,0,0.1), 0px 20px 25px -5px rgba(0,0,0,0.1)` | Alta | Modales grandes, overlays |
51
+ | `shadow-2xl` | `0px 25px 50px -12px rgba(0,0,0,0.25)` | Muy alta | Elementos flotantes principales |
52
+
53
+ ### Características de las Sombras
54
+
55
+ **Sombras de Capas Múltiples**: La mayoría incluyen 2 sombras para un efecto más natural:
56
+ - **Sombra principal**: Mayor blur, más alejada, simula luz ambiental
57
+ - **Sombra de contacto**: Menor blur, más cercana, define los bordes
58
+
59
+ **Opacidades Controladas**:
60
+ - `0.05` (5%) - Sombras muy sutiles
61
+ - `0.1` (10%) - Sombras estándar (más común)
62
+ - `0.25` (25%) - Sombras dramáticas
63
+
64
+ ### Valores Más Comunes
65
+
66
+ En el 80% de los casos, usarás estos 3 valores:
67
+
68
+ 1. **`shadow-base`**: Cards y paneles estándar
69
+ 2. **`shadow-lg`**: Modales y popovers
70
+ 3. **`shadow-xl`**: Overlays importantes
71
+
72
+ ---
73
+
74
+ ## Inner Shadows
75
+
76
+ Las **inner shadows** (sombras internas) crean la ilusión de profundidad hacia adentro, como si el elemento estuviera hundido.
77
+
78
+ ### Escala de Inner Shadows
79
+
80
+ | Clase Tailwind | Valor CSS | Uso Principal |
81
+ |----------------|-----------|---------------|
82
+ | `shadow-inner` | `inset 0 2px 4px 0 rgba(0,0,0,0.05)` | Inputs hundidos, áreas presionadas |
83
+
84
+ ### Sombra Inner Personalizada
85
+
86
+ El sistema incluye una sombra inner especial para botones:
87
+
88
+ | Nombre | Valor CSS | Uso |
89
+ |--------|-----------|-----|
90
+ | `shadow-button-inset` | `0px 2px 0px 0px inset rgba(255,255,255,0.15)` | **Botones default** - Efecto de brillo superior |
91
+
92
+ **Nota**: Esta sombra usa **blanco** con 15% de opacidad para crear un efecto de luz desde arriba, dando dimensión a los botones.
93
+
94
+ ---
95
+
96
+ ## Sombras Personalizadas
97
+
98
+ Además de las sombras estándar de Tailwind, el sistema incluye sombras personalizadas para casos específicos.
99
+
100
+ ### Tabla de Sombras Personalizadas
101
+
102
+ | Nombre | Clase | Valor CSS | Uso |
103
+ |--------|-------|-----------|-----|
104
+ | **Button Inset** | `shadow-button-inset` | `0px 2px 0px 0px inset rgba(255,255,255,0.15)` | Botones default |
105
+ | **Menu** | `shadow-menu` | `0px 4px 4px -1px rgba(12,12,13,0.05), 0px 4px 4px -1px rgba(12,12,13,0.1)` | Menús desplegables, dropdowns |
106
+ | **Base** | `shadow-base` | `0px 1px 2px -1px rgba(0,0,0,0.1), 0px 1px 3px 0px rgba(0,0,0,0.1)` | Cards estándar |
107
+
108
+ ### Configuración en Tailwind
109
+
110
+ ```javascript
111
+ // tailwind.config.js
112
+ boxShadow: {
113
+ // Personalizada para botones (inner shadow)
114
+ 'button-inset': '0px 2px 0px 0px inset rgba(255,255,255,0.15)',
115
+
116
+ // Personalizada para menús
117
+ 'menu': '0px 4px 4px -1px rgba(12, 12, 13, 0.05), 0px 4px 4px -1px rgba(12, 12, 13, 0.1)',
118
+ }
119
+ ```
120
+
121
+ ---
122
+
123
+ ## Guía de Uso
124
+
125
+ ### Por Tipo de Componente
126
+
127
+ #### 1. Botones
128
+
129
+ ```tsx
130
+ // Botón default con sombra interna
131
+ <button className="rounded-md bg-primary-custom-600 text-white px-4 py-2 shadow-button-inset">
132
+ Guardar
133
+ </button>
134
+
135
+ // Botón elevado con sombra externa
136
+ <button className="rounded-md bg-white border px-4 py-2 shadow-base hover:shadow-md transition-shadow">
137
+ Cancelar
138
+ </button>
139
+ ```
140
+
141
+ **Recomendación**:
142
+ - Botones default (rellenos): `shadow-button-inset`
143
+ - Botones outline (sin fondo): `shadow-base` en hover
144
+
145
+ #### 2. Cards
146
+
147
+ ```tsx
148
+ // Card plano - shadow-base
149
+ <div className="rounded-2xl border bg-white p-6 shadow-base">
150
+ <h3>Card Estándar</h3>
151
+ <p>Contenido...</p>
152
+ </div>
153
+
154
+ // Card elevado - shadow-md
155
+ <div className="rounded-2xl bg-white p-6 shadow-md">
156
+ <h3>Card Destacado</h3>
157
+ <p>Contenido importante...</p>
158
+ </div>
159
+
160
+ // Card flotante - shadow-lg
161
+ <div className="rounded-2xl bg-white p-6 shadow-lg">
162
+ <h3>Card Flotante</h3>
163
+ <p>Elemento prominente...</p>
164
+ </div>
165
+ ```
166
+
167
+ **Recomendación**:
168
+ - Cards de lista: `shadow-base`
169
+ - Cards destacados: `shadow-md`
170
+ - Cards sobre overlay: `shadow-lg` o `shadow-xl`
171
+
172
+ #### 3. Modales y Overlays
173
+
174
+ ```tsx
175
+ // Modal pequeño - shadow-lg
176
+ <div className="rounded-3xl bg-white p-6 shadow-lg max-w-md">
177
+ <h2>Modal Pequeño</h2>
178
+ <p>Contenido...</p>
179
+ </div>
180
+
181
+ // Modal grande - shadow-xl
182
+ <div className="rounded-3xl bg-white p-8 shadow-xl max-w-2xl">
183
+ <h2>Modal Grande</h2>
184
+ <p>Contenido extenso...</p>
185
+ </div>
186
+
187
+ // Drawer/Panel lateral - shadow-2xl
188
+ <div className="fixed right-0 top-0 h-full bg-white p-6 shadow-2xl w-96">
189
+ <h2>Panel Lateral</h2>
190
+ <p>Contenido...</p>
191
+ </div>
192
+ ```
193
+
194
+ **Recomendación**:
195
+ - Modales pequeños: `shadow-lg`
196
+ - Modales grandes: `shadow-xl`
197
+ - Drawers/Panels: `shadow-2xl`
198
+
199
+ #### 4. Dropdowns y Menus
200
+
201
+ ```tsx
202
+ // Dropdown simple - shadow-menu
203
+ <div className="rounded-lg bg-white border shadow-menu">
204
+ <ul>
205
+ <li className="px-4 py-2 hover:bg-gray-100">Opción 1</li>
206
+ <li className="px-4 py-2 hover:bg-gray-100">Opción 2</li>
207
+ </ul>
208
+ </div>
209
+
210
+ // Menú contextual - shadow-md
211
+ <div className="rounded-xl bg-white shadow-md">
212
+ <ul className="py-2">
213
+ <li className="px-4 py-2 hover:bg-gray-100">Editar</li>
214
+ <li className="px-4 py-2 hover:bg-gray-100">Eliminar</li>
215
+ </ul>
216
+ </div>
217
+ ```
218
+
219
+ **Recomendación**:
220
+ - Dropdowns estándar: `shadow-menu`
221
+ - Menús contextuales: `shadow-md`
222
+ - Select expandido: `shadow-lg`
223
+
224
+ #### 5. Inputs y Controles
225
+
226
+ ```tsx
227
+ // Input enfocado - shadow-base
228
+ <input
229
+ type="text"
230
+ className="rounded-md border px-4 py-2 focus:shadow-base transition-shadow"
231
+ placeholder="Email"
232
+ />
233
+
234
+ // Input con error - shadow-base + borde rojo
235
+ <input
236
+ type="text"
237
+ className="rounded-md border border-error-border px-4 py-2 shadow-base"
238
+ placeholder="Email"
239
+ />
240
+
241
+ // Input hundido (inner shadow)
242
+ <input
243
+ type="text"
244
+ className="rounded-md border bg-gray-50 px-4 py-2 shadow-inner"
245
+ placeholder="Búsqueda"
246
+ readOnly
247
+ />
248
+ ```
249
+
250
+ **Recomendación**:
251
+ - Input normal: sin sombra
252
+ - Input focus: `shadow-base`
253
+ - Input disabled/readonly: `shadow-inner`
254
+
255
+ #### 6. Tooltips y Popovers
256
+
257
+ ```tsx
258
+ // Tooltip - shadow-lg
259
+ <div className="rounded-lg bg-gray-900 text-white px-3 py-2 text-sm shadow-lg">
260
+ Este es un tooltip
261
+ </div>
262
+
263
+ // Popover - shadow-xl
264
+ <div className="rounded-xl bg-white border p-4 shadow-xl max-w-xs">
265
+ <h4 className="font-bold mb-2">Información</h4>
266
+ <p className="text-sm">Contenido del popover...</p>
267
+ </div>
268
+ ```
269
+
270
+ **Recomendación**:
271
+ - Tooltips simples: `shadow-lg`
272
+ - Popovers con contenido: `shadow-xl`
273
+
274
+ ### Por Elevación
275
+
276
+ | Elevación | Shadow | Cuándo Usar |
277
+ |-----------|--------|-------------|
278
+ | **Nivel 0** | Sin sombra | Elementos integrados, fondos |
279
+ | **Nivel 1** | `shadow-sm` | Separadores sutiles, bordes suaves |
280
+ | **Nivel 2** | `shadow-base` | **Cards estándar, inputs focus** |
281
+ | **Nivel 3** | `shadow-md` | Cards elevados, dropdowns |
282
+ | **Nivel 4** | `shadow-lg` | **Modales pequeños, popovers** |
283
+ | **Nivel 5** | `shadow-xl` | Modales grandes, overlays |
284
+ | **Nivel 6** | `shadow-2xl` | Drawers, panels laterales |
285
+
286
+ ### Transiciones de Sombra
287
+
288
+ Las sombras pueden animarse para crear interacciones fluidas:
289
+
290
+ ```tsx
291
+ // Hover que eleva el card
292
+ <div className="rounded-2xl bg-white p-6 shadow-base hover:shadow-lg transition-shadow duration-200">
293
+ Card Interactivo
294
+ </div>
295
+
296
+ // Botón que se hunde al hacer click
297
+ <button className="rounded-md bg-primary-custom-600 px-4 py-2 shadow-md active:shadow-sm transition-shadow">
298
+ Click me
299
+ </button>
300
+
301
+ // Card que se expande
302
+ <div className="rounded-2xl bg-white p-6 shadow-base hover:scale-105 hover:shadow-xl transition-all duration-300">
303
+ Card con efecto
304
+ </div>
305
+ ```
306
+
307
+ ---
308
+
309
+ ## Componentes del Sistema
310
+
311
+ ### Uso Actual en Componentes
312
+
313
+ | Componente | Shadow Usada | Ubicación |
314
+ |------------|--------------|-----------|
315
+ | **Button (default)** | `shadow-button-inset` | Button.tsx:67 |
316
+ | **Card** | `shadow-base` o `shadow-md` | (a implementar) |
317
+ | **Modal** | `shadow-lg` o `shadow-xl` | (a implementar) |
318
+ | **Dropdown** | `shadow-menu` o `shadow-md` | (a implementar) |
319
+ | **Tooltip** | `shadow-lg` | (a implementar) |
320
+ | **Input (focus)** | `shadow-base` | (a implementar) |
321
+
322
+ ### Configuración Completa
323
+
324
+ ```javascript
325
+ // tailwind.config.js
326
+ module.exports = {
327
+ theme: {
328
+ extend: {
329
+ boxShadow: {
330
+ // Sombras personalizadas
331
+ 'button-inset': '0px 2px 0px 0px inset rgba(255,255,255,0.15)',
332
+ 'menu': '0px 4px 4px -1px rgba(12, 12, 13, 0.05), 0px 4px 4px -1px rgba(12, 12, 13, 0.1)',
333
+
334
+ // Tailwind defaults (para referencia)
335
+ 'sm': '0 1px 2px 0 rgba(0, 0, 0, 0.05)',
336
+ 'DEFAULT': '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1)',
337
+ 'md': '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)',
338
+ 'lg': '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)',
339
+ 'xl': '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1)',
340
+ '2xl': '0 25px 50px -12px rgba(0, 0, 0, 0.25)',
341
+ 'inner': 'inset 0 2px 4px 0 rgba(0, 0, 0, 0.05)',
342
+ 'none': 'none',
343
+ }
344
+ }
345
+ }
346
+ }
347
+ ```
348
+
349
+ ---
350
+
351
+ ## Ejemplos de Código
352
+
353
+ ### Ejemplo 1: Sistema de Cards con Diferentes Elevaciones
354
+
355
+ ```tsx
356
+ export const CardShowcase = () => {
357
+ return (
358
+ <div className="grid grid-cols-3 gap-6 p-8">
359
+ {/* Card Plano - Nivel 2 */}
360
+ <div className="rounded-2xl border border-border-primary bg-white p-6 shadow-base">
361
+ <h3 className="text-xl font-bold mb-2">Card Plano</h3>
362
+ <p className="text-sm text-content-secondary">
363
+ Sombra sutil para cards en lista o grids.
364
+ </p>
365
+ <span className="inline-block mt-4 text-xs font-bold text-content-tertiary">
366
+ shadow-base
367
+ </span>
368
+ </div>
369
+
370
+ {/* Card Elevado - Nivel 3 */}
371
+ <div className="rounded-2xl bg-white p-6 shadow-md">
372
+ <h3 className="text-xl font-bold mb-2">Card Elevado</h3>
373
+ <p className="text-sm text-content-secondary">
374
+ Mayor elevación para cards destacados.
375
+ </p>
376
+ <span className="inline-block mt-4 text-xs font-bold text-content-tertiary">
377
+ shadow-md
378
+ </span>
379
+ </div>
380
+
381
+ {/* Card Flotante - Nivel 4 */}
382
+ <div className="rounded-2xl bg-white p-6 shadow-lg">
383
+ <h3 className="text-xl font-bold mb-2">Card Flotante</h3>
384
+ <p className="text-sm text-content-secondary">
385
+ Máxima elevación para elementos importantes.
386
+ </p>
387
+ <span className="inline-block mt-4 text-xs font-bold text-content-tertiary">
388
+ shadow-lg
389
+ </span>
390
+ </div>
391
+ </div>
392
+ );
393
+ };
394
+ ```
395
+
396
+ ### Ejemplo 2: Modal con Overlay
397
+
398
+ ```tsx
399
+ export const Modal = ({ isOpen, onClose, children, size = 'small' }) => {
400
+ if (!isOpen) return null;
401
+
402
+ const sizeClasses = {
403
+ small: 'max-w-md shadow-lg',
404
+ medium: 'max-w-2xl shadow-xl',
405
+ large: 'max-w-4xl shadow-2xl',
406
+ };
407
+
408
+ return (
409
+ <div className="fixed inset-0 z-50 flex items-center justify-center p-4">
410
+ {/* Overlay - Sin sombra */}
411
+ <div
412
+ className="absolute inset-0 bg-black/50 backdrop-blur-sm"
413
+ onClick={onClose}
414
+ />
415
+
416
+ {/* Modal - Sombra según tamaño */}
417
+ <div className={`rounded-3xl bg-white relative z-10 ${sizeClasses[size]}`}>
418
+ {/* Header */}
419
+ <div className="flex items-center justify-between p-6 border-b border-border-primary">
420
+ <h2 className="text-2xl font-bold">Modal Title</h2>
421
+ <button
422
+ onClick={onClose}
423
+ className="rounded-full hover:bg-gray-100 p-2 transition-colors"
424
+ >
425
+ <XIcon />
426
+ </button>
427
+ </div>
428
+
429
+ {/* Body */}
430
+ <div className="p-6">{children}</div>
431
+
432
+ {/* Footer */}
433
+ <div className="flex gap-3 justify-end p-6 border-t border-border-primary">
434
+ <button
435
+ onClick={onClose}
436
+ className="rounded-md border border-border-primary bg-white px-4 py-2 font-bold hover:bg-gray-50 transition-colors"
437
+ >
438
+ Cancelar
439
+ </button>
440
+ <button className="rounded-md bg-primary-custom-600 text-white px-4 py-2 font-bold shadow-button-inset hover:bg-primary-custom-500 transition-colors">
441
+ Confirmar
442
+ </button>
443
+ </div>
444
+ </div>
445
+ </div>
446
+ );
447
+ };
448
+
449
+ // Uso
450
+ <Modal isOpen={true} size="medium">
451
+ <p>Contenido del modal...</p>
452
+ </Modal>
453
+ ```
454
+
455
+ ### Ejemplo 3: Dropdown Menu
456
+
457
+ ```tsx
458
+ export const DropdownMenu = ({ trigger, items }) => {
459
+ const [isOpen, setIsOpen] = useState(false);
460
+
461
+ return (
462
+ <div className="relative">
463
+ {/* Trigger */}
464
+ <button
465
+ onClick={() => setIsOpen(!isOpen)}
466
+ className="rounded-md border border-border-primary bg-white px-4 py-2 font-bold hover:bg-gray-50 transition-colors"
467
+ >
468
+ {trigger}
469
+ </button>
470
+
471
+ {/* Menu - shadow-menu personalizada */}
472
+ {isOpen && (
473
+ <div className="absolute top-full mt-2 right-0 rounded-lg bg-white border shadow-menu min-w-[200px] z-10">
474
+ <ul className="py-2">
475
+ {items.map((item, index) => (
476
+ <li key={index}>
477
+ <button
478
+ onClick={() => {
479
+ item.onClick();
480
+ setIsOpen(false);
481
+ }}
482
+ className="w-full text-left px-4 py-2 text-sm hover:bg-gray-100 transition-colors"
483
+ >
484
+ {item.icon && (
485
+ <span className="inline-flex mr-3">{item.icon}</span>
486
+ )}
487
+ {item.label}
488
+ </button>
489
+ </li>
490
+ ))}
491
+ </ul>
492
+ </div>
493
+ )}
494
+ </div>
495
+ );
496
+ };
497
+
498
+ // Uso
499
+ <DropdownMenu
500
+ trigger="Acciones"
501
+ items={[
502
+ { label: 'Editar', onClick: () => console.log('Editar'), icon: <EditIcon /> },
503
+ { label: 'Duplicar', onClick: () => console.log('Duplicar'), icon: <CopyIcon /> },
504
+ { label: 'Eliminar', onClick: () => console.log('Eliminar'), icon: <DeleteIcon /> },
505
+ ]}
506
+ />
507
+ ```
508
+
509
+ ### Ejemplo 4: Card Interactivo con Hover
510
+
511
+ ```tsx
512
+ export const ProductCard = ({ product }) => {
513
+ return (
514
+ <div className="rounded-2xl bg-white overflow-hidden shadow-base hover:shadow-lg transition-all duration-300 hover:-translate-y-1 cursor-pointer">
515
+ {/* Imagen */}
516
+ <div className="aspect-square bg-gray-100">
517
+ <img
518
+ src={product.image}
519
+ alt={product.name}
520
+ className="w-full h-full object-cover"
521
+ />
522
+ </div>
523
+
524
+ {/* Contenido */}
525
+ <div className="p-6">
526
+ <div className="flex items-start justify-between mb-2">
527
+ <h3 className="text-xl font-bold text-content-primary">
528
+ {product.name}
529
+ </h3>
530
+ {product.badge && (
531
+ <span className="rounded px-2 py-1 text-xs font-bold bg-primary-custom-100 text-primary-custom-600">
532
+ {product.badge}
533
+ </span>
534
+ )}
535
+ </div>
536
+
537
+ <p className="text-sm text-content-secondary mb-4">
538
+ {product.description}
539
+ </p>
540
+
541
+ <div className="flex items-center justify-between">
542
+ <span className="text-2xl font-bold text-primary-custom-600">
543
+ ${product.price}
544
+ </span>
545
+ <button className="rounded-md bg-primary-custom-600 text-white px-4 py-2 text-sm font-bold shadow-button-inset hover:bg-primary-custom-500 transition-colors">
546
+ Añadir al carrito
547
+ </button>
548
+ </div>
549
+ </div>
550
+ </div>
551
+ );
552
+ };
553
+ ```
554
+
555
+ ### Ejemplo 5: Input States con Sombras
556
+
557
+ ```tsx
558
+ export const InputWithStates = () => {
559
+ const [value, setValue] = useState('');
560
+ const [isFocused, setIsFocused] = useState(false);
561
+ const [hasError, setHasError] = useState(false);
562
+
563
+ return (
564
+ <div className="space-y-6 max-w-md">
565
+ {/* Input Normal */}
566
+ <div>
567
+ <label className="text-sm font-bold mb-2 block">Input Normal</label>
568
+ <input
569
+ type="text"
570
+ className="rounded-md border border-border-primary px-4 py-2 w-full transition-shadow"
571
+ placeholder="Sin foco, sin sombra"
572
+ />
573
+ </div>
574
+
575
+ {/* Input Focused */}
576
+ <div>
577
+ <label className="text-sm font-bold mb-2 block">Input con Focus</label>
578
+ <input
579
+ type="text"
580
+ className="rounded-md border border-border-primary px-4 py-2 w-full focus:shadow-base focus:border-primary-custom-400 focus:ring-2 focus:ring-primary-custom-400 transition-all"
581
+ placeholder="Click para ver shadow-base"
582
+ />
583
+ </div>
584
+
585
+ {/* Input con Error */}
586
+ <div>
587
+ <label className="text-sm font-bold mb-2 block">Input con Error</label>
588
+ <input
589
+ type="text"
590
+ className="rounded-md border-2 border-error-border px-4 py-2 w-full shadow-base"
591
+ placeholder="Con error"
592
+ />
593
+ <p className="text-xs text-error-content mt-1">
594
+ Este campo es requerido
595
+ </p>
596
+ </div>
597
+
598
+ {/* Input Disabled */}
599
+ <div>
600
+ <label className="text-sm font-bold mb-2 block text-content-tertiary">
601
+ Input Disabled
602
+ </label>
603
+ <input
604
+ type="text"
605
+ className="rounded-md border border-border-primary bg-gray-50 px-4 py-2 w-full shadow-inner cursor-not-allowed"
606
+ placeholder="Deshabilitado"
607
+ disabled
608
+ />
609
+ </div>
610
+ </div>
611
+ );
612
+ };
613
+ ```
614
+
615
+ ---
616
+
617
+ ## Mejores Prácticas
618
+
619
+ ### ✅ Hacer
620
+
621
+ 1. **Usar elevación apropiada según importancia**
622
+ ```tsx
623
+ // ✅ CORRECTO - Jerarquía clara
624
+ <div className="shadow-base">Card normal</div>
625
+ <div className="shadow-lg">Modal importante</div>
626
+ ```
627
+
628
+ 2. **Combinar con transiciones para interacciones suaves**
629
+ ```tsx
630
+ // ✅ CORRECTO - Transición fluida
631
+ <div className="shadow-base hover:shadow-md transition-shadow duration-200">
632
+ Card interactivo
633
+ </div>
634
+ ```
635
+
636
+ 3. **Usar sombras en conjunto con border-radius**
637
+ ```tsx
638
+ // ✅ CORRECTO - Sombra + bordes redondeados
639
+ <div className="rounded-2xl shadow-base">
640
+ Card con bordes suaves
641
+ </div>
642
+ ```
643
+
644
+ 4. **Aplicar sombras internas para elementos hundidos**
645
+ ```tsx
646
+ // ✅ CORRECTO - Input con apariencia hundida
647
+ <input className="rounded-md border bg-gray-50 shadow-inner" readOnly />
648
+ ```
649
+
650
+ 5. **Usar sombras personalizadas para casos específicos**
651
+ ```tsx
652
+ // ✅ CORRECTO - Sombra personalizada de botón
653
+ <button className="rounded-md bg-primary-custom-600 shadow-button-inset">
654
+ Botón Default
655
+ </button>
656
+ ```
657
+
658
+ ### ❌ Evitar
659
+
660
+ 1. **No usar sombras muy oscuras o exageradas**
661
+ ```tsx
662
+ // ❌ INCORRECTO - Sombra demasiado dramática
663
+ <div style={{ boxShadow: '0 10px 50px rgba(0,0,0,0.8)' }}>
664
+ Sombra exagerada
665
+ </div>
666
+
667
+ // ✅ CORRECTO - Sombra sutil del sistema
668
+ <div className="shadow-lg">Sombra apropiada</div>
669
+ ```
670
+
671
+ 2. **No apilar múltiples elementos con sombras grandes**
672
+ ```tsx
673
+ // ❌ INCORRECTO - Demasiadas sombras compiten
674
+ <div className="shadow-2xl">
675
+ <div className="shadow-2xl">
676
+ <div className="shadow-2xl">Contenido</div>
677
+ </div>
678
+ </div>
679
+
680
+ // ✅ CORRECTO - Solo el contenedor tiene sombra
681
+ <div className="shadow-2xl">
682
+ <div>
683
+ <div>Contenido</div>
684
+ </div>
685
+ </div>
686
+ ```
687
+
688
+ 3. **No usar sombras en elementos muy pequeños**
689
+ ```tsx
690
+ // ❌ INCORRECTO - Badge pequeño con sombra grande
691
+ <span className="text-xs px-2 py-0.5 shadow-xl">Badge</span>
692
+
693
+ // ✅ CORRECTO - Sin sombra o sombra mínima
694
+ <span className="text-xs px-2 py-0.5 rounded bg-blue-100">Badge</span>
695
+ ```
696
+
697
+ 4. **No omitir transiciones en cambios de sombra**
698
+ ```tsx
699
+ // ❌ INCORRECTO - Cambio abrupto
700
+ <div className="shadow-base hover:shadow-xl">Card</div>
701
+
702
+ // ✅ CORRECTO - Con transición
703
+ <div className="shadow-base hover:shadow-xl transition-shadow">Card</div>
704
+ ```
705
+
706
+ 5. **No usar sombras como único indicador de interactividad**
707
+ ```tsx
708
+ // ❌ INCORRECTO - Solo sombra para hover
709
+ <button className="hover:shadow-lg">Click</button>
710
+
711
+ // ✅ CORRECTO - Múltiples indicadores
712
+ <button className="rounded-md bg-primary-custom-600 hover:bg-primary-custom-500 hover:shadow-lg transition-all">
713
+ Click
714
+ </button>
715
+ ```
716
+
717
+ ### Accesibilidad
718
+
719
+ 1. **No depender solo de sombras para comunicar estados**
720
+ - Combinar con colores, bordes, iconos
721
+ - Las sombras pueden no ser visibles en todos los contextos
722
+
723
+ 2. **Asegurar contraste suficiente**
724
+ - Las sombras no deben reducir el contraste del texto
725
+ - Verificar WCAG 2.1 AA (4.5:1 para texto normal)
726
+
727
+ 3. **Considerar usuarios con baja visión**
728
+ - Sombras muy sutiles pueden no ser percibidas
729
+ - Usar indicadores adicionales para estados importantes
730
+
731
+ 4. **Dark Mode**
732
+ - Las sombras negras funcionan bien en fondos claros y oscuros
733
+ - No necesitas sombras diferentes para dark mode en la mayoría de casos
734
+
735
+ ### Performance
736
+
737
+ 1. **Las sombras CSS son eficientes**
738
+ - ✅ No requieren imágenes adicionales
739
+ - ✅ Son hardware-accelerated en la mayoría de navegadores
740
+
741
+ 2. **Evitar blur excesivo**
742
+ - Valores de blur muy altos pueden impactar performance
743
+ - El sistema usa valores optimizados (1px a 50px)
744
+
745
+ 3. **Animar solo transform y opacity cuando sea posible**
746
+ ```tsx
747
+ // ✅ MEJOR PERFORMANCE - Animar transform
748
+ <div className="shadow-base hover:scale-105 transition-transform">
749
+ Card
750
+ </div>
751
+
752
+ // ⚠️ ACEPTABLE - Animar shadow
753
+ <div className="shadow-base hover:shadow-lg transition-shadow">
754
+ Card
755
+ </div>
756
+ ```
757
+
758
+ ---
759
+
760
+ ## Dark Mode
761
+
762
+ Las sombras en dark mode requieren consideraciones especiales para mantener la profundidad visual sin que las sombras negras se vuelvan invisibles sobre fondos oscuros.
763
+
764
+ ### Configuración de Tailwind CSS
765
+
766
+ El modo oscuro en Siesa UI Kit se basa en la estrategia de clases de Tailwind CSS:
767
+
768
+ ```javascript
769
+ // tailwind.config.js
770
+ module.exports = {
771
+ darkMode: 'class', // ✅ Estrategia basada en clases (NO 'media')
772
+ // ...resto de la configuración
773
+ }
774
+ ```
775
+
776
+ Con esta configuración, el modo oscuro se activa añadiendo la clase `.dark` al elemento `<html>`:
777
+
778
+ ```html
779
+ <!-- Modo claro -->
780
+ <html>
781
+ <body>
782
+ <!-- Contenido en modo claro -->
783
+ </body>
784
+ </html>
785
+
786
+ <!-- Modo oscuro -->
787
+ <html class="dark">
788
+ <body>
789
+ <!-- Contenido en modo oscuro -->
790
+ </body>
791
+ </html>
792
+ ```
793
+
794
+ ### El Modificador `dark:`
795
+
796
+ El modificador `dark:` de Tailwind funciona como un **prefijo condicional** que aplica estilos solo cuando la clase `.dark` está presente en un elemento padre.
797
+
798
+ #### Principios para Sombras en Dark Mode
799
+
800
+ ```tsx
801
+ // Patrón básico - Sombras funcionan bien en ambos modos
802
+ <div className="rounded-2xl bg-white dark:bg-dark-bg-primary shadow-base p-6">
803
+ Card con sombra adaptable
804
+ </div>
805
+
806
+ // Las sombras negras (rgba(0,0,0,...)) funcionan bien en ambos modos
807
+ // porque el contraste se mantiene sobre fondos oscuros
808
+ ```
809
+
810
+ **Nota Importante**: Las sombras negras con opacidad baja (5%-10%) funcionan bien tanto en fondos claros como oscuros, por lo que **generalmente NO necesitas cambiar las sombras en dark mode**.
811
+
812
+ ### Cuándo Ajustar Sombras en Dark Mode
813
+
814
+ Hay casos específicos donde puedes querer ajustar las sombras:
815
+
816
+ #### 1. Aumentar Opacidad en Dark Mode
817
+
818
+ Para elementos que necesitan destacarse más en dark mode:
819
+
820
+ ```tsx
821
+ // Aumentar intensidad de sombra en dark mode
822
+ <div className="
823
+ rounded-2xl
824
+ bg-white dark:bg-dark-bg-primary
825
+ shadow-base dark:shadow-lg
826
+ p-6
827
+ ">
828
+ Card con sombra más intensa en dark mode
829
+ </div>
830
+
831
+ // Modal que necesita más prominencia en dark mode
832
+ <div className="
833
+ rounded-3xl
834
+ bg-white dark:bg-dark-bg-primary
835
+ shadow-xl dark:shadow-2xl
836
+ p-8
837
+ ">
838
+ Modal destacado en dark mode
839
+ </div>
840
+ ```
841
+
842
+ #### 2. Sombras de Color en Dark Mode
843
+
844
+ Sombras de color (para efectos especiales) pueden necesitar ajuste:
845
+
846
+ ```tsx
847
+ // Sombra de color ajustada para dark mode
848
+ <button className="
849
+ rounded-md
850
+ bg-primary-custom-600 dark:bg-dark-bg-inverse
851
+ shadow-[0_4px_14px_0_rgba(14,121,253,0.4)]
852
+ dark:shadow-[0_4px_14px_0_rgba(147,209,253,0.3)]
853
+ px-4 py-2
854
+ ">
855
+ Botón con sombra de color
856
+ </button>
857
+ ```
858
+
859
+ ### Combinando Sombras con Otros Estados
860
+
861
+ El modificador `dark:` se puede combinar con hover, focus, y otros estados:
862
+
863
+ ```tsx
864
+ // Dark mode + Hover
865
+ <div className="
866
+ rounded-2xl
867
+ bg-white dark:bg-dark-bg-primary
868
+ shadow-base dark:shadow-md
869
+ hover:shadow-lg dark:hover:shadow-xl
870
+ transition-shadow
871
+ p-6
872
+ ">
873
+ Card con hover effect en ambos modos
874
+ </div>
875
+
876
+ // Dark mode + Focus en inputs
877
+ <input className="
878
+ rounded-md
879
+ border border-border-primary dark:border-dark-border-primary
880
+ focus:shadow-lg dark:focus:shadow-xl
881
+ focus:ring-2 focus:ring-primary-custom-400/20 dark:focus:ring-dark-border-custom/20
882
+ " />
883
+ ```
884
+
885
+ ### Orden de Modificadores
886
+
887
+ Tailwind CSS recomienda un orden específico:
888
+
889
+ **Formato**: `{responsive}:{dark}:{state}:{utility}`
890
+
891
+ ```tsx
892
+ // ✅ CORRECTO - Orden: responsive → dark → state → utility
893
+ <div className="
894
+ shadow-base
895
+ md:shadow-md
896
+ md:dark:shadow-lg
897
+ md:dark:hover:shadow-xl
898
+ transition-shadow
899
+ ">
900
+ Card con orden correcto
901
+ </div>
902
+
903
+ // ❌ INCORRECTO - Orden equivocado
904
+ <div className="
905
+ dark:md:hover:shadow-xl
906
+ shadow-base
907
+ ">
908
+ Orden confuso
909
+ </div>
910
+ ```
911
+
912
+ ### Tabla de Sombras por Modo
913
+
914
+ | Componente | Light Mode | Dark Mode | Razón |
915
+ |------------|------------|-----------|-------|
916
+ | **Card estándar** | `shadow-base` | `shadow-base` | Mismo valor - funciona bien |
917
+ | **Card elevado** | `shadow-md` | `shadow-md` o `shadow-lg` | Opcional: aumentar en dark |
918
+ | **Modal pequeño** | `shadow-lg` | `shadow-lg` o `shadow-xl` | Opcional: aumentar en dark |
919
+ | **Modal grande** | `shadow-xl` | `shadow-xl` o `shadow-2xl` | Opcional: aumentar en dark |
920
+ | **Dropdown** | `shadow-menu` | `shadow-menu` o `shadow-lg` | Opcional: aumentar en dark |
921
+ | **Button inset** | `shadow-button-inset` | `shadow-button-inset` | Mismo valor |
922
+
923
+ ### Ejemplos Completos
924
+
925
+ #### Ejemplo 1: Cards con Sombras Adaptativas
926
+
927
+ ```tsx
928
+ export const CardWithShadow = () => {
929
+ return (
930
+ <div className="
931
+ rounded-2xl
932
+ bg-white dark:bg-dark-bg-primary
933
+ border border-border-primary dark:border-dark-border-primary
934
+ shadow-base dark:shadow-md
935
+ p-6
936
+ hover:shadow-lg dark:hover:shadow-xl
937
+ transition-all
938
+ ">
939
+ <h3 className="
940
+ text-content-primary dark:text-dark-content-primary
941
+ font-bold text-xl mb-4
942
+ ">
943
+ Card Title
944
+ </h3>
945
+ <p className="
946
+ text-content-secondary dark:text-content-secondary
947
+ mb-4
948
+ ">
949
+ Card content con sombra que se adapta al modo oscuro
950
+ </p>
951
+ <button className="
952
+ rounded-md
953
+ bg-primary-custom-600 dark:bg-dark-bg-inverse
954
+ text-primary-inverse-content dark:text-dark-content-inverse
955
+ shadow-button-inset
956
+ px-4 py-2
957
+ font-bold
958
+ ">
959
+ Action
960
+ </button>
961
+ </div>
962
+ );
963
+ };
964
+ ```
965
+
966
+ #### Ejemplo 2: Modal con Sombras Intensas en Dark Mode
967
+
968
+ ```tsx
969
+ export const AdaptiveModal = ({ isOpen, onClose }) => {
970
+ if (!isOpen) return null;
971
+
972
+ return (
973
+ <div className="fixed inset-0 z-50 flex items-center justify-center p-4">
974
+ {/* Overlay */}
975
+ <div
976
+ className="absolute inset-0 bg-black/50 dark:bg-black/70 backdrop-blur-sm"
977
+ onClick={onClose}
978
+ />
979
+
980
+ {/* Modal */}
981
+ <div className="
982
+ relative z-10
983
+ rounded-3xl
984
+ bg-white dark:bg-dark-bg-primary
985
+ border border-border-primary dark:border-dark-border-primary
986
+ shadow-xl dark:shadow-2xl
987
+ max-w-md w-full
988
+ ">
989
+ {/* Header */}
990
+ <div className="
991
+ flex items-center justify-between
992
+ p-6
993
+ border-b border-border-primary dark:border-dark-border-primary
994
+ ">
995
+ <h2 className="
996
+ text-content-primary dark:text-dark-content-primary
997
+ font-bold text-2xl
998
+ ">
999
+ Modal Title
1000
+ </h2>
1001
+ <button
1002
+ onClick={onClose}
1003
+ className="
1004
+ rounded-full p-2
1005
+ hover:bg-background-secondary dark:hover:bg-dark-bg-primary
1006
+ transition-colors
1007
+ "
1008
+ >
1009
+ <XIcon className="w-5 h-5" />
1010
+ </button>
1011
+ </div>
1012
+
1013
+ {/* Body */}
1014
+ <div className="p-6">
1015
+ <p className="
1016
+ text-content-secondary dark:text-content-secondary
1017
+ ">
1018
+ Modal content adaptado para dark mode con sombras más intensas
1019
+ </p>
1020
+ </div>
1021
+
1022
+ {/* Footer */}
1023
+ <div className="
1024
+ flex gap-3 justify-end
1025
+ p-6
1026
+ border-t border-border-primary dark:border-dark-border-primary
1027
+ ">
1028
+ <button
1029
+ onClick={onClose}
1030
+ className="
1031
+ rounded-md
1032
+ border border-border-primary dark:border-dark-border-custom
1033
+ px-4 py-2
1034
+ font-bold
1035
+ text-content-primary dark:text-dark-content-primary
1036
+ hover:bg-background-secondary dark:hover:bg-dark-bg-primary
1037
+ "
1038
+ >
1039
+ Cancel
1040
+ </button>
1041
+ <button className="
1042
+ rounded-md
1043
+ bg-primary-custom-600 dark:bg-dark-bg-inverse
1044
+ text-primary-inverse-content dark:text-dark-content-inverse
1045
+ shadow-button-inset
1046
+ px-4 py-2
1047
+ font-bold
1048
+ ">
1049
+ Confirm
1050
+ </button>
1051
+ </div>
1052
+ </div>
1053
+ </div>
1054
+ );
1055
+ };
1056
+ ```
1057
+
1058
+ #### Ejemplo 3: Dropdown con Sombra Adaptativa
1059
+
1060
+ ```tsx
1061
+ export const DropdownMenu = ({ isOpen, items }) => {
1062
+ if (!isOpen) return null;
1063
+
1064
+ return (
1065
+ <div className="
1066
+ absolute top-full right-0 mt-2
1067
+ rounded-xl
1068
+ bg-white dark:bg-dark-bg-primary
1069
+ border border-border-primary dark:border-dark-border-primary
1070
+ shadow-menu dark:shadow-lg
1071
+ min-w-[200px]
1072
+ py-2
1073
+ ">
1074
+ {items.map((item, index) => (
1075
+ <button
1076
+ key={index}
1077
+ className="
1078
+ w-full px-4 py-2
1079
+ text-left
1080
+ text-content-primary dark:text-dark-content-primary
1081
+ hover:bg-background-secondary dark:hover:bg-dark-bg-primary
1082
+ transition-colors
1083
+ "
1084
+ >
1085
+ {item.label}
1086
+ </button>
1087
+ ))}
1088
+ </div>
1089
+ );
1090
+ };
1091
+ ```
1092
+
1093
+ #### Ejemplo 4: Grid de Cards con Hover
1094
+
1095
+ ```tsx
1096
+ export const CardGrid = ({ cards }) => {
1097
+ return (
1098
+ <div className="
1099
+ min-h-screen
1100
+ bg-bg-primary dark:bg-dark-bg-primary
1101
+ p-8
1102
+ ">
1103
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
1104
+ {cards.map((card) => (
1105
+ <div
1106
+ key={card.id}
1107
+ className="
1108
+ rounded-2xl
1109
+ bg-white dark:bg-dark-bg-primary
1110
+ border border-border-primary dark:border-dark-border-primary
1111
+ shadow-base dark:shadow-md
1112
+ hover:shadow-lg dark:hover:shadow-xl
1113
+ hover:scale-105
1114
+ transition-all
1115
+ p-6
1116
+ cursor-pointer
1117
+ "
1118
+ >
1119
+ <h3 className="
1120
+ text-content-primary dark:text-dark-content-primary
1121
+ font-bold text-lg mb-2
1122
+ ">
1123
+ {card.title}
1124
+ </h3>
1125
+ <p className="
1126
+ text-content-secondary dark:text-content-secondary
1127
+ text-sm
1128
+ ">
1129
+ {card.description}
1130
+ </p>
1131
+ </div>
1132
+ ))}
1133
+ </div>
1134
+ </div>
1135
+ );
1136
+ };
1137
+ ```
1138
+
1139
+ ### Mejores Prácticas para Sombras en Dark Mode
1140
+
1141
+ #### ✅ Hacer
1142
+
1143
+ 1. **Usar las sombras estándar en ambos modos (cuando sea suficiente)**
1144
+ ```tsx
1145
+ // ✅ CORRECTO - Las sombras negras funcionan bien
1146
+ <div className="shadow-base">Card</div>
1147
+ ```
1148
+
1149
+ 2. **Aumentar la sombra en dark mode solo si es necesario**
1150
+ ```tsx
1151
+ // ✅ CORRECTO - Más prominencia en dark mode
1152
+ <div className="shadow-base dark:shadow-lg">Card destacado</div>
1153
+ ```
1154
+
1155
+ 3. **Combinar sombras con colores adaptativos**
1156
+ ```tsx
1157
+ // ✅ CORRECTO - Todo se adapta
1158
+ <div className="
1159
+ bg-white dark:bg-dark-bg-primary
1160
+ border border-border-primary dark:border-dark-border-primary
1161
+ shadow-base dark:shadow-md
1162
+ ">
1163
+ Card completo
1164
+ </div>
1165
+ ```
1166
+
1167
+ 4. **Ajustar overlay opacities en dark mode**
1168
+ ```tsx
1169
+ // ✅ CORRECTO - Overlay más oscuro en dark mode
1170
+ <div className="bg-black/50 dark:bg-black/70 backdrop-blur-sm">
1171
+ Overlay
1172
+ </div>
1173
+ ```
1174
+
1175
+ #### ❌ Evitar
1176
+
1177
+ 1. **No remover sombras en dark mode**
1178
+ ```tsx
1179
+ // ❌ INCORRECTO - Perder profundidad en dark
1180
+ <div className="shadow-base dark:shadow-none">Card</div>
1181
+
1182
+ // ✅ CORRECTO - Mantener o aumentar
1183
+ <div className="shadow-base dark:shadow-md">Card</div>
1184
+ ```
1185
+
1186
+ 2. **No usar sombras blancas en dark mode**
1187
+ ```tsx
1188
+ // ❌ INCORRECTO - Sombras blancas no funcionan bien
1189
+ <div className="dark:shadow-[0_4px_6px_rgba(255,255,255,0.3)]">
1190
+ Card
1191
+ </div>
1192
+
1193
+ // ✅ CORRECTO - Mantener sombras negras o aumentar intensidad
1194
+ <div className="shadow-base dark:shadow-lg">Card</div>
1195
+ ```
1196
+
1197
+ 3. **No olvidar combinar con colores de fondo y borde**
1198
+ ```tsx
1199
+ // ❌ INCORRECTO - Solo cambiar sombra
1200
+ <div className="bg-white shadow-base dark:shadow-lg">
1201
+ Fondo no se adapta
1202
+ </div>
1203
+
1204
+ // ✅ CORRECTO - Adaptar todo
1205
+ <div className="
1206
+ bg-white dark:bg-dark-bg-primary
1207
+ border border-border-primary dark:border-dark-border-primary
1208
+ shadow-base dark:shadow-lg
1209
+ ">
1210
+ Todo adaptado
1211
+ </div>
1212
+ ```
1213
+
1214
+ ### Guía Rápida: Decisiones sobre Sombras en Dark Mode
1215
+
1216
+ | Situación | Recomendación |
1217
+ |-----------|---------------|
1218
+ | **Card de lista** | Mantener `shadow-base` en ambos modos |
1219
+ | **Card destacado** | `shadow-base` → `dark:shadow-md` |
1220
+ | **Modal** | Aumentar un nivel: `shadow-lg` → `dark:shadow-xl` |
1221
+ | **Dropdown** | Aumentar: `shadow-menu` → `dark:shadow-lg` |
1222
+ | **Overlay** | Aumentar opacidad: `bg-black/50` → `dark:bg-black/70` |
1223
+ | **Button inset** | Mantener `shadow-button-inset` en ambos |
1224
+
1225
+ ### Recursos Adicionales sobre Dark Mode
1226
+
1227
+ Para más información sobre el modo oscuro:
1228
+ - Ver `docs/dark-mode-guide.md` - Guía completa de Dark Mode en Tailwind CSS
1229
+ - Ver `docs/colors.md` - Sistema de colores completo con tokens dark mode
1230
+ - Ver `docs/border-radius.md` - Border radius con ejemplos de dark mode
1231
+ - Ver `docs/typography.md` - Sistema tipográfico adaptado a dark mode
1232
+ - [Documentación oficial de Tailwind Dark Mode](https://tailwindcss.com/docs/dark-mode)
1233
+
1234
+ ---
1235
+
1236
+ ## Referencia Rápida
1237
+
1238
+ ### Cheat Sheet: Por Componente
1239
+
1240
+ ```tsx
1241
+ // ===== BOTONES =====
1242
+ <button className="shadow-button-inset">Button default</button>
1243
+ <button className="shadow-base hover:shadow-md">Button outline</button>
1244
+
1245
+ // ===== CARDS =====
1246
+ <div className="shadow-base">Card estándar</div>
1247
+ <div className="shadow-md">Card elevado</div>
1248
+ <div className="shadow-lg">Card flotante</div>
1249
+
1250
+ // ===== MODALES =====
1251
+ <div className="shadow-lg">Modal pequeño</div>
1252
+ <div className="shadow-xl">Modal grande</div>
1253
+ <div className="shadow-2xl">Drawer/Panel</div>
1254
+
1255
+ // ===== DROPDOWNS =====
1256
+ <div className="shadow-menu">Dropdown simple</div>
1257
+ <div className="shadow-md">Menú contextual</div>
1258
+
1259
+ // ===== INPUTS =====
1260
+ <input className="focus:shadow-base" />
1261
+ <input className="shadow-inner" disabled />
1262
+
1263
+ // ===== TOOLTIPS =====
1264
+ <div className="shadow-lg">Tooltip</div>
1265
+ <div className="shadow-xl">Popover</div>
1266
+ ```
1267
+
1268
+ ### Cheat Sheet: Por Elevación
1269
+
1270
+ | Nivel | Clase | Uso |
1271
+ |-------|-------|-----|
1272
+ | 0 | Sin sombra | Fondos, elementos integrados |
1273
+ | 1 | `shadow-sm` | Separadores sutiles |
1274
+ | 2 | `shadow-base` | **Cards, inputs focus** |
1275
+ | 3 | `shadow-md` | Cards elevados, dropdowns |
1276
+ | 4 | `shadow-lg` | **Modales, popovers** |
1277
+ | 5 | `shadow-xl` | Modales grandes |
1278
+ | 6 | `shadow-2xl` | Drawers, panels |
1279
+
1280
+ ### Cheat Sheet: Valores CSS
1281
+
1282
+ ```css
1283
+ /* Drop Shadows */
1284
+ shadow-sm: 0px 1px 2px 0px rgba(0,0,0,0.05)
1285
+ shadow-base: 0px 1px 2px -1px rgba(0,0,0,0.1),
1286
+ 0px 1px 3px 0px rgba(0,0,0,0.1)
1287
+ shadow-md: 0px 2px 4px -2px rgba(0,0,0,0.1),
1288
+ 0px 4px 6px -1px rgba(0,0,0,0.1)
1289
+ shadow-lg: 0px 4px 6px -4px rgba(0,0,0,0.1),
1290
+ 0px 10px 15px -3px rgba(0,0,0,0.1)
1291
+ shadow-xl: 0px 8px 10px -6px rgba(0,0,0,0.1),
1292
+ 0px 20px 25px -5px rgba(0,0,0,0.1)
1293
+ shadow-2xl: 0px 25px 50px -12px rgba(0,0,0,0.25)
1294
+
1295
+ /* Inner Shadow */
1296
+ shadow-inner: inset 0 2px 4px 0 rgba(0,0,0,0.05)
1297
+
1298
+ /* Custom */
1299
+ shadow-button-inset: 0px 2px 0px 0px inset rgba(255,255,255,0.15)
1300
+ shadow-menu: 0px 4px 4px -1px rgba(12,12,13,0.05),
1301
+ 0px 4px 4px -1px rgba(12,12,13,0.1)
1302
+ ```
1303
+
1304
+ ### Cheat Sheet: Transiciones
1305
+
1306
+ ```tsx
1307
+ // Transición básica
1308
+ <div className="shadow-base hover:shadow-md transition-shadow">...</div>
1309
+
1310
+ // Transición con duración
1311
+ <div className="shadow-base hover:shadow-lg transition-shadow duration-300">...</div>
1312
+
1313
+ // Transición con múltiples propiedades
1314
+ <div className="shadow-base hover:shadow-lg hover:scale-105 transition-all duration-200">...</div>
1315
+
1316
+ // Transición solo en hover out
1317
+ <div className="shadow-lg hover:shadow-base transition-shadow ease-out">...</div>
1318
+ ```
1319
+
1320
+ ---
1321
+
1322
+ ## Recursos Adicionales
1323
+
1324
+ ### Enlaces Útiles
1325
+
1326
+ - **Tailwind Box Shadow**: https://tailwindcss.com/docs/box-shadow
1327
+ - **CSS box-shadow**: https://developer.mozilla.org/en-US/docs/Web/CSS/box-shadow
1328
+ - **Shadow Generator**: https://shadows.brumm.af
1329
+ - **Material Design Elevation**: https://material.io/design/environment/elevation.html
1330
+
1331
+ ### Archivos Relacionados
1332
+
1333
+ - `tailwind.config.js` - Configuración de boxShadow (líneas 114-118)
1334
+ - `src/components/Button/Button.tsx` - Uso de shadow-button-inset (línea 67)
1335
+ - `docs/colors.md` - Sistema de colores
1336
+ - `docs/border-radius.md` - Border radius (combina bien con sombras)
1337
+ - `docs/typography.md` - Sistema tipográfico
1338
+
1339
+ ### Herramientas de Testing
1340
+
1341
+ ```tsx
1342
+ // Componente para visualizar todas las sombras
1343
+ export const ShadowsDemo = () => {
1344
+ const shadows = [
1345
+ { name: 'shadow-sm', label: 'Small' },
1346
+ { name: 'shadow-base', label: 'Base' },
1347
+ { name: 'shadow-md', label: 'Medium' },
1348
+ { name: 'shadow-lg', label: 'Large' },
1349
+ { name: 'shadow-xl', label: 'Extra Large' },
1350
+ { name: 'shadow-2xl', label: '2X Large' },
1351
+ { name: 'shadow-inner', label: 'Inner' },
1352
+ { name: 'shadow-button-inset', label: 'Button Inset' },
1353
+ { name: 'shadow-menu', label: 'Menu' },
1354
+ ];
1355
+
1356
+ return (
1357
+ <div className="grid grid-cols-3 gap-8 p-8 bg-gray-50">
1358
+ {shadows.map((shadow) => (
1359
+ <div key={shadow.name} className="text-center">
1360
+ <div
1361
+ className={`${shadow.name} rounded-lg bg-white w-32 h-32 mx-auto mb-4 flex items-center justify-center`}
1362
+ >
1363
+ <span className="text-sm font-bold">{shadow.label}</span>
1364
+ </div>
1365
+ <p className="font-bold text-sm">{shadow.name}</p>
1366
+ </div>
1367
+ ))}
1368
+ </div>
1369
+ );
1370
+ };
1371
+ ```
1372
+
1373
+ ---
1374
+
1375
+ **Última actualización**: 2025-11-11
1376
+ **Versión**: 1.0.0
1377
+ **Mantenedor**: Siesa UI Kit Team