@mdigital_ui/ui 0.4.8 → 0.5.1

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 (227) hide show
  1. package/README.md +279 -247
  2. package/dist/alert/index.d.ts.map +1 -1
  3. package/dist/alert/index.js +1 -1
  4. package/dist/autocomplete/index.d.ts.map +1 -1
  5. package/dist/autocomplete/index.js +3 -2
  6. package/dist/avatar/index.d.ts.map +1 -1
  7. package/dist/avatar/index.js +1 -1
  8. package/dist/breadcrumbs/index.js +4 -4
  9. package/dist/button/index.js +2 -2
  10. package/dist/calendar/index.d.ts.map +1 -1
  11. package/dist/calendar/index.js +2 -1
  12. package/dist/cascader/index.d.ts.map +1 -1
  13. package/dist/cascader/index.js +1 -1
  14. package/dist/checkbox/index.d.ts.map +1 -1
  15. package/dist/checkbox/index.js +1 -1
  16. package/dist/checkbox/types.d.ts +2 -0
  17. package/dist/checkbox/types.d.ts.map +1 -1
  18. package/dist/{chunk-Z3DIBMBQ.js → chunk-3K4GIXFA.js} +178 -118
  19. package/dist/chunk-3K4GIXFA.js.map +1 -0
  20. package/dist/{chunk-SJLH5ZDW.js → chunk-4QLYRAW2.js} +3 -3
  21. package/dist/{chunk-SJLH5ZDW.js.map → chunk-4QLYRAW2.js.map} +1 -1
  22. package/dist/{chunk-4TEZWGX7.js → chunk-64OCJYSH.js} +17 -8
  23. package/dist/chunk-64OCJYSH.js.map +1 -0
  24. package/dist/{chunk-5YEC6FDN.js → chunk-6CMHCCDO.js} +14 -7
  25. package/dist/chunk-6CMHCCDO.js.map +1 -0
  26. package/dist/{chunk-7RT65ZGV.js → chunk-6H2Y3QKP.js} +75 -23
  27. package/dist/chunk-6H2Y3QKP.js.map +1 -0
  28. package/dist/{chunk-UFYG3HKL.js → chunk-6K6RGQNL.js} +193 -94
  29. package/dist/chunk-6K6RGQNL.js.map +1 -0
  30. package/dist/{chunk-ROQGBDET.js → chunk-6XXAZ6P2.js} +15 -7
  31. package/dist/chunk-6XXAZ6P2.js.map +1 -0
  32. package/dist/{chunk-3Z7RLVWD.js → chunk-75T5BISG.js} +7 -13
  33. package/dist/chunk-75T5BISG.js.map +1 -0
  34. package/dist/{chunk-XAM5EKOS.js → chunk-7SKAAKBC.js} +13 -12
  35. package/dist/chunk-7SKAAKBC.js.map +1 -0
  36. package/dist/{chunk-6RZEJRTC.js → chunk-7ZUIX4NK.js} +3 -3
  37. package/dist/{chunk-6RZEJRTC.js.map → chunk-7ZUIX4NK.js.map} +1 -1
  38. package/dist/{chunk-NPK4ESMA.js → chunk-B75ICJCX.js} +9 -16
  39. package/dist/chunk-B75ICJCX.js.map +1 -0
  40. package/dist/chunk-CB7YOZWV.js +50 -0
  41. package/dist/chunk-CB7YOZWV.js.map +1 -0
  42. package/dist/{chunk-UFC3RGIN.js → chunk-DXAOZB6J.js} +4 -4
  43. package/dist/chunk-DXAOZB6J.js.map +1 -0
  44. package/dist/{chunk-75N6T3IS.js → chunk-ECBTSKES.js} +13 -10
  45. package/dist/chunk-ECBTSKES.js.map +1 -0
  46. package/dist/{chunk-J2WIZULN.js → chunk-FCIK35OY.js} +3 -3
  47. package/dist/{chunk-J2WIZULN.js.map → chunk-FCIK35OY.js.map} +1 -1
  48. package/dist/{chunk-FY2TZ2NT.js → chunk-GP7R3AFC.js} +58 -30
  49. package/dist/chunk-GP7R3AFC.js.map +1 -0
  50. package/dist/{chunk-ED4CQZ72.js → chunk-GQM5WLP5.js} +4 -4
  51. package/dist/{chunk-ED4CQZ72.js.map → chunk-GQM5WLP5.js.map} +1 -1
  52. package/dist/{chunk-TBKPQOXF.js → chunk-GSLNACUF.js} +3 -3
  53. package/dist/{chunk-TBKPQOXF.js.map → chunk-GSLNACUF.js.map} +1 -1
  54. package/dist/{chunk-OJAHIPPP.js → chunk-HGWD63IR.js} +3 -3
  55. package/dist/{chunk-OJAHIPPP.js.map → chunk-HGWD63IR.js.map} +1 -1
  56. package/dist/chunk-HKQOAEFY.js +1 -1
  57. package/dist/{chunk-PD3O6ZH4.js → chunk-JXOLZBXF.js} +19 -8
  58. package/dist/chunk-JXOLZBXF.js.map +1 -0
  59. package/dist/{chunk-CUXQZRDI.js → chunk-JZCONCJS.js} +13 -3
  60. package/dist/chunk-JZCONCJS.js.map +1 -0
  61. package/dist/{chunk-TDPJYCNI.js → chunk-KBT6UQNA.js} +14 -35
  62. package/dist/chunk-KBT6UQNA.js.map +1 -0
  63. package/dist/{chunk-VNH6R5EU.js → chunk-KR3GBSVA.js} +4 -6
  64. package/dist/chunk-KR3GBSVA.js.map +1 -0
  65. package/dist/{chunk-JWYBDNC6.js → chunk-KTK7LSKX.js} +7 -8
  66. package/dist/chunk-KTK7LSKX.js.map +1 -0
  67. package/dist/{chunk-J4SAIKKZ.js → chunk-L3ZFNHVX.js} +25 -22
  68. package/dist/chunk-L3ZFNHVX.js.map +1 -0
  69. package/dist/{chunk-PB5VGXS5.js → chunk-LBOQJHFH.js} +3 -3
  70. package/dist/{chunk-PB5VGXS5.js.map → chunk-LBOQJHFH.js.map} +1 -1
  71. package/dist/{chunk-XCK62GVU.js → chunk-LZ2MHSYF.js} +8 -5
  72. package/dist/chunk-LZ2MHSYF.js.map +1 -0
  73. package/dist/{chunk-LHZJ2GJU.js → chunk-MHRSK2QC.js} +8 -6
  74. package/dist/chunk-MHRSK2QC.js.map +1 -0
  75. package/dist/{chunk-JIXINKUJ.js → chunk-N742SARE.js} +8 -7
  76. package/dist/chunk-N742SARE.js.map +1 -0
  77. package/dist/{chunk-3XOHSE3X.js → chunk-NA6EVQ6T.js} +3 -3
  78. package/dist/{chunk-3XOHSE3X.js.map → chunk-NA6EVQ6T.js.map} +1 -1
  79. package/dist/{chunk-6ROGWFQ2.js → chunk-NKLKTAUP.js} +3 -3
  80. package/dist/{chunk-6ROGWFQ2.js.map → chunk-NKLKTAUP.js.map} +1 -1
  81. package/dist/{chunk-S6HO7HUY.js → chunk-OSD63E6O.js} +15 -19
  82. package/dist/chunk-OSD63E6O.js.map +1 -0
  83. package/dist/{chunk-QDJ5PZPP.js → chunk-PHA7SLBY.js} +3 -3
  84. package/dist/chunk-PHA7SLBY.js.map +1 -0
  85. package/dist/{chunk-6NXZWLSM.js → chunk-S4BF3Z6O.js} +4 -4
  86. package/dist/{chunk-6NXZWLSM.js.map → chunk-S4BF3Z6O.js.map} +1 -1
  87. package/dist/{chunk-C65SCJD6.js → chunk-SK6YMTMA.js} +5 -12
  88. package/dist/chunk-SK6YMTMA.js.map +1 -0
  89. package/dist/{chunk-DBPLQZJ2.js → chunk-SSISBOLO.js} +75 -22
  90. package/dist/chunk-SSISBOLO.js.map +1 -0
  91. package/dist/{chunk-LWYZCSX4.js → chunk-UBJK5623.js} +12 -11
  92. package/dist/chunk-UBJK5623.js.map +1 -0
  93. package/dist/{chunk-74AF6PO2.js → chunk-UEQ3NEVL.js} +48 -12
  94. package/dist/chunk-UEQ3NEVL.js.map +1 -0
  95. package/dist/{chunk-A4MYCEGM.js → chunk-UHHCUCEE.js} +19 -8
  96. package/dist/chunk-UHHCUCEE.js.map +1 -0
  97. package/dist/{chunk-X7JN7WPF.js → chunk-UIPDAD62.js} +3 -3
  98. package/dist/chunk-UIPDAD62.js.map +1 -0
  99. package/dist/{chunk-YUACN5GJ.js → chunk-UPBKLI62.js} +20 -13
  100. package/dist/chunk-UPBKLI62.js.map +1 -0
  101. package/dist/{chunk-3B32X5PU.js → chunk-UUXSTLOY.js} +7 -5
  102. package/dist/chunk-UUXSTLOY.js.map +1 -0
  103. package/dist/{chunk-HSMO2BR4.js → chunk-VNB7ZHCZ.js} +4 -13
  104. package/dist/chunk-VNB7ZHCZ.js.map +1 -0
  105. package/dist/{chunk-TQEMGWZ2.js → chunk-W4RYNHAG.js} +3 -3
  106. package/dist/{chunk-TQEMGWZ2.js.map → chunk-W4RYNHAG.js.map} +1 -1
  107. package/dist/{chunk-PRDJLQLB.js → chunk-XNV3YAJK.js} +5 -5
  108. package/dist/chunk-XNV3YAJK.js.map +1 -0
  109. package/dist/{chunk-I7HJBHQU.js → chunk-Y3PVWMUN.js} +7 -7
  110. package/dist/chunk-Y3PVWMUN.js.map +1 -0
  111. package/dist/clipboard/index.js +2 -2
  112. package/dist/collapse/index.js +2 -2
  113. package/dist/color-picker/index.d.ts +3 -3
  114. package/dist/color-picker/index.d.ts.map +1 -1
  115. package/dist/color-picker/index.js +3 -2
  116. package/dist/context-menu/index.d.ts +4 -6
  117. package/dist/context-menu/index.d.ts.map +1 -1
  118. package/dist/context-menu/index.js +2 -2
  119. package/dist/date-picker/PickerWrapper.d.ts +3 -3
  120. package/dist/date-picker/PickerWrapper.d.ts.map +1 -1
  121. package/dist/date-picker/index.d.ts.map +1 -1
  122. package/dist/date-picker/index.js +3 -2
  123. package/dist/descriptions/index.js +1 -1
  124. package/dist/dropdown/index.js +3 -3
  125. package/dist/hooks/useControllable.d.ts +9 -2
  126. package/dist/hooks/useControllable.d.ts.map +1 -1
  127. package/dist/hooks/useRipple.d.ts +0 -6
  128. package/dist/hooks/useRipple.d.ts.map +1 -1
  129. package/dist/index.js +46 -46
  130. package/dist/input/index.js +1 -1
  131. package/dist/input-password/index.js +2 -2
  132. package/dist/mentions/index.d.ts.map +1 -1
  133. package/dist/mentions/index.js +2 -1
  134. package/dist/menubar/index.js +2 -2
  135. package/dist/multi-select/index.d.ts.map +1 -1
  136. package/dist/multi-select/index.js +4 -4
  137. package/dist/navigation-menu/index.d.ts.map +1 -1
  138. package/dist/navigation-menu/index.js +1 -1
  139. package/dist/number-input/index.d.ts.map +1 -1
  140. package/dist/number-input/index.js +3 -3
  141. package/dist/pagination/index.js +2 -2
  142. package/dist/popover/index.d.ts +16 -1
  143. package/dist/popover/index.d.ts.map +1 -1
  144. package/dist/popover/index.js +1 -1
  145. package/dist/qr-code/index.d.ts +3 -3
  146. package/dist/qr-code/index.d.ts.map +1 -1
  147. package/dist/qr-code/index.js +1 -1
  148. package/dist/radio/index.d.ts.map +1 -1
  149. package/dist/radio/index.js +1 -1
  150. package/dist/rating/index.js +2 -2
  151. package/dist/resizable/index.d.ts +4 -3
  152. package/dist/resizable/index.d.ts.map +1 -1
  153. package/dist/resizable/index.js +1 -1
  154. package/dist/result/index.d.ts.map +1 -1
  155. package/dist/result/index.js +1 -1
  156. package/dist/select/index.d.ts.map +1 -1
  157. package/dist/select/index.js +4 -4
  158. package/dist/skeleton/index.d.ts +3 -3
  159. package/dist/skeleton/index.d.ts.map +1 -1
  160. package/dist/skeleton/index.js +1 -1
  161. package/dist/table/index.d.ts.map +1 -1
  162. package/dist/table/index.js +8 -8
  163. package/dist/table/types.d.ts +16 -2
  164. package/dist/table/types.d.ts.map +1 -1
  165. package/dist/tags-input/index.d.ts.map +1 -1
  166. package/dist/tags-input/index.js +2 -1
  167. package/dist/textarea/index.d.ts +3 -3
  168. package/dist/textarea/index.d.ts.map +1 -1
  169. package/dist/textarea/index.js +1 -1
  170. package/dist/theme/ThemeProvider.d.ts +18 -2
  171. package/dist/theme/ThemeProvider.d.ts.map +1 -1
  172. package/dist/theme/index.d.ts +1 -1
  173. package/dist/theme/index.d.ts.map +1 -1
  174. package/dist/theme/index.js +1 -1
  175. package/dist/timeline/index.d.ts.map +1 -1
  176. package/dist/timeline/index.js +1 -1
  177. package/dist/toggle/index.d.ts.map +1 -1
  178. package/dist/toggle/index.js +2 -2
  179. package/dist/toggle-group/index.d.ts.map +1 -1
  180. package/dist/toggle-group/index.js +2 -2
  181. package/dist/tour/index.d.ts.map +1 -1
  182. package/dist/tour/index.js +1 -1
  183. package/dist/transfer/index.js +2 -2
  184. package/dist/tree-select/index.js +2 -2
  185. package/dist/typography/index.d.ts.map +1 -1
  186. package/dist/typography/index.js +1 -1
  187. package/dist/upload/index.d.ts.map +1 -1
  188. package/dist/upload/index.js +2 -2
  189. package/package.json +4 -3
  190. package/styles/datepicker.css +126 -0
  191. package/styles/global.css +1 -113
  192. package/dist/chunk-3B32X5PU.js.map +0 -1
  193. package/dist/chunk-3Z7RLVWD.js.map +0 -1
  194. package/dist/chunk-4TEZWGX7.js.map +0 -1
  195. package/dist/chunk-5YEC6FDN.js.map +0 -1
  196. package/dist/chunk-74AF6PO2.js.map +0 -1
  197. package/dist/chunk-75N6T3IS.js.map +0 -1
  198. package/dist/chunk-7RT65ZGV.js.map +0 -1
  199. package/dist/chunk-A4MYCEGM.js.map +0 -1
  200. package/dist/chunk-C65SCJD6.js.map +0 -1
  201. package/dist/chunk-CUXQZRDI.js.map +0 -1
  202. package/dist/chunk-DBPLQZJ2.js.map +0 -1
  203. package/dist/chunk-FY2TZ2NT.js.map +0 -1
  204. package/dist/chunk-HSMO2BR4.js.map +0 -1
  205. package/dist/chunk-I7HJBHQU.js.map +0 -1
  206. package/dist/chunk-J4SAIKKZ.js.map +0 -1
  207. package/dist/chunk-JIXINKUJ.js.map +0 -1
  208. package/dist/chunk-JWYBDNC6.js.map +0 -1
  209. package/dist/chunk-LHZJ2GJU.js.map +0 -1
  210. package/dist/chunk-LWYZCSX4.js.map +0 -1
  211. package/dist/chunk-NPK4ESMA.js.map +0 -1
  212. package/dist/chunk-PD3O6ZH4.js.map +0 -1
  213. package/dist/chunk-PQOIW5CM.js +0 -27
  214. package/dist/chunk-PQOIW5CM.js.map +0 -1
  215. package/dist/chunk-PRDJLQLB.js.map +0 -1
  216. package/dist/chunk-QDJ5PZPP.js.map +0 -1
  217. package/dist/chunk-ROQGBDET.js.map +0 -1
  218. package/dist/chunk-S6HO7HUY.js.map +0 -1
  219. package/dist/chunk-TDPJYCNI.js.map +0 -1
  220. package/dist/chunk-UFC3RGIN.js.map +0 -1
  221. package/dist/chunk-UFYG3HKL.js.map +0 -1
  222. package/dist/chunk-VNH6R5EU.js.map +0 -1
  223. package/dist/chunk-X7JN7WPF.js.map +0 -1
  224. package/dist/chunk-XAM5EKOS.js.map +0 -1
  225. package/dist/chunk-XCK62GVU.js.map +0 -1
  226. package/dist/chunk-YUACN5GJ.js.map +0 -1
  227. package/dist/chunk-Z3DIBMBQ.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,KAON,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAS,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AA0E7E;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAgFtD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,QAAQ,QAAO,kBAQ3B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,wbAevB,CAAC"}
