@mdigital_ui/ui 0.4.7 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/dist/alert/index.d.ts.map +1 -1
  2. package/dist/alert/index.js +1 -1
  3. package/dist/autocomplete/index.d.ts.map +1 -1
  4. package/dist/autocomplete/index.js +3 -2
  5. package/dist/avatar/index.d.ts.map +1 -1
  6. package/dist/avatar/index.js +1 -1
  7. package/dist/breadcrumbs/index.js +4 -4
  8. package/dist/button/index.js +2 -2
  9. package/dist/calendar/index.d.ts.map +1 -1
  10. package/dist/calendar/index.js +2 -1
  11. package/dist/cascader/index.d.ts.map +1 -1
  12. package/dist/cascader/index.js +1 -1
  13. package/dist/checkbox/index.d.ts.map +1 -1
  14. package/dist/checkbox/index.js +1 -1
  15. package/dist/checkbox/types.d.ts +2 -0
  16. package/dist/checkbox/types.d.ts.map +1 -1
  17. package/dist/{chunk-Z3DIBMBQ.js → chunk-3K4GIXFA.js} +178 -118
  18. package/dist/chunk-3K4GIXFA.js.map +1 -0
  19. package/dist/{chunk-SJLH5ZDW.js → chunk-4QLYRAW2.js} +3 -3
  20. package/dist/{chunk-SJLH5ZDW.js.map → chunk-4QLYRAW2.js.map} +1 -1
  21. package/dist/{chunk-4TEZWGX7.js → chunk-64OCJYSH.js} +17 -8
  22. package/dist/chunk-64OCJYSH.js.map +1 -0
  23. package/dist/{chunk-5YEC6FDN.js → chunk-6CMHCCDO.js} +14 -7
  24. package/dist/chunk-6CMHCCDO.js.map +1 -0
  25. package/dist/{chunk-7RT65ZGV.js → chunk-6H2Y3QKP.js} +75 -23
  26. package/dist/chunk-6H2Y3QKP.js.map +1 -0
  27. package/dist/{chunk-UFYG3HKL.js → chunk-6K6RGQNL.js} +193 -94
  28. package/dist/chunk-6K6RGQNL.js.map +1 -0
  29. package/dist/{chunk-ROQGBDET.js → chunk-6XXAZ6P2.js} +15 -7
  30. package/dist/chunk-6XXAZ6P2.js.map +1 -0
  31. package/dist/{chunk-3Z7RLVWD.js → chunk-75T5BISG.js} +7 -13
  32. package/dist/chunk-75T5BISG.js.map +1 -0
  33. package/dist/{chunk-XAM5EKOS.js → chunk-7SKAAKBC.js} +13 -12
  34. package/dist/chunk-7SKAAKBC.js.map +1 -0
  35. package/dist/{chunk-6RZEJRTC.js → chunk-7ZUIX4NK.js} +3 -3
  36. package/dist/{chunk-6RZEJRTC.js.map → chunk-7ZUIX4NK.js.map} +1 -1
  37. package/dist/{chunk-NPK4ESMA.js → chunk-B75ICJCX.js} +9 -16
  38. package/dist/chunk-B75ICJCX.js.map +1 -0
  39. package/dist/chunk-CB7YOZWV.js +50 -0
  40. package/dist/chunk-CB7YOZWV.js.map +1 -0
  41. package/dist/{chunk-UFC3RGIN.js → chunk-DXAOZB6J.js} +4 -4
  42. package/dist/chunk-DXAOZB6J.js.map +1 -0
  43. package/dist/{chunk-75N6T3IS.js → chunk-ECBTSKES.js} +13 -10
  44. package/dist/chunk-ECBTSKES.js.map +1 -0
  45. package/dist/{chunk-J2WIZULN.js → chunk-FCIK35OY.js} +3 -3
  46. package/dist/{chunk-J2WIZULN.js.map → chunk-FCIK35OY.js.map} +1 -1
  47. package/dist/{chunk-FY2TZ2NT.js → chunk-GP7R3AFC.js} +58 -30
  48. package/dist/chunk-GP7R3AFC.js.map +1 -0
  49. package/dist/{chunk-ED4CQZ72.js → chunk-GQM5WLP5.js} +4 -4
  50. package/dist/{chunk-ED4CQZ72.js.map → chunk-GQM5WLP5.js.map} +1 -1
  51. package/dist/{chunk-TBKPQOXF.js → chunk-GSLNACUF.js} +3 -3
  52. package/dist/{chunk-TBKPQOXF.js.map → chunk-GSLNACUF.js.map} +1 -1
  53. package/dist/{chunk-OJAHIPPP.js → chunk-HGWD63IR.js} +3 -3
  54. package/dist/{chunk-OJAHIPPP.js.map → chunk-HGWD63IR.js.map} +1 -1
  55. package/dist/chunk-HKQOAEFY.js +1 -1
  56. package/dist/{chunk-PD3O6ZH4.js → chunk-JXOLZBXF.js} +19 -8
  57. package/dist/chunk-JXOLZBXF.js.map +1 -0
  58. package/dist/{chunk-CUXQZRDI.js → chunk-JZCONCJS.js} +13 -3
  59. package/dist/chunk-JZCONCJS.js.map +1 -0
  60. package/dist/{chunk-TDPJYCNI.js → chunk-KBT6UQNA.js} +14 -35
  61. package/dist/chunk-KBT6UQNA.js.map +1 -0
  62. package/dist/{chunk-VNH6R5EU.js → chunk-KR3GBSVA.js} +4 -6
  63. package/dist/chunk-KR3GBSVA.js.map +1 -0
  64. package/dist/{chunk-JWYBDNC6.js → chunk-KTK7LSKX.js} +7 -8
  65. package/dist/chunk-KTK7LSKX.js.map +1 -0
  66. package/dist/{chunk-X3VT5SSK.js → chunk-L3ZFNHVX.js} +153 -171
  67. package/dist/chunk-L3ZFNHVX.js.map +1 -0
  68. package/dist/{chunk-PB5VGXS5.js → chunk-LBOQJHFH.js} +3 -3
  69. package/dist/{chunk-PB5VGXS5.js.map → chunk-LBOQJHFH.js.map} +1 -1
  70. package/dist/{chunk-XCK62GVU.js → chunk-LZ2MHSYF.js} +8 -5
  71. package/dist/chunk-LZ2MHSYF.js.map +1 -0
  72. package/dist/{chunk-LHZJ2GJU.js → chunk-MHRSK2QC.js} +8 -6
  73. package/dist/chunk-MHRSK2QC.js.map +1 -0
  74. package/dist/{chunk-JIXINKUJ.js → chunk-N742SARE.js} +8 -7
  75. package/dist/chunk-N742SARE.js.map +1 -0
  76. package/dist/{chunk-3XOHSE3X.js → chunk-NA6EVQ6T.js} +3 -3
  77. package/dist/{chunk-3XOHSE3X.js.map → chunk-NA6EVQ6T.js.map} +1 -1
  78. package/dist/{chunk-6ROGWFQ2.js → chunk-NKLKTAUP.js} +3 -3
  79. package/dist/{chunk-6ROGWFQ2.js.map → chunk-NKLKTAUP.js.map} +1 -1
  80. package/dist/{chunk-S6HO7HUY.js → chunk-OSD63E6O.js} +15 -19
  81. package/dist/chunk-OSD63E6O.js.map +1 -0
  82. package/dist/{chunk-QDJ5PZPP.js → chunk-PHA7SLBY.js} +3 -3
  83. package/dist/chunk-PHA7SLBY.js.map +1 -0
  84. package/dist/{chunk-6NXZWLSM.js → chunk-S4BF3Z6O.js} +4 -4
  85. package/dist/{chunk-6NXZWLSM.js.map → chunk-S4BF3Z6O.js.map} +1 -1
  86. package/dist/{chunk-C65SCJD6.js → chunk-SK6YMTMA.js} +5 -12
  87. package/dist/chunk-SK6YMTMA.js.map +1 -0
  88. package/dist/{chunk-DBPLQZJ2.js → chunk-SSISBOLO.js} +75 -22
  89. package/dist/chunk-SSISBOLO.js.map +1 -0
  90. package/dist/{chunk-LWYZCSX4.js → chunk-UBJK5623.js} +12 -11
  91. package/dist/chunk-UBJK5623.js.map +1 -0
  92. package/dist/{chunk-74AF6PO2.js → chunk-UEQ3NEVL.js} +48 -12
  93. package/dist/chunk-UEQ3NEVL.js.map +1 -0
  94. package/dist/{chunk-A4MYCEGM.js → chunk-UHHCUCEE.js} +19 -8
  95. package/dist/chunk-UHHCUCEE.js.map +1 -0
  96. package/dist/{chunk-X7JN7WPF.js → chunk-UIPDAD62.js} +3 -3
  97. package/dist/chunk-UIPDAD62.js.map +1 -0
  98. package/dist/{chunk-YUACN5GJ.js → chunk-UPBKLI62.js} +20 -13
  99. package/dist/chunk-UPBKLI62.js.map +1 -0
  100. package/dist/{chunk-DIUOGEL3.js → chunk-UUXSTLOY.js} +171 -190
  101. package/dist/chunk-UUXSTLOY.js.map +1 -0
  102. package/dist/{chunk-HSMO2BR4.js → chunk-VNB7ZHCZ.js} +4 -13
  103. package/dist/chunk-VNB7ZHCZ.js.map +1 -0
  104. package/dist/{chunk-TQEMGWZ2.js → chunk-W4RYNHAG.js} +3 -3
  105. package/dist/{chunk-TQEMGWZ2.js.map → chunk-W4RYNHAG.js.map} +1 -1
  106. package/dist/{chunk-PRDJLQLB.js → chunk-XNV3YAJK.js} +5 -5
  107. package/dist/chunk-XNV3YAJK.js.map +1 -0
  108. package/dist/{chunk-I7HJBHQU.js → chunk-Y3PVWMUN.js} +7 -7
  109. package/dist/chunk-Y3PVWMUN.js.map +1 -0
  110. package/dist/clipboard/index.js +2 -2
  111. package/dist/collapse/index.js +2 -2
  112. package/dist/color-picker/index.d.ts +3 -3
  113. package/dist/color-picker/index.d.ts.map +1 -1
  114. package/dist/color-picker/index.js +3 -2
  115. package/dist/context-menu/index.d.ts +4 -6
  116. package/dist/context-menu/index.d.ts.map +1 -1
  117. package/dist/context-menu/index.js +2 -2
  118. package/dist/date-picker/PickerWrapper.d.ts +3 -3
  119. package/dist/date-picker/PickerWrapper.d.ts.map +1 -1
  120. package/dist/date-picker/index.d.ts.map +1 -1
  121. package/dist/date-picker/index.js +3 -2
  122. package/dist/descriptions/index.js +1 -1
  123. package/dist/dropdown/index.js +3 -3
  124. package/dist/hooks/useControllable.d.ts +9 -2
  125. package/dist/hooks/useControllable.d.ts.map +1 -1
  126. package/dist/hooks/useRipple.d.ts +0 -6
  127. package/dist/hooks/useRipple.d.ts.map +1 -1
  128. package/dist/index.js +47 -47
  129. package/dist/input/index.js +1 -1
  130. package/dist/input-password/index.js +2 -2
  131. package/dist/mentions/index.d.ts.map +1 -1
  132. package/dist/mentions/index.js +2 -1
  133. package/dist/menubar/index.js +2 -2
  134. package/dist/multi-select/index.d.ts.map +1 -1
  135. package/dist/multi-select/index.js +4 -4
  136. package/dist/navigation-menu/index.d.ts.map +1 -1
  137. package/dist/navigation-menu/index.js +1 -1
  138. package/dist/number-input/index.d.ts.map +1 -1
  139. package/dist/number-input/index.js +3 -3
  140. package/dist/pagination/index.js +2 -2
  141. package/dist/popover/index.d.ts +16 -1
  142. package/dist/popover/index.d.ts.map +1 -1
  143. package/dist/popover/index.js +1 -1
  144. package/dist/qr-code/index.d.ts +3 -3
  145. package/dist/qr-code/index.d.ts.map +1 -1
  146. package/dist/qr-code/index.js +1 -1
  147. package/dist/radio/index.d.ts.map +1 -1
  148. package/dist/radio/index.js +1 -1
  149. package/dist/rating/index.js +2 -2
  150. package/dist/resizable/index.d.ts +4 -3
  151. package/dist/resizable/index.d.ts.map +1 -1
  152. package/dist/resizable/index.js +1 -1
  153. package/dist/result/index.d.ts.map +1 -1
  154. package/dist/result/index.js +1 -1
  155. package/dist/select/index.d.ts.map +1 -1
  156. package/dist/select/index.js +4 -4
  157. package/dist/skeleton/index.d.ts +3 -3
  158. package/dist/skeleton/index.d.ts.map +1 -1
  159. package/dist/skeleton/index.js +1 -1
  160. package/dist/table/index.d.ts.map +1 -1
  161. package/dist/table/index.js +8 -8
  162. package/dist/table/types.d.ts +16 -2
  163. package/dist/table/types.d.ts.map +1 -1
  164. package/dist/tags-input/index.d.ts.map +1 -1
  165. package/dist/tags-input/index.js +2 -1
  166. package/dist/textarea/index.d.ts +3 -3
  167. package/dist/textarea/index.d.ts.map +1 -1
  168. package/dist/textarea/index.js +1 -1
  169. package/dist/theme/ThemeProvider.d.ts +18 -2
  170. package/dist/theme/ThemeProvider.d.ts.map +1 -1
  171. package/dist/theme/index.d.ts +1 -1
  172. package/dist/theme/index.d.ts.map +1 -1
  173. package/dist/theme/index.js +1 -1
  174. package/dist/timeline/index.d.ts.map +1 -1
  175. package/dist/timeline/index.js +1 -1
  176. package/dist/toggle/index.d.ts.map +1 -1
  177. package/dist/toggle/index.js +2 -2
  178. package/dist/toggle-group/index.d.ts.map +1 -1
  179. package/dist/toggle-group/index.js +2 -2
  180. package/dist/tour/index.d.ts.map +1 -1
  181. package/dist/tour/index.js +1 -1
  182. package/dist/transfer/index.js +2 -2
  183. package/dist/tree-select/index.js +2 -2
  184. package/dist/typography/index.d.ts.map +1 -1
  185. package/dist/typography/index.js +1 -1
  186. package/dist/upload/index.d.ts.map +1 -1
  187. package/dist/upload/index.js +2 -2
  188. package/package.json +4 -3
  189. package/styles/datepicker.css +126 -0
  190. package/styles/global.css +1 -113
  191. package/dist/chunk-3Z7RLVWD.js.map +0 -1
  192. package/dist/chunk-4TEZWGX7.js.map +0 -1
  193. package/dist/chunk-5YEC6FDN.js.map +0 -1
  194. package/dist/chunk-74AF6PO2.js.map +0 -1
  195. package/dist/chunk-75N6T3IS.js.map +0 -1
  196. package/dist/chunk-7RT65ZGV.js.map +0 -1
  197. package/dist/chunk-A4MYCEGM.js.map +0 -1
  198. package/dist/chunk-C65SCJD6.js.map +0 -1
  199. package/dist/chunk-CUXQZRDI.js.map +0 -1
  200. package/dist/chunk-DBPLQZJ2.js.map +0 -1
  201. package/dist/chunk-DIUOGEL3.js.map +0 -1
  202. package/dist/chunk-FY2TZ2NT.js.map +0 -1
  203. package/dist/chunk-HSMO2BR4.js.map +0 -1
  204. package/dist/chunk-I7HJBHQU.js.map +0 -1
  205. package/dist/chunk-JIXINKUJ.js.map +0 -1
  206. package/dist/chunk-JWYBDNC6.js.map +0 -1
  207. package/dist/chunk-LHZJ2GJU.js.map +0 -1
  208. package/dist/chunk-LWYZCSX4.js.map +0 -1
  209. package/dist/chunk-NPK4ESMA.js.map +0 -1
  210. package/dist/chunk-PD3O6ZH4.js.map +0 -1
  211. package/dist/chunk-PQOIW5CM.js +0 -27
  212. package/dist/chunk-PQOIW5CM.js.map +0 -1
  213. package/dist/chunk-PRDJLQLB.js.map +0 -1
  214. package/dist/chunk-QDJ5PZPP.js.map +0 -1
  215. package/dist/chunk-ROQGBDET.js.map +0 -1
  216. package/dist/chunk-S6HO7HUY.js.map +0 -1
  217. package/dist/chunk-TDPJYCNI.js.map +0 -1
  218. package/dist/chunk-UFC3RGIN.js.map +0 -1
  219. package/dist/chunk-UFYG3HKL.js.map +0 -1
  220. package/dist/chunk-VNH6R5EU.js.map +0 -1
  221. package/dist/chunk-X3VT5SSK.js.map +0 -1
  222. package/dist/chunk-X7JN7WPF.js.map +0 -1
  223. package/dist/chunk-XAM5EKOS.js.map +0 -1
  224. package/dist/chunk-XCK62GVU.js.map +0 -1
  225. package/dist/chunk-YUACN5GJ.js.map +0 -1
  226. package/dist/chunk-Z3DIBMBQ.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/button/index.tsx"],"names":[],"mappings":"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","file":"chunk-SJLH5ZDW.js","sourcesContent":["'use client'\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva } from \"class-variance-authority\";\nimport React from \"react\";\n\nimport { Spinner } from \"../spinner\";\nimport { cn } from \"../utils\";\nimport { buttonColorVars } from \"../variants\";\nimport type { ButtonProps, ButtonColor } from \"./types\";\nimport { useRipple, RippleContainer } from \"../hooks/useRipple\";\n\nconst buttonVariants = cva(\n [\n \"inline-flex cursor-pointer text-center font-medium items-center justify-center\",\n \"transition-[opacity] duration-200 ease-[cubic-bezier(0.34,1.56,0.64,1)]\",\n \"disabled:opacity-50 disabled:pointer-events-none\",\n \"focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:ring-slot\",\n // Accessibility: respect prefers-reduced-motion\n \"motion-reduce:transition-none\",\n ],\n {\n variants: {\n variant: {\n solid: \"bg-slot border border-slot text-slot-fg hover:bg-slot-90\",\n outline: \"border border-slot bg-transparent text-slot hover:bg-slot-10\",\n soft: \"border-none bg-slot-10 text-slot\",\n dashed: \"border border-dashed border-slot bg-transparent text-slot hover:bg-slot-10\",\n link: \"border-none bg-transparent text-slot hover:text-slot-80 hover:underline\",\n ghost: \"border-none bg-transparent text-slot hover:bg-slot-10\",\n },\n color: buttonColorVars,\n size: {\n xs: \"h-(--button-height-xs) px-(--button-padding-x-xs) text-xs gap-1.5\",\n sm: \"h-(--button-height-sm) px-(--button-padding-x-sm) text-sm gap-2\",\n md: \"h-(--button-height-md) px-(--button-padding-x-md) text-base gap-2\",\n lg: \"h-(--button-height-lg) px-(--button-padding-x-lg) text-lg gap-2.5\",\n },\n shape: {\n rounded: \"rounded-md\",\n pill: \"rounded-full\",\n square: \"rounded-none\",\n },\n fullWidth: {\n true: \"w-full\",\n false: \"\",\n },\n iconOnly: {\n true: \"\",\n false: \"\",\n },\n },\n compoundVariants: [\n { iconOnly: true, size: \"xs\", class: \"w-(--button-height-xs) px-0\" },\n { iconOnly: true, size: \"sm\", class: \"w-(--button-height-sm) px-0\" },\n { iconOnly: true, size: \"md\", class: \"w-(--button-height-md) px-0\" },\n { iconOnly: true, size: \"lg\", class: \"w-(--button-height-lg) px-0\" },\n ],\n defaultVariants: {\n variant: \"solid\",\n color: \"primary\",\n size: \"md\",\n shape: \"rounded\",\n fullWidth: false,\n iconOnly: false,\n },\n },\n);\n\nconst spinnerSizeMap: Record<\n NonNullable<ButtonProps[\"size\"]>,\n \"xs\" | \"sm\" | \"md\" | \"lg\"\n> = {\n xs: \"xs\",\n sm: \"xs\",\n md: \"sm\",\n lg: \"md\",\n};\n\nfunction getSpinnerColor(\n variant: ButtonProps[\"variant\"],\n color: ButtonColor,\n): ButtonColor | \"default\" {\n if (variant === \"solid\") {\n return \"default\";\n }\n return color;\n}\n\nconst Button = React.memo<ButtonProps>(\n ({\n variant = \"solid\",\n color = \"primary\",\n size = \"md\",\n shape = \"rounded\",\n loading = false,\n loadingText,\n loadingPosition = \"left\",\n icon,\n iconPlacement = \"left\",\n leftIcon: leftIconProp,\n rightIcon: rightIconProp,\n fullWidth = false,\n iconOnly = false,\n asChild = false,\n pressed,\n ripple = false,\n className,\n classNames,\n children,\n disabled,\n onClick,\n ref,\n ...props\n }) => {\n const isDisabled = disabled || loading;\n const spinnerSize = spinnerSizeMap[size];\n const spinnerColor = getSpinnerColor(variant, color);\n\n const {\n ripples,\n onPointerDown: ripplePointerDown,\n onKeyDown: rippleKeyDown,\n onAnimationEnd: rippleAnimationEnd,\n } = useRipple(ripple && !isDisabled);\n\n // Dev warning for icon-only buttons without aria-label\n if (import.meta.env?.DEV && iconOnly && !props['aria-label'] && !props['aria-labelledby']) {\n console.warn('Button: icon-only buttons should have an aria-label or aria-labelledby prop for accessibility.')\n }\n\n const leftIcon = leftIconProp ?? (iconPlacement === \"left\" ? icon : undefined);\n const rightIcon = rightIconProp ?? (iconPlacement === \"right\" ? icon : undefined);\n\n const showLeftIcon = !loading && leftIcon;\n const showRightIcon = !loading && rightIcon;\n const showSpinnerLeft = loading && loadingPosition === \"left\";\n const showSpinnerRight = loading && loadingPosition === \"right\";\n\n const content = loading && loadingText ? loadingText : children;\n\n const iconOnlyLoading = iconOnly && loading;\n\n const buttonClassName = cn(\n \"button_root\",\n buttonVariants({ color, size, variant, shape, fullWidth, iconOnly }),\n pressed && \"data-[pressed=true]:ring-2 data-[pressed=true]:ring-current/30\",\n ripple && \"relative overflow-hidden\",\n classNames?.root,\n className,\n );\n\n const sharedProps = {\n className: buttonClassName,\n disabled: asChild ? undefined : isDisabled,\n \"aria-busy\": loading || undefined,\n \"aria-disabled\": isDisabled || undefined,\n \"aria-pressed\": pressed,\n \"data-pressed\": pressed != null ? String(pressed) : undefined,\n \"data-slot\": \"root\",\n onClick: isDisabled ? undefined : onClick,\n onPointerDown: ripplePointerDown,\n onKeyDown: rippleKeyDown,\n ...props,\n };\n\n const innerContent = iconOnlyLoading ? (\n <>\n <span\n className={cn(\"button_spinner inline-flex items-center\", classNames?.spinner)}\n data-slot=\"spinner\"\n >\n <Spinner size={spinnerSize} color={spinnerColor} />\n </span>\n <span className=\"sr-only\">Loading</span>\n </>\n ) : (\n <>\n {showSpinnerLeft && (\n <span\n className={cn(\"button_spinner inline-flex items-center\", classNames?.spinner)}\n data-slot=\"spinner\"\n >\n <Spinner size={spinnerSize} color={spinnerColor} />\n </span>\n )}\n {showLeftIcon && (\n <span\n className={cn(\"button_icon shrink-0\", classNames?.icon, classNames?.leftIcon)}\n data-slot=\"icon\"\n >\n {leftIcon}\n </span>\n )}\n {content}\n {showRightIcon && (\n <span\n className={cn(\"button_icon shrink-0\", classNames?.icon, classNames?.rightIcon)}\n data-slot=\"icon\"\n >\n {rightIcon}\n </span>\n )}\n {showSpinnerRight && (\n <span\n className={cn(\"button_spinner inline-flex items-center\", classNames?.spinner)}\n data-slot=\"spinner\"\n >\n <Spinner size={spinnerSize} color={spinnerColor} />\n </span>\n )}\n {loading && <span className=\"sr-only\">Loading</span>}\n </>\n );\n\n const rippleElements = (\n <RippleContainer\n ripples={ripples}\n className={classNames?.ripple}\n onAnimationEnd={rippleAnimationEnd}\n />\n );\n\n if (asChild) {\n return (\n <Slot ref={ref} {...sharedProps}>\n {React.isValidElement(children)\n ? React.cloneElement(\n children as React.ReactElement<{ children?: React.ReactNode }>,\n {},\n <>\n {(children as React.ReactElement<{ children?: React.ReactNode }>).props.children}\n {rippleElements}\n </>,\n )\n : children}\n </Slot>\n );\n }\n\n return (\n <button\n ref={ref}\n type={props.type ?? \"button\"}\n {...sharedProps}\n >\n {innerContent}\n {rippleElements}\n </button>\n );\n },\n);\n\nButton.displayName = \"Button\";\n\nexport { buttonVariants };\nexport type * from \"./types\";\nexport default Button;\n"]}
