@mdigital_ui/ui 0.4.8 → 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-J4SAIKKZ.js → chunk-L3ZFNHVX.js} +25 -22
  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-3B32X5PU.js → chunk-UUXSTLOY.js} +7 -5
  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 +46 -46
  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-3B32X5PU.js.map +0 -1
  192. package/dist/chunk-3Z7RLVWD.js.map +0 -1
  193. package/dist/chunk-4TEZWGX7.js.map +0 -1
  194. package/dist/chunk-5YEC6FDN.js.map +0 -1
  195. package/dist/chunk-74AF6PO2.js.map +0 -1
  196. package/dist/chunk-75N6T3IS.js.map +0 -1
  197. package/dist/chunk-7RT65ZGV.js.map +0 -1
  198. package/dist/chunk-A4MYCEGM.js.map +0 -1
  199. package/dist/chunk-C65SCJD6.js.map +0 -1
  200. package/dist/chunk-CUXQZRDI.js.map +0 -1
  201. package/dist/chunk-DBPLQZJ2.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-J4SAIKKZ.js.map +0 -1
  206. package/dist/chunk-JIXINKUJ.js.map +0 -1
  207. package/dist/chunk-JWYBDNC6.js.map +0 -1
  208. package/dist/chunk-LHZJ2GJU.js.map +0 -1
  209. package/dist/chunk-LWYZCSX4.js.map +0 -1
  210. package/dist/chunk-NPK4ESMA.js.map +0 -1
  211. package/dist/chunk-PD3O6ZH4.js.map +0 -1
  212. package/dist/chunk-PQOIW5CM.js +0 -27
  213. package/dist/chunk-PQOIW5CM.js.map +0 -1
  214. package/dist/chunk-PRDJLQLB.js.map +0 -1
  215. package/dist/chunk-QDJ5PZPP.js.map +0 -1
  216. package/dist/chunk-ROQGBDET.js.map +0 -1
  217. package/dist/chunk-S6HO7HUY.js.map +0 -1
  218. package/dist/chunk-TDPJYCNI.js.map +0 -1
  219. package/dist/chunk-UFC3RGIN.js.map +0 -1
  220. package/dist/chunk-UFYG3HKL.js.map +0 -1
  221. package/dist/chunk-VNH6R5EU.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,4 +1,4 @@
1
- import { useRipple, RippleContainer } from './chunk-4TEZWGX7.js';
1
+ import { useRipple, RippleContainer } from './chunk-64OCJYSH.js';
2
2
  import { colorVars } from './chunk-G6QIIWKU.js';
3
3
  import { cn } from './chunk-RAS6HUEI.js';
4
4
  import { cva } from 'class-variance-authority';
@@ -24,18 +24,17 @@ var toggleItemVariants = cva(
24
24
  }
25
25
  }
26
26
  );