1
+ {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,KAON,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAS,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AA0E7E;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAgFtD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,QAAQ,QAAO,kBAQ3B,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,UAAU,GAAE,MAAmB,GAAG,MAAM,CAiBtE;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,QAAmB,CAAC"}
@@ -2,6 +2,6 @@
2
2
  * Theme Module
3
3
  * Theme management with React context
4
4
  */
5
- export { ThemeProvider, useTheme, themeScript } from './ThemeProvider';
5
+ export { ThemeProvider, useTheme, themeScript, getThemeScript } from './ThemeProvider';
6
6
  export type { Theme, ThemeProviderProps, ThemeProviderState } from './types';
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/theme/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACvE,YAAY,EAAE,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/theme/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvF,YAAY,EAAE,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC"}
@@ -1,3 +1,3 @@
1
- export { ThemeProvider, themeScript, useTheme } from '../chunk-XCK62GVU.js';
1
+ export { ThemeProvider, getThemeScript, themeScript, useTheme } from '../chunk-LZ2MHSYF.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/timeline/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAiE7C,QAAA,MAAM,QAAQ,2CAkab,CAAC;AAIF,mBAAmB,SAAS,CAAC;AAC7B,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/timeline/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAiE7C,QAAA,MAAM,QAAQ,2CAoab,CAAC;AAIF,mBAAmB,SAAS,CAAC;AAC7B,eAAe,QAAQ,CAAC"}
@@ -1,4 +1,4 @@
1
- export { timeline_default as default } from '../chunk-JIXINKUJ.js';
1
+ export { timeline_default as default } from '../chunk-N742SARE.js';
2
2
  import '../chunk-G6QIIWKU.js';
3
3
  import '../chunk-RAS6HUEI.js';
4
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/toggle/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAKvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AA0ChD,QAAA,MAAM,MAAM,+CA2DX,CAAA;AAID,mBAAmB,SAAS,CAAA;AAC5B,eAAe,MAAM,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/toggle/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAKvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAwChD,QAAA,MAAM,MAAM,+CA2DX,CAAA;AAID,mBAAmB,SAAS,CAAA;AAC5B,eAAe,MAAM,CAAA"}
@@ -1,5 +1,5 @@
1
- export { toggle_default as default } from '../chunk-I7HJBHQU.js';
2
- import '../chunk-4TEZWGX7.js';
1
+ export { toggle_default as default } from '../chunk-Y3PVWMUN.js';
2
+ import '../chunk-64OCJYSH.js';
3
3
  import '../chunk-G6QIIWKU.js';
4
4
  import '../chunk-RAS6HUEI.js';
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/toggle-group/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAgC,MAAM,OAAO,CAAA;AAKpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAwD/C,eAAO,MAAM,WAAW,8CA4GvB,CAAA;AAID,mBAAmB,SAAS,CAAA;AAC5B,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/toggle-group/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAgC,MAAM,OAAO,CAAA;AAKpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAmD/C,eAAO,MAAM,WAAW,8CA8GvB,CAAA;AAID,mBAAmB,SAAS,CAAA;AAC5B,eAAe,WAAW,CAAA"}
@@ -1,5 +1,5 @@
1
- export { ToggleGroup, toggle_group_default as default } from '../chunk-XAM5EKOS.js';
2
- import '../chunk-4TEZWGX7.js';
1
+ export { ToggleGroup, toggle_group_default as default } from '../chunk-7SKAAKBC.js';
2
+ import '../chunk-64OCJYSH.js';
3
3
  import '../chunk-G6QIIWKU.js';
4
4
  import '../chunk-RAS6HUEI.js';
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tour/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAA;AAIvE,OAAO,KAAK,EAAE,SAAS,EAAiB,MAAM,SAAS,CAAA;AA0FvD,QAAA,MAAM,IAAI,uCAsQT,CAAA;AAID,mBAAmB,SAAS,CAAA;AAC5B,eAAe,IAAI,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tour/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAA;AAIvE,OAAO,KAAK,EAAE,SAAS,EAAiB,MAAM,SAAS,CAAA;AA0FvD,QAAA,MAAM,IAAI,uCA8QT,CAAA;AAID,mBAAmB,SAAS,CAAA;AAC5B,eAAe,IAAI,CAAA"}
@@ -1,4 +1,4 @@
1
- export { tour_default as default } from '../chunk-YUACN5GJ.js';
1
+ export { tour_default as default } from '../chunk-UPBKLI62.js';
2
2
  import '../chunk-G6QIIWKU.js';
3
3
  import '../chunk-RAS6HUEI.js';
4
4
  //# sourceMappingURL=index.js.map
@@ -1,5 +1,5 @@
1
- export { Transfer } from '../chunk-3XOHSE3X.js';
2
- import '../chunk-A4MYCEGM.js';
1
+ export { Transfer } from '../chunk-NA6EVQ6T.js';
2
+ import '../chunk-UHHCUCEE.js';
3
3
  import '../chunk-G6QIIWKU.js';
4
4
  import '../chunk-RAS6HUEI.js';
5
5
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,6 @@
1
- export { tree_select_default as default } from '../chunk-TBKPQOXF.js';
1
+ export { tree_select_default as default } from '../chunk-GSLNACUF.js';
2
2
  import '../chunk-LXHFGQOI.js';
3
- import '../chunk-ROQGBDET.js';
3
+ import '../chunk-6XXAZ6P2.js';
4
4
  import '../chunk-G6QIIWKU.js';
5
5
  import '../chunk-RAS6HUEI.js';
6
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/typography/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAA;AAGvE,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAA6B,MAAM,SAAS,CAAA;AA2F/F,QAAA,MAAM,KAAK,wCAkBV,CAAA;AAKD,QAAA,MAAM,IAAI,uCAkET,CAAA;AAKD,QAAA,MAAM,SAAS,4CAgDd,CAAA;AAID,mBAAmB,SAAS,CAAA;AAC5B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/typography/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAmD,MAAM,OAAO,CAAA;AAGvE,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAA6B,MAAM,SAAS,CAAA;AAsF/F,QAAA,MAAM,KAAK,wCAkBV,CAAA;AAKD,QAAA,MAAM,IAAI,uCAkET,CAAA;AAKD,QAAA,MAAM,SAAS,4CAgDd,CAAA;AAID,mBAAmB,SAAS,CAAA;AAC5B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA"}
@@ -1,4 +1,4 @@
1
- export { Paragraph, Text, Title } from '../chunk-VNH6R5EU.js';
1
+ export { Paragraph, Text, Title } from '../chunk-KR3GBSVA.js';
2
2
  import '../chunk-RAS6HUEI.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/upload/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAmBzB,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,SAAS,CAAA;AAatD,QAAA,MAAM,MAAM,yCAupBX,CAAA;AAID,YAAY,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAC/C,mBAAmB,SAAS,CAAA;AAC5B,eAAe,MAAM,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/upload/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAmBzB,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,SAAS,CAAA;AAatD,QAAA,MAAM,MAAM,yCAgqBX,CAAA;AAID,YAAY,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAC/C,mBAAmB,SAAS,CAAA;AAC5B,eAAe,MAAM,CAAA"}
@@ -1,5 +1,5 @@
1
- export { upload_default as default } from '../chunk-CUXQZRDI.js';
2
- import '../chunk-4TEZWGX7.js';
1
+ export { upload_default as default } from '../chunk-JZCONCJS.js';
2
+ import '../chunk-64OCJYSH.js';
3
3
  import '../chunk-G6QIIWKU.js';
4
4
  import '../chunk-RAS6HUEI.js';
5
5
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mdigital_ui/ui",
3
- "version": "0.4.8",
3
+ "version": "0.5.1",
4
4
  "description": "Modern React component library built with Tailwind CSS v4",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -335,11 +335,12 @@
335
335
  "./styles/themes/presets/corporate.css": "./styles/themes/presets/corporate.css",
336
336
  "./styles/themes/presets/vibrant.css": "./styles/themes/presets/vibrant.css",
337
337
  "./styles/themes/presets/minimal.css": "./styles/themes/presets/minimal.css",
338
+ "./styles/datepicker.css": "./styles/datepicker.css",
338
339
  "./package.json": "./package.json"
339
340
  },