1
+ {"version":3,"sources":["../src/button/index.tsx"],"names":[],"mappings":"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","file":"chunk-4QLYRAW2.js","sourcesContent":["'use client'\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva } from \"class-variance-authority\";\nimport React from \"react\";\n\nimport { Spinner } from \"../spinner\";\nimport { cn } from \"../utils\";\nimport { buttonColorVars } from \"../variants\";\nimport type { ButtonProps, ButtonColor } from \"./types\";\nimport { useRipple, RippleContainer } from \"../hooks/useRipple\";\n\nconst buttonVariants = cva(\n [\n \"inline-flex cursor-pointer text-center font-medium items-center justify-center\",\n \"transition-[opacity] duration-200 ease-[cubic-bezier(0.34,1.56,0.64,1)]\",\n \"disabled:opacity-50 disabled:pointer-events-none\",\n \"focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:ring-slot\",\n // Accessibility: respect prefers-reduced-motion\n \"motion-reduce:transition-none\",\n ],\n {\n variants: {\n variant: {\n solid: \"bg-slot border border-slot text-slot-fg hover:bg-slot-90\",\n outline: \"border border-slot bg-transparent text-slot hover:bg-slot-10\",\n soft: \"border-none bg-slot-10 text-slot\",\n dashed: \"border border-dashed border-slot bg-transparent text-slot hover:bg-slot-10\",\n link: \"border-none bg-transparent text-slot hover:text-slot-80 hover:underline\",\n ghost: \"border-none bg-transparent text-slot hover:bg-slot-10\",\n },\n color: buttonColorVars,\n size: {\n xs: \"h-(--button-height-xs) px-(--button-padding-x-xs) text-xs gap-1.5\",\n sm: \"h-(--button-height-sm) px-(--button-padding-x-sm) text-sm gap-2\",\n md: \"h-(--button-height-md) px-(--button-padding-x-md) text-base gap-2\",\n lg: \"h-(--button-height-lg) px-(--button-padding-x-lg) text-lg gap-2.5\",\n },\n shape: {\n rounded: \"rounded-md\",\n pill: \"rounded-full\",\n square: \"rounded-none\",\n },\n fullWidth: {\n true: \"w-full\",\n false: \"\",\n },\n iconOnly: {\n true: \"\",\n false: \"\",\n },\n },\n compoundVariants: [\n { iconOnly: true, size: \"xs\", class: \"w-(--button-height-xs) px-0\" },\n { iconOnly: true, size: \"sm\", class: \"w-(--button-height-sm) px-0\" },\n { iconOnly: true, size: \"md\", class: \"w-(--button-height-md) px-0\" },\n { iconOnly: true, size: \"lg\", class: \"w-(--button-height-lg) px-0\" },\n ],\n defaultVariants: {\n variant: \"solid\",\n color: \"primary\",\n size: \"md\",\n shape: \"rounded\",\n fullWidth: false,\n iconOnly: false,\n },\n },\n);\n\nconst spinnerSizeMap: Record<\n NonNullable<ButtonProps[\"size\"]>,\n \"xs\" | \"sm\" | \"md\" | \"lg\"\n> = {\n xs: \"xs\",\n sm: \"xs\",\n md: \"sm\",\n lg: \"md\",\n};\n\nfunction getSpinnerColor(\n variant: ButtonProps[\"variant\"],\n color: ButtonColor,\n): ButtonColor | \"default\" {\n if (variant === \"solid\") {\n return \"default\";\n }\n return color;\n}\n\nconst Button = React.memo<ButtonProps>(\n ({\n variant = \"solid\",\n color = \"primary\",\n size = \"md\",\n shape = \"rounded\",\n loading = false,\n loadingText,\n loadingPosition = \"left\",\n icon,\n iconPlacement = \"left\",\n leftIcon: leftIconProp,\n rightIcon: rightIconProp,\n fullWidth = false,\n iconOnly = false,\n asChild = false,\n pressed,\n ripple = false,\n className,\n classNames,\n children,\n disabled,\n onClick,\n ref,\n ...props\n }) => {\n const isDisabled = disabled || loading;\n const spinnerSize = spinnerSizeMap[size];\n const spinnerColor = getSpinnerColor(variant, color);\n\n const {\n ripples,\n onPointerDown: ripplePointerDown,\n onKeyDown: rippleKeyDown,\n onAnimationEnd: rippleAnimationEnd,\n } = useRipple(ripple && !isDisabled);\n\n // Dev warning for icon-only buttons without aria-label\n if (import.meta.env?.DEV && iconOnly && !props['aria-label'] && !props['aria-labelledby']) {\n console.warn('Button: icon-only buttons should have an aria-label or aria-labelledby prop for accessibility.')\n }\n\n const leftIcon = leftIconProp ?? (iconPlacement === \"left\" ? icon : undefined);\n const rightIcon = rightIconProp ?? (iconPlacement === \"right\" ? icon : undefined);\n\n const showLeftIcon = !loading && leftIcon;\n const showRightIcon = !loading && rightIcon;\n const showSpinnerLeft = loading && loadingPosition === \"left\";\n const showSpinnerRight = loading && loadingPosition === \"right\";\n\n const content = loading && loadingText ? loadingText : children;\n\n const iconOnlyLoading = iconOnly && loading;\n\n const buttonClassName = cn(\n \"button_root\",\n buttonVariants({ color, size, variant, shape, fullWidth, iconOnly }),\n pressed && \"data-[pressed=true]:ring-2 data-[pressed=true]:ring-current/30\",\n ripple && \"relative overflow-hidden\",\n classNames?.root,\n className,\n );\n\n const sharedProps = {\n className: buttonClassName,\n disabled: asChild ? undefined : isDisabled,\n \"aria-busy\": loading || undefined,\n \"aria-disabled\": isDisabled || undefined,\n \"aria-pressed\": pressed,\n \"data-pressed\": pressed != null ? String(pressed) : undefined,\n \"data-slot\": \"root\",\n onClick: isDisabled ? undefined : onClick,\n onPointerDown: ripplePointerDown,\n onKeyDown: rippleKeyDown,\n ...props,\n };\n\n const innerContent = iconOnlyLoading ? (\n <>\n <span\n className={cn(\"button_spinner inline-flex items-center\", classNames?.spinner)}\n data-slot=\"spinner\"\n >\n <Spinner size={spinnerSize} color={spinnerColor} />\n </span>\n <span className=\"sr-only\">Loading</span>\n </>\n ) : (\n <>\n {showSpinnerLeft && (\n <span\n className={cn(\"button_spinner inline-flex items-center\", classNames?.spinner)}\n data-slot=\"spinner\"\n >\n <Spinner size={spinnerSize} color={spinnerColor} />\n </span>\n )}\n {showLeftIcon && (\n <span\n className={cn(\"button_icon shrink-0\", classNames?.icon, classNames?.leftIcon)}\n data-slot=\"icon\"\n >\n {leftIcon}\n </span>\n )}\n {content}\n {showRightIcon && (\n <span\n className={cn(\"button_icon shrink-0\", classNames?.icon, classNames?.rightIcon)}\n data-slot=\"icon\"\n >\n {rightIcon}\n </span>\n )}\n {showSpinnerRight && (\n <span\n className={cn(\"button_spinner inline-flex items-center\", classNames?.spinner)}\n data-slot=\"spinner\"\n >\n <Spinner size={spinnerSize} color={spinnerColor} />\n </span>\n )}\n {loading && <span className=\"sr-only\">Loading</span>}\n </>\n );\n\n const rippleElements = (\n <RippleContainer\n ripples={ripples}\n className={classNames?.ripple}\n onAnimationEnd={rippleAnimationEnd}\n />\n );\n\n if (asChild) {\n return (\n <Slot ref={ref} {...sharedProps}>\n {React.isValidElement(children)\n ? React.cloneElement(\n children as React.ReactElement<{ children?: React.ReactNode }>,\n {},\n <>\n {(children as React.ReactElement<{ children?: React.ReactNode }>).props.children}\n {rippleElements}\n </>,\n )\n : children}\n </Slot>\n );\n }\n\n return (\n <button\n ref={ref}\n type={props.type ?? \"button\"}\n {...sharedProps}\n >\n {innerContent}\n {rippleElements}\n </button>\n );\n },\n);\n\nButton.displayName = \"Button\";\n\nexport { buttonVariants };\nexport type * from \"./types\";\nexport default Button;\n"]}
@@ -2,9 +2,20 @@ import { cn } from './chunk-RAS6HUEI.js';
2
2
  import { useState, useRef, useCallback } from 'react';