27
- var getToggleClasses = (color, variant, isActive) => {
28
- const baseColor = colorVars[color] || colorVars.default;
27
+ var getToggleClasses = (variant, isActive) => {
29
28
  if (!isActive) {
30
- return cn(baseColor, "text-text-secondary hover:text-slot hover:bg-slot-10");
29
+ return "text-text-secondary hover:text-slot hover:bg-slot-10";
31
30
  }
32
31
  if (variant === "solid") {
33
- return cn(baseColor, "bg-slot text-slot-fg");
32
+ return "bg-slot border-slot text-slot-fg";
34
33
  }
35
34
  if (variant === "soft") {
36
- return cn(baseColor, "bg-slot-20 text-slot");
35
+ return "bg-slot-10 border-slot-30 text-slot";
37
36
  }
38
- return cn(baseColor, "border-slot bg-slot-10 text-slot");
37
+ return "bg-slot-10 border-slot text-slot";
39
38
  };
40
39
  var ToggleItemButton = React.memo(({ children, disabled, className, ...props }) => {
41
40
  const { ripples, onPointerDown, onKeyDown, onAnimationEnd } = useRipple(!disabled);
@@ -94,6 +93,7 @@ var ToggleGroup = React.memo(
94
93
  }
95
94
  return optionValue === value;
96
95
  };
96
+ const baseColor = colorVars[color] || colorVars.default;
97
97
  return /* @__PURE__ */ jsx(
98
98
  "div",
99
99
  {
@@ -103,7 +103,8 @@ var ToggleGroup = React.memo(
103
103
  className: cn(
104
104
  "toggleGroup_root",
105
105
  toggleGroupVariants(),
106
- "border-border bg-background",
106
+ baseColor,
107
+ "border-slot-20 bg-background",
107
108
  classNames?.root,
108
109
  className,
109
110
  fullWidth && "grid w-full"
@@ -119,8 +120,8 @@ var ToggleGroup = React.memo(
119
120
  className: cn(
120
121
  "toggleGroup_item",
121
122
  toggleItemVariants({ size }),
122
- getToggleClasses(color, variant, active),
123
- "border-border flex items-center justify-center",
123
+ getToggleClasses(variant, active),
124
+ "border-slot-20 flex items-center justify-center",
124
125
  isDisabled && "opacity-50 cursor-not-allowed",
125
126
  centered && "text-center",
126
127
  classNames?.item
@@ -146,5 +147,5 @@ ToggleGroup.displayName = "ToggleGroup";
146
147
  var toggle_group_default = ToggleGroup;
147
148
 
148
149
  export { ToggleGroup, toggle_group_default };
149
- //# sourceMappingURL=chunk-XAM5EKOS.js.map
150
- //# sourceMappingURL=chunk-XAM5EKOS.js.map
150
+ //# sourceMappingURL=chunk-7SKAAKBC.js.map
151
+ //# sourceMappingURL=chunk-7SKAAKBC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/toggle-group/index.tsx"],"names":[],"mappings":"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","file":"chunk-7SKAAKBC.js","sourcesContent":["'use client'\n\nimport { cva } from 'class-variance-authority'\nimport React, { useState, useCallback } from 'react'\n\nimport { useRipple, RippleContainer } from '../hooks/useRipple'\nimport { cn } from '../utils'\nimport { colorVars } from '../variants'\nimport type { ToggleGroupProps } from './types'\n\nconst toggleGroupVariants = cva(\n 'inline-flex border rounded-md overflow-hidden',\n)\n\nconst toggleItemVariants = cva(\n 'font-medium transition-colors cursor-pointer border-r last:border-r-0 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n {\n variants: {\n size: {\n xs: 'h-(--toggle-height-xs) px-(--toggle-padding-x-xs) text-xs',\n sm: 'h-(--toggle-height-sm) px-(--toggle-padding-x-sm) text-sm',\n md: 'h-(--toggle-height-md) px-(--toggle-padding-x-md) text-base',\n lg: 'h-(--toggle-height-lg) px-(--toggle-padding-x-lg) text-lg',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n)\n\nconst getToggleClasses = (\n variant: string,\n isActive: boolean,\n) => {\n if (!isActive) {\n return 'text-text-secondary hover:text-slot hover:bg-slot-10'\n }\n\n if (variant === 'solid') {\n return 'bg-slot border-slot text-slot-fg'\n }\n if (variant === 'soft') {\n return 'bg-slot-10 border-slot-30 text-slot'\n }\n // default variant\n return 'bg-slot-10 border-slot text-slot'\n}\n\nconst ToggleItemButton = React.memo<React.ButtonHTMLAttributes<HTMLButtonElement> & { children: React.ReactNode }>(({ children, disabled, className, ...props }) => {\n const { ripples, onPointerDown, onKeyDown, onAnimationEnd } = useRipple(!disabled)\n return (\n <button className={cn(className, 'relative overflow-hidden')} onPointerDown={onPointerDown} onKeyDown={onKeyDown} disabled={disabled} {...props}>\n {children}\n <RippleContainer ripples={ripples} onAnimationEnd={onAnimationEnd} />\n </button>\n )\n})\n\nexport const ToggleGroup = React.memo<ToggleGroupProps>(\n ({\n options,\n value: controlledValue,\n defaultValue,\n multiple = false,\n color = 'primary',\n size = 'md',\n variant = 'default',\n onChange,\n fullWidth = false,\n disabled = false,\n className,\n centered = false,\n classNames,\n ref,\n }) => {\n const [internalValue, setInternalValue] = useState<string | string[]>(\n defaultValue || (multiple ? [] : options?.[0]?.value || ''),\n )\n\n const value =\n controlledValue !== undefined ? controlledValue : internalValue\n\n const handleToggleClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n const optionValue = e.currentTarget.dataset.value\n const optionDisabled = e.currentTarget.dataset.disabled === 'true'\n\n if (!optionValue || disabled || optionDisabled) return\n\n setInternalValue((prevValue) => {\n const currentValues = Array.isArray(prevValue) ? prevValue : []\n let newValue: string | string[]\n\n if (multiple) {\n if (currentValues.includes(optionValue)) {\n newValue = currentValues.filter((v) => v !== optionValue)\n } else {\n newValue = [...currentValues, optionValue]\n }\n } else {\n newValue = optionValue\n }\n\n onChange?.(newValue)\n return controlledValue !== undefined ? prevValue : newValue\n })\n },\n [disabled, multiple, onChange, controlledValue],\n )\n\n const isActive = (optionValue: string) => {\n if (multiple && Array.isArray(value)) {\n return value.includes(optionValue)\n }\n return optionValue === value\n }\n\n const baseColor = colorVars[color as keyof typeof colorVars] || colorVars.default\n\n return (\n <div\n data-slot=\"root\"\n ref={ref}\n role=\"group\"\n className={cn(\n 'toggleGroup_root',\n toggleGroupVariants(),\n baseColor,\n 'border-slot-20 bg-background',\n classNames?.root,\n className,\n fullWidth && 'grid w-full',\n )}\n style={fullWidth ? { gridTemplateColumns: `repeat(${options.length}, 1fr)` } : undefined}\n >\n {options.map((option) => {\n const active = isActive(option.value)\n const isDisabled = disabled || option.disabled\n\n return (\n <ToggleItemButton\n type=\"button\"\n key={option.value}\n className={cn(\n 'toggleGroup_item',\n toggleItemVariants({ size }),\n getToggleClasses(variant, active),\n 'border-slot-20 flex items-center justify-center',\n isDisabled && 'opacity-50 cursor-not-allowed',\n centered && 'text-center',\n classNames?.item,\n )}\n data-value={option.value}\n data-disabled={option.disabled}\n onClick={handleToggleClick}\n disabled={isDisabled}\n aria-pressed={active}\n >\n <div className=\"flex items-center gap-2\">\n {option.icon}\n {option.label}\n </div>\n </ToggleItemButton>\n )\n })}\n </div>\n )\n },\n)\n\nToggleGroup.displayName = 'ToggleGroup'\n\nexport type * from './types'\nexport default ToggleGroup\n"]}
@@ -1,4 +1,4 @@
1
- import { input_default } from './chunk-LHZJ2GJU.js';
1
+ import { input_default } from './chunk-MHRSK2QC.js';
2
2
  import { cn, iconSizes } from './chunk-RAS6HUEI.js';
3
3
  import React from 'react';
4
4
  import { Eye, EyeOff } from 'lucide-react';
@@ -77,5 +77,5 @@ PasswordInput.displayName = "PasswordInput";
77
77
  var input_password_default = PasswordInput;
78
78
 
79
79
  export { PasswordInput, input_password_default };
80
- //# sourceMappingURL=chunk-6RZEJRTC.js.map
81
- //# sourceMappingURL=chunk-6RZEJRTC.js.map
80
+ //# sourceMappingURL=chunk-7ZUIX4NK.js.map
81
+ //# sourceMappingURL=chunk-7ZUIX4NK.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/input-password/index.tsx"],"names":[],"mappings":";;;;;;AAUO,IAAM,gBAAgB,KAAA,CAAM,IAAA;AAAA,EACjC,CAAC,EAAE,gBAAA,GAAmB,IAAA,EAAM,IAAA,GAAO,MAAM,GAAA,EAAK,UAAA,EAAY,GAAG,KAAA,EAAM,KAAM;AACvE,IAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,KAAA,CAAM,SAAS,KAAK,CAAA;AAE5D,IAAA,MAAM,gBAAA,GAAmB,KAAA,CAAM,WAAA,CAAY,MAAM;AAC/C,MAAA,eAAA,CAAgB,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AAAA,IACjC,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,qBAAqB,KAAA,CAAM,OAAA;AAAA,MAC/B,OAAO;AAAA,QACL,IAAA,EAAM,EAAA,CAAG,oBAAA,EAAsB,UAAA,EAAY,IAAI,CAAA;AAAA,QAC/C,OAAA,EAAS,EAAA,CAAG,uBAAA,EAAyB,UAAA,EAAY,OAAO,CAAA;AAAA,QACxD,KAAA,EAAO,EAAA,CAAG,qBAAA,EAAuB,UAAA,EAAY,KAAK,CAAA;AAAA,QAClD,KAAA,EAAO,EAAA,CAAG,qBAAA,EAAuB,UAAA,EAAY,KAAK,CAAA;AAAA,QAClD,MAAA,EAAQ,EAAA,CAAG,sBAAA,EAAwB,UAAA,EAAY,MAAM,CAAA;AAAA,QACrD,KAAA,EAAO,EAAA,CAAG,qBAAA,EAAuB,UAAA,EAAY,KAAK;AAAA,OACpD,CAAA;AAAA,MACA,CAAC,UAAU;AAAA,KACb;AAEA,IAAA,MAAM,oBAAoB,KAAA,CAAM,OAAA;AAAA,MAC9B,MACE,gBAAA,mBACE,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,gBAAA;AAAA,UACT,WAAA,EAAU,cAAA;AAAA,UACV,SAAA,EAAW,EAAA;AAAA,YACT,4BAAA;AAAA,YACA,0DAAA;AAAA,YACA,UAAA,EAAY;AAAA,WACd;AAAA,UACA,YAAA,EAAY,eAAe,eAAA,GAAkB,eAAA;AAAA,UAC7C,cAAA,EAAc,YAAA;AAAA,UAGb,QAAA,EAAA,YAAA,mBACC,GAAA;AAAA,YAAC,GAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAU,YAAA;AAAA,cACV,SAAA,EAAW,EAAA;AAAA,gBACT,0BAAA;AAAA,gBACA,UAAU,IAAI,CAAA;AAAA,gBACd,UAAA,EAAY;AAAA;AACd;AAAA,WACF,mBAEA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAU,YAAA;AAAA,cACV,SAAA,EAAW,EAAA;AAAA,gBACT,0BAAA;AAAA,gBACA,UAAU,IAAI,CAAA;AAAA,gBACd,UAAA,EAAY;AAAA;AACd;AAAA;AACF;AAAA,OAEJ,GACE,MAAA;AAAA,MACN,CAAC,gBAAA,EAAkB,gBAAA,EAAkB,YAAA,EAAc,MAAM,UAAU;AAAA,KACrE;AAEA,IAAA,uBACE,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACE,GAAG,KAAA;AAAA,QACJ,IAAA;AAAA,QACA,GAAA;AAAA,QACA,IAAA,EAAM,eAAe,MAAA,GAAS,UAAA;AAAA,QAC9B,UAAA,EAAY,kBAAA;AAAA,QACZ,SAAA,EAAW;AAAA;AAAA,KACb;AAAA,EAEJ;AACF;AAEA,aAAA,CAAc,WAAA,GAAc,eAAA;AAG5B,IAAO,sBAAA,GAAQ","file":"chunk-6RZEJRTC.js","sourcesContent":["'use client'\n\nimport React from 'react'\n\nimport { Eye, EyeOff } from 'lucide-react'\n\nimport Input from '../input'\nimport { cn, iconSizes } from '../utils'\nimport type { PasswordInputProps } from './types'\n\nexport const PasswordInput = React.memo<PasswordInputProps>(\n ({ visibilityToggle = true, size = 'md', ref, classNames, ...props }) => {\n const [showPassword, setShowPassword] = React.useState(false)\n\n const toggleVisibility = React.useCallback(() => {\n setShowPassword((prev) => !prev)\n }, [])\n\n const memoizedClassNames = React.useMemo(\n () => ({\n root: cn('inputPassword_root', classNames?.root),\n wrapper: cn('inputPassword_wrapper', classNames?.wrapper),\n label: cn('inputPassword_label', classNames?.label),\n input: cn('inputPassword_input', classNames?.input),\n helper: cn('inputPassword_helper', classNames?.helper),\n error: cn('inputPassword_error', classNames?.error),\n }),\n [classNames],\n )\n\n const memoizedRightIcon = React.useMemo(\n () =>\n visibilityToggle ? (\n <button\n type=\"button\"\n onClick={toggleVisibility}\n data-slot=\"toggleButton\"\n className={cn(\n 'inputPassword_toggleButton',\n 'cursor-pointer hover:text-text-primary transition-colors',\n classNames?.toggleButton,\n )}\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n aria-pressed={showPassword}\n // tabIndex={-1}\n >\n {showPassword ? (\n <Eye\n data-slot=\"toggleIcon\"\n className={cn(\n 'inputPassword_toggleIcon',\n iconSizes[size],\n classNames?.toggleIcon,\n )}\n />\n ) : (\n <EyeOff\n data-slot=\"toggleIcon\"\n className={cn(\n 'inputPassword_toggleIcon',\n iconSizes[size],\n classNames?.toggleIcon,\n )}\n />\n )}\n </button>\n ) : undefined,\n [visibilityToggle, toggleVisibility, showPassword, size, classNames],\n )\n\n return (\n <Input\n {...props}\n size={size}\n ref={ref}\n type={showPassword ? 'text' : 'password'}\n classNames={memoizedClassNames}\n rightIcon={memoizedRightIcon}\n />\n )\n },\n)\n\nPasswordInput.displayName = 'PasswordInput'\n\nexport type * from './types'\nexport default PasswordInput\n"]}
1
+ {"version":3,"sources":["../src/input-password/index.tsx"],"names":[],"mappings":";;;;;;AAUO,IAAM,gBAAgB,KAAA,CAAM,IAAA;AAAA,EACjC,CAAC,EAAE,gBAAA,GAAmB,IAAA,EAAM,IAAA,GAAO,MAAM,GAAA,EAAK,UAAA,EAAY,GAAG,KAAA,EAAM,KAAM;AACvE,IAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,KAAA,CAAM,SAAS,KAAK,CAAA;AAE5D,IAAA,MAAM,gBAAA,GAAmB,KAAA,CAAM,WAAA,CAAY,MAAM;AAC/C,MAAA,eAAA,CAAgB,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AAAA,IACjC,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,qBAAqB,KAAA,CAAM,OAAA;AAAA,MAC/B,OAAO;AAAA,QACL,IAAA,EAAM,EAAA,CAAG,oBAAA,EAAsB,UAAA,EAAY,IAAI,CAAA;AAAA,QAC/C,OAAA,EAAS,EAAA,CAAG,uBAAA,EAAyB,UAAA,EAAY,OAAO,CAAA;AAAA,QACxD,KAAA,EAAO,EAAA,CAAG,qBAAA,EAAuB,UAAA,EAAY,KAAK,CAAA;AAAA,QAClD,KAAA,EAAO,EAAA,CAAG,qBAAA,EAAuB,UAAA,EAAY,KAAK,CAAA;AAAA,QAClD,MAAA,EAAQ,EAAA,CAAG,sBAAA,EAAwB,UAAA,EAAY,MAAM,CAAA;AAAA,QACrD,KAAA,EAAO,EAAA,CAAG,qBAAA,EAAuB,UAAA,EAAY,KAAK;AAAA,OACpD,CAAA;AAAA,MACA,CAAC,UAAU;AAAA,KACb;AAEA,IAAA,MAAM,oBAAoB,KAAA,CAAM,OAAA;AAAA,MAC9B,MACE,gBAAA,mBACE,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,gBAAA;AAAA,UACT,WAAA,EAAU,cAAA;AAAA,UACV,SAAA,EAAW,EAAA;AAAA,YACT,4BAAA;AAAA,YACA,0DAAA;AAAA,YACA,UAAA,EAAY;AAAA,WACd;AAAA,UACA,YAAA,EAAY,eAAe,eAAA,GAAkB,eAAA;AAAA,UAC7C,cAAA,EAAc,YAAA;AAAA,UAGb,QAAA,EAAA,YAAA,mBACC,GAAA;AAAA,YAAC,GAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAU,YAAA;AAAA,cACV,SAAA,EAAW,EAAA;AAAA,gBACT,0BAAA;AAAA,gBACA,UAAU,IAAI,CAAA;AAAA,gBACd,UAAA,EAAY;AAAA;AACd;AAAA,WACF,mBAEA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAU,YAAA;AAAA,cACV,SAAA,EAAW,EAAA;AAAA,gBACT,0BAAA;AAAA,gBACA,UAAU,IAAI,CAAA;AAAA,gBACd,UAAA,EAAY;AAAA;AACd;AAAA;AACF;AAAA,OAEJ,GACE,MAAA;AAAA,MACN,CAAC,gBAAA,EAAkB,gBAAA,EAAkB,YAAA,EAAc,MAAM,UAAU;AAAA,KACrE;AAEA,IAAA,uBACE,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACE,GAAG,KAAA;AAAA,QACJ,IAAA;AAAA,QACA,GAAA;AAAA,QACA,IAAA,EAAM,eAAe,MAAA,GAAS,UAAA;AAAA,QAC9B,UAAA,EAAY,kBAAA;AAAA,QACZ,SAAA,EAAW;AAAA;AAAA,KACb;AAAA,EAEJ;AACF;AAEA,aAAA,CAAc,WAAA,GAAc,eAAA;AAG5B,IAAO,sBAAA,GAAQ","file":"chunk-7ZUIX4NK.js","sourcesContent":["'use client'\n\nimport React from 'react'\n\nimport { Eye, EyeOff } from 'lucide-react'\n\nimport Input from '../input'\nimport { cn, iconSizes } from '../utils'\nimport type { PasswordInputProps } from './types'\n\nexport const PasswordInput = React.memo<PasswordInputProps>(\n ({ visibilityToggle = true, size = 'md', ref, classNames, ...props }) => {\n const [showPassword, setShowPassword] = React.useState(false)\n\n const toggleVisibility = React.useCallback(() => {\n setShowPassword((prev) => !prev)\n }, [])\n\n const memoizedClassNames = React.useMemo(\n () => ({\n root: cn('inputPassword_root', classNames?.root),\n wrapper: cn('inputPassword_wrapper', classNames?.wrapper),\n label: cn('inputPassword_label', classNames?.label),\n input: cn('inputPassword_input', classNames?.input),\n helper: cn('inputPassword_helper', classNames?.helper),\n error: cn('inputPassword_error', classNames?.error),\n }),\n [classNames],\n )\n\n const memoizedRightIcon = React.useMemo(\n () =>\n visibilityToggle ? (\n <button\n type=\"button\"\n onClick={toggleVisibility}\n data-slot=\"toggleButton\"\n className={cn(\n 'inputPassword_toggleButton',\n 'cursor-pointer hover:text-text-primary transition-colors',\n classNames?.toggleButton,\n )}\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n aria-pressed={showPassword}\n // tabIndex={-1}\n >\n {showPassword ? (\n <Eye\n data-slot=\"toggleIcon\"\n className={cn(\n 'inputPassword_toggleIcon',\n iconSizes[size],\n classNames?.toggleIcon,\n )}\n />\n ) : (\n <EyeOff\n data-slot=\"toggleIcon\"\n className={cn(\n 'inputPassword_toggleIcon',\n iconSizes[size],\n classNames?.toggleIcon,\n )}\n />\n )}\n </button>\n ) : undefined,\n [visibilityToggle, toggleVisibility, showPassword, size, classNames],\n )\n\n return (\n <Input\n {...props}\n size={size}\n ref={ref}\n type={showPassword ? 'text' : 'password'}\n classNames={memoizedClassNames}\n rightIcon={memoizedRightIcon}\n />\n )\n },\n)\n\nPasswordInput.displayName = 'PasswordInput'\n\nexport type * from './types'\nexport default PasswordInput\n"]}
@@ -1,3 +1,4 @@
1
+ import { useControllable } from './chunk-CB7YOZWV.js';
1
2
  import { colorVars } from './chunk-G6QIIWKU.js';
2
3
  import { cn, statusMessageVariants } from './chunk-RAS6HUEI.js';
3
4
  import { cva } from 'class-variance-authority';
@@ -64,8 +65,7 @@ var TagsInput = React.memo(
64
65
  className,
65
66
  classNames
66
67
  }) => {
67
- const [internalValue, setInternalValue] = useState(defaultValue);
68
- const tags = value !== void 0 ? value : internalValue;
68
+ const [tags, setTags] = useControllable({ value, defaultValue, onChange });
69
69
  const [inputValue, setInputValue] = useState("");
70
70
  const [showSuggestions, setShowSuggestions] = useState(false);
71
71
  const [highlightedIdx, setHighlightedIdx] = useState(-1);
@@ -74,13 +74,6 @@ var TagsInput = React.memo(
74
74
  () => Array.isArray(separator) ? separator : [separator],
75
75
  [separator]
76
76
  );
77
- const update = useCallback(
78
- (next) => {
79
- if (value === void 0) setInternalValue(next);
80
- onChange?.(next);
81
- },
82
- [value, onChange]
83
- );
84
77
  const addTag = useCallback(
85
78
  (raw) => {
86
79
  const tag = raw.trim();
@@ -88,20 +81,20 @@ var TagsInput = React.memo(
88
81
  if (maxTags && tags.length >= maxTags) return false;
89
82
  if (!allowDuplicates && tags.includes(tag)) return false;
90
83
  if (validate && !validate(tag)) return false;
91
- update([...tags, tag]);
84
+ setTags([...tags || [], tag]);
92
85
  onTagAdd?.(tag);
93
86
  return true;
94
87
  },
95
- [tags, maxTags, allowDuplicates, validate, update, onTagAdd]
88
+ [tags, maxTags, allowDuplicates, validate, setTags, onTagAdd]
96
89
  );
97
90
  const removeTag = useCallback(
98
91
  (idx) => {
99
92
  const tag = tags[idx];
100
93
  const next = tags.filter((_, i) => i !== idx);
101
- update(next);
94
+ setTags(next);
102
95
  if (tag) onTagRemove?.(tag);
103
96
  },
104
- [tags, update, onTagRemove]
97
+ [tags, setTags, onTagRemove]
105
98
  );
106
99
  const handleKeyDown = (e) => {
107
100
  if (e.key === "Enter" || separators.includes(e.key)) {
@@ -237,7 +230,7 @@ var TagsInput = React.memo(
237
230
  type: "button",
238
231
  onClick: (e) => {
239
232
  e.stopPropagation();
240
- update([]);
233
+ setTags([]);
241
234
  },
242
235
  className: "shrink-0 text-text-secondary hover:text-text-primary",
243
236
  "aria-label": "Clear all tags",
@@ -277,5 +270,5 @@ TagsInput.displayName = "TagsInput";
277
270
  var tags_input_default = TagsInput;
278
271
 
279
272
  export { tags_input_default };
280
- //# sourceMappingURL=chunk-NPK4ESMA.js.map
281
- //# sourceMappingURL=chunk-NPK4ESMA.js.map
273
+ //# sourceMappingURL=chunk-B75ICJCX.js.map
274
+ //# sourceMappingURL=chunk-B75ICJCX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tags-input/index.tsx"],"names":[],"mappings":"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","file":"chunk-B75ICJCX.js","sourcesContent":["'use client'\n\nimport { cva } from 'class-variance-authority'\nimport React, { useState, useRef, useCallback, useMemo } from 'react'\n\nimport { X } from 'lucide-react'\nimport { useControllable } from '../hooks/useControllable'\nimport { cn, statusMessageVariants } from '../utils'\nimport { colorVars } from '../variants'\nimport type { TagsInputProps } from './types'\n\nconst wrapperVariants = cva(\n 'flex flex-wrap items-center gap-1 rounded-md border bg-background text-text-primary transition-colors cursor-text',\n {\n variants: {\n size: {\n xs: 'min-h-(--input-height-xs) px-(--input-padding-x-xs) py-0.5 text-xs',\n sm: 'min-h-(--input-height-sm) px-(--input-padding-x-sm) py-1 text-sm',\n md: 'min-h-(--input-height-md) px-(--input-padding-x-md) py-1 text-sm',\n lg: 'min-h-(--input-height-lg) px-(--input-padding-x-lg) py-1.5 text-base',\n },\n status: {\n default: 'border-border focus-within:border-primary',\n error: 'border-error focus-within:border-error',\n },\n },\n defaultVariants: { size: 'md', status: 'default' },\n },\n)\n\nconst tagVariants = cva(\n 'inline-flex items-center gap-0.5 rounded-md font-medium transition-colors bg-slot-10 text-slot',\n {\n variants: {\n size: {\n xs: 'h-4 px-1 text-[10px]',\n sm: 'h-5 px-1.5 text-xs',\n md: 'h-6 px-2 text-xs',\n lg: 'h-7 px-2.5 text-sm',\n },\n },\n defaultVariants: { size: 'md' },\n },\n)\n\nconst TagsInput = React.memo<TagsInputProps>(\n ({\n value,\n defaultValue = [],\n onChange,\n suggestions,\n placeholder = 'Add tag...',\n maxTags,\n allowDuplicates = false,\n separator = ',',\n addOnBlur = true,\n addOnPaste = true,\n validate,\n onTagAdd,\n onTagRemove,\n size = 'md',\n color = 'primary',\n disabled = false,\n readOnly = false,\n label,\n error,\n helperText,\n clearable = false,\n fullWidth = true,\n className,\n classNames,\n }) => {\n const [tags, setTags] = useControllable({ value, defaultValue, onChange })\n const [inputValue, setInputValue] = useState('')\n const [showSuggestions, setShowSuggestions] = useState(false)\n const [highlightedIdx, setHighlightedIdx] = useState(-1)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const separators = useMemo(\n () => (Array.isArray(separator) ? separator : [separator]),\n [separator],\n )\n\n const addTag = useCallback(\n (raw: string) => {\n const tag = raw.trim()\n if (!tag) return false\n if (maxTags && tags.length >= maxTags) return false\n if (!allowDuplicates && tags.includes(tag)) return false\n if (validate && !validate(tag)) return false\n setTags([...(tags || []), tag])\n onTagAdd?.(tag)\n return true\n },\n [tags, maxTags, allowDuplicates, validate, setTags, onTagAdd],\n )\n\n const removeTag = useCallback(\n (idx: number) => {\n const tag = tags[idx]\n const next = tags.filter((_, i) => i !== idx)\n setTags(next)\n if (tag) onTagRemove?.(tag)\n },\n [tags, setTags, onTagRemove],\n )\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' || separators.includes(e.key)) {\n e.preventDefault()\n if (showSuggestions && highlightedIdx >= 0 && filteredSuggestions[highlightedIdx]) {\n addTag(filteredSuggestions[highlightedIdx])\n setInputValue('')\n setShowSuggestions(false)\n setHighlightedIdx(-1)\n } else if (addTag(inputValue)) {\n setInputValue('')\n setShowSuggestions(false)\n }\n } else if (e.key === 'Backspace' && !inputValue && tags.length > 0) {\n removeTag(tags.length - 1)\n } else if (e.key === 'Escape') {\n setShowSuggestions(false)\n } else if (e.key === 'ArrowDown' && showSuggestions) {\n e.preventDefault()\n setHighlightedIdx((p) => Math.min(p + 1, filteredSuggestions.length - 1))\n } else if (e.key === 'ArrowUp' && showSuggestions) {\n e.preventDefault()\n setHighlightedIdx((p) => Math.max(p - 1, 0))\n }\n }\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n if (!addOnPaste) return\n e.preventDefault()\n const text = e.clipboardData.getData('text')\n const parts = text.split(new RegExp(`[${separators.map((s) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('')}]`))\n let added = false\n for (const part of parts) {\n if (addTag(part)) added = true\n }\n if (added) setInputValue('')\n }\n\n const handleBlur = () => {\n setShowSuggestions(false)\n if (addOnBlur && inputValue.trim()) {\n if (addTag(inputValue)) setInputValue('')\n }\n }\n\n const filteredSuggestions = useMemo(() => {\n if (!suggestions || !inputValue.trim()) return []\n const q = inputValue.toLowerCase()\n return suggestions.filter(\n (s) => s.toLowerCase().includes(q) && (allowDuplicates || !tags.includes(s)),\n )\n }, [suggestions, inputValue, tags, allowDuplicates])\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value)\n setShowSuggestions(!!e.target.value.trim() && !!suggestions?.length)\n setHighlightedIdx(-1)\n }\n\n const atMax = !!maxTags && tags.length >= maxTags\n\n return (\n <div\n data-slot=\"root\"\n className={cn(\n 'tagsInput_root',\n 'flex flex-col gap-1.5',\n fullWidth ? 'w-full' : 'inline-flex',\n colorVars[color],\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 <div\n data-slot=\"wrapper\"\n className={cn(\n 'tagsInput_wrapper',\n wrapperVariants({ size, status: error ? 'error' : 'default' }),\n disabled && 'opacity-50 cursor-not-allowed',\n classNames?.wrapper,\n )}\n onClick={() => !disabled && !readOnly && inputRef.current?.focus()}\n >\n {tags.map((tag, idx) => (\n <span\n key={`${tag}-${idx}`}\n data-slot=\"tag\"\n className={cn('tagsInput_tag', tagVariants({ size }), classNames?.tag)}\n >\n <span className={cn('tagsInput_tagLabel truncate max-w-[150px]', classNames?.tagLabel)}>\n {tag}\n </span>\n {!readOnly && !disabled && (\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); removeTag(idx) }}\n className={cn('tagsInput_tagClose shrink-0 hover:text-slot-80 cursor-pointer', classNames?.tagClose)}\n aria-label={`Remove ${tag}`}\n tabIndex={-1}\n >\n <X className=\"w-3 h-3\" />\n </button>\n )}\n </span>\n ))}\n\n {!atMax && !readOnly && !disabled && (\n <input\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n onBlur={handleBlur}\n onFocus={() => inputValue.trim() && suggestions?.length && setShowSuggestions(true)}\n placeholder={tags.length === 0 ? placeholder : ''}\n disabled={disabled}\n readOnly={readOnly}\n data-slot=\"input\"\n className={cn(\n 'tagsInput_input',\n 'flex-1 min-w-[60px] bg-transparent outline-none placeholder:text-text-secondary/50',\n classNames?.input,\n )}\n />\n )}\n\n {clearable && tags.length > 0 && !disabled && !readOnly && (\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); setTags([]) }}\n className=\"shrink-0 text-text-secondary hover:text-text-primary\"\n aria-label=\"Clear all tags\"\n tabIndex={-1}\n >\n <X className=\"w-3.5 h-3.5\" />\n </button>\n )}\n </div>\n\n {showSuggestions && filteredSuggestions.length > 0 && (\n <div className=\"absolute z-[var(--z-popover)] mt-1 w-full rounded-md border border-border bg-background shadow-md max-h-[200px] overflow-auto\">\n {filteredSuggestions.map((s, idx) => (\n <div\n key={s}\n onMouseDown={(e) => {\n e.preventDefault()\n addTag(s)\n setInputValue('')\n setShowSuggestions(false)\n }}\n onMouseEnter={() => setHighlightedIdx(idx)}\n className={cn(\n '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 )}\n >\n {s}\n </div>\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\nTagsInput.displayName = 'TagsInput'\n\nexport type * from './types'\nexport default TagsInput\n"]}
@@ -0,0 +1,50 @@
1
+ import { useState, useRef, useEffect, useCallback } from 'react';
2
+
3
+ // src/hooks/useControllable.ts
4
+ function useControllable({
5
+ value,
6
+ defaultValue,
7
+ onChange
8
+ }) {
9
+ const isControlled = value !== void 0;
10
+ const [internalValue, setInternalValue] = useState(defaultValue);
11
+ const currentValue = isControlled ? value : internalValue;
12
+ const wasControlledRef = useRef(isControlled);
13
+ useEffect(() => {
14
+ if (wasControlledRef.current !== isControlled) {
15
+ if (import.meta.env?.DEV) {
16
+ console.warn(
17
+ `[useControllable] Component switched from ${wasControlledRef.current ? "controlled" : "uncontrolled"} to ${isControlled ? "controlled" : "uncontrolled"}. This is likely a bug. Decide between using a controlled or uncontrolled value for the lifetime of the component.`
18
+ );
19
+ }
20
+ }
21
+ wasControlledRef.current = isControlled;
22
+ });
23
+ const isControlledRef = useRef(isControlled);
24
+ const valueRef = useRef(value);
25
+ const onChangeRef = useRef(onChange);
26
+ isControlledRef.current = isControlled;
27
+ valueRef.current = value;
28
+ onChangeRef.current = onChange;
29
+ const setValue = useCallback(
30
+ (next) => {
31
+ if (isControlledRef.current) {
32
+ const nextValue = typeof next === "function" ? next(valueRef.current) : next;
33
+ onChangeRef.current?.(nextValue);
34
+ } else {
35
+ setInternalValue((prev) => {
36
+ const nextValue = typeof next === "function" ? next(prev) : next;
37
+ onChangeRef.current?.(nextValue);
38
+ return nextValue;
39
+ });
40
+ }
41
+ },
42
+ []
43
+ // stable forever — no deps needed thanks to refs
44
+ );
45
+ return [currentValue, setValue];
46
+ }
47
+
48
+ export { useControllable };
49
+ //# sourceMappingURL=chunk-CB7YOZWV.js.map
50
+ //# sourceMappingURL=chunk-CB7YOZWV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useControllable.ts"],"names":[],"mappings":";;;AAkBO,SAAS,eAAA,CAAmB;AAAA,EACjC,KAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,eAAe,KAAA,KAAU,MAAA;AAC/B,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,YAAY,CAAA;AAE/D,EAAA,MAAM,YAAA,GAAe,eAAe,KAAA,GAAQ,aAAA;AAI5C,EAAA,MAAM,gBAAA,GAAmB,OAAO,YAAY,CAAA;AAC5C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,gBAAA,CAAiB,YAAY,YAAA,EAAc;AAE7C,MAAA,IAAI,MAAA,CAAA,IAAA,CAAY,KAAK,GAAA,EAAK;AACxB,QAAA,OAAA,CAAQ,IAAA;AAAA,UACN,CAAA,0CAAA,EAA6C,iBAAiB,OAAA,GAAU,YAAA,GAAe,cAAc,CAAA,IAAA,EAAO,YAAA,GAAe,eAAe,cAAc,CAAA,kHAAA;AAAA,SAC1J;AAAA,MACF;AAAA,IACF;AACA,IAAA,gBAAA,CAAiB,OAAA,GAAU,YAAA;AAAA,EAC7B,CAAC,CAAA;AAGD,EAAA,MAAM,eAAA,GAAkB,OAAO,YAAY,CAAA;AAC3C,EAAA,MAAM,QAAA,GAAW,OAAO,KAAK,CAAA;AAC7B,EAAA,MAAM,WAAA,GAAc,OAAO,QAAQ,CAAA;AAEnC,EAAA,eAAA,CAAgB,OAAA,GAAU,YAAA;AAC1B,EAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AACnB,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAEtB,EAAA,MAAM,QAAA,GAAW,WAAA;AAAA,IACf,CAAC,IAAA,KAA2C;AAC1C,MAAA,IAAI,gBAAgB,OAAA,EAAS;AAE3B,QAAA,MAAM,YAAY,OAAO,IAAA,KAAS,aAC7B,IAAA,CAAoC,QAAA,CAAS,OAAO,CAAA,GACrD,IAAA;AACJ,QAAA,WAAA,CAAY,UAAU,SAAS,CAAA;AAAA,MACjC,CAAA,MAAO;AAEL,QAAA,gBAAA,CAAiB,CAAC,IAAA,KAAS;AACzB,UAAA,MAAM,YAAY,OAAO,IAAA,KAAS,UAAA,GAC7B,IAAA,CAAoC,IAAI,CAAA,GACzC,IAAA;AACJ,UAAA,WAAA,CAAY,UAAU,SAAS,CAAA;AAC/B,UAAA,OAAO,SAAA;AAAA,QACT,CAAC,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAAA,IACA;AAAC;AAAA,GACH;AAEA,EAAA,OAAO,CAAC,cAAc,QAAQ,CAAA;AAChC","file":"chunk-CB7YOZWV.js","sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react'\n\ntype SetValue<T> = (next: T | ((prev: T | undefined) => T)) => void\n\n// Overload: when defaultValue is provided, return type is T (not T | undefined)\nexport function useControllable<T>(opts: {\n value?: T\n defaultValue: T\n onChange?: (value: T) => void\n}): readonly [T, SetValue<T>]\n\n// Overload: when defaultValue may be undefined, return type is T | undefined\nexport function useControllable<T>(opts: {\n value?: T\n defaultValue?: T\n onChange?: (value: T) => void\n}): readonly [T | undefined, SetValue<T>]\n\nexport function useControllable<T>({\n value,\n defaultValue,\n onChange,\n}: {\n value?: T\n defaultValue?: T\n onChange?: (value: T) => void\n}) {\n const isControlled = value !== undefined\n const [internalValue, setInternalValue] = useState(defaultValue)\n\n const currentValue = isControlled ? value : internalValue\n\n // Warn if component switches between controlled and uncontrolled\n // Always call hooks (Rules of Hooks), but only log in dev\n const wasControlledRef = useRef(isControlled)\n useEffect(() => {\n if (wasControlledRef.current !== isControlled) {\n // Only warn in dev — Vite/tsup strip this via dead code elimination\n if (import.meta.env?.DEV) {\n console.warn(\n `[useControllable] Component switched from ${wasControlledRef.current ? 'controlled' : 'uncontrolled'} to ${isControlled ? 'controlled' : 'uncontrolled'}. This is likely a bug. Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n )\n }\n }\n wasControlledRef.current = isControlled\n })\n\n // Refs to avoid stale closures in setValue\n const isControlledRef = useRef(isControlled)\n const valueRef = useRef(value)\n const onChangeRef = useRef(onChange)\n\n isControlledRef.current = isControlled\n valueRef.current = value\n onChangeRef.current = onChange\n\n const setValue = useCallback(\n (next: T | ((prev: T | undefined) => T)) => {\n if (isControlledRef.current) {\n // Controlled: resolve the next value using the latest prop value\n const nextValue = typeof next === 'function'\n ? (next as (prev: T | undefined) => T)(valueRef.current)\n : next\n onChangeRef.current?.(nextValue)\n } else {\n // Uncontrolled: use functional setState to get the true latest value\n setInternalValue((prev) => {\n const nextValue = typeof next === 'function'\n ? (next as (prev: T | undefined) => T)(prev)\n : next\n onChangeRef.current?.(nextValue)\n return nextValue\n })\n }\n },\n [], // stable forever — no deps needed thanks to refs\n )\n\n return [currentValue, setValue] as const\n}\n"]}
@@ -5,7 +5,7 @@ import React, { useId } from 'react';
5
5
  import { jsx, jsxs } from 'react/jsx-runtime';
6
6
 
7
7
  var radioVariants = cva(
8
- "appearance-none rounded-full border-border border bg-background cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed outline-none transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-primary",
8
+ "appearance-none rounded-full border cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed outline-none transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background",
9
9
  {
10
10
  variants: {
11
11
  color: colorVars,
@@ -50,7 +50,7 @@ var Radio = React.memo(
50
50
  className: cn(
51
51
  "radio_radio",
52
52
  radioVariants({ color, size, error: !!error }),
53
- "checked:border-slot checked:shadow-[inset_0_0_0_2px_var(--color-background),inset_0_0_0_13px_var(--_c)]",
53
+ "border-slot-30 checked:border-slot checked:shadow-[inset_0_0_0_2px_var(--color-background),inset_0_0_0_13px_var(--_c)]",
54
54
  "focus-visible:ring-slot",
55
55
  className,
56
56
  classNames?.radio
@@ -108,5 +108,5 @@ Radio.displayName = "Radio";
108
108
  var radio_default = Radio;
109
109
 
110
110
  export { radio_default };
111
- //# sourceMappingURL=chunk-UFC3RGIN.js.map
112
- //# sourceMappingURL=chunk-UFC3RGIN.js.map
111
+ //# sourceMappingURL=chunk-DXAOZB6J.js.map
112
+ //# sourceMappingURL=chunk-DXAOZB6J.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/radio/index.tsx"],"names":[],"mappings":";;;;;;AASA,IAAM,aAAA,GAAgB,GAAA;AAAA,EACpB,yNAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,KAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,+CAAA;AAAA,QACJ,EAAA,EAAI,+CAAA;AAAA,QACJ,EAAA,EAAI,+CAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA,MACA,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,mCAAA;AAAA,QACN,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,KAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AAEA,IAAM,QAAQ,KAAA,CAAM,IAAA;AAAA,EAClB,CAAC;AAAA,IACC,KAAA,GAAQ,SAAA;AAAA,IACR,IAAA,GAAO,IAAA;AAAA,IACP,KAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAG;AAAA,GACL,KAAM;AACJ,IAAA,MAAM,WAAW,KAAA,EAAM;AACvB,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,EAAA,IAAM,CAAA,MAAA,EAAS,QAAQ,CAAA,CAAA;AAC7C,IAAA,MAAM,QAAA,GAAW,gBAAgB,QAAQ,CAAA,CAAA;AACzC,IAAA,MAAM,aAAA,GAAgB,CAAC,EAAE,UAAA,IAAc,KAAA,CAAA;AAEvC,IAAA,MAAM,YAAA,mBACJ,GAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,OAAA;AAAA,QACL,SAAA,EAAW,EAAA;AAAA,UACT,aAAA;AAAA,UACA,aAAA,CAAc,EAAE,KAAA,EAAO,IAAA,EAAM,OAAO,CAAC,CAAC,OAAO,CAAA;AAAA,UAC7C,wHAAA;AAAA,UACA,yBAAA;AAAA,UACA,SAAA;AAAA,UACA,UAAA,EAAY;AAAA,SACd;AAAA,QACA,cAAA,EAAc,CAAC,CAAC,KAAA,IAAS,MAAA;AAAA,QACzB,kBAAA,EAAkB,gBAAgB,QAAA,GAAW,MAAA;AAAA,QAC5C,GAAG,KAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AAAA,KACN;AAGF,IAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,MAAA,EAAO,SAAA,EAAW,GAAG,YAAA,EAAc,QAAA,EAAU,UAAA,EAAY,IAAI,CAAA,EAC1E,QAAA,EAAA;AAAA,sBAAA,IAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,OAAA;AAAA,UACT,SAAA,EAAW,EAAA;AAAA,YACT,yBAAA;AAAA,YACA,CAAC,MAAM,QAAA,IAAY;AAAA,WACrB;AAAA,UAEC,QAAA,EAAA;AAAA,YAAA,YAAA;AAAA,YACA,KAAA,oBACC,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,aAAA;AAAA,kBACA,uCAAA;AAAA,kBACA,KAAA,IAAS,YAAA;AAAA,kBACT,MAAM,QAAA,IAAY,YAAA;AAAA,kBAClB,UAAA,EAAY;AAAA,iBACd;AAAA,gBAEC,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,OAEJ;AAAA,MAAA,CACE,cAAc,KAAA,qBACd,GAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAI,QAAA;AAAA,UACJ,SAAA,EAAW,EAAA;AAAA,YACT,mBAAA;AAAA,YACA,mBAAA;AAAA,YACA,QAAQ,YAAA,GAAe,qBAAA;AAAA,YACvB,UAAA,EAAY;AAAA,WACd;AAAA,UAEC,QAAA,EAAA,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ;AAAA;AAAA;AACvC,KAAA,EAEJ,CAAA;AAAA,EAEJ;AACF,CAAA;AAEA,KAAA,CAAM,WAAA,GAAc,OAAA;AAGpB,IAAO,aAAA,GAAQ","file":"chunk-DXAOZB6J.js","sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport React, { useId } from \"react\";\n\nimport { cn } from \"../utils\";\nimport { colorVars } from \"../variants\";\nimport type { RadioProps } from \"./types\";\n\nconst radioVariants = cva(\n \"appearance-none rounded-full border cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed outline-none transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n {\n variants: {\n color: colorVars,\n size: {\n xs: \"w-(--checkbox-size-xs) h-(--checkbox-size-xs)\",\n sm: \"w-(--checkbox-size-sm) h-(--checkbox-size-sm)\",\n md: \"w-(--checkbox-size-md) h-(--checkbox-size-md)\",\n lg: \"w-(--checkbox-size-lg) h-(--checkbox-size-lg)\",\n },\n error: {\n true: \"border-error checked:border-error\",\n false: \"\",\n },\n },\n defaultVariants: {\n color: \"primary\",\n size: \"md\",\n },\n },\n);\n\nconst Radio = React.memo<RadioProps>(\n ({\n color = \"primary\",\n size = \"md\",\n label,\n helperText,\n error,\n className,\n ref,\n classNames,\n ...props\n }) => {\n const uniqueId = useId();\n const radioId = props.id || `radio-${uniqueId}`;\n const helperId = `radio-helper-${uniqueId}`;\n const hasHelperText = !!(helperText || error);\n\n const radioElement = (\n <input\n ref={ref}\n type=\"radio\"\n className={cn(\n \"radio_radio\",\n radioVariants({ color, size, error: !!error }),\n \"border-slot-30 checked:border-slot checked:shadow-[inset_0_0_0_2px_var(--color-background),inset_0_0_0_13px_var(--_c)]\",\n \"focus-visible:ring-slot\",\n className,\n classNames?.radio,\n )}\n aria-invalid={!!error || undefined}\n aria-describedby={hasHelperText ? helperId : undefined}\n {...props}\n id={radioId}\n />\n );\n\n return (\n <div data-slot=\"root\" className={cn(\"radio_root\", \"w-full\", classNames?.root)}>\n <label\n htmlFor={radioId}\n className={cn(\n \"flex items-center gap-2\",\n !props.disabled && \"cursor-pointer\",\n )}\n >\n {radioElement}\n {label && (\n <span\n className={cn(\n \"radio_label\",\n \"text-sm text-text-primary select-none\",\n error && \"text-error\",\n props.disabled && \"opacity-50\",\n classNames?.label,\n )}\n >\n {label}\n </span>\n )}\n </label>\n {(helperText || error) && (\n <p\n id={helperId}\n className={cn(\n \"radio_description\",\n \"mt-1 ml-0 text-xs\",\n error ? \"text-error\" : \"text-text-secondary\",\n classNames?.description,\n )}\n >\n {typeof error === \"string\" ? error : helperText}\n </p>\n )}\n </div>\n );\n },\n);\n\nRadio.displayName = \"Radio\";\n\nexport type * from \"./types\";\nexport default Radio;\n"]}
@@ -4,10 +4,10 @@ import React from 'react';
4
4
  import { MoreVertical } from 'lucide-react';
5
5
  import { jsx } from 'react/jsx-runtime';
6
6
 
7
- function ResizablePanelGroup({
7
+ var ResizablePanelGroup = React.memo(({
8
8
  className,
9
9
  ...props
10
- }) {
10
+ }) => {
11
11
  return /* @__PURE__ */ jsx(
12
12
  Group,
13
13
  {
@@ -20,8 +20,8 @@ function ResizablePanelGroup({
20
20
  ...props
21
21
  }
22
22
  );
23
- }
24
- function ResizablePanel({ className, ...props }) {
23
+ });
24
+ var ResizablePanel = React.memo(({ className, ...props }) => {
25
25
  return /* @__PURE__ */ jsx(
26
26
  Panel,
27
27
  {
@@ -30,12 +30,12 @@ function ResizablePanel({ className, ...props }) {
30
30
  ...props
31
31
  }
32
32
  );
33
- }
34
- function ResizableHandle({
33
+ });
34
+ var ResizableHandle = React.memo(({
35
35
  withHandle = false,
36
36
  className,
37
37
  ...props
38
- }) {
38
+ }) => {
39
39
  const elRef = React.useRef(null);
40
40
  const [isVertical, setIsVertical] = React.useState(false);
41
41
  React.useEffect(() => {
@@ -70,8 +70,11 @@ function ResizableHandle({
70
70
  ) }) })
71
71
  }
72
72
  );
73
- }
73
+ });
74
+ ResizablePanelGroup.displayName = "ResizablePanelGroup";
75
+ ResizablePanel.displayName = "ResizablePanel";
76
+ ResizableHandle.displayName = "ResizableHandle";
74
77
 
75
78
  export { ResizableHandle, ResizablePanel, ResizablePanelGroup };
76
- //# sourceMappingURL=chunk-75N6T3IS.js.map
77
- //# sourceMappingURL=chunk-75N6T3IS.js.map
79
+ //# sourceMappingURL=chunk-ECBTSKES.js.map
80
+ //# sourceMappingURL=chunk-ECBTSKES.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resizable/index.tsx"],"names":[],"mappings":";;;;;;AAiBA,IAAM,mBAAA,GAAsB,KAAA,CAAM,IAAA,CAAK,CAAC;AAAA,EACtC,SAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAgC;AAC9B,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,iBAAA;AAAA,QACA,oBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ,CAAC;AAED,IAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAA2B;AAClF,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,SAAS,CAAA;AAAA,MACzC,GAAG;AAAA;AAAA,GACN;AAEJ,CAAC;AAED,IAAM,eAAA,GAAkB,KAAA,CAAM,IAAA,CAAK,CAAC;AAAA,EAClC,UAAA,GAAa,KAAA;AAAA,EACb,SAAA;AAAA,EACA,GAAG;AACL,CAAA,KAA4B;AAC1B,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAuB,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,KAAA,CAAM,SAAS,KAAK,CAAA;AAExD,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,MAAM,KAAK,KAAA,CAAM,OAAA;AACjB,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,MAAM,SAAS,EAAA,CAAG,aAAA;AAClB,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,MAAM,GAAA,GAAM,gBAAA,CAAiB,MAAM,CAAA,CAAE,aAAA;AACrC,IAAA,aAAA,CAAc,QAAQ,QAAQ,CAAA;AAAA,EAChC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,UAAA,EAAY,KAAA;AAAA,MACZ,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,kBAAA;AAAA,QACA,iDAAA;AAAA,QACA,WAAA;AAAA,QACA,4BAAA;AAAA,QACA,aAAa,MAAA,GAAS,MAAA;AAAA,QACtB;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,UAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA;AAAA,QACd,qFAAA;AAAA,QACA,sDAAA;AAAA,QACA,aAAa,SAAA,GAAY;AAAA,OAC3B,EACE,QAAA,kBAAA,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAW,EAAA;AAAA,QACvB,iCAAA;AAAA,QACA,UAAA,IAAc;AAAA,SACb,CAAA,EACL;AAAA;AAAA,GAEJ;AAEJ,CAAC;AAED,mBAAA,CAAoB,WAAA,GAAc,qBAAA;AAClC,cAAA,CAAe,WAAA,GAAc,gBAAA;AAC7B,eAAA,CAAgB,WAAA,GAAc,iBAAA","file":"chunk-ECBTSKES.js","sourcesContent":["'use client'\n\nimport {\n Group,\n Panel,\n Separator,\n} from 'react-resizable-panels'\n\nimport React from 'react'\nimport { MoreVertical } from 'lucide-react'\nimport { cn } from '../utils'\nimport type {\n ResizableHandleProps,\n ResizablePanelGroupProps,\n ResizablePanelProps,\n} from './types'\n\nconst ResizablePanelGroup = React.memo(({\n className,\n ...props\n}: ResizablePanelGroupProps) => {\n return (\n <Group\n data-slot=\"resizable-group\"\n className={cn(\n 'resizable_group',\n 'flex h-full w-full',\n className,\n )}\n {...props}\n />\n )\n})\n\nconst ResizablePanel = React.memo(({ className, ...props }: ResizablePanelProps) => {\n return (\n <Panel\n data-slot=\"resizable-panel\"\n className={cn('resizable_panel', className)}\n {...props}\n />\n )\n})\n\nconst ResizableHandle = React.memo(({\n withHandle = false,\n className,\n ...props\n}: ResizableHandleProps) => {\n const elRef = React.useRef<HTMLDivElement>(null)\n const [isVertical, setIsVertical] = React.useState(false)\n\n React.useEffect(() => {\n const el = elRef.current\n if (!el) return\n const parent = el.parentElement\n if (!parent) return\n const dir = getComputedStyle(parent).flexDirection\n setIsVertical(dir === 'column')\n }, [])\n\n return (\n <Separator\n elementRef={elRef}\n data-slot=\"resizable-handle\"\n className={cn(\n 'resizable_handle',\n 'group relative flex items-center justify-center',\n 'bg-border',\n 'focus-visible:outline-none',\n isVertical ? 'h-px' : 'w-px',\n className,\n )}\n {...props}\n >\n {withHandle && (\n <div className={cn(\n 'z-10 flex items-center justify-center rounded-sm border border-border bg-background',\n 'opacity-0 transition-opacity group-hover:opacity-100',\n isVertical ? 'w-4 h-3' : 'h-4 w-3',\n )}>\n <MoreVertical className={cn(\n 'w-2.5 h-2.5 text-text-secondary',\n isVertical && 'rotate-90',\n )} />\n </div>\n )}\n </Separator>\n )\n})\n\nResizablePanelGroup.displayName = 'ResizablePanelGroup'\nResizablePanel.displayName = 'ResizablePanel'\nResizableHandle.displayName = 'ResizableHandle'\n\nexport type * from './types'\nexport { ResizablePanelGroup, ResizablePanel, ResizableHandle }\n"]}
@@ -1,4 +1,4 @@
1
- import { useRipple, RippleContainer } from './chunk-4TEZWGX7.js';
1
+ import { useRipple, RippleContainer } from './chunk-64OCJYSH.js';
2
2
  import { colorVars } from './chunk-G6QIIWKU.js';
3
3
  import { cn, iconSizes } from './chunk-RAS6HUEI.js';
4
4
  import { cva } from 'class-variance-authority';
@@ -178,5 +178,5 @@ Clipboard.displayName = "Clipboard";
178
178
  var clipboard_default = Clipboard;
179
179
 
180
180
  export { clipboard_default };
181
- //# sourceMappingURL=chunk-J2WIZULN.js.map
182
- //# sourceMappingURL=chunk-J2WIZULN.js.map
181
+ //# sourceMappingURL=chunk-FCIK35OY.js.map
182
+ //# sourceMappingURL=chunk-FCIK35OY.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/clipboard/index.tsx"],"names":[],"mappings":"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","file":"chunk-J2WIZULN.js","sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport { Check, Copy } from \"lucide-react\";\nimport React, { useState, useRef, useEffect } from \"react\";\n\nimport { useRipple, RippleContainer } from \"../hooks/useRipple\";\nimport { cn, iconSizes } from \"../utils\";\nimport { colorVars } from \"../variants\";\nimport type { ClipboardProps } from \"./types\";\n\nasync function copyToClipboard(text: string): Promise<void> {\n if (navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n return;\n }\n // Fallback using ClipboardItem API (works in iframes / insecure contexts with user gesture)\n if (typeof ClipboardItem !== \"undefined\" && navigator.clipboard?.write) {\n const blob = new Blob([text], { type: \"text/plain\" });\n await navigator.clipboard.write([new ClipboardItem({ \"text/plain\": blob })]);\n return;\n }\n // Last resort: textarea + Selection API (no deprecated execCommand)\n const textarea = document.createElement(\"textarea\");\n textarea.value = text;\n textarea.style.cssText = \"position:fixed;opacity:0;left:-9999px\";\n document.body.appendChild(textarea);\n textarea.focus();\n textarea.select();\n try {\n const selection = document.getSelection();\n if (selection) {\n const range = document.createRange();\n range.selectNodeContents(textarea);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n // execCommand is deprecated but still the only sync fallback in old browsers\n document.execCommand(\"copy\");\n } finally {\n document.body.removeChild(textarea);\n }\n}\n\nconst clipboardVariants = cva(\n \"inline-flex items-center justify-between gap-2 rounded-md font-medium transition-colors cursor-pointer border focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background relative overflow-hidden\",\n {\n variants: {\n size: {\n xs: \"px-1.5 py-1 text-xs\",\n sm: \"px-2 py-1.5 text-xs\",\n md: \"px-2.5 py-2 text-sm\",\n lg: \"px-3.5 py-2 text-lg\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\nconst getClipboardStyles = (color: string, variant: string) => {\n const baseColor = colorVars[color as keyof typeof colorVars] || colorVars.default\n\n if (variant === 'solid') {\n return cn(baseColor, 'bg-slot border-slot text-slot-fg hover:bg-slot-90')\n }\n if (variant === 'soft') {\n return cn(baseColor, 'bg-slot-10 border-slot-30 text-slot hover:bg-slot-20')\n }\n // default variant\n return cn(baseColor, 'bg-background border-slot text-slot hover:bg-slot-10')\n}\n\nconst Clipboard = React.memo<ClipboardProps>(\n ({\n value,\n color = \"default\",\n size = \"md\",\n variant = \"default\",\n showValue = true,\n successDuration = 2000,\n disabled = false,\n onCopy,\n className,\n classNames,\n ref,\n }) => {\n const [copied, setCopied] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const isMountedRef = useRef(true);\n const { ripples, onPointerDown: ripplePointerDown, onKeyDown: rippleKeyDown, onAnimationEnd: rippleAnimationEnd } = useRipple(!disabled);\n\n // Cleanup timeout on unmount to prevent memory leak\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n };\n }, []);\n\n const handleCopy = async () => {\n if (disabled) return;\n\n try {\n await copyToClipboard(value);\n if (isMountedRef.current) setCopied(true);\n onCopy?.();\n\n // Clear any existing timer before setting a new one\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n\n timerRef.current = setTimeout(() => {\n if (isMountedRef.current) setCopied(false);\n }, successDuration);\n } catch {\n // Copy failed - user can try again\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleCopy();\n }\n };\n\n return (\n <div\n ref={ref}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onClick={handleCopy}\n onPointerDown={ripplePointerDown}\n onKeyDown={(e) => { rippleKeyDown(e); handleKeyDown(e); }}\n aria-label={\n copied\n ? \"Copied to clipboard\"\n : `Copy ${showValue ? value : \"to clipboard\"}`\n }\n aria-disabled={disabled}\n aria-live=\"polite\"\n className={cn(\n clipboardVariants({ size }),\n getClipboardStyles(color, variant),\n colorVars[color],\n 'focus-visible:ring-slot',\n disabled && \"opacity-50 cursor-not-allowed\",\n !showValue && \"aspect-square justify-center\",\n \"clipboard_root\",\n classNames?.root,\n className,\n )}\n data-slot=\"root\"\n >\n {showValue && (\n <span\n className={cn(\n \"font-mono truncate clipboard_input\",\n classNames?.input,\n )}\n data-slot=\"input\"\n >\n {value}\n </span>\n )}\n {copied ? (\n <Check\n className={cn(\n iconSizes[size],\n \"shrink-0 clipboard_button animate-in zoom-in-75 duration-200\",\n classNames?.button,\n )}\n data-slot=\"icon\"\n />\n ) : (\n <Copy\n className={cn(\n iconSizes[size],\n \"shrink-0 clipboard_button\",\n classNames?.button,\n )}\n data-slot=\"icon\"\n />\n )}\n <RippleContainer ripples={ripples} onAnimationEnd={rippleAnimationEnd} />\n </div>\n );\n },\n);\n\nClipboard.displayName = \"Clipboard\";\n\nexport type * from \"./types\";\nexport default Clipboard;\n"]}
1
+ {"version":3,"sources":["../src/clipboard/index.tsx"],"names":[],"mappings":"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","file":"chunk-FCIK35OY.js","sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport { Check, Copy } from \"lucide-react\";\nimport React, { useState, useRef, useEffect } from \"react\";\n\nimport { useRipple, RippleContainer } from \"../hooks/useRipple\";\nimport { cn, iconSizes } from \"../utils\";\nimport { colorVars } from \"../variants\";\nimport type { ClipboardProps } from \"./types\";\n\nasync function copyToClipboard(text: string): Promise<void> {\n if (navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n return;\n }\n // Fallback using ClipboardItem API (works in iframes / insecure contexts with user gesture)\n if (typeof ClipboardItem !== \"undefined\" && navigator.clipboard?.write) {\n const blob = new Blob([text], { type: \"text/plain\" });\n await navigator.clipboard.write([new ClipboardItem({ \"text/plain\": blob })]);\n return;\n }\n // Last resort: textarea + Selection API (no deprecated execCommand)\n const textarea = document.createElement(\"textarea\");\n textarea.value = text;\n textarea.style.cssText = \"position:fixed;opacity:0;left:-9999px\";\n document.body.appendChild(textarea);\n textarea.focus();\n textarea.select();\n try {\n const selection = document.getSelection();\n if (selection) {\n const range = document.createRange();\n range.selectNodeContents(textarea);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n // execCommand is deprecated but still the only sync fallback in old browsers\n document.execCommand(\"copy\");\n } finally {\n document.body.removeChild(textarea);\n }\n}\n\nconst clipboardVariants = cva(\n \"inline-flex items-center justify-between gap-2 rounded-md font-medium transition-colors cursor-pointer border focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background relative overflow-hidden\",\n {\n variants: {\n size: {\n xs: \"px-1.5 py-1 text-xs\",\n sm: \"px-2 py-1.5 text-xs\",\n md: \"px-2.5 py-2 text-sm\",\n lg: \"px-3.5 py-2 text-lg\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\nconst getClipboardStyles = (color: string, variant: string) => {\n const baseColor = colorVars[color as keyof typeof colorVars] || colorVars.default\n\n if (variant === 'solid') {\n return cn(baseColor, 'bg-slot border-slot text-slot-fg hover:bg-slot-90')\n }\n if (variant === 'soft') {\n return cn(baseColor, 'bg-slot-10 border-slot-30 text-slot hover:bg-slot-20')\n }\n // default variant\n return cn(baseColor, 'bg-background border-slot text-slot hover:bg-slot-10')\n}\n\nconst Clipboard = React.memo<ClipboardProps>(\n ({\n value,\n color = \"default\",\n size = \"md\",\n variant = \"default\",\n showValue = true,\n successDuration = 2000,\n disabled = false,\n onCopy,\n className,\n classNames,\n ref,\n }) => {\n const [copied, setCopied] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const isMountedRef = useRef(true);\n const { ripples, onPointerDown: ripplePointerDown, onKeyDown: rippleKeyDown, onAnimationEnd: rippleAnimationEnd } = useRipple(!disabled);\n\n // Cleanup timeout on unmount to prevent memory leak\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n };\n }, []);\n\n const handleCopy = async () => {\n if (disabled) return;\n\n try {\n await copyToClipboard(value);\n if (isMountedRef.current) setCopied(true);\n onCopy?.();\n\n // Clear any existing timer before setting a new one\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n\n timerRef.current = setTimeout(() => {\n if (isMountedRef.current) setCopied(false);\n }, successDuration);\n } catch {\n // Copy failed - user can try again\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleCopy();\n }\n };\n\n return (\n <div\n ref={ref}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onClick={handleCopy}\n onPointerDown={ripplePointerDown}\n onKeyDown={(e) => { rippleKeyDown(e); handleKeyDown(e); }}\n aria-label={\n copied\n ? \"Copied to clipboard\"\n : `Copy ${showValue ? value : \"to clipboard\"}`\n }\n aria-disabled={disabled}\n aria-live=\"polite\"\n className={cn(\n clipboardVariants({ size }),\n getClipboardStyles(color, variant),\n colorVars[color],\n 'focus-visible:ring-slot',\n disabled && \"opacity-50 cursor-not-allowed\",\n !showValue && \"aspect-square justify-center\",\n \"clipboard_root\",\n classNames?.root,\n className,\n )}\n data-slot=\"root\"\n >\n {showValue && (\n <span\n className={cn(\n \"font-mono truncate clipboard_input\",\n classNames?.input,\n )}\n data-slot=\"input\"\n >\n {value}\n </span>\n )}\n {copied ? (\n <Check\n className={cn(\n iconSizes[size],\n \"shrink-0 clipboard_button animate-in zoom-in-75 duration-200\",\n classNames?.button,\n )}\n data-slot=\"icon\"\n />\n ) : (\n <Copy\n className={cn(\n iconSizes[size],\n \"shrink-0 clipboard_button\",\n classNames?.button,\n )}\n data-slot=\"icon\"\n />\n )}\n <RippleContainer ripples={ripples} onAnimationEnd={rippleAnimationEnd} />\n </div>\n );\n },\n);\n\nClipboard.displayName = \"Clipboard\";\n\nexport type * from \"./types\";\nexport default Clipboard;\n"]}