340
341
  "scripts": {
341
342
  "build": "tsup && tsc -p tsconfig.dts.json && npm run build:css",
342
- "build:css": "mkdir -p styles/themes/presets && node scripts/build-css.js && cp src/styles/themes/light.css styles/themes/light.css && cp src/styles/themes/dark.css styles/themes/dark.css && cp src/styles/themes/presets/corporate.css styles/themes/presets/corporate.css && cp src/styles/themes/presets/vibrant.css styles/themes/presets/vibrant.css && cp src/styles/themes/presets/minimal.css styles/themes/presets/minimal.css",
343
+ "build:css": "mkdir -p styles/themes/presets && node scripts/build-css.js && cp src/styles/datepicker.css styles/datepicker.css && cp src/styles/themes/light.css styles/themes/light.css && cp src/styles/themes/dark.css styles/themes/dark.css && cp src/styles/themes/presets/corporate.css styles/themes/presets/corporate.css && cp src/styles/themes/presets/vibrant.css styles/themes/presets/vibrant.css && cp src/styles/themes/presets/minimal.css styles/themes/presets/minimal.css",
343
344
  "dev": "tsup --watch",
344
345
  "typecheck": "tsc --noEmit",
345
346
  "storybook": "storybook dev -p 6006",
@@ -449,7 +450,7 @@
449
450
  ],
450
451
  "repository": {
451
452
  "type": "git",
452
- "url": "git+https://github.com/mdigital/ui.git"
453
+ "url": "git+https://github.com/mstrluke/mdigital_uikit.git"
453
454
  },
454
455
  "license": "MIT",