3
3
  import { jsx, Fragment } from 'react/jsx-runtime';
4
4
 
5
+ var MAX_RIPPLES = 5;
5
6
  function useRipple(enabled) {
6
7
  const [ripples, setRipples] = useState([]);
7
8
  const counter = useRef(0);
9
+ const addRipple = useCallback(
10
+ (x, y, size) => {
11
+ const key = ++counter.current;
12
+ setRipples((prev) => {
13
+ const next = [...prev, { key, x, y, size }];
14
+ return next.length > MAX_RIPPLES ? next.slice(-MAX_RIPPLES) : next;
15
+ });
16
+ },
17
+ []
18
+ );
8
19
  const onPointerDown = useCallback(
9
20
  (e) => {
10
21
  if (!enabled) return;
@@ -13,10 +24,9 @@ function useRipple(enabled) {
13
24
  const size = Math.max(rect.width, rect.height) * 2;
14
25
  const x = e.clientX - rect.left - size / 2;
15
26
  const y = e.clientY - rect.top - size / 2;
16
- const key = ++counter.current;
17
- setRipples((prev) => [...prev, { key, x, y, size }]);
27
+ addRipple(x, y, size);
18
28
  },
19
- [enabled]
29
+ [enabled, addRipple]
20
30
  );
21
31
  const onKeyDown = useCallback(
22
32
  (e) => {
@@ -27,10 +37,9 @@ function useRipple(enabled) {
27
37
  const size = Math.max(rect.width, rect.height) * 2;
28
38
  const x = rect.width / 2 - size / 2;
29
39
  const y = rect.height / 2 - size / 2;
30
- const key = ++counter.current;
31
- setRipples((prev) => [...prev, { key, x, y, size }]);
40
+ addRipple(x, y, size);
32
41
  },
33
- [enabled]
42
+ [enabled, addRipple]
34
43
  );
35
44
  const onAnimationEnd = useCallback((key) => {
36
45
  setRipples((prev) => prev.filter((r) => r.key !== key));
@@ -70,5 +79,5 @@ var RippleContainer = ({ ripples, className, onAnimationEnd }) => {
70
79
  };
71
80
 
72
81
  export { RippleContainer, useRipple };
73
- //# sourceMappingURL=chunk-4TEZWGX7.js.map
74
- //# sourceMappingURL=chunk-4TEZWGX7.js.map
82
+ //# sourceMappingURL=chunk-64OCJYSH.js.map
83
+ //# sourceMappingURL=chunk-64OCJYSH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useRipple.tsx"],"names":[],"mappings":"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","file":"chunk-64OCJYSH.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 */\nconst MAX_RIPPLES = 5\n\nexport function useRipple(enabled: boolean) {\n const [ripples, setRipples] = useState<RippleEntry[]>([])\n const counter = useRef(0)\n\n const addRipple = useCallback(\n (x: number, y: number, size: number) => {\n const key = ++counter.current\n setRipples((prev) => {\n const next = [...prev, { key, x, y, size }]\n // Cap at MAX_RIPPLES to prevent unbounded growth from rapid clicks\n return next.length > MAX_RIPPLES ? next.slice(-MAX_RIPPLES) : next\n })\n },\n [],\n )\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 addRipple(x, y, size)\n },\n [enabled, addRipple],\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 addRipple(x, y, size)\n },\n [enabled, addRipple],\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,3 +1,4 @@
1
+ import { useControllable } from './chunk-CB7YOZWV.js';
1
2
  import { cn } from './chunk-RAS6HUEI.js';
2
3
  import { cva } from 'class-variance-authority';
3
4
  import React from 'react';
@@ -101,13 +102,20 @@ var Calendar = React.memo(
101
102
  classNames
102
103
  }) => {
103
104
  const today = /* @__PURE__ */ new Date();
104
- const [internalValue, setInternalValue] = React.useState(
105
- defaultValue ?? null
105
+ const onChangeWrapped = React.useMemo(
106
+ () => onChange ? (v) => {
107
+ if (v) onChange(v);
108
+ } : void 0,
109
+ [onChange]
106
110
  );
111
+ const [selected, setSelected] = useControllable({
112
+ value,
113
+ defaultValue: defaultValue ?? null,
114
+ onChange: onChangeWrapped
115
+ });
107
116
  const [internalMonth, setInternalMonth] = React.useState(
108
117
  defaultMonth ?? defaultValue ?? today
109
118
  );
110
- const selected = value !== void 0 ? value : internalValue;
111
119
  const currentMonth = controlledMonth ?? internalMonth;
112
120
  const year = currentMonth.getFullYear();
113
121
  const monthIdx = currentMonth.getMonth();
@@ -136,8 +144,7 @@ var Calendar = React.memo(
136
144
  };
137
145
  const handleSelect = (date) => {
138
146
  if (isDisabled(date)) return;
139
- if (value === void 0) setInternalValue(date);
140
- onChange?.(date);
147
+ setSelected(date);
141
148
  if (date.getMonth() !== monthIdx) {
142
149
  navigate(date.getMonth() - monthIdx);
143
150
  }
@@ -259,5 +266,5 @@ Calendar.displayName = "Calendar";
259
266
  var calendar_default = Calendar;
260
267
 
261
268
  export { calendar_default };
262
- //# sourceMappingURL=chunk-5YEC6FDN.js.map
263
- //# sourceMappingURL=chunk-5YEC6FDN.js.map
269
+ //# sourceMappingURL=chunk-6CMHCCDO.js.map
270
+ //# sourceMappingURL=chunk-6CMHCCDO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/calendar/index.tsx"],"names":[],"mappings":"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","file":"chunk-6CMHCCDO.js","sourcesContent":["'use client'\n\nimport { cva } from 'class-variance-authority'\nimport React from 'react'\n\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport { useControllable } from '../hooks/useControllable'\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 onChangeWrapped = React.useMemo(\n () => onChange ? (v: Date | null) => { if (v) onChange(v) } : undefined,\n [onChange],\n )\n const [selected, setSelected] = useControllable<Date | null>({\n value,\n defaultValue: defaultValue ?? null,\n onChange: onChangeWrapped,\n })\n const [internalMonth, setInternalMonth] = React.useState<Date>(\n defaultMonth ?? defaultValue ?? today,\n )\n\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 setSelected(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"]}
@@ -67,7 +67,9 @@ var Textarea = React.memo(
67
67
  ref,
68
68
  ...props
69
69
  }) => {
70
- const [internalValue, setInternalValue] = React.useState(props.defaultValue ?? "");
70
+ const [internalValue, setInternalValue] = React.useState(
71
+ props.defaultValue ?? ""
72
+ );
71
73
  const currentValue = value !== void 0 ? value : internalValue;
72
74
  const internalRef = React.useRef(null);
73
75
  const currentLength = String(currentValue).length;
@@ -145,31 +147,81 @@ var Textarea = React.memo(
145
147
  classNames?.root
146
148
  ),
147
149
  children: [
148
- /* @__PURE__ */ jsxs("div", { className: cn("textarea_wrapper", "flex gap-2 items-center relative mb-0.5", classNames?.wrapper), children: [
149
- label && /* @__PURE__ */ jsxs("label", { htmlFor: textareaId, className: cn("textarea_label", "text-sm font-medium text-text-secondary", classNames?.label), children: [
150
- label,
151
- props.required && /* @__PURE__ */ jsx("span", { className: cn("textarea_error", "text-error ml-1", classNames?.error), children: "*" })
152
- ] }),
153
- helperMessage && messagePosition === "top" && /* @__PURE__ */ jsx(
154
- "p",
155
- {
156
- id: helperId,
157
- className: cn("textarea_helper", statusMessageVariants({ status }), classNames?.helper),
158
- children: helperMessage
159
- }
160
- ),
161
- showCount && maxLength && /* @__PURE__ */ jsxs("span", { className: cn("textarea_counter", "text-xs text-text-secondary absolute right-0", classNames?.counter), children: [
162
- currentLength,
163
- "/",
164
- maxLength
165
- ] })
166
- ] }),
150
+ /* @__PURE__ */ jsxs(
151
+ "div",
152
+ {
153
+ className: cn(
154
+ "textarea_wrapper",
155
+ "flex gap-2 items-center relative",
156
+ classNames?.wrapper
157
+ ),
158
+ children: [
159
+ label && /* @__PURE__ */ jsxs(
160
+ "label",
161
+ {
162
+ htmlFor: textareaId,
163
+ className: cn(
164
+ "textarea_label mb-0.5",
165
+ "text-sm font-medium text-text-secondary",
166
+ classNames?.label
167
+ ),
168
+ children: [
169
+ label,
170
+ props.required && /* @__PURE__ */ jsx(
171
+ "span",
172
+ {
173
+ className: cn(
174
+ "textarea_error",
175
+ "text-error ml-1",
176
+ classNames?.error
177
+ ),
178
+ children: "*"
179
+ }
180
+ )
181
+ ]
182
+ }
183
+ ),
184
+ helperMessage && messagePosition === "top" && /* @__PURE__ */ jsx(
185
+ "p",
186
+ {
187
+ id: helperId,
188
+ className: cn(
189
+ "textarea_helper mb-0.5",
190
+ statusMessageVariants({ status }),
191
+ classNames?.helper
192
+ ),
193
+ children: helperMessage
194
+ }
195
+ ),
196
+ showCount && maxLength && /* @__PURE__ */ jsxs(
197
+ "span",
198
+ {
199
+ className: cn(
200
+ "textarea_counter mb-0.5",
201
+ "text-xs text-text-secondary absolute right-0",
202
+ classNames?.counter
203
+ ),
204
+ children: [
205
+ currentLength,
206
+ "/",
207
+ maxLength
208
+ ]
209
+ }
210
+ )
211
+ ]
212
+ }
213
+ ),
167
214
  textareaElement,
168
215
  helperMessage && messagePosition === "bottom" && /* @__PURE__ */ jsx(
169
216
  "p",
170
217
  {
171
218
  id: helperId,
172
- className: cn("textarea_helper", statusMessageVariants({ status }), "mt-0.5", classNames?.helper),
219
+ className: cn(
220
+ "textarea_helper",
221
+ statusMessageVariants({ status }),
222
+ "mt-0.5",
223
+ classNames?.helper
224
+ ),
173
225
  children: helperMessage
174
226
  }
175
227
  )
@@ -182,5 +234,5 @@ Textarea.displayName = "Textarea";
182
234
  var textarea_default = Textarea;
183
235
 
184
236
  export { textarea_default };
185
- //# sourceMappingURL=chunk-7RT65ZGV.js.map
186
- //# sourceMappingURL=chunk-7RT65ZGV.js.map
237
+ //# sourceMappingURL=chunk-6H2Y3QKP.js.map
238
+ //# sourceMappingURL=chunk-6H2Y3QKP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/textarea/index.tsx"],"names":[],"mappings":"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","file":"chunk-6H2Y3QKP.js","sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport React, { useId, useMemo } from \"react\";\n\nimport { cn, getValidationStatus, statusMessageVariants } from \"../utils\";\nimport type { TextareaProps } from \"./types\";\n\nconst textareaVariants = cva(\n \"w-full rounded-md focus:border-primary transition-colors text-text-primary placeholder:text-text-secondary/50 disabled:opacity-50 disabled:cursor-not-allowed read-only:bg-surface read-only:cursor-default outline-none\",\n {\n variants: {\n variant: {\n outline: \"bg-background border border-border\",\n filled: \"bg-surface border border-transparent\",\n },\n status: {\n default: \"\",\n error: \"border-error focus:border-error\",\n warning: \"border-warning focus:border-warning\",\n info: \"border-info focus:border-info\",\n success: \"border-success focus:border-success\",\n },\n size: {\n xs: \"min-h-(--textarea-min-height-xs) p-(--textarea-padding-xs) text-xs\",\n sm: \"min-h-(--textarea-min-height-sm) p-(--textarea-padding-sm) text-sm\",\n md: \"min-h-(--textarea-min-height-md) p-(--textarea-padding-md) text-base\",\n lg: \"min-h-(--textarea-min-height-lg) p-(--textarea-padding-lg) text-lg\",\n },\n resize: {\n none: \"resize-none\",\n vertical: \"resize-y\",\n horizontal: \"resize-x\",\n both: \"resize\",\n },\n fullWidth: {\n true: \"w-full\",\n false: \"max-w-full\",\n },\n },\n defaultVariants: {\n variant: \"outline\",\n status: \"default\",\n size: \"md\",\n resize: \"vertical\",\n fullWidth: true,\n },\n },\n);\n\nconst Textarea = React.memo<TextareaProps>(\n ({\n variant = \"outline\",\n size = \"md\",\n label,\n helperText,\n messagePosition = \"bottom\",\n error,\n warning,\n info,\n success,\n resize = \"vertical\",\n showCount = false,\n maxLength,\n autoResize = false,\n fullWidth = true,\n className,\n classNames,\n value,\n onChange,\n ref,\n ...props\n }) => {\n const [internalValue, setInternalValue] = React.useState(\n props.defaultValue ?? \"\",\n );\n const currentValue = value !== undefined ? value : internalValue;\n const internalRef = React.useRef<HTMLTextAreaElement>(null);\n\n const currentLength = String(currentValue).length;\n\n const mergedRef = React.useCallback(\n (node: HTMLTextAreaElement | null) => {\n internalRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLTextAreaElement | null>).current =\n node;\n }\n },\n [ref],\n );\n\n // Generate unique IDs for accessibility\n const uniqueId = useId();\n const textareaId = props.id || `textarea-${uniqueId}`;\n const helperId = `textarea-helper-${uniqueId}`;\n\n const { status, message: helperMessage } = useMemo(\n () =>\n getValidationStatus({\n error,\n warning,\n info,\n success,\n helperText,\n }),\n [error, warning, info, success, helperText],\n );\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (value === undefined) setInternalValue(e.target.value);\n onChange?.(e);\n },\n [value, onChange],\n );\n\n React.useEffect(() => {\n if (autoResize && internalRef.current) {\n internalRef.current.style.height = \"auto\";\n internalRef.current.style.height = `${internalRef.current.scrollHeight}px`;\n }\n }, [currentValue, autoResize]);\n\n const textareaElement = (\n <textarea\n ref={mergedRef}\n id={textareaId}\n className={cn(\n \"textarea_textarea\",\n textareaVariants({\n variant,\n status,\n size,\n resize: autoResize ? \"none\" : resize,\n fullWidth,\n }),\n autoResize && \"overflow-hidden\",\n className,\n classNames?.textarea,\n )}\n maxLength={maxLength}\n value={currentValue}\n onChange={handleChange}\n aria-invalid={status === \"error\"}\n aria-describedby={helperMessage ? helperId : undefined}\n {...props}\n />\n );\n\n return (\n <div\n data-slot=\"root\"\n className={cn(\n \"textarea_root\",\n \"w-full flex flex-col relative\",\n !fullWidth && \"inline-block\",\n classNames?.root,\n )}\n >\n <div\n className={cn(\n \"textarea_wrapper\",\n \"flex gap-2 items-center relative\",\n classNames?.wrapper,\n )}\n >\n {label && (\n <label\n htmlFor={textareaId}\n className={cn(\n \"textarea_label mb-0.5\",\n \"text-sm font-medium text-text-secondary\",\n classNames?.label,\n )}\n >\n {label}\n {props.required && (\n <span\n className={cn(\n \"textarea_error\",\n \"text-error ml-1\",\n classNames?.error,\n )}\n >\n *\n </span>\n )}\n </label>\n )}\n {helperMessage && messagePosition === \"top\" && (\n <p\n id={helperId}\n className={cn(\n \"textarea_helper mb-0.5\",\n statusMessageVariants({ status }),\n classNames?.helper,\n )}\n >\n {helperMessage}\n </p>\n )}\n {showCount && maxLength && (\n <span\n className={cn(\n \"textarea_counter mb-0.5\",\n \"text-xs text-text-secondary absolute right-0\",\n classNames?.counter,\n )}\n >\n {currentLength}/{maxLength}\n </span>\n )}\n </div>\n {textareaElement}\n {helperMessage && messagePosition === \"bottom\" && (\n <p\n id={helperId}\n className={cn(\n \"textarea_helper\",\n statusMessageVariants({ status }),\n \"mt-0.5\",\n classNames?.helper,\n )}\n >\n {helperMessage}\n </p>\n )}\n </div>\n );\n },\n);\n\nTextarea.displayName = \"Textarea\";\n\nexport type * from \"./types\";\nexport default Textarea;\n"]}