455
456
  "publishConfig": {
@@ -0,0 +1,126 @@
1
+ /*
2
+ * react-datepicker theme overrides
3
+ *
4
+ * This file themes the third-party `react-datepicker` library to match
5
+ * the design tokens. It uses `!important` because react-datepicker ships
6
+ * its own stylesheet with high-specificity selectors.
7
+ *
8
+ * Imported automatically by global.css. If you don't use DatePicker,
9
+ * you can safely remove the `@import "./datepicker.css"` line from global.css.
10
+ */
11
+
12
+ /* ============================================
13
+ LIGHT MODE
14
+ ============================================ */
15
+ .react-datepicker-wrapper { display: block; }
16
+ .react-datepicker__input-container { display: block; }
17
+ .react-datepicker-popper { z-index: var(--z-popover) !important; }
18
+
19
+ .react-datepicker {
20
+ font-family: var(--font-sans) !important;
21
+ background-color: var(--color-white) !important;
22
+ border: 0 !important;
23
+ border-radius: var(--radius-md) !important;
24
+ box-shadow: var(--shadow-lg) !important;
25
+ }
26
+
27
+ .react-datepicker__header {
28
+ background-color: var(--color-surface) !important;
29
+ border-top-left-radius: var(--radius-md) !important;
30
+ border-top-right-radius: var(--radius-md) !important;
31
+ border-bottom: 0 !important;
32
+ padding: 0 !important;
33
+ }
34
+
35
+ .react-datepicker__current-month,
36
+ .react-datepicker-time__header,
37
+ .react-datepicker-year-header {
38
+ color: var(--color-gray-900) !important;
39
+ font-weight: var(--font-weight-semibold) !important;
40
+ font-size: var(--text-base) !important;
41
+ }
42
+
43
+ .react-datepicker__day-name,
44
+ .react-datepicker__day,
45
+ .react-datepicker__time-name {
46
+ color: var(--color-gray-700) !important;
47
+ width: 2rem !important;
48
+ height: 2rem !important;
49
+ line-height: 2rem !important;
50
+ margin: 0.166rem !important;
51
+ border-radius: var(--radius-sm) !important;
52
+ }
53
+
54
+ .react-datepicker__day:hover,
55
+ .react-datepicker__month-text:hover,
56
+ .react-datepicker__quarter-text:hover,
57
+ .react-datepicker__year-text:hover {
58
+ background-color: var(--color-gray-100) !important;
59
+ }
60
+
61
+ .react-datepicker__day--selected,
62
+ .react-datepicker__day--in-selecting-range,
63
+ .react-datepicker__day--in-range,
64
+ .react-datepicker__month-text--selected,
65
+ .react-datepicker__quarter-text--selected,
66
+ .react-datepicker__year-text--selected {
67
+ background-color: var(--color-primary) !important;
68
+ color: var(--color-primary-foreground) !important;
69
+ }
70
+
71
+ .react-datepicker__day--selected:hover,
72
+ .react-datepicker__day--in-selecting-range:hover,
73
+ .react-datepicker__day--in-range:hover {
74
+ background-color: var(--color-primary-hover) !important;
75
+ }
76
+
77
+ .react-datepicker__day--keyboard-selected {
78
+ background-color: var(--color-primary-hover) !important;
79
+ color: var(--color-primary-foreground) !important;
80
+ }
81
+
82
+ .react-datepicker__day--disabled { color: var(--color-gray-400) !important; cursor: not-allowed !important; }
83
+ .react-datepicker__day--outside-month { color: var(--color-gray-400) !important; }
84
+ .react-datepicker__navigation { top: 0.65rem !important; }
85
+ .react-datepicker__navigation-icon::before { border-color: var(--color-gray-600) !important; }
86
+ .react-datepicker__navigation:hover *::before { border-color: var(--color-gray-900) !important; }
87
+ .react-datepicker__current-month { display: none; }
88
+
89
+ .react-datepicker__time-container { border-left: 1px solid var(--color-gray-200) !important; }
90
+ .react-datepicker__time-container .react-datepicker__time { background-color: var(--color-white) !important; }
91
+ .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box { width: 100% !important; }
92
+ .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list { padding: 0 !important; }
93
+ .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item { color: var(--color-gray-700) !important; padding: 0.5rem !important; }
94
+ .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item:hover { background-color: var(--color-gray-100) !important; }
95
+ .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected { background-color: var(--color-primary) !important; color: var(--color-primary-foreground) !important; }
96
+
97
+ .react-datepicker__day--in-selecting-range:not(.react-datepicker__day--in-range) { background-color: var(--color-gray-200) !important; }
98
+ .react-datepicker__month-text, .react-datepicker__quarter-text, .react-datepicker__year-text { padding: 0.5rem !important; border-radius: var(--radius-sm) !important; }
99
+
100
+ .react-datepicker__year-dropdown,
101
+ .react-datepicker__month-dropdown {
102
+ background-color: var(--color-white) !important;
103
+ border: 1px solid var(--color-gray-200) !important;
104
+ border-radius: var(--radius-md) !important;
105
+ }
106
+ .react-datepicker__year-option, .react-datepicker__month-option { color: var(--color-gray-700) !important; padding: 0.5rem !important; }
107
+ .react-datepicker__year-option:hover, .react-datepicker__month-option:hover { background-color: var(--color-gray-100) !important; }
108
+ .react-datepicker__year-option--selected, .react-datepicker__month-option--selected { background-color: var(--color-primary) !important; color: var(--color-primary-foreground) !important; }
109
+
110
+ /* ============================================
111
+ DARK MODE
112
+ ============================================ */
113
+ .dark .react-datepicker { background-color: var(--color-surface) !important; }
114
+ .dark .react-datepicker__header { background-color: var(--color-background-secondary) !important; }
115
+ .dark .react-datepicker__current-month, .dark .react-datepicker-time__header, .dark .react-datepicker-year-header { color: var(--color-text-primary) !important; }
116
+ .dark .react-datepicker__day-name, .dark .react-datepicker__day, .dark .react-datepicker__time-name { color: var(--color-text-secondary) !important; }
117
+ .dark .react-datepicker__day:hover { background-color: var(--color-background-secondary) !important; }
118
+ .dark .react-datepicker__day--disabled { color: var(--color-text-muted) !important; }
119
+ .dark .react-datepicker__day--outside-month { color: var(--color-text-muted) !important; }
120
+ .dark .react-datepicker__navigation-icon::before { border-color: var(--color-text-secondary) !important; }
121
+ .dark .react-datepicker__navigation:hover *::before { border-color: var(--color-text-primary) !important; }
122
+ .dark .react-datepicker__time-container { border-left: 1px solid var(--color-border) !important; }
123
+ .dark .react-datepicker__time-container .react-datepicker__time { background-color: var(--color-surface) !important; }
124
+ .dark .react-datepicker__year-dropdown, .dark .react-datepicker__month-dropdown { background-color: var(--color-surface) !important; border: 1px solid var(--color-border) !important; }
125
+ .dark .react-datepicker__year-option, .dark .react-datepicker__month-option { color: var(--color-text-secondary) !important; }
126
+ .dark .react-datepicker__year-option:hover, .dark .react-datepicker__month-option:hover { background-color: var(--color-background-secondary) !important; }
package/styles/global.css CHANGED
@@ -1,4 +1,5 @@
1
1
  @import "tw-animate-css";
2
+ @import "./datepicker.css";
2
3
 
3
4
  @source "../dist";
4
5
  @custom-variant dark (&:is(.dark *));
@@ -514,116 +515,3 @@
514
515
  }
515
516
  }
516
517
 
517
- /* ============================================
518
- REACT DATEPICKER THEME
519
- ============================================ */
520
- .react-datepicker-wrapper { display: block; }
521
- .react-datepicker__input-container { display: block; }
522
- .react-datepicker-popper { z-index: var(--z-popover) !important; }
523
-
524
- .react-datepicker {
525
- font-family: var(--font-sans) !important;
526
- background-color: var(--color-white) !important;
527
- border: 0 !important;
528
- border-radius: var(--radius-md) !important;
529
- box-shadow: var(--shadow-lg) !important;
530
- }
531
-
532
- .react-datepicker__header {
533
- background-color: var(--color-surface) !important;
534
- border-top-left-radius: var(--radius-md) !important;
535
- border-top-right-radius: var(--radius-md) !important;
536
- border-bottom: 0 !important;
537
- padding: 0 !important;
538
- }
539
-
540
- .react-datepicker__current-month,
541
- .react-datepicker-time__header,
542
- .react-datepicker-year-header {
543
- color: var(--color-gray-900) !important;
544
- font-weight: var(--font-weight-semibold) !important;
545
- font-size: var(--text-base) !important;
546
- }
547
-
548
- .react-datepicker__day-name,
549
- .react-datepicker__day,
550
- .react-datepicker__time-name {
551
- color: var(--color-gray-700) !important;
552
- width: 2rem !important;
553
- height: 2rem !important;
554
- line-height: 2rem !important;
555
- margin: 0.166rem !important;
556
- border-radius: var(--radius-sm) !important;
557
- }
558
-
559
- .react-datepicker__day:hover,
560
- .react-datepicker__month-text:hover,
561
- .react-datepicker__quarter-text:hover,
562
- .react-datepicker__year-text:hover {
563
- background-color: var(--color-gray-100) !important;
564
- }
565
-
566
- .react-datepicker__day--selected,
567
- .react-datepicker__day--in-selecting-range,
568
- .react-datepicker__day--in-range,
569
- .react-datepicker__month-text--selected,
570
- .react-datepicker__quarter-text--selected,
571
- .react-datepicker__year-text--selected {
572
- background-color: var(--color-primary) !important;
573
- color: var(--color-primary-foreground) !important;
574
- }
575
-
576
- .react-datepicker__day--selected:hover,
577
- .react-datepicker__day--in-selecting-range:hover,
578
- .react-datepicker__day--in-range:hover {
579
- background-color: var(--color-primary-hover) !important;
580
- }
581
-
582
- .react-datepicker__day--keyboard-selected {
583
- background-color: var(--color-primary-hover) !important;
584
- color: var(--color-primary-foreground) !important;
585
- }
586
-
587
- .react-datepicker__day--disabled { color: var(--color-gray-400) !important; cursor: not-allowed !important; }
588
- .react-datepicker__day--outside-month { color: var(--color-gray-400) !important; }
589
- .react-datepicker__navigation { top: 0.65rem !important; }
590
- .react-datepicker__navigation-icon::before { border-color: var(--color-gray-600) !important; }
591
- .react-datepicker__navigation:hover *::before { border-color: var(--color-gray-900) !important; }
592
- .react-datepicker__current-month { display: none; }
593
-
594
- .react-datepicker__time-container { border-left: 1px solid var(--color-gray-200) !important; }
595
- .react-datepicker__time-container .react-datepicker__time { background-color: var(--color-white) !important; }
596
- .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box { width: 100% !important; }
597
- .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list { padding: 0 !important; }
598
- .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item { color: var(--color-gray-700) !important; padding: 0.5rem !important; }
599
- .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item:hover { background-color: var(--color-gray-100) !important; }
600
- .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected { background-color: var(--color-primary) !important; color: var(--color-primary-foreground) !important; }
601
-
602
- .react-datepicker__day--in-selecting-range:not(.react-datepicker__day--in-range) { background-color: var(--color-gray-200) !important; }
603
- .react-datepicker__month-text, .react-datepicker__quarter-text, .react-datepicker__year-text { padding: 0.5rem !important; border-radius: var(--radius-sm) !important; }
604
-
605
- .react-datepicker__year-dropdown,
606
- .react-datepicker__month-dropdown {
607
- background-color: var(--color-white) !important;
608
- border: 1px solid var(--color-gray-200) !important;
609
- border-radius: var(--radius-md) !important;
610
- }
611
- .react-datepicker__year-option, .react-datepicker__month-option { color: var(--color-gray-700) !important; padding: 0.5rem !important; }
612
- .react-datepicker__year-option:hover, .react-datepicker__month-option:hover { background-color: var(--color-gray-100) !important; }
613
- .react-datepicker__year-option--selected, .react-datepicker__month-option--selected { background-color: var(--color-primary) !important; color: var(--color-primary-foreground) !important; }
614
-
615
- /* Dark DatePicker */
616
- .dark .react-datepicker { background-color: var(--color-surface) !important; }
617
- .dark .react-datepicker__header { background-color: var(--color-background-secondary) !important; }
618
- .dark .react-datepicker__current-month, .dark .react-datepicker-time__header, .dark .react-datepicker-year-header { color: var(--color-text-primary) !important; }
619
- .dark .react-datepicker__day-name, .dark .react-datepicker__day, .dark .react-datepicker__time-name { color: var(--color-text-secondary) !important; }
620
- .dark .react-datepicker__day:hover { background-color: var(--color-background-secondary) !important; }
621
- .dark .react-datepicker__day--disabled { color: var(--color-text-muted) !important; }
622
- .dark .react-datepicker__day--outside-month { color: var(--color-text-muted) !important; }
623
- .dark .react-datepicker__navigation-icon::before { border-color: var(--color-text-secondary) !important; }
624
- .dark .react-datepicker__navigation:hover *::before { border-color: var(--color-text-primary) !important; }
625
- .dark .react-datepicker__time-container { border-left: 1px solid var(--color-border) !important; }
626
- .dark .react-datepicker__time-container .react-datepicker__time { background-color: var(--color-surface) !important; }
627
- .dark .react-datepicker__year-dropdown, .dark .react-datepicker__month-dropdown { background-color: var(--color-surface) !important; border: 1px solid var(--color-border) !important; }
628
- .dark .react-datepicker__year-option, .dark .react-datepicker__month-option { color: var(--color-text-secondary) !important; }
629
- .dark .react-datepicker__year-option:hover, .dark .react-datepicker__month-option:hover { background-color: var(--color-background-secondary) !important; }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/select/index.tsx"],"names":[],"mappings":"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","file":"chunk-3B32X5PU.js","sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport { Check, ChevronDown, ChevronUp, Search, X } from \"lucide-react\";\nimport React from \"react\";\nimport { useControllable } from \"../hooks/useControllable\";\n\nimport Spinner from \"../spinner\";\n\nimport { Popover, PopoverContent, PopoverTrigger } from \"../popover\";\nimport { colorVars } from \"../variants\";\nimport { useSelectBase } from \"../shared/useSelectBase\";\nimport type { FlattenedItem } from \"../shared/useSelectBase\";\nimport { cn, iconSizes, statusMessageVariants } from \"../utils\";\nimport type { SelectOption, SelectProps } from \"./types\";\n\nconst selectTriggerVariants = cva(\n \"w-full flex items-center justify-between rounded-md bg-background text-text-primary border focus:border-primary outline-none disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer transition-colors\",\n {\n variants: {\n status: {\n default: \"border-border hover:border-primary/50\",\n error: \"border-error\",\n warning: \"border-warning\",\n info: \"border-info\",\n success: \"border-success\",\n },\n size: {\n xs: \"h-(--select-height-xs) px-(--select-padding-x-xs) text-xs gap-1.5\",\n sm: \"h-(--select-height-sm) px-(--select-padding-x-sm) text-sm gap-2\",\n md: \"h-(--select-height-md) px-(--select-padding-x-md) text-base gap-2.5\",\n lg: \"h-(--select-height-lg) px-(--select-padding-x-lg) text-lg gap-3\",\n },\n fullWidth: {\n true: \"w-full\",\n false: \"max-w-full\",\n },\n },\n defaultVariants: {\n status: \"default\",\n size: \"md\",\n fullWidth: true,\n },\n },\n);\n\nconst selectOptionVariants = cva(\n \"relative cursor-pointer select-none px-3 py-2 text-text-primary rounded-sm transition-colors\",\n {\n variants: {\n selected: {\n true: \"bg-slot-10 text-slot font-medium\",\n false: \"hover:bg-surface\",\n },\n disabled: {\n true: \"opacity-50 cursor-not-allowed\",\n false: \"\",\n },\n },\n defaultVariants: {\n selected: false,\n disabled: false,\n },\n },\n);\n\nconst selectGroupVariants = cva(\n \"px-3 py-2 text-xs font-semibold text-text-secondary uppercase tracking-wider bg-surface/50\",\n);\n\nconst Select = React.memo<SelectProps>(\n ({\n size = \"md\",\n label,\n helperText,\n error,\n warning,\n info,\n success,\n options = [],\n placeholder = \"Select an option\",\n loading = false,\n fullWidth = true,\n value,\n defaultValue,\n onChange,\n clearable = false,\n disabled,\n required,\n virtualizeThreshold = 50,\n maxDropdownHeight = 300,\n className,\n classNames,\n ref,\n ...props\n }) => {\n const [currentValue, setCurrentValue] = useControllable<string | number>({\n value,\n defaultValue: defaultValue ?? \"\",\n onChange,\n });\n\n const {\n // State\n isOpen,\n setIsOpen,\n searchQuery,\n setSearchQuery,\n setHighlightedIndex,\n highlightedIndex,\n showTopArrow,\n showBottomArrow,\n // Refs\n triggerRef,\n inputRef,\n scrollContainerRef,\n // Computed\n filteredOptions,\n selectableOptions,\n shouldVirtualize,\n virtualizer,\n // IDs & validation\n labelId,\n listboxId,\n helperId,\n status,\n helperMessage,\n // Handlers\n handleInputChange,\n handleInputClick,\n handleScroll,\n handleKeyDown,\n handleKeyUp,\n refCallback,\n } = useSelectBase<SelectOption>({\n options,\n onSelectOption: (option) => handleSelect(option.value),\n virtualizeThreshold,\n maxDropdownHeight,\n label,\n idPrefix: \"select\",\n error,\n warning,\n info,\n success,\n helperText,\n });\n\n const handleSelect = React.useCallback(\n (optionValue: string | number) => {\n setCurrentValue(optionValue);\n setIsOpen(false);\n setSearchQuery(\"\");\n setHighlightedIndex(-1);\n },\n [setCurrentValue, setIsOpen, setSearchQuery, setHighlightedIndex],\n );\n\n const selectedOption = React.useMemo(\n () => options.find((opt) => opt.value === currentValue),\n [options, currentValue],\n );\n const displayValue = isOpen ? searchQuery : selectedOption?.label || \"\";\n\n const handleClear = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n setCurrentValue(\"\");\n setSearchQuery(\"\");\n setHighlightedIndex(-1);\n },\n [setCurrentValue, setSearchQuery, setHighlightedIndex],\n );\n\n const handleOptionClick = React.useCallback(\n (optionValue: string | number) => {\n handleSelect(optionValue);\n },\n [handleSelect],\n );\n\n const renderOptionsList = (\n <div className=\"relative\">\n {/* Top scroll indicator */}\n <div className=\"flex items-center justify-center h-4\">\n {showTopArrow && (\n <ChevronUp className=\"size-4 text-text-primary animate-in fade-in duration-150\" />\n )}\n </div>\n\n <div\n ref={scrollContainerRef}\n className=\"overflow-auto relative p-1\"\n style={{ maxHeight: maxDropdownHeight }}\n role=\"listbox\"\n id={listboxId}\n aria-labelledby={label ? labelId : undefined}\n onScroll={handleScroll}\n >\n {!filteredOptions.length ? (\n <div\n data-slot=\"empty\"\n className={cn(\n \"select_empty\",\n \"px-3 py-4 text-center text-sm text-text-secondary\",\n classNames?.empty,\n )}\n >\n No options found\n </div>\n ) : shouldVirtualize ? (\n <div\n ref={refCallback}\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n width: \"100%\",\n position: \"relative\",\n }}\n >\n {virtualizer.getVirtualItems().map((virtualItem) => {\n const item = filteredOptions[virtualItem.index];\n\n if (!item) return null;\n\n if (item.type === \"group\") {\n return (\n <div\n key={`group-${virtualItem.index}`}\n data-slot=\"group\"\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: `${virtualItem.size}px`,\n transform: `translateY(${virtualItem.start}px)`,\n }}\n className={cn(\n \"select_group\",\n selectGroupVariants(),\n classNames?.group,\n )}\n >\n <span\n data-slot=\"groupLabel\"\n className={cn(\n \"select_groupLabel\",\n classNames?.groupLabel,\n )}\n >\n {item.data as string}\n </span>\n </div>\n );\n }\n\n const option = item.data as SelectOption;\n const isSelected = option.value === currentValue;\n const selectableIndex = selectableOptions.indexOf(\n item as FlattenedItem<SelectOption>,\n );\n const isHighlighted = selectableIndex === highlightedIndex;\n\n return (\n <div\n key={option.value}\n data-slot=\"option\"\n data-value={option.value}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: `${virtualItem.size}px`,\n transform: `translateY(${virtualItem.start}px)`,\n }}\n className={cn(\n \"select_option\",\n selectOptionVariants({\n selected: isSelected,\n disabled: !!option.disabled,\n }),\n isHighlighted && \"bg-surface\",\n classNames?.option,\n isSelected && classNames?.optionSelected,\n )}\n onClick={() =>\n !option.disabled && handleOptionClick(option.value)\n }\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n >\n {option.label}\n {isSelected && (\n <span className=\"absolute right-3 top-1/2 -translate-y-1/2\">\n <Check\n className={cn(\n \"text-slot animate-in zoom-in-75 duration-150\",\n iconSizes[size],\n )}\n />\n </span>\n )}\n </div>\n );\n })}\n </div>\n ) : (\n <div>\n {filteredOptions.map((item, index) => {\n if (item.type === \"group\") {\n return (\n <div\n key={`group-${index}`}\n data-slot=\"group\"\n className={cn(\n \"select_group\",\n selectGroupVariants(),\n classNames?.group,\n )}\n >\n <span\n data-slot=\"groupLabel\"\n className={cn(\n \"select_groupLabel\",\n classNames?.groupLabel,\n )}\n >\n {item.data as string}\n </span>\n </div>\n );\n }\n\n const option = item.data as SelectOption;\n const isSelected = option.value === currentValue;\n const selectableIndex = selectableOptions.indexOf(\n item as FlattenedItem<SelectOption>,\n );\n const isHighlighted = selectableIndex === highlightedIndex;\n\n return (\n <div\n key={option.value}\n data-slot=\"option\"\n data-value={option.value}\n data-option-index={index}\n className={cn(\n \"select_option\",\n selectOptionVariants({\n selected: isSelected,\n disabled: !!option.disabled,\n }),\n isHighlighted && \"bg-surface\",\n classNames?.option,\n isSelected && classNames?.optionSelected,\n )}\n onClick={() =>\n !option.disabled && handleOptionClick(option.value)\n }\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n >\n {option.label}\n {isSelected && (\n <span className=\"absolute right-3 top-1/2 -translate-y-1/2\">\n <Check\n className={cn(\n \"text-slot animate-in zoom-in-75 duration-150\",\n iconSizes[size],\n )}\n />\n </span>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n\n {/* Bottom scroll indicator */}\n <div className=\"flex items-center justify-center h-4\">\n {showBottomArrow && (\n <ChevronDown className=\"size-4 text-text-primary animate-in fade-in duration-150\" />\n )}\n </div>\n </div>\n );\n\n // Trigger button (used in both desktop and mobile)\n const triggerButton = (\n <button\n ref={triggerRef}\n type=\"button\"\n data-slot=\"trigger\"\n className={cn(\n \"select_trigger\",\n selectTriggerVariants({ status, size, fullWidth }),\n loading && \"opacity-50\",\n className,\n classNames?.trigger,\n )}\n disabled={disabled || loading}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-labelledby={label ? labelId : undefined}\n aria-describedby={helperMessage ? helperId : undefined}\n >\n <input\n ref={inputRef}\n type=\"text\"\n data-slot=\"search\"\n className={cn(\n \"select_search\",\n \"w-full text-ellipsis flex-1 bg-transparent outline-none cursor-pointer placeholder:text-text-secondary/50\",\n classNames?.search,\n )}\n placeholder={placeholder}\n value={displayValue}\n onChange={handleInputChange}\n onClick={handleInputClick}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n disabled={disabled || loading}\n readOnly={!isOpen}\n tabIndex={0}\n aria-autocomplete=\"list\"\n aria-controls={isOpen ? listboxId : undefined}\n />\n <div\n data-slot=\"triggerIcon\"\n className={cn(\n \"select_triggerIcon\",\n \"flex items-center gap-1 text-text-secondary\",\n classNames?.triggerIcon,\n )}\n >\n {clearable && currentValue && !disabled && !loading && (\n <span\n role=\"button\"\n tabIndex={-1}\n onClick={handleClear}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleClear(e as unknown as React.MouseEvent);\n }\n }}\n className=\"hover:text-text-primary transition-colors cursor-pointer\"\n aria-label=\"Clear selection\"\n >\n <X className={iconSizes[size]} />\n </span>\n )}\n {loading ? (\n <Spinner />\n ) : (\n <>\n {isOpen ? (\n <Search className={iconSizes[size]} />\n ) : (\n <ChevronDown className={iconSizes[size]} />\n )}\n </>\n )}\n </div>\n </button>\n );\n\n const selectElement = (\n <div\n data-slot=\"root\"\n className={cn(\n \"select_root\",\n \"relative group\",\n colorVars.primary,\n fullWidth ? \"w-full\" : \"inline-block\",\n classNames?.root,\n )}\n ref={ref}\n {...props}\n >\n <Popover open={isOpen} onOpenChange={setIsOpen}>\n <PopoverTrigger asChild>{triggerButton}</PopoverTrigger>\n\n <PopoverContent\n data-slot=\"dropdown\"\n className={cn(\n \"select_dropdown\",\n \"p-0 w-[var(--radix-popover-trigger-width)]\",\n classNames?.dropdown,\n )}\n align=\"start\"\n onOpenAutoFocus={(e: Event) => {\n e.preventDefault();\n inputRef.current?.focus();\n }}\n >\n {renderOptionsList}\n </PopoverContent>\n </Popover>\n </div>\n );\n\n return (\n <div className={cn(\"w-full flex flex-col\", !fullWidth && \"inline-block\")}>\n <div className=\"flex gap-2 items-center\">\n {label && (\n <label\n id={labelId}\n data-slot=\"label\"\n className={cn(\"select_label\", \"block mb-0.5\", classNames?.label)}\n >\n <span className=\"text-sm font-medium text-text-secondary\">\n {label}\n {required && <span className=\"text-error ml-1\">*</span>}\n </span>\n </label>\n )}\n {helperMessage && (\n <p\n id={helperId}\n data-slot=\"helper\"\n className={cn(\n \"select_helper\",\n statusMessageVariants({ status }),\n classNames?.helper,\n )}\n >\n {helperMessage}\n </p>\n )}\n </div>\n {selectElement}\n </div>\n );\n },\n);\n\nSelect.displayName = \"Select\";\n\nexport type * from \"./types\";\nexport default Select;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/mentions/index.tsx"],"names":[],"mappings":"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","file":"chunk-3Z7RLVWD.js","sourcesContent":["'use client'\n\nimport { cva } from 'class-variance-authority'\nimport React, { useState, useRef, useCallback, useMemo, useEffect } from 'react'\n\nimport { cn, statusMessageVariants } from '../utils'\nimport type { MentionOption, MentionsProps } from './types'\n\nconst textareaVariants = cva(\n 'w-full rounded-md border bg-background text-text-primary placeholder:text-text-secondary/50 outline-none transition-colors disabled:opacity-50 disabled:cursor-not-allowed read-only:bg-surface read-only:cursor-default',\n {\n variants: {\n size: {\n xs: 'px-(--input-padding-x-xs) py-1.5 text-xs',\n sm: 'px-(--input-padding-x-sm) py-2 text-sm',\n md: 'px-(--input-padding-x-md) py-2 text-sm',\n lg: 'px-(--input-padding-x-lg) py-2.5 text-base',\n },\n status: {\n default: 'border-border focus:border-primary',\n error: 'border-error focus:border-error',\n },\n },\n defaultVariants: { size: 'md', status: 'default' },\n },\n)\n\nfunction getCaretCoordinates(element: HTMLTextAreaElement, position: number) {\n const div = document.createElement('div')\n const style = getComputedStyle(element)\n const props = [\n 'fontFamily', 'fontSize', 'fontWeight', 'letterSpacing', 'lineHeight',\n 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft',\n 'borderTopWidth', 'borderRightWidth', 'borderBottomWidth', 'borderLeftWidth',\n 'wordWrap', 'whiteSpace', 'overflowWrap',\n ] as const\n\n div.style.position = 'absolute'\n div.style.visibility = 'hidden'\n div.style.whiteSpace = 'pre-wrap'\n div.style.wordWrap = 'break-word'\n div.style.width = `${element.offsetWidth}px`\n for (const prop of props) div.style[prop as any] = style.getPropertyValue(prop.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`))\n\n div.textContent = element.value.substring(0, position)\n const span = document.createElement('span')\n span.textContent = element.value.substring(position) || '.'\n div.appendChild(span)\n document.body.appendChild(div)\n\n const top = span.offsetTop - element.scrollTop\n const left = span.offsetLeft - element.scrollLeft\n document.body.removeChild(div)\n return { top, left }\n}\n\nconst Mentions = React.memo<MentionsProps>(\n ({\n value,\n defaultValue = '',\n onChange,\n onSelect,\n options = [],\n triggers = ['@'],\n loading = false,\n size = 'md',\n disabled = false,\n readOnly = false,\n placeholder,\n rows = 3,\n label,\n error,\n helperText,\n fullWidth = true,\n className,\n classNames,\n }) => {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const currentValue = value !== undefined ? value : internalValue\n const [showDropdown, setShowDropdown] = useState(false)\n const [query, setQuery] = useState('')\n const [activeTrigger, setActiveTrigger] = useState('')\n const [triggerStart, setTriggerStart] = useState(-1)\n const [highlightedIdx, setHighlightedIdx] = useState(0)\n const [dropdownPos, setDropdownPos] = useState({ top: 0, left: 0 })\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n\n const update = useCallback(\n (v: string) => {\n if (value === undefined) setInternalValue(v)\n onChange?.(v)\n },\n [value, onChange],\n )\n\n const filteredOptions = useMemo(() => {\n if (!query) return options\n const q = query.toLowerCase()\n return options.filter(\n (o) => o.label.toLowerCase().includes(q) || o.value.toLowerCase().includes(q),\n )\n }, [options, query])\n\n const insertMention = useCallback(\n (option: MentionOption) => {\n const before = currentValue.substring(0, triggerStart)\n const after = currentValue.substring(textareaRef.current?.selectionStart ?? triggerStart)\n const mention = `${activeTrigger}${option.value} `\n const next = before + mention + after\n update(next)\n onSelect?.(option, activeTrigger)\n setShowDropdown(false)\n setQuery('')\n\n requestAnimationFrame(() => {\n if (textareaRef.current) {\n const pos = before.length + mention.length\n textareaRef.current.selectionStart = pos\n textareaRef.current.selectionEnd = pos\n textareaRef.current.focus()\n }\n })\n },\n [currentValue, triggerStart, activeTrigger, update, onSelect],\n )\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const v = e.target.value\n update(v)\n\n const cursor = e.target.selectionStart\n const textBefore = v.substring(0, cursor)\n\n let found = false\n for (const trigger of triggers) {\n const lastTrigger = textBefore.lastIndexOf(trigger)\n if (lastTrigger >= 0) {\n const between = textBefore.substring(lastTrigger + trigger.length)\n const charBefore = lastTrigger > 0 ? textBefore[lastTrigger - 1] : ' '\n if (/\\s/.test(charBefore) || lastTrigger === 0) {\n if (!/\\s/.test(between)) {\n setActiveTrigger(trigger)\n setTriggerStart(lastTrigger)\n setQuery(between)\n setShowDropdown(true)\n setHighlightedIdx(0)\n found = true\n\n if (typeof window !== 'undefined' && textareaRef.current) {\n const coords = getCaretCoordinates(textareaRef.current, lastTrigger)\n setDropdownPos({ top: coords.top + 24, left: coords.left })\n }\n break\n }\n }\n }\n }\n if (!found) setShowDropdown(false)\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (!showDropdown || filteredOptions.length === 0) return\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n setHighlightedIdx((p) => Math.min(p + 1, filteredOptions.length - 1))\n } else if (e.key === 'ArrowUp') {\n e.preventDefault()\n setHighlightedIdx((p) => Math.max(p - 1, 0))\n } else if (e.key === 'Enter' || e.key === 'Tab') {\n e.preventDefault()\n if (filteredOptions[highlightedIdx]) insertMention(filteredOptions[highlightedIdx])\n } else if (e.key === 'Escape') {\n setShowDropdown(false)\n }\n }\n\n useEffect(() => {\n if (highlightedIdx >= filteredOptions.length) setHighlightedIdx(Math.max(0, filteredOptions.length - 1))\n }, [filteredOptions.length, highlightedIdx])\n\n return (\n <div\n data-slot=\"root\"\n className={cn(\n 'mentions_root',\n 'flex flex-col gap-1.5',\n fullWidth ? 'w-full' : 'inline-flex',\n classNames?.root,\n className,\n )}\n >\n {label && (\n <label data-slot=\"label\" className=\"text-sm font-medium text-text-primary\">\n {label}\n </label>\n )}\n\n <div className=\"relative\">\n <textarea\n ref={textareaRef}\n value={currentValue}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onBlur={() => setTimeout(() => setShowDropdown(false), 150)}\n placeholder={placeholder}\n rows={rows}\n disabled={disabled}\n readOnly={readOnly}\n data-slot=\"textarea\"\n className={cn(\n 'mentions_textarea',\n textareaVariants({ size, status: error ? 'error' : 'default' }),\n 'resize-y',\n classNames?.textarea,\n )}\n />\n\n {showDropdown && filteredOptions.length > 0 && (\n <div\n data-slot=\"dropdown\"\n className={cn(\n 'mentions_dropdown',\n 'absolute z-[var(--z-popover)] rounded-md border border-border bg-background shadow-md max-h-[200px] overflow-auto min-w-[180px]',\n classNames?.dropdown,\n )}\n style={{ top: dropdownPos.top, left: Math.min(dropdownPos.left, 200) }}\n >\n {loading ? (\n <div className=\"px-3 py-2 text-sm text-text-secondary\">Loading...</div>\n ) : (\n filteredOptions.map((option, idx) => (\n <div\n key={option.value}\n onMouseDown={(e) => { e.preventDefault(); insertMention(option) }}\n onMouseEnter={() => setHighlightedIdx(idx)}\n data-slot=\"option\"\n className={cn(\n 'mentions_option',\n 'flex items-center gap-2 px-3 py-1.5 text-sm cursor-pointer transition-colors',\n idx === highlightedIdx ? 'bg-surface text-text-primary' : 'text-text-primary hover:bg-surface',\n classNames?.option,\n )}\n >\n {option.icon && <span className=\"shrink-0 w-5 h-5\">{option.icon}</span>}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium truncate\">{option.label}</div>\n {option.description && (\n <div className=\"text-xs text-text-secondary truncate\">{option.description}</div>\n )}\n </div>\n </div>\n ))\n )}\n </div>\n )}\n </div>\n\n {(error || helperText) && (\n <p data-slot=\"message\" className={cn('text-xs', error ? statusMessageVariants({ status: 'error' }) : 'text-text-secondary')}>\n {error || helperText}\n </p>\n )}\n </div>\n )\n },\n)\n\nMentions.displayName = 'Mentions'\n\nexport type * from './types'\nexport default Mentions\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/useRipple.tsx"],"names":[],"mappings":";;;;AAiBO,SAAS,UAAU,OAAA,EAAkB;AAC1C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,QAAA,CAAwB,EAAE,CAAA;AACxD,EAAA,MAAM,OAAA,GAAU,OAAO,CAAC,CAAA;AAExB,EAAA,MAAM,aAAA,GAAgB,WAAA;AAAA,IACpB,CAAC,CAAA,KAAuC;AACtC,MAAA,IAAI,CAAC,OAAA,EAAS;AAEd,MAAA,MAAM,KAAK,CAAA,CAAE,aAAA;AACb,MAAA,MAAM,IAAA,GAAO,GAAG,qBAAA,EAAsB;AACtC,MAAA,MAAM,OAAO,IAAA,CAAK,GAAA,CAAI,KAAK,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA,GAAI,CAAA;AACjD,MAAA,MAAM,CAAA,GAAI,CAAA,CAAE,OAAA,GAAU,IAAA,CAAK,OAAO,IAAA,GAAO,CAAA;AACzC,MAAA,MAAM,CAAA,GAAI,CAAA,CAAE,OAAA,GAAU,IAAA,CAAK,MAAM,IAAA,GAAO,CAAA;AAExC,MAAA,MAAM,GAAA,GAAM,EAAE,OAAA,CAAQ,OAAA;AACtB,MAAA,UAAA,CAAW,CAAC,IAAA,KAAS,CAAC,GAAG,IAAA,EAAM,EAAE,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,IAAA,EAAM,CAAC,CAAA;AAAA,IACrD,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,SAAA,GAAY,WAAA;AAAA,IAChB,CAAC,CAAA,KAAwC;AACvC,MAAA,IAAI,CAAC,OAAA,EAAS;AACd,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AAExC,MAAA,MAAM,KAAK,CAAA,CAAE,aAAA;AACb,MAAA,MAAM,IAAA,GAAO,GAAG,qBAAA,EAAsB;AACtC,MAAA,MAAM,OAAO,IAAA,CAAK,GAAA,CAAI,KAAK,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA,GAAI,CAAA;AAEjD,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,GAAQ,CAAA,GAAI,IAAA,GAAO,CAAA;AAClC,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,IAAA,GAAO,CAAA;AAEnC,MAAA,MAAM,GAAA,GAAM,EAAE,OAAA,CAAQ,OAAA;AACtB,MAAA,UAAA,CAAW,CAAC,IAAA,KAAS,CAAC,GAAG,IAAA,EAAM,EAAE,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,IAAA,EAAM,CAAC,CAAA;AAAA,IACrD,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,CAAC,GAAA,KAAgB;AAClD,IAAA,UAAA,CAAW,CAAC,SAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,GAAA,KAAQ,GAAG,CAAC,CAAA;AAAA,EACxD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,OAAA,EAAS,aAAA,EAAe,SAAA,EAAW,cAAA,EAAe;AAC7D;AAGA,IAAM,UAAA,GAMD,CAAC,EAAE,CAAA,EAAG,GAAG,IAAA,EAAM,SAAA,EAAW,gBAAe,qBAC5C,GAAA;AAAA,EAAC,MAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAW,EAAA;AAAA,MACT,0GAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,CAAA;AAAA,MACN,GAAA,EAAK,CAAA;AAAA,MACL,KAAA,EAAO,IAAA;AAAA,MACP,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,cAAA;AAAA,IACA,aAAA,EAAY;AAAA;AACd,CAAA;AAMK,IAAM,kBAIR,CAAC,EAAE,OAAA,EAAS,SAAA,EAAW,gBAAe,KAAM;AAC/C,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AACjC,EAAA,uBACE,GAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,qBACZ,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MAEC,GAAG,CAAA,CAAE,CAAA;AAAA,MACL,GAAG,CAAA,CAAE,CAAA;AAAA,MACL,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,SAAA;AAAA,MACA,cAAA,EAAgB,MAAM,cAAA,CAAe,CAAA,CAAE,GAAG;AAAA,KAAA;AAAA,IALrC,CAAA,CAAE;AAAA,GAOV,CAAA,EACH,CAAA;AAEJ","file":"chunk-4TEZWGX7.js","sourcesContent":["import React, { useCallback, useRef, useState } from 'react'\n\nimport { cn } from '../utils'\n\ninterface RippleEntry {\n key: number\n x: number\n y: number\n size: number\n}\n\n/**\n * Lightweight ripple effect hook — GPU-composited (transform + opacity only).\n * Returns ripple state and handlers to attach to any interactive element.\n *\n * Animation uses only `transform: scale()` and `opacity` for 60fps performance.\n */\nexport function useRipple(enabled: boolean) {\n const [ripples, setRipples] = useState<RippleEntry[]>([])\n const counter = useRef(0)\n\n const onPointerDown = useCallback(\n (e: React.PointerEvent<HTMLElement>) => {\n if (!enabled) return\n\n const el = e.currentTarget\n const rect = el.getBoundingClientRect()\n const size = Math.max(rect.width, rect.height) * 2\n const x = e.clientX - rect.left - size / 2\n const y = e.clientY - rect.top - size / 2\n\n const key = ++counter.current\n setRipples((prev) => [...prev, { key, x, y, size }])\n },\n [enabled],\n )\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLElement>) => {\n if (!enabled) return\n if (e.key !== 'Enter' && e.key !== ' ') return\n\n const el = e.currentTarget\n const rect = el.getBoundingClientRect()\n const size = Math.max(rect.width, rect.height) * 2\n // For keyboard events, center the ripple\n const x = rect.width / 2 - size / 2\n const y = rect.height / 2 - size / 2\n\n const key = ++counter.current\n setRipples((prev) => [...prev, { key, x, y, size }])\n },\n [enabled],\n )\n\n const onAnimationEnd = useCallback((key: number) => {\n setRipples((prev) => prev.filter((r) => r.key !== key))\n }, [])\n\n return { ripples, onPointerDown, onKeyDown, onAnimationEnd } as const\n}\n\n// GPU-only animation (transform + opacity) — shared ripple span\nconst RippleSpan: React.FC<{\n x: number\n y: number\n size: number\n className?: string\n onAnimationEnd: () => void\n}> = ({ x, y, size, className, onAnimationEnd }) => (\n <span\n className={cn(\n 'absolute rounded-full bg-current opacity-25 pointer-events-none animate-[ripple_600ms_ease-out_forwards]',\n className,\n )}\n style={{\n left: x,\n top: y,\n width: size,\n height: size,\n }}\n onAnimationEnd={onAnimationEnd}\n aria-hidden=\"true\"\n />\n)\n\n/**\n * Renders all active ripple spans. Drop this inside any `relative overflow-hidden` element.\n */\nexport const RippleContainer: React.FC<{\n ripples: RippleEntry[]\n className?: string\n onAnimationEnd: (key: number) => void\n}> = ({ ripples, className, onAnimationEnd }) => {\n if (ripples.length === 0) return null\n return (\n <>\n {ripples.map((r) => (\n <RippleSpan\n key={r.key}\n x={r.x}\n y={r.y}\n size={r.size}\n className={className}\n onAnimationEnd={() => onAnimationEnd(r.key)}\n />\n ))}\n </>\n )\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/calendar/index.tsx"],"names":[],"mappings":"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","file":"chunk-5YEC6FDN.js","sourcesContent":["'use client'\n\nimport { cva } from 'class-variance-authority'\nimport React from 'react'\n\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport { cn } from '../utils'\nimport type { CalendarProps } from './types'\n\nconst calendarVariants = cva('inline-flex flex-col select-none', {\n variants: {\n size: {\n xs: 'text-xs gap-1',\n sm: 'text-sm gap-1.5',\n md: 'text-sm gap-2',\n lg: 'text-base gap-2.5',\n },\n },\n defaultVariants: { size: 'md' },\n})\n\nconst cellVariants = cva(\n 'flex items-center justify-center rounded-md transition-colors cursor-pointer font-normal',\n {\n variants: {\n size: {\n xs: 'w-7 h-7 text-xs',\n sm: 'w-8 h-8 text-sm',\n md: 'w-9 h-9 text-sm',\n lg: 'w-10 h-10 text-base',\n },\n },\n defaultVariants: { size: 'md' },\n },\n)\n\nconst navBtnClass =\n 'inline-flex items-center justify-center rounded-md w-7 h-7 hover:bg-surface transition-colors cursor-pointer text-text-secondary hover:text-text-primary'\n\nfunction isSameDay(a: Date, b: Date) {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n )\n}\n\nfunction getDaysInMonth(year: number, month: number) {\n return new Date(year, month + 1, 0).getDate()\n}\n\nfunction getMonthGrid(\n year: number,\n month: number,\n weekStartsOn: number,\n showOutside: boolean,\n) {\n const firstDay = new Date(year, month, 1).getDay()\n const daysInMonth = getDaysInMonth(year, month)\n const daysInPrevMonth = getDaysInMonth(year, month - 1)\n const offset = (firstDay - weekStartsOn + 7) % 7\n\n const weeks: Array<Array<{ date: Date; outside: boolean }>> = []\n let week: Array<{ date: Date; outside: boolean }> = []\n\n for (let i = 0; i < offset; i++) {\n const day = daysInPrevMonth - offset + 1 + i\n week.push({ date: new Date(year, month - 1, day), outside: true })\n }\n\n for (let day = 1; day <= daysInMonth; day++) {\n week.push({ date: new Date(year, month, day), outside: false })\n if (week.length === 7) {\n weeks.push(week)\n week = []\n }\n }\n\n if (week.length > 0) {\n let nextDay = 1\n while (week.length < 7) {\n week.push({ date: new Date(year, month + 1, nextDay++), outside: true })\n }\n weeks.push(week)\n }\n\n if (!showOutside) {\n return weeks.map((w) =>\n w.map((d) => (d.outside ? { ...d, date: d.date } : d)),\n )\n }\n\n return weeks\n}\n\nconst DAY_NAMES_SHORT = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\nconst MONTH_NAMES = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December',\n]\n\nconst Calendar = React.memo<CalendarProps>(\n ({\n value,\n defaultValue,\n onChange,\n month: controlledMonth,\n defaultMonth,\n onMonthChange,\n minDate,\n maxDate,\n disabledDates,\n size = 'md',\n weekStartsOn = 0,\n showOutsideDays = true,\n className,\n classNames,\n }) => {\n const today = new Date()\n const [internalValue, setInternalValue] = React.useState<Date | null>(\n defaultValue ?? null,\n )\n const [internalMonth, setInternalMonth] = React.useState<Date>(\n defaultMonth ?? defaultValue ?? today,\n )\n\n const selected = value !== undefined ? value : internalValue\n const currentMonth = controlledMonth ?? internalMonth\n\n const year = currentMonth.getFullYear()\n const monthIdx = currentMonth.getMonth()\n\n const weeks = React.useMemo(\n () => getMonthGrid(year, monthIdx, weekStartsOn, showOutsideDays),\n [year, monthIdx, weekStartsOn, showOutsideDays],\n )\n\n const dayNames = React.useMemo(() => {\n const names = []\n for (let i = 0; i < 7; i++) {\n names.push(DAY_NAMES_SHORT[(weekStartsOn + i) % 7])\n }\n return names\n }, [weekStartsOn])\n\n const navigate = (offset: number) => {\n const next = new Date(year, monthIdx + offset, 1)\n if (controlledMonth === undefined) setInternalMonth(next)\n onMonthChange?.(next)\n }\n\n const isDisabled = (date: Date) => {\n if (minDate && date < new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()))\n return true\n if (maxDate && date > new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()))\n return true\n return disabledDates?.(date) ?? false\n }\n\n const handleSelect = (date: Date) => {\n if (isDisabled(date)) return\n if (value === undefined) setInternalValue(date)\n onChange?.(date)\n if (date.getMonth() !== monthIdx) {\n navigate(date.getMonth() - monthIdx)\n }\n }\n\n return (\n <div\n data-slot=\"root\"\n className={cn(\n 'calendar_root',\n calendarVariants({ size }),\n classNames?.root,\n className,\n )}\n >\n {/* Header */}\n <div\n data-slot=\"header\"\n className={cn(\n 'calendar_header',\n 'flex items-center justify-between px-1',\n classNames?.header,\n )}\n >\n <button\n type=\"button\"\n onClick={() => navigate(-1)}\n className={navBtnClass}\n aria-label=\"Previous month\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </button>\n <span className=\"font-semibold text-text-primary\">\n {MONTH_NAMES[monthIdx]} {year}\n </span>\n <button\n type=\"button\"\n onClick={() => navigate(1)}\n className={navBtnClass}\n aria-label=\"Next month\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Grid */}\n <div\n data-slot=\"grid\"\n className={cn('calendar_grid', 'grid grid-cols-7', classNames?.grid)}\n role=\"grid\"\n >\n {dayNames.map((name) => (\n <div\n key={name}\n role=\"columnheader\"\n className={cn(\n 'calendar_dayName',\n cellVariants({ size }),\n 'font-medium text-text-secondary cursor-default',\n classNames?.dayName,\n )}\n >\n {name}\n </div>\n ))}\n {weeks.map((week, wi) =>\n week.map(({ date, outside }) => {\n const disabled = isDisabled(date)\n const isToday = isSameDay(date, today)\n const isSelected = selected ? isSameDay(date, selected) : false\n\n return (\n <button\n key={`${wi}-${date.toISOString()}`}\n type=\"button\"\n role=\"gridcell\"\n disabled={disabled}\n onClick={() => handleSelect(date)}\n aria-selected={isSelected}\n aria-current={isToday ? 'date' : undefined}\n className={cn(\n 'calendar_day',\n cellVariants({ size }),\n outside && 'text-text-secondary/40',\n outside && !showOutsideDays && 'invisible',\n disabled && 'opacity-30 cursor-not-allowed',\n !disabled && !isSelected && 'hover:bg-surface',\n isToday && !isSelected && 'border border-primary text-primary',\n isSelected && 'bg-primary text-primary-foreground',\n classNames?.day,\n isToday && classNames?.today,\n isSelected && classNames?.selected,\n outside && classNames?.outside,\n disabled && classNames?.disabled,\n )}\n >\n {date.getDate()}\n </button>\n )\n }),\n )}\n </div>\n </div>\n )\n },\n)\n\nCalendar.displayName = 'Calendar'\n\nexport type * from './types'\nexport default Calendar\n"]}