@octaviaflow/core 0.2.0-beta.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 (366) hide show
  1. package/dist/components/ActionDrawer/ActionDrawer.d.ts +19 -0
  2. package/dist/components/ActionDrawer/ActionDrawer.d.ts.map +1 -0
  3. package/dist/components/ActionDrawer/index.d.ts +3 -0
  4. package/dist/components/ActionDrawer/index.d.ts.map +1 -0
  5. package/dist/components/AuthCard/AuthCard.d.ts +48 -0
  6. package/dist/components/AuthCard/AuthCard.d.ts.map +1 -0
  7. package/dist/components/AuthCard/index.d.ts +2 -0
  8. package/dist/components/AuthCard/index.d.ts.map +1 -0
  9. package/dist/components/Avatar/Avatar.d.ts +20 -0
  10. package/dist/components/Avatar/Avatar.d.ts.map +1 -0
  11. package/dist/components/Avatar/index.d.ts +2 -0
  12. package/dist/components/Avatar/index.d.ts.map +1 -0
  13. package/dist/components/Badge/Badge.d.ts +13 -0
  14. package/dist/components/Badge/Badge.d.ts.map +1 -0
  15. package/dist/components/Badge/index.d.ts +2 -0
  16. package/dist/components/Badge/index.d.ts.map +1 -0
  17. package/dist/components/Banner/Banner.d.ts +14 -0
  18. package/dist/components/Banner/Banner.d.ts.map +1 -0
  19. package/dist/components/Banner/index.d.ts +2 -0
  20. package/dist/components/Banner/index.d.ts.map +1 -0
  21. package/dist/components/BarChart/BarChart.d.ts +17 -0
  22. package/dist/components/BarChart/BarChart.d.ts.map +1 -0
  23. package/dist/components/BarChart/index.d.ts +2 -0
  24. package/dist/components/BarChart/index.d.ts.map +1 -0
  25. package/dist/components/BlogCard/BlogCard.d.ts +13 -0
  26. package/dist/components/BlogCard/BlogCard.d.ts.map +1 -0
  27. package/dist/components/BlogCard/index.d.ts +2 -0
  28. package/dist/components/BlogCard/index.d.ts.map +1 -0
  29. package/dist/components/Breadcrumb/Breadcrumb.d.ts +13 -0
  30. package/dist/components/Breadcrumb/Breadcrumb.d.ts.map +1 -0
  31. package/dist/components/Breadcrumb/index.d.ts +2 -0
  32. package/dist/components/Breadcrumb/index.d.ts.map +1 -0
  33. package/dist/components/Button/Button.d.ts +12 -0
  34. package/dist/components/Button/Button.d.ts.map +1 -0
  35. package/dist/components/Button/index.d.ts +2 -0
  36. package/dist/components/Button/index.d.ts.map +1 -0
  37. package/dist/components/Calendar/Calendar.d.ts +17 -0
  38. package/dist/components/Calendar/Calendar.d.ts.map +1 -0
  39. package/dist/components/Calendar/index.d.ts +2 -0
  40. package/dist/components/Calendar/index.d.ts.map +1 -0
  41. package/dist/components/Callout/Callout.d.ts +10 -0
  42. package/dist/components/Callout/Callout.d.ts.map +1 -0
  43. package/dist/components/Callout/index.d.ts +2 -0
  44. package/dist/components/Callout/index.d.ts.map +1 -0
  45. package/dist/components/Card/Card.d.ts +11 -0
  46. package/dist/components/Card/Card.d.ts.map +1 -0
  47. package/dist/components/Card/index.d.ts +2 -0
  48. package/dist/components/Card/index.d.ts.map +1 -0
  49. package/dist/components/ChatBubble/ChatBubble.d.ts +13 -0
  50. package/dist/components/ChatBubble/ChatBubble.d.ts.map +1 -0
  51. package/dist/components/ChatBubble/index.d.ts +2 -0
  52. package/dist/components/ChatBubble/index.d.ts.map +1 -0
  53. package/dist/components/Checkbox/Checkbox.d.ts +13 -0
  54. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
  55. package/dist/components/Checkbox/index.d.ts +2 -0
  56. package/dist/components/Checkbox/index.d.ts.map +1 -0
  57. package/dist/components/Chip/Chip.d.ts +15 -0
  58. package/dist/components/Chip/Chip.d.ts.map +1 -0
  59. package/dist/components/Chip/index.d.ts +2 -0
  60. package/dist/components/Chip/index.d.ts.map +1 -0
  61. package/dist/components/ChoiceCard/ChoiceCard.d.ts +13 -0
  62. package/dist/components/ChoiceCard/ChoiceCard.d.ts.map +1 -0
  63. package/dist/components/ChoiceCard/index.d.ts +2 -0
  64. package/dist/components/ChoiceCard/index.d.ts.map +1 -0
  65. package/dist/components/ColorPicker/ColorPicker.d.ts +14 -0
  66. package/dist/components/ColorPicker/ColorPicker.d.ts.map +1 -0
  67. package/dist/components/ColorPicker/index.d.ts +2 -0
  68. package/dist/components/ColorPicker/index.d.ts.map +1 -0
  69. package/dist/components/ConditionBuilder/ConditionBuilder.d.ts +37 -0
  70. package/dist/components/ConditionBuilder/ConditionBuilder.d.ts.map +1 -0
  71. package/dist/components/ConditionBuilder/index.d.ts +2 -0
  72. package/dist/components/ConditionBuilder/index.d.ts.map +1 -0
  73. package/dist/components/ConfigPanel/ConfigPanel.d.ts +13 -0
  74. package/dist/components/ConfigPanel/ConfigPanel.d.ts.map +1 -0
  75. package/dist/components/ConfigPanel/index.d.ts +3 -0
  76. package/dist/components/ConfigPanel/index.d.ts.map +1 -0
  77. package/dist/components/DataMapper/DataMapper.d.ts +19 -0
  78. package/dist/components/DataMapper/DataMapper.d.ts.map +1 -0
  79. package/dist/components/DataMapper/index.d.ts +2 -0
  80. package/dist/components/DataMapper/index.d.ts.map +1 -0
  81. package/dist/components/DatePicker/DatePicker.d.ts +17 -0
  82. package/dist/components/DatePicker/DatePicker.d.ts.map +1 -0
  83. package/dist/components/DatePicker/index.d.ts +2 -0
  84. package/dist/components/DatePicker/index.d.ts.map +1 -0
  85. package/dist/components/DescriptionList/DescriptionList.d.ts +16 -0
  86. package/dist/components/DescriptionList/DescriptionList.d.ts.map +1 -0
  87. package/dist/components/DescriptionList/index.d.ts +2 -0
  88. package/dist/components/DescriptionList/index.d.ts.map +1 -0
  89. package/dist/components/Dialog/Dialog.d.ts +15 -0
  90. package/dist/components/Dialog/Dialog.d.ts.map +1 -0
  91. package/dist/components/Dialog/index.d.ts +2 -0
  92. package/dist/components/Dialog/index.d.ts.map +1 -0
  93. package/dist/components/DonutChart/DonutChart.d.ts +17 -0
  94. package/dist/components/DonutChart/DonutChart.d.ts.map +1 -0
  95. package/dist/components/DonutChart/index.d.ts +2 -0
  96. package/dist/components/DonutChart/index.d.ts.map +1 -0
  97. package/dist/components/Drawer/Drawer.d.ts +17 -0
  98. package/dist/components/Drawer/Drawer.d.ts.map +1 -0
  99. package/dist/components/Drawer/index.d.ts +2 -0
  100. package/dist/components/Drawer/index.d.ts.map +1 -0
  101. package/dist/components/DropdownMenu/DropdownMenu.d.ts +17 -0
  102. package/dist/components/DropdownMenu/DropdownMenu.d.ts.map +1 -0
  103. package/dist/components/DropdownMenu/index.d.ts +2 -0
  104. package/dist/components/DropdownMenu/index.d.ts.map +1 -0
  105. package/dist/components/EmptyState/EmptyState.d.ts +10 -0
  106. package/dist/components/EmptyState/EmptyState.d.ts.map +1 -0
  107. package/dist/components/EmptyState/index.d.ts +2 -0
  108. package/dist/components/EmptyState/index.d.ts.map +1 -0
  109. package/dist/components/ExecutionConsole/ExecutionConsole.d.ts +24 -0
  110. package/dist/components/ExecutionConsole/ExecutionConsole.d.ts.map +1 -0
  111. package/dist/components/ExecutionConsole/index.d.ts +3 -0
  112. package/dist/components/ExecutionConsole/index.d.ts.map +1 -0
  113. package/dist/components/FeatureCard/FeatureCard.d.ts +15 -0
  114. package/dist/components/FeatureCard/FeatureCard.d.ts.map +1 -0
  115. package/dist/components/FeatureCard/index.d.ts +2 -0
  116. package/dist/components/FeatureCard/index.d.ts.map +1 -0
  117. package/dist/components/FlowCanvas/CanvasToolbar.d.ts +25 -0
  118. package/dist/components/FlowCanvas/CanvasToolbar.d.ts.map +1 -0
  119. package/dist/components/FlowCanvas/FlowCanvas.d.ts +52 -0
  120. package/dist/components/FlowCanvas/FlowCanvas.d.ts.map +1 -0
  121. package/dist/components/FlowCanvas/index.d.ts +2 -0
  122. package/dist/components/FlowCanvas/index.d.ts.map +1 -0
  123. package/dist/components/FlowEdge/FlowEdge.d.ts +22 -0
  124. package/dist/components/FlowEdge/FlowEdge.d.ts.map +1 -0
  125. package/dist/components/FlowEdge/index.d.ts +2 -0
  126. package/dist/components/FlowEdge/index.d.ts.map +1 -0
  127. package/dist/components/FlowMinimap/FlowMinimap.d.ts +35 -0
  128. package/dist/components/FlowMinimap/FlowMinimap.d.ts.map +1 -0
  129. package/dist/components/FlowMinimap/index.d.ts +3 -0
  130. package/dist/components/FlowMinimap/index.d.ts.map +1 -0
  131. package/dist/components/FlowNode/FlowNode.d.ts +57 -0
  132. package/dist/components/FlowNode/FlowNode.d.ts.map +1 -0
  133. package/dist/components/FlowNode/index.d.ts +2 -0
  134. package/dist/components/FlowNode/index.d.ts.map +1 -0
  135. package/dist/components/FlowToolbar/FlowToolbar.d.ts +55 -0
  136. package/dist/components/FlowToolbar/FlowToolbar.d.ts.map +1 -0
  137. package/dist/components/FlowToolbar/index.d.ts +2 -0
  138. package/dist/components/FlowToolbar/index.d.ts.map +1 -0
  139. package/dist/components/FormSection/FormSection.d.ts +11 -0
  140. package/dist/components/FormSection/FormSection.d.ts.map +1 -0
  141. package/dist/components/FormSection/index.d.ts +2 -0
  142. package/dist/components/FormSection/index.d.ts.map +1 -0
  143. package/dist/components/HoverCard/HoverCard.d.ts +13 -0
  144. package/dist/components/HoverCard/HoverCard.d.ts.map +1 -0
  145. package/dist/components/HoverCard/index.d.ts +2 -0
  146. package/dist/components/HoverCard/index.d.ts.map +1 -0
  147. package/dist/components/IconCard/IconCard.d.ts +12 -0
  148. package/dist/components/IconCard/IconCard.d.ts.map +1 -0
  149. package/dist/components/IconCard/index.d.ts +2 -0
  150. package/dist/components/IconCard/index.d.ts.map +1 -0
  151. package/dist/components/Input/Input.d.ts +13 -0
  152. package/dist/components/Input/Input.d.ts.map +1 -0
  153. package/dist/components/Input/index.d.ts +2 -0
  154. package/dist/components/Input/index.d.ts.map +1 -0
  155. package/dist/components/KanbanCard/KanbanCard.d.ts +13 -0
  156. package/dist/components/KanbanCard/KanbanCard.d.ts.map +1 -0
  157. package/dist/components/KanbanCard/index.d.ts +2 -0
  158. package/dist/components/KanbanCard/index.d.ts.map +1 -0
  159. package/dist/components/Kbd/Kbd.d.ts +15 -0
  160. package/dist/components/Kbd/Kbd.d.ts.map +1 -0
  161. package/dist/components/Kbd/index.d.ts +2 -0
  162. package/dist/components/Kbd/index.d.ts.map +1 -0
  163. package/dist/components/LineChart/LineChart.d.ts +17 -0
  164. package/dist/components/LineChart/LineChart.d.ts.map +1 -0
  165. package/dist/components/LineChart/index.d.ts +2 -0
  166. package/dist/components/LineChart/index.d.ts.map +1 -0
  167. package/dist/components/LinkButton/LinkButton.d.ts +11 -0
  168. package/dist/components/LinkButton/LinkButton.d.ts.map +1 -0
  169. package/dist/components/LinkButton/index.d.ts +2 -0
  170. package/dist/components/LinkButton/index.d.ts.map +1 -0
  171. package/dist/components/MultiSelect/MultiSelect.d.ts +29 -0
  172. package/dist/components/MultiSelect/MultiSelect.d.ts.map +1 -0
  173. package/dist/components/MultiSelect/index.d.ts +2 -0
  174. package/dist/components/MultiSelect/index.d.ts.map +1 -0
  175. package/dist/components/NumberInput/NumberInput.d.ts +20 -0
  176. package/dist/components/NumberInput/NumberInput.d.ts.map +1 -0
  177. package/dist/components/NumberInput/index.d.ts +2 -0
  178. package/dist/components/NumberInput/index.d.ts.map +1 -0
  179. package/dist/components/OTPInput/OTPInput.d.ts +16 -0
  180. package/dist/components/OTPInput/OTPInput.d.ts.map +1 -0
  181. package/dist/components/OTPInput/index.d.ts +2 -0
  182. package/dist/components/OTPInput/index.d.ts.map +1 -0
  183. package/dist/components/PageHeader/PageHeader.d.ts +16 -0
  184. package/dist/components/PageHeader/PageHeader.d.ts.map +1 -0
  185. package/dist/components/PageHeader/index.d.ts +2 -0
  186. package/dist/components/PageHeader/index.d.ts.map +1 -0
  187. package/dist/components/PasswordInput/PasswordInput.d.ts +17 -0
  188. package/dist/components/PasswordInput/PasswordInput.d.ts.map +1 -0
  189. package/dist/components/PasswordInput/index.d.ts +2 -0
  190. package/dist/components/PasswordInput/index.d.ts.map +1 -0
  191. package/dist/components/PhoneInput/PhoneInput.d.ts +23 -0
  192. package/dist/components/PhoneInput/PhoneInput.d.ts.map +1 -0
  193. package/dist/components/PhoneInput/index.d.ts +2 -0
  194. package/dist/components/PhoneInput/index.d.ts.map +1 -0
  195. package/dist/components/Popover/Popover.d.ts +18 -0
  196. package/dist/components/Popover/Popover.d.ts.map +1 -0
  197. package/dist/components/Popover/index.d.ts +2 -0
  198. package/dist/components/Popover/index.d.ts.map +1 -0
  199. package/dist/components/PricingCard/PricingCard.d.ts +14 -0
  200. package/dist/components/PricingCard/PricingCard.d.ts.map +1 -0
  201. package/dist/components/PricingCard/index.d.ts +2 -0
  202. package/dist/components/PricingCard/index.d.ts.map +1 -0
  203. package/dist/components/ProductCard/ProductCard.d.ts +13 -0
  204. package/dist/components/ProductCard/ProductCard.d.ts.map +1 -0
  205. package/dist/components/ProductCard/index.d.ts +2 -0
  206. package/dist/components/ProductCard/index.d.ts.map +1 -0
  207. package/dist/components/ProgressRing/ProgressRing.d.ts +16 -0
  208. package/dist/components/ProgressRing/ProgressRing.d.ts.map +1 -0
  209. package/dist/components/ProgressRing/index.d.ts +2 -0
  210. package/dist/components/ProgressRing/index.d.ts.map +1 -0
  211. package/dist/components/Quote/Quote.d.ts +11 -0
  212. package/dist/components/Quote/Quote.d.ts.map +1 -0
  213. package/dist/components/Quote/index.d.ts +2 -0
  214. package/dist/components/Quote/index.d.ts.map +1 -0
  215. package/dist/components/Radio/Radio.d.ts +8 -0
  216. package/dist/components/Radio/Radio.d.ts.map +1 -0
  217. package/dist/components/Radio/RadioGroup.d.ts +16 -0
  218. package/dist/components/Radio/RadioGroup.d.ts.map +1 -0
  219. package/dist/components/Radio/index.d.ts +3 -0
  220. package/dist/components/Radio/index.d.ts.map +1 -0
  221. package/dist/components/RangeSlider/RangeSlider.d.ts +16 -0
  222. package/dist/components/RangeSlider/RangeSlider.d.ts.map +1 -0
  223. package/dist/components/RangeSlider/index.d.ts +2 -0
  224. package/dist/components/RangeSlider/index.d.ts.map +1 -0
  225. package/dist/components/Rating/Rating.d.ts +16 -0
  226. package/dist/components/Rating/Rating.d.ts.map +1 -0
  227. package/dist/components/Rating/index.d.ts +2 -0
  228. package/dist/components/Rating/index.d.ts.map +1 -0
  229. package/dist/components/Ribbon/Ribbon.d.ts +10 -0
  230. package/dist/components/Ribbon/Ribbon.d.ts.map +1 -0
  231. package/dist/components/Ribbon/index.d.ts +2 -0
  232. package/dist/components/Ribbon/index.d.ts.map +1 -0
  233. package/dist/components/Select/Select.d.ts +26 -0
  234. package/dist/components/Select/Select.d.ts.map +1 -0
  235. package/dist/components/Select/index.d.ts +2 -0
  236. package/dist/components/Select/index.d.ts.map +1 -0
  237. package/dist/components/SettingsRow/SettingsRow.d.ts +11 -0
  238. package/dist/components/SettingsRow/SettingsRow.d.ts.map +1 -0
  239. package/dist/components/SettingsRow/index.d.ts +2 -0
  240. package/dist/components/SettingsRow/index.d.ts.map +1 -0
  241. package/dist/components/Sheet/Sheet.d.ts +18 -0
  242. package/dist/components/Sheet/Sheet.d.ts.map +1 -0
  243. package/dist/components/Sheet/index.d.ts +2 -0
  244. package/dist/components/Sheet/index.d.ts.map +1 -0
  245. package/dist/components/Sidebar/Sidebar.d.ts +60 -0
  246. package/dist/components/Sidebar/Sidebar.d.ts.map +1 -0
  247. package/dist/components/Sidebar/index.d.ts +2 -0
  248. package/dist/components/Sidebar/index.d.ts.map +1 -0
  249. package/dist/components/Skeleton/Skeleton.d.ts +9 -0
  250. package/dist/components/Skeleton/Skeleton.d.ts.map +1 -0
  251. package/dist/components/Skeleton/index.d.ts +2 -0
  252. package/dist/components/Skeleton/index.d.ts.map +1 -0
  253. package/dist/components/SlideoutPanel/SlideoutPanel.d.ts +13 -0
  254. package/dist/components/SlideoutPanel/SlideoutPanel.d.ts.map +1 -0
  255. package/dist/components/SlideoutPanel/index.d.ts +2 -0
  256. package/dist/components/SlideoutPanel/index.d.ts.map +1 -0
  257. package/dist/components/Slider/Slider.d.ts +18 -0
  258. package/dist/components/Slider/Slider.d.ts.map +1 -0
  259. package/dist/components/Slider/index.d.ts +2 -0
  260. package/dist/components/Slider/index.d.ts.map +1 -0
  261. package/dist/components/SocialButton/SocialButton.d.ts +11 -0
  262. package/dist/components/SocialButton/SocialButton.d.ts.map +1 -0
  263. package/dist/components/SocialButton/index.d.ts +2 -0
  264. package/dist/components/SocialButton/index.d.ts.map +1 -0
  265. package/dist/components/Sparkline/Sparkline.d.ts +12 -0
  266. package/dist/components/Sparkline/Sparkline.d.ts.map +1 -0
  267. package/dist/components/Sparkline/index.d.ts +2 -0
  268. package/dist/components/Sparkline/index.d.ts.map +1 -0
  269. package/dist/components/Spinner/Spinner.d.ts +7 -0
  270. package/dist/components/Spinner/Spinner.d.ts.map +1 -0
  271. package/dist/components/Spinner/index.d.ts +2 -0
  272. package/dist/components/Spinner/index.d.ts.map +1 -0
  273. package/dist/components/Stat/Stat.d.ts +13 -0
  274. package/dist/components/Stat/Stat.d.ts.map +1 -0
  275. package/dist/components/Stat/index.d.ts +2 -0
  276. package/dist/components/Stat/index.d.ts.map +1 -0
  277. package/dist/components/Switch/Switch.d.ts +12 -0
  278. package/dist/components/Switch/Switch.d.ts.map +1 -0
  279. package/dist/components/Switch/index.d.ts +2 -0
  280. package/dist/components/Switch/index.d.ts.map +1 -0
  281. package/dist/components/Table/Table.d.ts +25 -0
  282. package/dist/components/Table/Table.d.ts.map +1 -0
  283. package/dist/components/Table/index.d.ts +2 -0
  284. package/dist/components/Table/index.d.ts.map +1 -0
  285. package/dist/components/Tabs/Tabs.d.ts +18 -0
  286. package/dist/components/Tabs/Tabs.d.ts.map +1 -0
  287. package/dist/components/Tabs/index.d.ts +2 -0
  288. package/dist/components/Tabs/index.d.ts.map +1 -0
  289. package/dist/components/TagsInput/TagsInput.d.ts +17 -0
  290. package/dist/components/TagsInput/TagsInput.d.ts.map +1 -0
  291. package/dist/components/TagsInput/index.d.ts +2 -0
  292. package/dist/components/TagsInput/index.d.ts.map +1 -0
  293. package/dist/components/TestimonialCard/TestimonialCard.d.ts +12 -0
  294. package/dist/components/TestimonialCard/TestimonialCard.d.ts.map +1 -0
  295. package/dist/components/TestimonialCard/index.d.ts +2 -0
  296. package/dist/components/TestimonialCard/index.d.ts.map +1 -0
  297. package/dist/components/Textarea/Textarea.d.ts +12 -0
  298. package/dist/components/Textarea/Textarea.d.ts.map +1 -0
  299. package/dist/components/Textarea/index.d.ts +2 -0
  300. package/dist/components/Textarea/index.d.ts.map +1 -0
  301. package/dist/components/TimePicker/TimePicker.d.ts +23 -0
  302. package/dist/components/TimePicker/TimePicker.d.ts.map +1 -0
  303. package/dist/components/TimePicker/index.d.ts +2 -0
  304. package/dist/components/TimePicker/index.d.ts.map +1 -0
  305. package/dist/components/Timeline/Timeline.d.ts +17 -0
  306. package/dist/components/Timeline/Timeline.d.ts.map +1 -0
  307. package/dist/components/Timeline/index.d.ts +2 -0
  308. package/dist/components/Timeline/index.d.ts.map +1 -0
  309. package/dist/components/TimezonePicker/TimezonePicker.d.ts +25 -0
  310. package/dist/components/TimezonePicker/TimezonePicker.d.ts.map +1 -0
  311. package/dist/components/TimezonePicker/index.d.ts +2 -0
  312. package/dist/components/TimezonePicker/index.d.ts.map +1 -0
  313. package/dist/components/Toast/Toast.d.ts +39 -0
  314. package/dist/components/Toast/Toast.d.ts.map +1 -0
  315. package/dist/components/Toast/index.d.ts +2 -0
  316. package/dist/components/Toast/index.d.ts.map +1 -0
  317. package/dist/components/Toggle/Toggle.d.ts +18 -0
  318. package/dist/components/Toggle/Toggle.d.ts.map +1 -0
  319. package/dist/components/Toggle/index.d.ts +2 -0
  320. package/dist/components/Toggle/index.d.ts.map +1 -0
  321. package/dist/components/Toolbar/Toolbar.d.ts +20 -0
  322. package/dist/components/Toolbar/Toolbar.d.ts.map +1 -0
  323. package/dist/components/Toolbar/index.d.ts +2 -0
  324. package/dist/components/Toolbar/index.d.ts.map +1 -0
  325. package/dist/components/Tooltip/Tooltip.d.ts +11 -0
  326. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -0
  327. package/dist/components/Tooltip/index.d.ts +2 -0
  328. package/dist/components/Tooltip/index.d.ts.map +1 -0
  329. package/dist/components/TopBar/TopBar.d.ts +16 -0
  330. package/dist/components/TopBar/TopBar.d.ts.map +1 -0
  331. package/dist/components/TopBar/index.d.ts +2 -0
  332. package/dist/components/TopBar/index.d.ts.map +1 -0
  333. package/dist/components/UserCard/UserCard.d.ts +16 -0
  334. package/dist/components/UserCard/UserCard.d.ts.map +1 -0
  335. package/dist/components/UserCard/index.d.ts +2 -0
  336. package/dist/components/UserCard/index.d.ts.map +1 -0
  337. package/dist/components/WorkflowEditor/WorkflowEditor.d.ts +43 -0
  338. package/dist/components/WorkflowEditor/WorkflowEditor.d.ts.map +1 -0
  339. package/dist/components/WorkflowEditor/index.d.ts +2 -0
  340. package/dist/components/WorkflowEditor/index.d.ts.map +1 -0
  341. package/dist/hooks/useWorkflow.d.ts +42 -0
  342. package/dist/hooks/useWorkflow.d.ts.map +1 -0
  343. package/dist/index.cjs +10553 -0
  344. package/dist/index.cjs.map +1 -0
  345. package/dist/index.d.ts +93 -0
  346. package/dist/index.d.ts.map +1 -0
  347. package/dist/index.js +10460 -0
  348. package/dist/index.js.map +1 -0
  349. package/dist/provider/OdsProvider.d.ts +13 -0
  350. package/dist/provider/OdsProvider.d.ts.map +1 -0
  351. package/dist/stories/_shared/Showcase.d.ts +25 -0
  352. package/dist/stories/_shared/Showcase.d.ts.map +1 -0
  353. package/dist/styles.css +1 -0
  354. package/dist/utils/cn.d.ts +3 -0
  355. package/dist/utils/cn.d.ts.map +1 -0
  356. package/dist/utils/motion.d.ts +78 -0
  357. package/dist/utils/motion.d.ts.map +1 -0
  358. package/dist/workflow/configStatus.d.ts +36 -0
  359. package/dist/workflow/configStatus.d.ts.map +1 -0
  360. package/dist/workflow/layout.d.ts +17 -0
  361. package/dist/workflow/layout.d.ts.map +1 -0
  362. package/dist/workflow/types.d.ts +272 -0
  363. package/dist/workflow/types.d.ts.map +1 -0
  364. package/dist/workflow/validator.d.ts +8 -0
  365. package/dist/workflow/validator.d.ts.map +1 -0
  366. package/package.json +69 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/components/ActionDrawer/ActionDrawer.tsx","../src/utils/cn.ts","../src/components/AuthCard/AuthCard.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Badge/Badge.tsx","../src/components/Banner/Banner.tsx","../src/components/BarChart/BarChart.tsx","../src/components/BlogCard/BlogCard.tsx","../src/components/Breadcrumb/Breadcrumb.tsx","../src/components/Button/Button.tsx","../src/components/Callout/Callout.tsx","../src/components/Calendar/Calendar.tsx","../src/components/Card/Card.tsx","../src/components/Checkbox/Checkbox.tsx","../../../node_modules/react-stately/dist/private/utils/packages/react-stately/src/utils/useControlledState.ts","../../../node_modules/react-stately/dist/private/form/packages/react-stately/src/form/useFormValidationState.ts","../../../node_modules/react-stately/dist/private/collections/packages/react-stately/src/collections/getChildNodes.ts","../../../node_modules/react-stately/dist/private/list/packages/react-stately/src/list/ListCollection.ts","../../../node_modules/react-stately/dist/private/selection/packages/react-stately/src/selection/Selection.ts","../../../node_modules/react-stately/dist/private/selection/packages/react-stately/src/selection/useMultipleSelectionState.ts","../../../node_modules/react-stately/dist/private/selection/packages/react-stately/src/selection/SelectionManager.ts","../../../node_modules/react-stately/dist/private/collections/packages/react-stately/src/collections/CollectionBuilder.ts","../../../node_modules/react-stately/dist/private/collections/packages/react-stately/src/collections/useCollection.ts","../../../node_modules/react-stately/dist/private/list/packages/react-stately/src/list/useListState.ts","../../../node_modules/react-stately/dist/private/overlays/packages/react-stately/src/overlays/useOverlayTriggerState.ts","../../../node_modules/react-stately/dist/private/collections/packages/react-stately/src/collections/Item.ts","../../../node_modules/react-stately/dist/private/list/packages/react-stately/src/list/useSingleSelectListState.ts","../../../node_modules/react-stately/dist/private/menu/packages/react-stately/src/menu/useMenuTriggerState.ts","../../../node_modules/react-stately/dist/private/radio/packages/react-stately/src/radio/useRadioGroupState.ts","../../../node_modules/react-stately/dist/private/select/packages/react-stately/src/select/useSelectState.ts","../../../node_modules/react-stately/dist/private/tabs/packages/react-stately/src/tabs/useTabListState.ts","../../../node_modules/react-stately/dist/private/toggle/packages/react-stately/src/toggle/useToggleState.ts","../../../node_modules/react-stately/dist/private/tooltip/packages/react-stately/src/tooltip/useTooltipTriggerState.ts","../../../node_modules/react-stately/dist/private/tree/packages/react-stately/src/tree/TreeCollection.ts","../../../node_modules/react-stately/dist/private/tree/packages/react-stately/src/tree/useTreeState.ts","../src/components/ChatBubble/ChatBubble.tsx","../src/components/HoverCard/HoverCard.tsx","../src/components/Popover/Popover.tsx","../src/components/Sheet/Sheet.tsx","../src/components/Chip/Chip.tsx","../src/components/ChoiceCard/ChoiceCard.tsx","../src/components/ColorPicker/ColorPicker.tsx","../src/components/ConditionBuilder/ConditionBuilder.tsx","../src/components/ConfigPanel/ConfigPanel.tsx","../src/components/DataMapper/DataMapper.tsx","../src/components/DatePicker/DatePicker.tsx","../src/components/DonutChart/DonutChart.tsx","../src/components/DescriptionList/DescriptionList.tsx","../src/components/Dialog/Dialog.tsx","../src/utils/motion.ts","../src/components/Drawer/Drawer.tsx","../src/components/DropdownMenu/DropdownMenu.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/ExecutionConsole/ExecutionConsole.tsx","../src/components/FeatureCard/FeatureCard.tsx","../src/components/FlowCanvas/FlowCanvas.tsx","../src/components/FlowNode/FlowNode.tsx","../src/components/FlowEdge/FlowEdge.tsx","../src/components/FlowMinimap/FlowMinimap.tsx","../src/components/FlowToolbar/FlowToolbar.tsx","../src/components/WorkflowEditor/WorkflowEditor.tsx","../src/hooks/useWorkflow.ts","../src/workflow/validator.ts","../src/workflow/types.ts","../src/workflow/layout.ts","../src/workflow/configStatus.ts","../src/components/IconCard/IconCard.tsx","../src/components/Input/Input.tsx","../src/components/Kbd/Kbd.tsx","../src/components/LineChart/LineChart.tsx","../src/components/LinkButton/LinkButton.tsx","../src/components/NumberInput/NumberInput.tsx","../src/components/OTPInput/OTPInput.tsx","../src/components/MultiSelect/MultiSelect.tsx","../src/components/PasswordInput/PasswordInput.tsx","../src/components/PhoneInput/PhoneInput.tsx","../src/components/Quote/Quote.tsx","../src/components/Radio/Radio.tsx","../src/components/Radio/RadioGroup.tsx","../src/components/RangeSlider/RangeSlider.tsx","../src/components/Rating/Rating.tsx","../src/components/Ribbon/Ribbon.tsx","../src/components/Select/Select.tsx","../src/components/Sidebar/Sidebar.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/SlideoutPanel/SlideoutPanel.tsx","../src/components/Slider/Slider.tsx","../src/components/SocialButton/SocialButton.tsx","../src/components/Sparkline/Sparkline.tsx","../src/components/Spinner/Spinner.tsx","../src/components/Stat/Stat.tsx","../src/components/Switch/Switch.tsx","../src/components/Table/Table.tsx","../src/components/Tabs/Tabs.tsx","../src/components/TagsInput/TagsInput.tsx","../src/components/Textarea/Textarea.tsx","../src/components/Timeline/Timeline.tsx","../src/components/TimePicker/TimePicker.tsx","../src/components/TimezonePicker/TimezonePicker.tsx","../src/components/Toggle/Toggle.tsx","../src/components/Toast/Toast.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/TopBar/TopBar.tsx","../src/provider/OdsProvider.tsx","../src/components/PageHeader/PageHeader.tsx","../src/components/PricingCard/PricingCard.tsx","../src/components/ProductCard/ProductCard.tsx","../src/components/ProgressRing/ProgressRing.tsx","../src/components/SettingsRow/SettingsRow.tsx","../src/components/TestimonialCard/TestimonialCard.tsx","../src/components/UserCard/UserCard.tsx","../src/components/KanbanCard/KanbanCard.tsx","../src/components/FormSection/FormSection.tsx","../src/components/Toolbar/Toolbar.tsx"],"sourcesContent":["// Provider\n\nexport { ActionDrawer, type ActionDrawerProps } from \"./components/ActionDrawer\";\nexport {\n AuthBadge,\n AuthCard,\n AuthDivider,\n AuthSection,\n AuthTabs,\n type AuthBadgeProps,\n type AuthBadgeTone,\n type AuthCardProps,\n type AuthDividerProps,\n type AuthSectionProps,\n type AuthTab,\n type AuthTabsProps,\n} from \"./components/AuthCard\";\nexport { Avatar, type AvatarProps, AvatarStack, type AvatarStackProps } from \"./components/Avatar\";\nexport { Badge, type BadgeProps } from \"./components/Badge\";\nexport { Banner, type BannerProps } from \"./components/Banner\";\nexport { BarChart, type BarChartProps, type BarDatum } from \"./components/BarChart\";\nexport { BlogCard, type BlogCardProps } from \"./components/BlogCard\";\nexport { Breadcrumb, type BreadcrumbProps } from \"./components/Breadcrumb\";\n// ── Phase 1: Foundation ──\nexport { Button, type ButtonProps } from \"./components/Button\";\nexport { Callout, type CalloutProps } from \"./components/Callout\";\n// ── Phase 2: Layout & Navigation ──\nexport { Calendar, type CalendarProps, type DateRange } from \"./components/Calendar\";\nexport { Card, type CardProps } from \"./components/Card\";\nexport { Checkbox, type CheckboxProps } from \"./components/Checkbox\";\nexport { ChatBubble, type ChatBubbleProps } from \"./components/ChatBubble\";\nexport { HoverCard, type HoverCardProps, type HoverCardPlacement } from \"./components/HoverCard\";\nexport { Popover, type PopoverProps, type PopoverPlacement } from \"./components/Popover\";\nexport { Sheet, type SheetProps, type SheetSide } from \"./components/Sheet\";\nexport { Chip, type ChipProps } from \"./components/Chip\";\nexport { ChoiceCard, type ChoiceCardProps } from \"./components/ChoiceCard\";\nexport { ColorPicker, type ColorPickerProps } from \"./components/ColorPicker\";\nexport { ConditionBuilder, type ConditionBuilderProps } from \"./components/ConditionBuilder\";\nexport { ConfigPanel, type ConfigPanelProps } from \"./components/ConfigPanel\";\nexport { DataMapper, type DataMapperProps } from \"./components/DataMapper\";\nexport { DatePicker, type DatePickerProps } from \"./components/DatePicker\";\nexport { DonutChart, type DonutChartProps, type DonutSegment } from \"./components/DonutChart\";\nexport {\n DescriptionList,\n type DescriptionListItem,\n type DescriptionListProps,\n} from \"./components/DescriptionList\";\nexport { Dialog, type DialogProps } from \"./components/Dialog\";\nexport { Drawer, type DrawerProps } from \"./components/Drawer\";\nexport { DropdownMenu, type DropdownMenuProps } from \"./components/DropdownMenu\";\nexport { EmptyState, type EmptyStateProps } from \"./components/EmptyState\";\nexport { ExecutionConsole, type ExecutionConsoleProps } from \"./components/ExecutionConsole\";\nexport { FeatureCard, type FeatureCardProps } from \"./components/FeatureCard\";\n// ── Phase 4: Workflow ──\nexport { FlowCanvas, type FlowCanvasProps } from \"./components/FlowCanvas\";\nexport { FlowEdge, type FlowEdgeProps } from \"./components/FlowEdge\";\nexport { FlowMinimap, type FlowMinimapProps } from \"./components/FlowMinimap\";\nexport { FlowNode, type FlowNodeProps } from \"./components/FlowNode\";\nexport {\n FlowToolbar,\n FlowToolbarButton,\n FlowToolbarDivider,\n FlowToolbarIcons,\n FlowToolbarZoom,\n type FlowToolbarProps,\n type FlowToolbarButtonProps,\n type FlowToolbarDividerProps,\n type FlowToolbarZoomProps,\n} from \"./components/FlowToolbar\";\nexport { WorkflowEditor, type WorkflowEditorProps } from \"./components/WorkflowEditor\";\nexport { useWorkflow, type UseWorkflowOptions, type UseWorkflowReturn } from \"./hooks/useWorkflow\";\nexport * as Workflow from \"./workflow/types\";\nexport {\n validateWorkflow,\n validateNode,\n validateEdge,\n wouldCreateCycle,\n getNodeValidationStatus,\n getEdgeValidationStatus,\n} from \"./workflow/validator\";\nexport {\n applyLayout,\n applyHorizontalLayout,\n applyVerticalLayout,\n type LayoutOptions as WorkflowLayoutOptions,\n type LayoutResult as WorkflowLayoutResult,\n} from \"./workflow/layout\";\nexport {\n getNodeConfigStatus,\n type FieldSchema,\n type FieldConditional,\n type ConfigStatusResult,\n} from \"./workflow/configStatus\";\nexport { IconCard, type IconCardProps } from \"./components/IconCard\";\nexport { Input, type InputProps } from \"./components/Input\";\nexport { Kbd, KbdGroup, type KbdProps, type KbdGroupProps } from \"./components/Kbd\";\nexport { LineChart, type LineChartProps, type LinePoint } from \"./components/LineChart\";\nexport { LinkButton, type LinkButtonProps } from \"./components/LinkButton\";\nexport { NumberInput, type NumberInputProps } from \"./components/NumberInput\";\nexport { OTPInput, type OTPInputProps } from \"./components/OTPInput\";\nexport {\n MultiSelect,\n type MultiSelectOption,\n type MultiSelectProps,\n} from \"./components/MultiSelect\";\nexport { PasswordInput, type PasswordInputProps } from \"./components/PasswordInput\";\nexport { PhoneInput, type PhoneInputProps, type CountryOption } from \"./components/PhoneInput\";\nexport { Quote, type QuoteProps } from \"./components/Quote\";\nexport { Radio, RadioGroup, type RadioProps } from \"./components/Radio\";\nexport { RangeSlider, type RangeSliderProps } from \"./components/RangeSlider\";\nexport { Rating, type RatingProps } from \"./components/Rating\";\nexport { Ribbon, type RibbonProps } from \"./components/Ribbon\";\nexport { Select, type SelectOption, type SelectProps } from \"./components/Select\";\nexport { Sidebar, type SidebarProps } from \"./components/Sidebar\";\nexport { Skeleton, type SkeletonProps } from \"./components/Skeleton\";\nexport { SlideoutPanel, type SlideoutPanelProps } from \"./components/SlideoutPanel\";\nexport { Slider, type SliderProps } from \"./components/Slider\";\nexport { SocialButton, type SocialButtonProps, type SocialProvider } from \"./components/SocialButton\";\nexport { Sparkline, type SparklineProps } from \"./components/Sparkline\";\nexport { Spinner, type SpinnerProps } from \"./components/Spinner\";\nexport { Stat, type StatProps } from \"./components/Stat\";\nexport { Switch, type SwitchProps } from \"./components/Switch\";\n// ── Phase 3: Data ──\nexport { Table, type TableProps } from \"./components/Table\";\nexport { Tabs, type TabsProps } from \"./components/Tabs\";\nexport { TagsInput, type TagsInputProps } from \"./components/TagsInput\";\nexport { Textarea, type TextareaProps } from \"./components/Textarea\";\nexport {\n Timeline,\n type TimelineItem,\n type TimelineProps,\n type TimelineStatus,\n} from \"./components/Timeline\";\nexport { TimePicker, type TimePickerProps, type TimeValue } from \"./components/TimePicker\";\nexport {\n TimezonePicker,\n type TimezonePickerProps,\n type TimezoneOption,\n} from \"./components/TimezonePicker\";\nexport { Toggle, type ToggleProps, type ToggleOption } from \"./components/Toggle\";\nexport { ToastProvider, useToast } from \"./components/Toast\";\nexport { Tooltip, type TooltipProps } from \"./components/Tooltip\";\nexport { TopBar, type TopBarProps } from \"./components/TopBar\";\nexport { OdsProvider, useOds, useOdsMotion } from \"./provider/OdsProvider\";\nexport {\n PageHeader,\n type PageHeaderBreadcrumb,\n type PageHeaderProps,\n} from \"./components/PageHeader\";\nexport { PricingCard, type PricingCardProps } from \"./components/PricingCard\";\nexport { ProductCard, type ProductCardProps } from \"./components/ProductCard\";\nexport { ProgressRing, type ProgressRingProps } from \"./components/ProgressRing\";\nexport { SettingsRow, type SettingsRowProps } from \"./components/SettingsRow\";\nexport { TestimonialCard, type TestimonialCardProps } from \"./components/TestimonialCard\";\nexport { UserCard, type UserCardProps, type UserCardStat } from \"./components/UserCard\";\nexport { KanbanCard, type KanbanCardProps } from \"./components/KanbanCard\";\nexport { FormSection, type FormSectionProps } from \"./components/FormSection\";\nexport {\n Toolbar,\n ToolbarButton,\n ToolbarDivider,\n ToolbarSpacer,\n type ToolbarButtonProps,\n type ToolbarProps,\n} from \"./components/Toolbar\";\n// Utilities\nexport { cn } from \"./utils/cn\";\nexport { odsMotion } from \"./utils/motion\";\n","\"use client\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { type ReactNode, useMemo, useRef } from \"react\";\nimport { useTextField } from \"react-aria\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface ActionItem {\n type: string;\n label: string;\n description?: string;\n icon?: ReactNode;\n category: string;\n}\n\nexport interface ActionDrawerProps {\n open?: boolean;\n onToggle?: () => void;\n actions?: ActionItem[];\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n onActionDrag?: (type: string) => void;\n className?: string;\n}\n\nexport function ActionDrawer({\n open = true,\n onToggle,\n actions = [],\n searchValue = \"\",\n onSearchChange,\n onActionDrag,\n className,\n}: ActionDrawerProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const { inputProps } = useTextField(\n {\n label: \"Search actions\",\n value: searchValue,\n onChange: onSearchChange,\n },\n inputRef,\n );\n\n const filteredActions = useMemo(() => {\n if (!searchValue) return actions;\n const q = searchValue.toLowerCase();\n return actions.filter(\n (a) =>\n a.label.toLowerCase().includes(q) ||\n a.category.toLowerCase().includes(q) ||\n a.description?.toLowerCase().includes(q),\n );\n }, [actions, searchValue]);\n\n const groupedActions = useMemo(() => {\n const groups: Record<string, ActionItem[]> = {};\n for (const action of filteredActions) {\n if (!groups[action.category]) groups[action.category] = [];\n groups[action.category].push(action);\n }\n return groups;\n }, [filteredActions]);\n\n return (\n <AnimatePresence>\n {open && (\n <motion.div\n className={cn('ods-action-drawer', className)}\n initial={{ x: -240, opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: -240, opacity: 0 }}\n transition={{ type: \"spring\", stiffness: 300, damping: 30 }}\n data-testid=\"action-drawer\"\n >\n <div className={'ods-action-drawer__header'}>\n <span className={'ods-action-drawer__title'}>Actions</span>\n <button\n className={'ods-action-drawer__toggle'}\n onClick={onToggle}\n aria-label=\"Close action drawer\"\n data-testid=\"action-drawer-toggle\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M11 3L6 8l5 5\" stroke=\"currentColor\" strokeWidth=\"2\" fill=\"none\" />\n </svg>\n </button>\n </div>\n\n <div className={'ods-action-drawer__search'}>\n <input\n {...inputProps}\n ref={inputRef}\n className={'ods-action-drawer__input'}\n placeholder=\"Search actions...\"\n data-testid=\"action-drawer-search\"\n />\n </div>\n\n <div className={'ods-action-drawer__list'} data-testid=\"action-drawer-list\">\n {Object.entries(groupedActions).map(([category, items]) => (\n <div key={category} className={'ods-action-drawer__group'}>\n <div className={'ods-action-drawer__category'}>{category}</div>\n {items.map((action) => (\n <div\n key={action.type}\n className={'ods-action-drawer__item'}\n draggable\n onDragStart={() => onActionDrag?.(action.type)}\n data-testid={`action-item-${action.type}`}\n role=\"button\"\n tabIndex={0}\n >\n {action.icon && (\n <div className={'ods-action-drawer__item-icon'}>{action.icon}</div>\n )}\n <div className={'ods-action-drawer__item-info'}>\n <div className={'ods-action-drawer__item-label'}>{action.label}</div>\n {action.description && (\n <div className={'ods-action-drawer__item-desc'}>\n {action.description}\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n ))}\n\n {filteredActions.length === 0 && (\n <div className={'ods-action-drawer__empty'} data-testid=\"action-drawer-empty\">\n No actions found\n </div>\n )}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n );\n}\n","import { type ClassValue, clsx } from \"clsx\";\n\nexport function cn(...inputs: ClassValue[]): string {\n return clsx(inputs);\n}\n","\"use client\";\nimport { type ReactNode, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface AuthCardProps {\n logo?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n /** Small badge rendered next to the title (e.g. \"Organization\"). */\n scope?: ReactNode;\n children: ReactNode;\n divider?: ReactNode;\n footer?: ReactNode;\n className?: string;\n}\n\nexport function AuthCard({\n logo,\n title,\n description,\n scope,\n children,\n divider,\n footer,\n className,\n}: AuthCardProps) {\n return (\n <div className={cn(\"ods-auth-card\", className)}>\n {logo && <div className=\"ods-auth-card__logo\">{logo}</div>}\n <div className=\"ods-auth-card__head\">\n <div className=\"ods-auth-card__title-row\">\n <h1 className=\"ods-auth-card__title\">{title}</h1>\n {scope && <span className=\"ods-auth-card__scope\">{scope}</span>}\n </div>\n {description && <p className=\"ods-auth-card__desc\">{description}</p>}\n </div>\n <div className=\"ods-auth-card__body\">{children}</div>\n {divider && <div className=\"ods-auth-card__divider\">{divider}</div>}\n {footer && <div className=\"ods-auth-card__footer\">{footer}</div>}\n </div>\n );\n}\n\nexport interface AuthDividerProps {\n children?: ReactNode;\n className?: string;\n}\n\nexport function AuthDivider({ children = \"OR\", className }: AuthDividerProps) {\n return (\n <div className={cn(\"ods-auth-divider\", className)}>\n <span className=\"ods-auth-divider__line\" />\n <span className=\"ods-auth-divider__label\">{children}</span>\n <span className=\"ods-auth-divider__line\" />\n </div>\n );\n}\n\n// ─────────────────────────────────────────────\n// AuthSection — labelled group within the body\n// ─────────────────────────────────────────────\nexport interface AuthSectionProps {\n label?: ReactNode;\n description?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\nexport function AuthSection({ label, description, children, className }: AuthSectionProps) {\n return (\n <div className={cn(\"ods-auth-section\", className)}>\n {(label || description) && (\n <div className=\"ods-auth-section__head\">\n {label && <div className=\"ods-auth-section__label\">{label}</div>}\n {description && <div className=\"ods-auth-section__desc\">{description}</div>}\n </div>\n )}\n <div className=\"ods-auth-section__body\">{children}</div>\n </div>\n );\n}\n\n// ─────────────────────────────────────────────\n// AuthTabs — scope switcher (org / personal / developer)\n// ─────────────────────────────────────────────\nexport interface AuthTab {\n id: string;\n label: ReactNode;\n icon?: ReactNode;\n description?: ReactNode;\n content: ReactNode;\n}\n\nexport interface AuthTabsProps {\n tabs: AuthTab[];\n defaultTab?: string;\n value?: string;\n onChange?: (id: string) => void;\n className?: string;\n}\n\nexport function AuthTabs({ tabs, defaultTab, value, onChange, className }: AuthTabsProps) {\n const [internal, setInternal] = useState<string>(defaultTab ?? tabs[0]?.id ?? \"\");\n const active = value ?? internal;\n const select = (id: string) => {\n if (value === undefined) setInternal(id);\n onChange?.(id);\n };\n const activeTab = tabs.find((t) => t.id === active) ?? tabs[0];\n\n return (\n <div className={cn(\"ods-auth-tabs\", className)}>\n <div className=\"ods-auth-tabs__list\" role=\"tablist\">\n {tabs.map((t) => (\n <button\n key={t.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={t.id === active}\n className={cn(\n \"ods-auth-tabs__tab\",\n t.id === active && \"ods-auth-tabs__tab--active\",\n )}\n onClick={() => select(t.id)}\n >\n {t.icon && <span className=\"ods-auth-tabs__icon\">{t.icon}</span>}\n <span className=\"ods-auth-tabs__label\">{t.label}</span>\n {t.description && (\n <span className=\"ods-auth-tabs__desc\">{t.description}</span>\n )}\n </button>\n ))}\n </div>\n {activeTab && <div className=\"ods-auth-tabs__panel\">{activeTab.content}</div>}\n </div>\n );\n}\n\n// ─────────────────────────────────────────────\n// AuthBadge — scope pill for the card head\n// ─────────────────────────────────────────────\nexport type AuthBadgeTone = \"neutral\" | \"org\" | \"personal\" | \"developer\";\n\nexport interface AuthBadgeProps {\n tone?: AuthBadgeTone;\n children: ReactNode;\n className?: string;\n}\n\nexport function AuthBadge({ tone = \"neutral\", children, className }: AuthBadgeProps) {\n return (\n <span className={cn(\"ods-auth-badge\", `ods-auth-badge--${tone}`, className)}>\n {children}\n </span>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface AvatarProps {\n src?: string;\n alt?: string;\n initials?: string;\n /** Seed for deterministic color. Falls back to initials/alt. */\n seed?: string;\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n status?: \"online\" | \"offline\" | \"busy\" | \"away\";\n className?: string;\n}\n\n// 12 accessible gradient pairs — stable across reloads via seeded hash + localStorage.\nconst GRADIENTS: Array<[string, string]> = [\n [\"#6366f1\", \"#8b5cf6\"],\n [\"#ec4899\", \"#f43f5e\"],\n [\"#06b6d4\", \"#3b82f6\"],\n [\"#10b981\", \"#059669\"],\n [\"#f59e0b\", \"#f97316\"],\n [\"#8b5cf6\", \"#d946ef\"],\n [\"#14b8a6\", \"#06b6d4\"],\n [\"#f43f5e\", \"#ec4899\"],\n [\"#3b82f6\", \"#6366f1\"],\n [\"#0ea5e9\", \"#14b8a6\"],\n [\"#a855f7\", \"#7c3aed\"],\n [\"#ef4444\", \"#f59e0b\"],\n];\n\nconst STORAGE_KEY = \"ods:avatar-colors\";\n\nfunction djb2(str: string): number {\n let h = 5381;\n for (let i = 0; i < str.length; i++) h = ((h << 5) + h) + str.charCodeAt(i);\n return h >>> 0;\n}\n\nfunction loadCache(): Record<string, number> {\n if (typeof window === \"undefined\") return {};\n try {\n const raw = window.localStorage.getItem(STORAGE_KEY);\n return raw ? JSON.parse(raw) : {};\n } catch {\n return {};\n }\n}\n\nfunction saveCache(cache: Record<string, number>) {\n if (typeof window === \"undefined\") return;\n try { window.localStorage.setItem(STORAGE_KEY, JSON.stringify(cache)); } catch { /* noop */ }\n}\n\nfunction gradientFor(seed: string): [string, string] {\n const cache = loadCache();\n let idx = cache[seed];\n if (idx === undefined) {\n idx = djb2(seed) % GRADIENTS.length;\n cache[seed] = idx;\n saveCache(cache);\n }\n return GRADIENTS[idx];\n}\n\nexport function Avatar({\n src,\n alt = \"\",\n initials,\n seed,\n size = \"md\",\n status,\n className,\n}: AvatarProps) {\n const resolvedSeed = seed ?? initials ?? alt ?? \"?\";\n const [a, b] = !src ? gradientFor(resolvedSeed) : [\"\", \"\"];\n const bgStyle = !src\n ? { background: `linear-gradient(135deg, ${a} 0%, ${b} 100%)`, color: \"#ffffff\" }\n : undefined;\n\n return (\n <div\n className={cn(\"ods-avatar\", `ods-avatar--${size}`, className)}\n role=\"img\"\n aria-label={alt || initials || \"avatar\"}\n >\n <span className=\"ods-avatar__inner\">\n {src ? (\n <img src={src} alt={alt} className=\"ods-avatar__image\" />\n ) : (\n <span className=\"ods-avatar__initials\" style={bgStyle}>\n {initials || \"?\"}\n </span>\n )}\n </span>\n {status && (\n <span\n className={cn(\"ods-avatar__status\", `ods-avatar__status--${status}`)}\n aria-label={status}\n />\n )}\n </div>\n );\n}\n\nexport interface AvatarStackProps {\n children: ReactNode;\n className?: string;\n /** Max avatars to show; rest collapse into \"+N\". */\n max?: number;\n}\n\nexport function AvatarStack({ children, className, max }: AvatarStackProps) {\n const arr = Array.isArray(children) ? children : [children];\n const items = max && arr.length > max ? arr.slice(0, max) : arr;\n const overflow = max && arr.length > max ? arr.length - max : 0;\n return (\n <div className={cn(\"ods-avatar-stack\", className)}>\n {items}\n {overflow > 0 && (\n <div className=\"ods-avatar ods-avatar--md ods-avatar-stack__overflow\" role=\"img\" aria-label={`+${overflow} more`}>\n <span className=\"ods-avatar__inner\">\n <span className=\"ods-avatar__initials\">+{overflow}</span>\n </span>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface BadgeProps {\n variant?: \"success\" | \"warning\" | \"error\" | \"info\" | \"neutral\";\n size?: \"sm\" | \"md\";\n dot?: boolean;\n closeable?: boolean;\n onClose?: () => void;\n outlined?: boolean;\n children: ReactNode;\n className?: string;\n}\n\nexport function Badge({\n variant = \"neutral\",\n size = \"md\",\n dot = false,\n closeable = false,\n onClose,\n outlined = false,\n children,\n className,\n}: BadgeProps) {\n return (\n <span\n className={cn(\n 'ods-badge',\n `ods-badge--${variant}`,\n `ods-badge--${size}`,\n outlined && 'ods-badge--outlined',\n className,\n )}\n >\n {dot && <span className={'ods-badge__dot'} aria-hidden=\"true\" />}\n <span className={'ods-badge__text'}>{children}</span>\n {closeable && (\n <button\n type=\"button\"\n className={'ods-badge__close'}\n onClick={onClose}\n aria-label=\"Remove\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4 4L10 10M10 4L4 10\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n )}\n </span>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface BannerProps {\n variant?: \"info\" | \"success\" | \"warning\" | \"error\" | \"promo\";\n icon?: ReactNode;\n title?: ReactNode;\n description?: ReactNode;\n action?: ReactNode;\n dismissible?: boolean;\n onDismiss?: () => void;\n children?: ReactNode;\n className?: string;\n}\n\nexport function Banner({\n variant = \"info\",\n icon,\n title,\n description,\n action,\n dismissible = false,\n onDismiss,\n children,\n className,\n}: BannerProps) {\n return (\n <div\n role=\"status\"\n className={cn(\"ods-banner\", `ods-banner--${variant}`, className)}\n >\n {icon && <span className=\"ods-banner__icon\" aria-hidden=\"true\">{icon}</span>}\n <div className=\"ods-banner__body\">\n {title && <div className=\"ods-banner__title\">{title}</div>}\n {description && <div className=\"ods-banner__description\">{description}</div>}\n {children}\n </div>\n {action && <div className=\"ods-banner__action\">{action}</div>}\n {dismissible && (\n <button\n type=\"button\"\n className=\"ods-banner__dismiss\"\n onClick={onDismiss}\n aria-label=\"Dismiss\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M4 4L12 12M12 4L4 12\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n )}\n </div>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface BarDatum {\n label: ReactNode;\n value: number;\n highlighted?: boolean;\n}\n\nexport interface BarChartProps {\n data: BarDatum[];\n height?: number;\n color?: string;\n highlightColor?: string;\n title?: ReactNode;\n total?: ReactNode;\n className?: string;\n}\n\nexport function BarChart({\n data,\n height = 120,\n color = \"#c4b5fe\",\n highlightColor,\n title,\n total,\n className,\n}: BarChartProps) {\n const max = Math.max(1, ...data.map((d) => d.value));\n const hiColor = highlightColor ?? \"linear-gradient(180deg, #8b5cf6 0%, #5b4bd1 100%)\";\n\n return (\n <div className={cn(\"ods-bar-chart\", className)}>\n {(title || total) && (\n <div className=\"ods-bar-chart__head\">\n {title && <div className=\"ods-bar-chart__title\">{title}</div>}\n {total && <div className=\"ods-bar-chart__total\">{total}</div>}\n </div>\n )}\n <div className=\"ods-bar-chart__bars\" style={{ height }}>\n {data.map((d, i) => {\n const h = (d.value / max) * (height - 8);\n return (\n <div key={i} className={cn(\"ods-bar-chart__col\", d.highlighted && \"ods-bar-chart__col--hi\")}>\n <div\n className=\"ods-bar-chart__bar\"\n style={{\n height: Math.max(4, h),\n background: d.highlighted ? hiColor : color,\n }}\n aria-label={`${d.label}: ${d.value}`}\n />\n </div>\n );\n })}\n </div>\n <div className=\"ods-bar-chart__labels\">\n {data.map((d, i) => (\n <span key={i} className={cn(\"ods-bar-chart__label\", d.highlighted && \"ods-bar-chart__label--hi\")}>\n {d.label}\n </span>\n ))}\n </div>\n </div>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface BlogCardProps {\n cover?: ReactNode;\n category?: ReactNode;\n meta?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n href?: string;\n onClick?: () => void;\n className?: string;\n}\n\nexport function BlogCard({ cover, category, meta, title, description, href, onClick, className }: BlogCardProps) {\n const interactive = Boolean(href || onClick);\n const Comp = href ? \"a\" : \"div\";\n return (\n <Comp\n href={href}\n onClick={onClick as any}\n className={cn(\"ods-blog-card\", interactive && \"ods-blog-card--interactive\", className)}\n >\n <div className=\"ods-blog-card__cover\">{cover}</div>\n <div className=\"ods-blog-card__body\">\n <div className=\"ods-blog-card__meta\">\n {category && <span className=\"ods-blog-card__category\">{category}</span>}\n {meta && <span className=\"ods-blog-card__date\">{meta}</span>}\n </div>\n <div className=\"ods-blog-card__title\">{title}</div>\n {description && <div className=\"ods-blog-card__desc\">{description}</div>}\n </div>\n </Comp>\n );\n}\n","\"use client\";\nimport { type ReactNode, useRef } from \"react\";\nimport { useBreadcrumbItem, useBreadcrumbs } from \"react-aria\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface BreadcrumbItemData {\n label: string;\n href?: string;\n icon?: ReactNode;\n}\n\nexport interface BreadcrumbProps {\n items: BreadcrumbItemData[];\n separator?: ReactNode;\n className?: string;\n}\n\nfunction BreadcrumbItem({ item, isCurrent }: { item: BreadcrumbItemData; isCurrent: boolean }) {\n const ref = useRef<HTMLElement>(null);\n const { itemProps } = useBreadcrumbItem(\n { children: item.label, isCurrent, elementType: item.href ? \"a\" : \"span\" },\n ref,\n );\n\n const content = (\n <>\n {item.icon && <span className={'ods-breadcrumb__icon'}>{item.icon}</span>}\n <span>{item.label}</span>\n </>\n );\n\n if (item.href && !isCurrent) {\n return (\n <a\n {...itemProps}\n ref={ref as any}\n href={item.href}\n className={cn(\n 'ods-breadcrumb__link',\n isCurrent && 'ods-breadcrumb__link--current',\n )}\n >\n {content}\n </a>\n );\n }\n\n return (\n <span\n {...itemProps}\n ref={ref as any}\n className={cn(\n 'ods-breadcrumb__link',\n isCurrent && 'ods-breadcrumb__link--current',\n )}\n >\n {content}\n </span>\n );\n}\n\nexport function Breadcrumb({\n items,\n separator = (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path\n fillRule=\"evenodd\"\n d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n className,\n}: BreadcrumbProps) {\n const { navProps } = useBreadcrumbs({});\n\n return (\n <nav {...navProps} className={cn('ods-breadcrumb', className)}>\n <ol className={'ods-breadcrumb__list'}>\n {items.map((item, idx) => {\n const isCurrent = idx === items.length - 1;\n return (\n <li key={idx} className={'ods-breadcrumb__item'}>\n {idx > 0 && (\n <span className={'ods-breadcrumb__separator'} aria-hidden=\"true\">\n {separator}\n </span>\n )}\n <BreadcrumbItem item={item} isCurrent={isCurrent} />\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n","\"use client\";\nimport { motion } from \"framer-motion\";\nimport { type ButtonHTMLAttributes, type ReactNode, useRef } from \"react\";\nimport { useButton } from \"react-aria\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface ButtonProps\n extends Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"onDrag\" | \"onDragStart\" | \"onDragEnd\" | \"onAnimationStart\"\n > {\n variant?: \"primary\" | \"secondary\" | \"ghost\" | \"danger\" | \"icon\";\n size?: \"sm\" | \"md\" | \"lg\";\n loading?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n fullWidth?: boolean;\n children?: ReactNode;\n}\n\nexport function Button({\n variant = \"primary\",\n size = \"md\",\n loading = false,\n disabled = false,\n leftIcon,\n rightIcon,\n fullWidth = false,\n className,\n children,\n ...props\n}: ButtonProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const isDisabled = disabled || loading;\n\n const { buttonProps } = useButton(\n { isDisabled, onPress: props.onClick as any },\n ref,\n );\n\n // Strip Framer-conflicting props from React Aria output\n const { onDrag, onDragStart, onDragEnd, onAnimationStart, ...safeButtonProps } =\n buttonProps as any;\n\n return (\n <motion.button\n {...safeButtonProps}\n ref={ref}\n className={cn(\n \"ods-btn\",\n `ods-btn--${variant}`,\n `ods-btn--${size}`,\n loading && \"ods-btn--loading\",\n fullWidth && \"ods-btn--full\",\n className,\n )}\n data-loading={loading || undefined}\n whileTap={isDisabled ? undefined : { scale: 0.97 }}\n transition={{ duration: 0.1 }}\n >\n {/* Content layer — hidden behind spinner when loading */}\n <span className=\"ods-btn__content\" aria-hidden={loading}>\n {leftIcon && <span className=\"ods-btn__icon ods-btn__icon--left\">{leftIcon}</span>}\n {children && <span className=\"ods-btn__label\">{children}</span>}\n {rightIcon && <span className=\"ods-btn__icon ods-btn__icon--right\">{rightIcon}</span>}\n </span>\n {/* Spinner overlay — absolutely positioned, replaces content when loading */}\n {loading && (\n <span className=\"ods-btn__spinner\" role=\"status\" aria-label=\"Loading\">\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeDasharray=\"32\"\n strokeDashoffset=\"12\"\n />\n </svg>\n </span>\n )}\n </motion.button>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface CalloutProps {\n variant?: \"tip\" | \"info\" | \"warning\" | \"danger\" | \"success\";\n title?: ReactNode;\n icon?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\nexport function Callout({\n variant = \"tip\",\n title,\n icon,\n children,\n className,\n}: CalloutProps) {\n return (\n <div className={cn(\"ods-callout\", `ods-callout--${variant}`, className)}>\n {icon && <span className=\"ods-callout__icon\" aria-hidden=\"true\">{icon}</span>}\n <div className=\"ods-callout__body\">\n {title && <div className=\"ods-callout__title\">{title}</div>}\n <div className=\"ods-callout__content\">{children}</div>\n </div>\n </div>\n );\n}\n","\"use client\";\nimport { useMemo, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport type DateRange = { start: Date | null; end: Date | null };\n\nexport interface CalendarProps {\n mode?: \"single\" | \"range\";\n value?: Date | DateRange | null;\n onChange?: (value: Date | DateRange | null) => void;\n month?: Date; // controlled visible month (1st of month)\n onMonthChange?: (month: Date) => void;\n minDate?: Date;\n maxDate?: Date;\n weekStartsOn?: 0 | 1; // 0 = Sun, 1 = Mon\n className?: string;\n}\n\nconst MONTHS = [\n \"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\n \"July\", \"August\", \"September\", \"October\", \"November\", \"December\",\n];\n\nconst sameDay = (a: Date | null, b: Date | null) =>\n !!a && !!b && a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\n\nconst startOfMonth = (d: Date) => new Date(d.getFullYear(), d.getMonth(), 1);\nconst addMonths = (d: Date, n: number) => new Date(d.getFullYear(), d.getMonth() + n, 1);\nconst isBefore = (a: Date, b: Date) => a.getTime() < b.getTime();\n\nexport function Calendar({\n mode = \"single\",\n value = null,\n onChange,\n month,\n onMonthChange,\n minDate,\n maxDate,\n weekStartsOn = 0,\n className,\n}: CalendarProps) {\n const [internalMonth, setInternalMonth] = useState(() => startOfMonth(month ?? new Date()));\n const visibleMonth = month ?? internalMonth;\n const setMonth = (d: Date) => {\n onMonthChange ? onMonthChange(d) : setInternalMonth(d);\n };\n\n const today = new Date();\n const single = mode === \"single\" ? (value as Date | null) : null;\n const range = mode === \"range\" ? (value as DateRange | null) ?? { start: null, end: null } : { start: null, end: null };\n\n const dayNames = useMemo(() => {\n const all = [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"];\n return weekStartsOn === 1 ? [...all.slice(1), all[0]] : all;\n }, [weekStartsOn]);\n\n // Build 6×7 grid for the visible month\n const cells = useMemo(() => {\n const first = startOfMonth(visibleMonth);\n const startWeekday = first.getDay();\n const offset = (startWeekday - weekStartsOn + 7) % 7;\n const start = new Date(first);\n start.setDate(start.getDate() - offset);\n const out: { date: Date; outside: boolean }[] = [];\n for (let i = 0; i < 42; i++) {\n const d = new Date(start);\n d.setDate(start.getDate() + i);\n out.push({ date: d, outside: d.getMonth() !== visibleMonth.getMonth() });\n }\n return out;\n }, [visibleMonth, weekStartsOn]);\n\n const isDisabled = (d: Date) =>\n (minDate && isBefore(d, new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()))) ||\n (maxDate && isBefore(new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()), d));\n\n const inRange = (d: Date) =>\n range.start && range.end && d >= range.start && d <= range.end;\n\n const handleSelect = (d: Date) => {\n if (isDisabled(d)) return;\n if (mode === \"single\") {\n onChange?.(d);\n return;\n }\n if (!range.start || (range.start && range.end)) {\n onChange?.({ start: d, end: null });\n } else if (isBefore(d, range.start)) {\n onChange?.({ start: d, end: range.start });\n } else {\n onChange?.({ start: range.start, end: d });\n }\n };\n\n return (\n <div className={cn(\"ods-calendar\", className)}>\n <div className=\"ods-calendar__head\">\n <button\n type=\"button\"\n className=\"ods-calendar__nav\"\n onClick={() => setMonth(addMonths(visibleMonth, -1))}\n aria-label=\"Previous month\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M9 3 5 7l4 4\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n <div className=\"ods-calendar__title\" aria-live=\"polite\">\n {MONTHS[visibleMonth.getMonth()]} {visibleMonth.getFullYear()}\n </div>\n <button\n type=\"button\"\n className=\"ods-calendar__nav\"\n onClick={() => setMonth(addMonths(visibleMonth, 1))}\n aria-label=\"Next month\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5 3l4 4-4 4\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n </div>\n <div className=\"ods-calendar__dow\">\n {dayNames.map((n, i) => (\n <span key={i} className=\"ods-calendar__dow-cell\">{n}</span>\n ))}\n </div>\n <div className=\"ods-calendar__grid\" role=\"grid\">\n {cells.map(({ date, outside }, i) => {\n const isToday = sameDay(date, today);\n const isSelected = mode === \"single\"\n ? sameDay(date, single)\n : sameDay(date, range.start) || sameDay(date, range.end);\n const isStart = sameDay(date, range.start);\n const isEnd = sameDay(date, range.end);\n const inside = inRange(date);\n const disabled = !!isDisabled(date);\n return (\n <button\n key={i}\n type=\"button\"\n role=\"gridcell\"\n disabled={disabled}\n onClick={() => handleSelect(date)}\n className={cn(\n \"ods-calendar__cell\",\n outside && \"ods-calendar__cell--outside\",\n isToday && \"ods-calendar__cell--today\",\n isSelected && \"ods-calendar__cell--selected\",\n inside && !isSelected && \"ods-calendar__cell--inrange\",\n isStart && \"ods-calendar__cell--start\",\n isEnd && \"ods-calendar__cell--end\",\n disabled && \"ods-calendar__cell--disabled\",\n )}\n aria-selected={isSelected}\n aria-current={isToday ? \"date\" : undefined}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","\"use client\";\nimport { motion } from \"framer-motion\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface CardProps\n extends Omit<\n HTMLAttributes<HTMLDivElement>,\n \"onDrag\" | \"onDragStart\" | \"onDragEnd\" | \"onAnimationStart\"\n > {\n variant?: \"default\" | \"glass\" | \"elevated\" | \"selected\" | \"outlined\";\n padding?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n radius?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n hoverable?: boolean;\n children: ReactNode;\n className?: string;\n}\n\nexport function Card({\n variant = \"default\",\n padding = \"md\",\n radius = \"xl\",\n hoverable = false,\n onClick,\n children,\n className,\n ...props\n}: CardProps) {\n const { onDrag, onDragStart, onDragEnd, onAnimationStart, ...safeProps } = props as any;\n const isInteractive = Boolean(onClick);\n\n return (\n <motion.div\n {...safeProps}\n onClick={onClick}\n className={cn(\n \"ods-card\",\n `ods-card--${variant}`,\n `ods-card--pad-${padding}`,\n `ods-card--radius-${radius}`,\n (hoverable || isInteractive) && \"ods-card--hoverable\",\n isInteractive && \"ods-card--clickable\",\n className,\n )}\n whileHover={\n hoverable || isInteractive\n ? { y: -2, transition: { duration: 0.15 } }\n : undefined\n }\n whileTap={isInteractive ? { scale: 0.99 } : undefined}\n role={isInteractive ? \"button\" : undefined}\n tabIndex={isInteractive ? 0 : undefined}\n >\n {children}\n </motion.div>\n );\n}\n","\"use client\";\nimport { type InputHTMLAttributes, type ReactNode, useRef } from \"react\";\nimport { useCheckbox } from \"react-aria\";\nimport { useToggleState } from \"react-stately\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"onChange\" | \"size\"> {\n checked?: boolean;\n defaultChecked?: boolean;\n onChange?: (isSelected: boolean) => void;\n indeterminate?: boolean;\n disabled?: boolean;\n label?: string | ReactNode;\n size?: \"sm\" | \"md\";\n className?: string;\n}\n\nexport function Checkbox({\n checked,\n defaultChecked,\n onChange,\n indeterminate = false,\n disabled = false,\n label,\n size = \"md\",\n className,\n ...props\n}: CheckboxProps) {\n const ref = useRef<HTMLInputElement>(null);\n\n const state = useToggleState({\n isSelected: checked,\n defaultSelected: defaultChecked,\n onChange,\n });\n\n const { inputProps } = useCheckbox(\n {\n isSelected: state.isSelected,\n isIndeterminate: indeterminate,\n isDisabled: disabled,\n onChange,\n \"aria-label\": typeof label === \"string\" ? label : undefined,\n },\n state,\n ref,\n );\n\n const isChecked = state.isSelected;\n\n return (\n <label\n className={cn(\n 'ods-checkbox',\n `ods-checkbox--${size}`,\n disabled && 'ods-checkbox--disabled',\n className,\n )}\n >\n <input {...inputProps} ref={ref} className={'ods-checkbox__input'} />\n <div\n className={cn(\n 'ods-checkbox__box',\n isChecked && !indeterminate && 'ods-checkbox__box--checked',\n indeterminate && 'ods-checkbox__box--indeterminate',\n )}\n aria-hidden=\"true\"\n >\n {indeterminate ? (\n <svg\n className={'ods-checkbox__dash'}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <line\n x1=\"2\"\n y1=\"6\"\n x2=\"10\"\n y2=\"6\"\n stroke=\"white\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n ) : (\n <svg\n className={cn(\n 'ods-checkbox__checkmark',\n isChecked && 'ods-checkbox__checkmark--checked',\n )}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2 6L5 9L10 3\"\n stroke=\"white\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </div>\n {label && <span className={'ods-checkbox__label'}>{label}</span>}\n </label>\n );\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport React, {SetStateAction, useCallback, useEffect, useReducer, useRef, useState} from 'react';\n\n// Use the earliest effect possible to reset the ref below.\nconst useEarlyEffect: typeof React.useLayoutEffect = typeof document !== 'undefined'\n ? React['useInsertionEffect'] ?? React.useLayoutEffect\n : () => {};\n\nexport function useControlledState<T, C = T>(value: Exclude<T, undefined>, defaultValue: Exclude<T, undefined> | undefined, onChange?: (v: C, ...args: any[]) => void): [T, (value: SetStateAction<T>, ...args: any[]) => void];\nexport function useControlledState<T, C = T>(value: Exclude<T, undefined> | undefined, defaultValue: Exclude<T, undefined>, onChange?: (v: C, ...args: any[]) => void): [T, (value: SetStateAction<T>, ...args: any[]) => void];\nexport function useControlledState<T, C = T>(value: T, defaultValue: T, onChange?: (v: C, ...args: any[]) => void): [T, (value: SetStateAction<T>, ...args: any[]) => void] {\n // Store the value in both state and a ref. The state value will only be used when uncontrolled.\n // The ref is used to track the most current value, which is passed to the function setState callback.\n let [stateValue, setStateValue] = useState(value || defaultValue);\n let valueRef = useRef(stateValue);\n\n let isControlledRef = useRef(value !== undefined);\n let isControlled = value !== undefined;\n useEffect(() => {\n let wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled && process.env.NODE_ENV !== 'production') {\n console.warn(`WARN: A component changed from ${wasControlled ? 'controlled' : 'uncontrolled'} to ${isControlled ? 'controlled' : 'uncontrolled'}.`);\n }\n isControlledRef.current = isControlled;\n }, [isControlled]);\n\n // After each render, update the ref to the current value.\n // This ensures that the setState callback argument is reset.\n // Note: the effect should not have any dependencies so that controlled values always reset.\n let currentValue = isControlled ? value : stateValue;\n useEarlyEffect(() => {\n valueRef.current = currentValue;\n });\n\n let [, forceUpdate] = useReducer(() => ({}), {});\n let setValue = useCallback((value: SetStateAction<T>, ...args: any[]) => {\n // @ts-ignore - TS doesn't know that T cannot be a function.\n let newValue = typeof value === 'function' ? value(valueRef.current) : value;\n if (!Object.is(valueRef.current, newValue)) {\n // Update the ref so that the next setState callback has the most recent value.\n valueRef.current = newValue;\n\n setStateValue(newValue);\n\n // Always trigger a re-render, even when controlled, so that the layout effect above runs to reset the value.\n forceUpdate();\n\n // Trigger onChange. Note that if setState is called multiple times in a single event,\n // onChange will be called for each one instead of only once.\n onChange?.(newValue, ...args);\n }\n }, [onChange]);\n\n return [currentValue, setValue];\n}\n","/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Context, createContext, useContext, useEffect, useMemo, useRef, useState} from 'react';\nimport {Validation, ValidationErrors, ValidationFunction, ValidationResult} from '@react-types/shared';\n\nexport const VALID_VALIDITY_STATE: ValidityState = {\n badInput: false,\n customError: false,\n patternMismatch: false,\n rangeOverflow: false,\n rangeUnderflow: false,\n stepMismatch: false,\n tooLong: false,\n tooShort: false,\n typeMismatch: false,\n valueMissing: false,\n valid: true\n};\n\nconst CUSTOM_VALIDITY_STATE: ValidityState = {\n ...VALID_VALIDITY_STATE,\n customError: true,\n valid: false\n};\n\nexport const DEFAULT_VALIDATION_RESULT: ValidationResult = {\n isInvalid: false,\n validationDetails: VALID_VALIDITY_STATE,\n validationErrors: []\n};\n\nexport const FormValidationContext: Context<ValidationErrors> = createContext<ValidationErrors>({});\n\n// Private props that we pass from useFormValidationState to children.\n// Ideally we'd use a Symbol for this, but React doesn't support them: https://github.com/facebook/react/issues/7552\n// This needs to be stable across server and client module evaluation for SSR hydration.\nexport const privateValidationStateProp: string = '__reactAriaFormValidationState';\n\ninterface FormValidationProps<T> extends Validation<T> {\n builtinValidation?: ValidationResult,\n name?: string | string[],\n value: T | null\n}\n\nexport interface FormValidationState {\n /** Realtime validation results, updated as the user edits the value. */\n realtimeValidation: ValidationResult,\n /** Currently displayed validation results, updated when the user commits their changes. */\n displayValidation: ValidationResult,\n /** Updates the current validation result. Not displayed to the user until `commitValidation` is called. */\n updateValidation(result: ValidationResult): void,\n /** Resets the displayed validation state to valid when the user resets the form. */\n resetValidation(): void,\n /** Commits the realtime validation so it is displayed to the user. */\n commitValidation(): void\n}\n\nexport function useFormValidationState<T>(props: FormValidationProps<T>): FormValidationState {\n // Private prop for parent components to pass state to children.\n if (props[privateValidationStateProp]) {\n let {realtimeValidation, displayValidation, updateValidation, resetValidation, commitValidation} = props[privateValidationStateProp] as FormValidationState;\n return {realtimeValidation, displayValidation, updateValidation, resetValidation, commitValidation};\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useFormValidationStateImpl(props);\n}\n\nfunction useFormValidationStateImpl<T>(props: FormValidationProps<T>): FormValidationState {\n let {isInvalid, validationState, name, value, builtinValidation, validate, validationBehavior = 'aria'} = props;\n\n // backward compatibility.\n if (validationState) {\n isInvalid ||= validationState === 'invalid';\n }\n\n // If the isInvalid prop is controlled, update validation result in realtime.\n let controlledError: ValidationResult | null = isInvalid !== undefined ? {\n isInvalid,\n validationErrors: [],\n validationDetails: CUSTOM_VALIDITY_STATE\n } : null;\n\n // Perform custom client side validation.\n let clientError: ValidationResult | null = useMemo(() => {\n if (!validate || value == null) {\n return null;\n }\n let validateErrors = runValidate(validate, value);\n return getValidationResult(validateErrors);\n }, [validate, value]);\n\n if (builtinValidation?.validationDetails.valid) {\n builtinValidation = undefined;\n }\n\n // Get relevant server errors from the form.\n let serverErrors = useContext(FormValidationContext);\n let serverErrorMessages = useMemo(() => {\n if (name) {\n return Array.isArray(name) ? name.flatMap(name => asArray(serverErrors[name])) : asArray(serverErrors[name]);\n }\n return [];\n }, [serverErrors, name]);\n\n // Show server errors when the form gets a new value, and clear when the user changes the value.\n let [lastServerErrors, setLastServerErrors] = useState(serverErrors);\n let [isServerErrorCleared, setServerErrorCleared] = useState(false);\n if (serverErrors !== lastServerErrors) {\n setLastServerErrors(serverErrors);\n setServerErrorCleared(false);\n }\n\n let serverError: ValidationResult | null = useMemo(() =>\n getValidationResult(isServerErrorCleared ? [] : serverErrorMessages),\n [isServerErrorCleared, serverErrorMessages]\n );\n\n // Track the next validation state in a ref until commitValidation is called.\n let nextValidation = useRef(DEFAULT_VALIDATION_RESULT);\n let [currentValidity, setCurrentValidity] = useState(DEFAULT_VALIDATION_RESULT);\n\n let lastError = useRef(DEFAULT_VALIDATION_RESULT);\n let commitValidation = () => {\n if (!commitQueued) {\n return;\n }\n\n setCommitQueued(false);\n let error = clientError || builtinValidation || nextValidation.current;\n if (!isEqualValidation(error, lastError.current)) {\n lastError.current = error;\n setCurrentValidity(error);\n }\n };\n\n let [commitQueued, setCommitQueued] = useState(false);\n useEffect(commitValidation);\n\n // realtimeValidation is used to update the native input element's state based on custom validation logic.\n // displayValidation is the currently displayed validation state that the user sees (e.g. on input change/form submit).\n // With validationBehavior=\"aria\", all errors are displayed in realtime rather than on submit.\n let realtimeValidation = controlledError || serverError || clientError || builtinValidation || DEFAULT_VALIDATION_RESULT;\n let displayValidation = validationBehavior === 'native'\n ? controlledError || serverError || currentValidity\n : controlledError || serverError || clientError || builtinValidation || currentValidity;\n\n return {\n realtimeValidation,\n displayValidation,\n updateValidation(value) {\n // If validationBehavior is 'aria', update in realtime. Otherwise, store in a ref until commit.\n if (validationBehavior === 'aria' && !isEqualValidation(currentValidity, value)) {\n setCurrentValidity(value);\n } else {\n nextValidation.current = value;\n }\n },\n resetValidation() {\n // Update the currently displayed validation state to valid on form reset,\n // even if the native validity says it isn't. It'll show again on the next form submit.\n let error = DEFAULT_VALIDATION_RESULT;\n if (!isEqualValidation(error, lastError.current)) {\n lastError.current = error;\n setCurrentValidity(error);\n }\n\n // Do not commit validation after the next render. This avoids a condition where\n // useSelect calls commitValidation inside an onReset handler.\n if (validationBehavior === 'native') {\n setCommitQueued(false);\n }\n\n setServerErrorCleared(true);\n },\n commitValidation() {\n // Commit validation state so the user sees it on blur/change/submit. Also clear any server errors.\n // Wait until after the next render to commit so that the latest value has been validated.\n if (validationBehavior === 'native') {\n setCommitQueued(true);\n }\n setServerErrorCleared(true);\n }\n };\n}\n\nfunction asArray<T>(v: T | T[]): T[] {\n if (!v) {\n return [];\n }\n\n return Array.isArray(v) ? v : [v];\n}\n\nfunction runValidate<T>(validate: ValidationFunction<T>, value: T): string[] {\n if (typeof validate === 'function') {\n let e = validate(value);\n if (e && typeof e !== 'boolean') {\n return asArray(e);\n }\n }\n\n return [];\n}\n\nfunction getValidationResult(errors: string[]): ValidationResult | null {\n return errors.length ? {\n isInvalid: true,\n validationErrors: errors,\n validationDetails: CUSTOM_VALIDITY_STATE\n } : null;\n}\n\nfunction isEqualValidation(a: ValidationResult | null, b: ValidationResult | null): boolean {\n if (a === b) {\n return true;\n }\n\n return !!a && !!b\n && a.isInvalid === b.isInvalid\n && a.validationErrors.length === b.validationErrors.length\n && a.validationErrors.every((a, i) => a === b.validationErrors[i])\n && Object.entries(a.validationDetails).every(([k, v]) => b.validationDetails[k] === v);\n}\n\nexport function mergeValidation(...results: ValidationResult[]): ValidationResult {\n let errors = new Set<string>();\n let isInvalid = false;\n let validationDetails = {\n ...VALID_VALIDITY_STATE\n };\n\n for (let v of results) {\n for (let e of v.validationErrors) {\n errors.add(e);\n }\n\n // Only these properties apply for checkboxes.\n isInvalid ||= v.isInvalid;\n for (let key in validationDetails) {\n validationDetails[key] ||= v.validationDetails[key];\n }\n }\n\n validationDetails.valid = !isInvalid;\n return {\n isInvalid,\n validationErrors: [...errors],\n validationDetails\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport type {Collection, Node} from '@react-types/shared';\n\nexport function getChildNodes<T>(node: Node<T>, collection: Collection<Node<T>>): Iterable<Node<T>> {\n // New API: call collection.getChildren with the node key.\n if (typeof collection.getChildren === 'function') {\n return collection.getChildren(node.key);\n }\n\n // Old API: access childNodes directly.\n return node.childNodes;\n}\n\nexport function getFirstItem<T>(iterable: Iterable<T>): T | undefined {\n return getNthItem(iterable, 0);\n}\n\nexport function getNthItem<T>(iterable: Iterable<T>, index: number): T | undefined {\n if (index < 0) {\n return undefined;\n }\n\n let i = 0;\n for (let item of iterable) {\n if (i === index) {\n return item;\n }\n\n i++;\n }\n}\n\nexport function getLastItem<T>(iterable: Iterable<T>): T | undefined {\n let lastItem: T | undefined = undefined;\n for (let value of iterable) {\n lastItem = value;\n }\n\n return lastItem;\n}\n\nexport function compareNodeOrder<T>(collection: Collection<Node<T>>, a: Node<T>, b: Node<T>): number {\n // If the two nodes have the same parent, compare their indices.\n if (a.parentKey === b.parentKey) {\n return a.index - b.index;\n }\n\n // Otherwise, collect all of the ancestors from each node, and find the first one that doesn't match starting from the root.\n // Include the base nodes in case we are comparing nodes of different levels so that we can compare the higher node to the lower level node's\n // ancestor of the same level\n let aAncestors = [...getAncestors(collection, a), a];\n let bAncestors = [...getAncestors(collection, b), b];\n let firstNonMatchingAncestor = aAncestors.slice(0, bAncestors.length).findIndex((a, i) => a !== bAncestors[i]);\n if (firstNonMatchingAncestor !== -1) {\n // Compare the indices of two children within the common ancestor.\n a = aAncestors[firstNonMatchingAncestor];\n b = bAncestors[firstNonMatchingAncestor];\n return a.index - b.index;\n }\n\n // If there isn't a non matching ancestor, we might be in a case where one of the nodes is the ancestor of the other.\n if (aAncestors.findIndex(node => node === b) >= 0) {\n return 1;\n } else if (bAncestors.findIndex(node => node === a) >= 0) {\n return -1;\n }\n\n // 🤷\n return -1;\n}\n\nfunction getAncestors<T>(collection: Collection<Node<T>>, node: Node<T>): Node<T>[] {\n let parents: Node<T>[] = [];\n\n let currNode: Node<T> | null = node;\n while (currNode?.parentKey != null) {\n currNode = collection.getItem(currNode.parentKey);\n if (currNode) {\n parents.unshift(currNode);\n }\n }\n\n return parents;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Collection, Key, Node} from '@react-types/shared';\n\nexport class ListCollection<T> implements Collection<Node<T>> {\n private keyMap: Map<Key, Node<T>> = new Map();\n private iterable: Iterable<Node<T>>;\n private firstKey: Key | null = null;\n private lastKey: Key | null = null;\n private _size: number;\n\n constructor(nodes: Iterable<Node<T>>) {\n this.iterable = nodes;\n\n let visit = (node: Node<T>) => {\n this.keyMap.set(node.key, node);\n\n if (node.childNodes && node.type === 'section') {\n for (let child of node.childNodes) {\n visit(child);\n }\n }\n };\n\n for (let node of nodes) {\n visit(node);\n }\n\n let last: Node<T> | null = null;\n let index = 0;\n let size = 0;\n for (let [key, node] of this.keyMap) {\n if (last) {\n last.nextKey = key;\n node.prevKey = last.key;\n } else {\n this.firstKey = key;\n node.prevKey = undefined;\n }\n\n if (node.type === 'item') {\n node.index = index++;\n }\n\n // Only count sections and items when determining size so that\n // loaders and separators in RAC/S2 don't influence the emptyState determination\n if (node.type === 'section' || node.type === 'item') {\n size++;\n }\n\n last = node;\n\n // Set nextKey as undefined since this might be the last node\n // If it isn't the last node, last.nextKey will properly set at start of new loop\n last.nextKey = undefined;\n }\n this._size = size;\n this.lastKey = last?.key ?? null;\n }\n\n *[Symbol.iterator](): IterableIterator<Node<T>> {\n yield* this.iterable;\n }\n\n get size(): number {\n return this._size;\n }\n\n getKeys(): IterableIterator<Key> {\n return this.keyMap.keys();\n }\n\n getKeyBefore(key: Key): Key | null {\n let node = this.keyMap.get(key);\n return node ? node.prevKey ?? null : null;\n }\n\n getKeyAfter(key: Key): Key | null {\n let node = this.keyMap.get(key);\n return node ? node.nextKey ?? null : null;\n }\n\n getFirstKey(): Key | null {\n return this.firstKey;\n }\n\n getLastKey(): Key | null {\n return this.lastKey;\n }\n\n getItem(key: Key): Node<T> | null {\n return this.keyMap.get(key) ?? null;\n }\n\n at(idx: number): Node<T> | null {\n const keys = [...this.getKeys()];\n return this.getItem(keys[idx]);\n }\n\n getChildren(key: Key): Iterable<Node<T>> {\n let node = this.keyMap.get(key);\n return node?.childNodes || [];\n }\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Key} from '@react-types/shared';\n\n/**\n * A Selection is a special Set containing Keys, which also has an anchor\n * and current selected key for use when range selecting.\n */\nexport class Selection extends Set<Key> {\n anchorKey: Key | null;\n currentKey: Key | null;\n\n constructor(keys?: Iterable<Key> | Selection, anchorKey?: Key | null, currentKey?: Key | null) {\n super(keys);\n if (keys instanceof Selection) {\n this.anchorKey = anchorKey ?? keys.anchorKey;\n this.currentKey = currentKey ?? keys.currentKey;\n } else {\n this.anchorKey = anchorKey ?? null;\n this.currentKey = currentKey ?? null;\n }\n }\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DisabledBehavior, FocusStrategy, Key, MultipleSelection, SelectionBehavior, SelectionMode} from '@react-types/shared';\nimport {MultipleSelectionState} from './types';\nimport {Selection} from './Selection';\nimport {useControlledState} from '../utils/useControlledState';\nimport {useEffect, useMemo, useRef, useState} from 'react';\n\nfunction equalSets(setA, setB) {\n if (setA.size !== setB.size) {\n return false;\n }\n\n for (let item of setA) {\n if (!setB.has(item)) {\n return false;\n }\n }\n\n return true;\n}\n\nexport interface MultipleSelectionStateProps extends MultipleSelection {\n /**\n * How multiple selection should behave in the collection.\n * @default 'toggle'\n */\n selectionBehavior?: SelectionBehavior,\n /** Whether onSelectionChange should fire even if the new set of keys is the same as the last. */\n allowDuplicateSelectionEvents?: boolean,\n /**\n * Whether `disabledKeys` applies to all interactions, or only selection.\n * @default 'all'\n */\n disabledBehavior?: DisabledBehavior\n}\n\n/**\n * Manages state for multiple selection and focus in a collection.\n */\nexport function useMultipleSelectionState(props: MultipleSelectionStateProps): MultipleSelectionState {\n let {\n selectionMode = 'none' as SelectionMode,\n disallowEmptySelection = false,\n allowDuplicateSelectionEvents,\n selectionBehavior: selectionBehaviorProp = 'toggle',\n disabledBehavior = 'all'\n } = props;\n\n // We want synchronous updates to `isFocused` and `focusedKey` after their setters are called.\n // But we also need to trigger a react re-render. So, we have both a ref (sync) and state (async).\n let isFocusedRef = useRef(false);\n let [, setFocused] = useState(false);\n let focusedKeyRef = useRef<Key | null>(null);\n let childFocusStrategyRef = useRef<FocusStrategy | null>(null);\n let [, setFocusedKey] = useState<Key | null>(null);\n let selectedKeysProp = useMemo(() => convertSelection(props.selectedKeys), [props.selectedKeys]);\n let defaultSelectedKeys = useMemo(() => convertSelection(props.defaultSelectedKeys, new Selection()), [props.defaultSelectedKeys]);\n let [selectedKeys, setSelectedKeys] = useControlledState(\n selectedKeysProp,\n defaultSelectedKeys!,\n props.onSelectionChange\n );\n let disabledKeysProp = useMemo(() =>\n props.disabledKeys ? new Set(props.disabledKeys) : new Set<Key>()\n , [props.disabledKeys]);\n let [selectionBehavior, setSelectionBehavior] = useState(selectionBehaviorProp);\n\n // If the selectionBehavior prop is set to replace, but the current state is toggle (e.g. due to long press\n // to enter selection mode on touch), and the selection becomes empty, reset the selection behavior.\n if (selectionBehaviorProp === 'replace' && selectionBehavior === 'toggle' && typeof selectedKeys === 'object' && selectedKeys.size === 0) {\n setSelectionBehavior('replace');\n }\n\n // If the selectionBehavior prop changes, update the state as well.\n let lastSelectionBehavior = useRef(selectionBehaviorProp);\n useEffect(() => {\n if (selectionBehaviorProp !== lastSelectionBehavior.current) {\n setSelectionBehavior(selectionBehaviorProp);\n lastSelectionBehavior.current = selectionBehaviorProp;\n }\n }, [selectionBehaviorProp]);\n\n return {\n selectionMode,\n disallowEmptySelection,\n selectionBehavior,\n setSelectionBehavior,\n get isFocused() {\n return isFocusedRef.current;\n },\n setFocused(f) {\n isFocusedRef.current = f;\n setFocused(f);\n },\n get focusedKey() {\n return focusedKeyRef.current;\n },\n get childFocusStrategy() {\n return childFocusStrategyRef.current;\n },\n setFocusedKey(k, childFocusStrategy = 'first') {\n focusedKeyRef.current = k;\n childFocusStrategyRef.current = childFocusStrategy;\n setFocusedKey(k);\n },\n selectedKeys,\n setSelectedKeys(keys) {\n if (allowDuplicateSelectionEvents || !equalSets(keys, selectedKeys)) {\n setSelectedKeys(keys);\n }\n },\n disabledKeys: disabledKeysProp,\n disabledBehavior\n };\n}\n\nfunction convertSelection(selection: 'all' | Iterable<Key> | null | undefined, defaultValue?: Selection): 'all' | Set<Key> | undefined {\n if (!selection) {\n return defaultValue;\n }\n\n return selection === 'all'\n ? 'all'\n : new Selection(selection);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n Collection, DisabledBehavior,\n FocusStrategy,\n Selection as ISelection,\n Key,\n LayoutDelegate,\n LongPressEvent,\n Node,\n PressEvent,\n SelectionBehavior,\n SelectionMode\n} from '@react-types/shared';\nimport {compareNodeOrder, getChildNodes, getFirstItem} from '../collections/getChildNodes';\nimport {MultipleSelectionManager, MultipleSelectionState} from './types';\nimport {Selection} from './Selection';\n\ninterface SelectionManagerOptions {\n allowsCellSelection?: boolean,\n layoutDelegate?: LayoutDelegate,\n fullCollection?: Collection<Node<unknown>>\n}\n\n/**\n * An interface for reading and updating multiple selection state.\n */\nexport class SelectionManager implements MultipleSelectionManager {\n collection: Collection<Node<unknown>>;\n private state: MultipleSelectionState;\n private allowsCellSelection: boolean;\n private _isSelectAll: boolean | null;\n private layoutDelegate: LayoutDelegate | null;\n private fullCollection: Collection<Node<unknown>> | null;\n\n constructor(collection: Collection<Node<unknown>>, state: MultipleSelectionState, options?: SelectionManagerOptions) {\n this.collection = collection;\n this.state = state;\n this.allowsCellSelection = options?.allowsCellSelection ?? false;\n this._isSelectAll = null;\n this.layoutDelegate = options?.layoutDelegate || null;\n this.fullCollection = options?.fullCollection || null;\n }\n\n /**\n * The type of selection that is allowed in the collection.\n */\n get selectionMode(): SelectionMode {\n return this.state.selectionMode;\n }\n\n /**\n * Whether the collection allows empty selection.\n */\n get disallowEmptySelection(): boolean {\n return this.state.disallowEmptySelection;\n }\n\n /**\n * The selection behavior for the collection.\n */\n get selectionBehavior(): SelectionBehavior {\n return this.state.selectionBehavior;\n }\n\n /**\n * Sets the selection behavior for the collection.\n */\n setSelectionBehavior(selectionBehavior: SelectionBehavior): void {\n this.state.setSelectionBehavior(selectionBehavior);\n }\n\n /**\n * Whether the collection is currently focused.\n */\n get isFocused(): boolean {\n return this.state.isFocused;\n }\n\n /**\n * Sets whether the collection is focused.\n */\n setFocused(isFocused: boolean): void {\n this.state.setFocused(isFocused);\n }\n\n /**\n * The current focused key in the collection.\n */\n get focusedKey(): Key | null {\n return this.state.focusedKey;\n }\n\n /** Whether the first or last child of the focused key should receive focus. */\n get childFocusStrategy(): FocusStrategy | null {\n return this.state.childFocusStrategy;\n }\n\n /**\n * Sets the focused key.\n */\n setFocusedKey(key: Key | null, childFocusStrategy?: FocusStrategy): void {\n if (key == null || this.collection.getItem(key)) {\n this.state.setFocusedKey(key, childFocusStrategy);\n }\n }\n\n /**\n * The currently selected keys in the collection.\n */\n get selectedKeys(): Set<Key> {\n return this.state.selectedKeys === 'all'\n ? new Set(this.getSelectAllKeys())\n : this.state.selectedKeys;\n }\n\n /**\n * The raw selection value for the collection.\n * Either 'all' for select all, or a set of keys.\n */\n get rawSelection(): ISelection {\n return this.state.selectedKeys;\n }\n\n /**\n * Returns whether a key is selected.\n */\n isSelected(key: Key): boolean {\n if (this.state.selectionMode === 'none') {\n return false;\n }\n\n let mappedKey = this.getKey(key);\n if (mappedKey == null) {\n return false;\n }\n return this.state.selectedKeys === 'all'\n ? this.canSelectItem(mappedKey)\n : this.state.selectedKeys.has(mappedKey);\n }\n\n /**\n * Whether the selection is empty.\n */\n get isEmpty(): boolean {\n return this.state.selectedKeys !== 'all' && this.state.selectedKeys.size === 0;\n }\n\n /**\n * Whether all items in the collection are selected.\n */\n get isSelectAll(): boolean {\n if (this.isEmpty) {\n return false;\n }\n\n if (this.state.selectedKeys === 'all') {\n return true;\n }\n\n if (this._isSelectAll != null) {\n return this._isSelectAll;\n }\n\n let allKeys = this.getSelectAllKeys();\n let selectedKeys = this.state.selectedKeys;\n this._isSelectAll = allKeys.every(k => selectedKeys.has(k));\n return this._isSelectAll;\n }\n\n get firstSelectedKey(): Key | null {\n let first: Node<unknown> | null = null;\n for (let key of this.state.selectedKeys) {\n let item = this.collection.getItem(key);\n if (!first || (item && compareNodeOrder(this.collection, item, first) < 0)) {\n first = item;\n }\n }\n\n return first?.key ?? null;\n }\n\n get lastSelectedKey(): Key | null {\n let last: Node<unknown> | null = null;\n for (let key of this.state.selectedKeys) {\n let item = this.collection.getItem(key);\n if (!last || (item && compareNodeOrder(this.collection, item, last) > 0)) {\n last = item;\n }\n }\n\n return last?.key ?? null;\n }\n\n get disabledKeys(): Set<Key> {\n return this.state.disabledKeys;\n }\n\n get disabledBehavior(): DisabledBehavior {\n return this.state.disabledBehavior;\n }\n\n /**\n * Extends the selection to the given key.\n */\n extendSelection(toKey: Key): void {\n if (this.selectionMode === 'none') {\n return;\n }\n\n if (this.selectionMode === 'single') {\n this.replaceSelection(toKey);\n return;\n }\n\n let mappedToKey = this.getKey(toKey);\n if (mappedToKey == null) {\n return;\n }\n\n let selection: Selection;\n\n // Only select the one key if coming from a select all.\n if (this.state.selectedKeys === 'all') {\n selection = new Selection([mappedToKey], mappedToKey, mappedToKey);\n } else {\n let selectedKeys = this.state.selectedKeys as Selection;\n let anchorKey = selectedKeys.anchorKey ?? mappedToKey;\n selection = new Selection(selectedKeys, anchorKey, mappedToKey);\n for (let key of this.getKeyRange(anchorKey, selectedKeys.currentKey ?? mappedToKey)) {\n selection.delete(key);\n }\n\n for (let key of this.getKeyRange(mappedToKey, anchorKey)) {\n if (this.canSelectItem(key)) {\n selection.add(key);\n }\n }\n }\n\n this.state.setSelectedKeys(selection);\n }\n\n private getKeyRange(from: Key, to: Key) {\n let fromItem = this.collection.getItem(from);\n let toItem = this.collection.getItem(to);\n if (fromItem && toItem) {\n if (compareNodeOrder(this.collection, fromItem, toItem) <= 0) {\n return this.getKeyRangeInternal(from, to);\n }\n\n return this.getKeyRangeInternal(to, from);\n }\n\n return [];\n }\n\n private getKeyRangeInternal(from: Key, to: Key) {\n if (this.layoutDelegate?.getKeyRange) {\n return this.layoutDelegate.getKeyRange(from, to);\n }\n\n let keys: Key[] = [];\n let key: Key | null = from;\n while (key != null) {\n let item = this.collection.getItem(key);\n if (item && (item.type === 'item' || (item.type === 'cell' && this.allowsCellSelection))) {\n keys.push(key);\n }\n\n if (key === to) {\n return keys;\n }\n\n key = this.collection.getKeyAfter(key);\n }\n\n return [];\n }\n\n private getKey(key: Key) {\n let item = this.collection.getItem(key);\n if (!item) {\n // ¯\\_(ツ)_/¯\n return key;\n }\n\n // If cell selection is allowed, just return the key.\n if (item.type === 'cell' && this.allowsCellSelection) {\n return key;\n }\n\n // Find a parent item to select\n while (item && item.type !== 'item' && item.parentKey != null) {\n item = this.collection.getItem(item.parentKey);\n }\n\n if (!item || item.type !== 'item') {\n return null;\n }\n\n return item.key;\n }\n\n /**\n * Toggles whether the given key is selected.\n */\n toggleSelection(key: Key): void {\n if (this.selectionMode === 'none') {\n return;\n }\n\n if (this.selectionMode === 'single' && !this.isSelected(key)) {\n this.replaceSelection(key);\n return;\n }\n\n let mappedKey = this.getKey(key);\n if (mappedKey == null) {\n return;\n }\n\n let keys = new Selection(this.state.selectedKeys === 'all' ? this.getSelectAllKeys() : this.state.selectedKeys);\n if (keys.has(mappedKey)) {\n keys.delete(mappedKey);\n // TODO: move anchor to last selected key...\n // Does `current` need to move here too?\n } else if (this.canSelectItem(mappedKey)) {\n keys.add(mappedKey);\n keys.anchorKey = mappedKey;\n keys.currentKey = mappedKey;\n }\n\n if (this.disallowEmptySelection && keys.size === 0) {\n return;\n }\n\n this.state.setSelectedKeys(keys);\n }\n\n /**\n * Replaces the selection with only the given key.\n */\n replaceSelection(key: Key): void {\n if (this.selectionMode === 'none') {\n return;\n }\n\n let mappedKey = this.getKey(key);\n if (mappedKey == null) {\n return;\n }\n\n let selection = this.canSelectItem(mappedKey)\n ? new Selection([mappedKey], mappedKey, mappedKey)\n : new Selection();\n\n this.state.setSelectedKeys(selection);\n }\n\n /**\n * Replaces the selection with the given keys.\n */\n setSelectedKeys(keys: Iterable<Key>): void {\n if (this.selectionMode === 'none') {\n return;\n }\n\n let selection = new Selection();\n for (let key of keys) {\n let mappedKey = this.getKey(key);\n if (mappedKey != null) {\n selection.add(mappedKey);\n if (this.selectionMode === 'single') {\n break;\n }\n }\n }\n\n this.state.setSelectedKeys(selection);\n }\n\n private getSelectAllKeys() {\n // Use the full (unfiltered) collection when available so that materializing\n // the 'all' selection includes items that are currently filtered out (e.g. by Autocomplete).\n let collection = this.fullCollection ?? this.collection;\n let keys: Key[] = [];\n let addKeys = (key: Key | null) => {\n while (key != null) {\n if (this.canSelectItemIn(key, collection)) {\n let item = collection.getItem(key);\n if (item?.type === 'item') {\n keys.push(key);\n }\n\n // Add child keys. If cell selection is allowed, then include item children too.\n if (item?.hasChildNodes && (this.allowsCellSelection || item.type !== 'item')) {\n addKeys(getFirstItem(getChildNodes(item, collection))?.key ?? null);\n }\n }\n\n key = collection.getKeyAfter(key);\n }\n };\n\n addKeys(collection.getFirstKey());\n return keys;\n }\n\n /**\n * Selects all items in the collection.\n */\n selectAll(): void {\n if (!this.isSelectAll && this.selectionMode === 'multiple') {\n this.state.setSelectedKeys('all');\n }\n }\n\n /**\n * Removes all keys from the selection.\n */\n clearSelection(): void {\n if (!this.disallowEmptySelection && (this.state.selectedKeys === 'all' || this.state.selectedKeys.size > 0)) {\n this.state.setSelectedKeys(new Selection());\n }\n }\n\n /**\n * Toggles between select all and an empty selection.\n */\n toggleSelectAll(): void {\n if (this.isSelectAll) {\n this.clearSelection();\n } else {\n this.selectAll();\n }\n }\n\n select(key: Key, e?: PressEvent | LongPressEvent | PointerEvent): void {\n if (this.selectionMode === 'none') {\n return;\n }\n\n if (this.selectionMode === 'single') {\n if (this.isSelected(key) && !this.disallowEmptySelection) {\n this.toggleSelection(key);\n } else {\n this.replaceSelection(key);\n }\n } else if (this.selectionBehavior === 'toggle' || (e && (e.pointerType === 'touch' || e.pointerType === 'virtual'))) {\n // if touch or virtual (VO) then we just want to toggle, otherwise it's impossible to multi select because they don't have modifier keys\n this.toggleSelection(key);\n } else {\n this.replaceSelection(key);\n }\n }\n\n /**\n * Returns whether the current selection is equal to the given selection.\n */\n isSelectionEqual(selection: Set<Key>): boolean {\n if (selection === this.state.selectedKeys) {\n return true;\n }\n\n // Check if the set of keys match.\n let selectedKeys = this.selectedKeys;\n if (selection.size !== selectedKeys.size) {\n return false;\n }\n\n for (let key of selection) {\n if (!selectedKeys.has(key)) {\n return false;\n }\n }\n\n for (let key of selectedKeys) {\n if (!selection.has(key)) {\n return false;\n }\n }\n\n return true;\n }\n\n canSelectItem(key: Key): boolean {\n return this.canSelectItemIn(key, this.collection);\n }\n\n private canSelectItemIn(key: Key, collection: Collection<Node<unknown>>): boolean {\n if (this.state.selectionMode === 'none' || this.state.disabledKeys.has(key)) {\n return false;\n }\n\n let item = collection.getItem(key);\n if (!item || item?.props?.isDisabled || (item.type === 'cell' && !this.allowsCellSelection)) {\n return false;\n }\n\n return true;\n }\n\n isDisabled(key: Key): boolean {\n return this.state.disabledBehavior === 'all' && (this.state.disabledKeys.has(key) || !!this.collection.getItem(key)?.props?.isDisabled);\n }\n\n isLink(key: Key): boolean {\n return !!this.collection.getItem(key)?.props?.href;\n }\n\n getItemProps(key: Key): any {\n return this.collection.getItem(key)?.props;\n }\n\n withCollection(collection: Collection<Node<unknown>>): SelectionManager {\n return new SelectionManager(collection, this.state, {\n allowsCellSelection: this.allowsCellSelection,\n layoutDelegate: this.layoutDelegate || undefined,\n fullCollection: this.fullCollection ?? this.collection\n });\n }\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CollectionBase, CollectionElement, Key, Node} from '@react-types/shared';\nimport {PartialNode} from './types';\nimport React, {ReactElement} from 'react';\n\ninterface CollectionBuilderState {\n renderer?: (value: any) => ReactElement | null\n}\n\ninterface CollectReactElement<T> extends ReactElement {\n getCollectionNode(props: any, context: any): Generator<PartialNode<T>, void, Node<T>[]>\n}\n\nexport class CollectionBuilder<T extends object> {\n private context?: unknown;\n private cache: WeakMap<T, Node<T>> = new WeakMap();\n\n build(props: Partial<CollectionBase<T>>, context?: unknown): Iterable<Node<T>> {\n this.context = context;\n return iterable(() => this.iterateCollection(props));\n }\n\n private *iterateCollection(props: Partial<CollectionBase<T>>): Generator<Node<T>> {\n let {children, items} = props;\n\n if (React.isValidElement<{children: CollectionElement<T>}>(children) && children.type === React.Fragment) {\n yield* this.iterateCollection({\n children: children.props.children,\n items\n });\n } else if (typeof children === 'function') {\n if (!items) {\n throw new Error('props.children was a function but props.items is missing');\n }\n\n let index = 0;\n for (let item of items) {\n yield* this.getFullNode({\n value: item,\n index\n }, {renderer: children});\n index++;\n }\n } else {\n let items: CollectionElement<T>[] = [];\n React.Children.forEach(children, child => {\n if (child) {\n items.push(child);\n }\n });\n\n let index = 0;\n for (let item of items) {\n let nodes = this.getFullNode({\n element: item,\n index: index\n }, {});\n\n for (let node of nodes) {\n index++;\n yield node;\n }\n }\n }\n }\n\n private getKey(item: NonNullable<CollectionElement<T>>, partialNode: PartialNode<T>, state: CollectionBuilderState, parentKey?: Key | null): Key {\n if (item.key != null) {\n return item.key;\n }\n\n if (partialNode.type === 'cell' && partialNode.key != null) {\n return `${parentKey}${partialNode.key}`;\n }\n\n let v = partialNode.value as any;\n if (v != null) {\n let key = v.key ?? v.id;\n if (key == null) {\n throw new Error('No key found for item');\n }\n\n return key;\n }\n\n return parentKey ? `${parentKey}.${partialNode.index}` : `$.${partialNode.index}`;\n }\n\n private getChildState(state: CollectionBuilderState, partialNode: PartialNode<T>) {\n return {\n renderer: partialNode.renderer || state.renderer\n };\n }\n\n private *getFullNode(partialNode: PartialNode<T> & {index: number}, state: CollectionBuilderState, parentKey?: Key | null, parentNode?: Node<T>): Generator<Node<T>> {\n if (React.isValidElement<{children: CollectionElement<T>}>(partialNode.element) && partialNode.element.type === React.Fragment) {\n let children: CollectionElement<T>[] = [];\n\n React.Children.forEach(partialNode.element.props.children, child => {\n children.push(child);\n });\n\n let index = partialNode.index ?? 0;\n\n for (const child of children) {\n yield* this.getFullNode({\n element: child,\n index: index++\n }, state, parentKey, parentNode);\n }\n\n return;\n }\n\n // If there's a value instead of an element on the node, and a parent renderer function is available,\n // use it to render an element for the value.\n let element = partialNode.element;\n if (!element && partialNode.value && state && state.renderer) {\n let cached = this.cache.get(partialNode.value);\n if (cached && (!cached.shouldInvalidate || !cached.shouldInvalidate(this.context))) {\n cached.index = partialNode.index;\n cached.parentKey = parentNode ? parentNode.key : null;\n yield cached;\n return;\n }\n\n element = state.renderer(partialNode.value);\n }\n\n // If there's an element with a getCollectionNode function on its type, then it's a supported component.\n // Call this function to get a partial node, and recursively build a full node from there.\n if (React.isValidElement(element)) {\n let type = element.type as unknown as CollectReactElement<T>;\n if (typeof type !== 'function' && typeof type.getCollectionNode !== 'function') {\n let name = element.type;\n throw new Error(`Unknown element <${name}> in collection.`);\n }\n\n let childNodes = type.getCollectionNode(element.props, this.context) as Generator<PartialNode<T>, void, Node<T>[]>;\n let index = partialNode.index ?? 0;\n let result = childNodes.next();\n while (!result.done && result.value) {\n let childNode = result.value;\n\n partialNode.index = index;\n\n let nodeKey = childNode.key ?? null;\n if (nodeKey == null) {\n nodeKey = childNode.element ? null : this.getKey(element as NonNullable<CollectionElement<T>>, partialNode, state, parentKey);\n }\n\n let nodes = this.getFullNode({\n ...childNode,\n key: nodeKey,\n index,\n wrapper: compose(partialNode.wrapper, childNode.wrapper)\n }, this.getChildState(state, childNode), parentKey ? `${parentKey}${element.key}` : element.key, parentNode);\n\n let children = [...nodes];\n for (let node of children) {\n // Cache the node based on its value\n node.value = childNode.value ?? partialNode.value ?? null;\n if (node.value) {\n this.cache.set(node.value, node);\n }\n\n // The partial node may have specified a type for the child in order to specify a constraint.\n // Verify that the full node that was built recursively matches this type.\n if (partialNode.type && node.type !== partialNode.type) {\n throw new Error(`Unsupported type <${capitalize(node.type)}> in <${capitalize(parentNode?.type ?? 'unknown parent type')}>. Only <${capitalize(partialNode.type)}> is supported.`);\n }\n\n index++;\n yield node;\n }\n\n result = childNodes.next(children);\n }\n\n return;\n }\n\n // Ignore invalid elements\n if (partialNode.key == null || partialNode.type == null) {\n return;\n }\n\n // Create full node\n let builder = this;\n let node: Node<T> = {\n type: partialNode.type,\n props: partialNode.props,\n key: partialNode.key,\n parentKey: parentNode ? parentNode.key : null,\n value: partialNode.value ?? null,\n level: (parentNode?.level ?? 0) + (parentNode?.type === 'item' ? 1 : 0),\n index: partialNode.index,\n rendered: partialNode.rendered,\n textValue: partialNode.textValue ?? '',\n 'aria-label': partialNode['aria-label'],\n wrapper: partialNode.wrapper,\n shouldInvalidate: partialNode.shouldInvalidate,\n hasChildNodes: partialNode.hasChildNodes || false,\n childNodes: iterable(function *() {\n if (!partialNode.hasChildNodes || !partialNode.childNodes) {\n return;\n }\n\n let index = 0;\n for (let child of partialNode.childNodes()) {\n // Ensure child keys are globally unique by prepending the parent node's key\n if (child.key != null) {\n // TODO: Remove this line entirely and enforce that users always provide unique keys.\n // Currently this line will have issues when a parent has a key `a` and a child with key `bc`\n // but another parent has key `ab` and its child has a key `c`. The combined keys would result in both\n // children having a key of `abc`.\n child.key = `${node.key}${child.key}`;\n }\n\n let nodes = builder.getFullNode({...child, index}, builder.getChildState(state, child), node.key, node);\n for (let node of nodes) {\n index++;\n yield node;\n }\n }\n })\n };\n\n yield node;\n }\n}\n\n// Wraps an iterator function as an iterable object, and caches the results.\nfunction iterable<T>(iterator: () => IterableIterator<Node<T>>): Iterable<Node<T>> {\n let cache: Array<Node<T>> = [];\n let iterable: null | IterableIterator<Node<T>> = null;\n return {\n *[Symbol.iterator]() {\n for (let item of cache) {\n yield item;\n }\n\n if (!iterable) {\n iterable = iterator();\n }\n\n for (let item of iterable) {\n cache.push(item);\n yield item;\n }\n }\n };\n}\n\ntype Wrapper = (element: ReactElement) => ReactElement;\nfunction compose(outer: Wrapper | void, inner: Wrapper | void): Wrapper | undefined {\n if (outer && inner) {\n return (element) => outer(inner(element));\n }\n\n if (outer) {\n return outer;\n }\n\n if (inner) {\n return inner;\n }\n}\n\nfunction capitalize(str: string) {\n return str[0].toUpperCase() + str.slice(1);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Collection, CollectionStateBase, Node} from '@react-types/shared';\nimport {CollectionBuilder} from './CollectionBuilder';\nimport {ReactElement, useMemo} from 'react';\n\ninterface CollectionOptions<T, C extends Collection<Node<T>>> extends Omit<CollectionStateBase<T, C>, 'children'> {\n children?: ReactElement<any> | null | (ReactElement<any> | null)[] | ((item: T) => ReactElement<any> | null)\n}\n\ntype CollectionFactory<T, C extends Collection<Node<T>>> = (node: Iterable<Node<T>>) => C;\n\nexport function useCollection<T extends object, C extends Collection<Node<T>> = Collection<Node<T>>>(props: CollectionOptions<T, C>, factory: CollectionFactory<T, C>, context?: unknown): C {\n let builder = useMemo(() => new CollectionBuilder<T>(), []);\n let {children, items, collection} = props;\n let result = useMemo(() => {\n if (collection) {\n return collection;\n }\n let nodes = builder.build({children, items}, context);\n return factory(nodes);\n }, [builder, children, items, collection, context, factory]);\n return result;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Collection, CollectionStateBase, Key, LayoutDelegate, Node} from '@react-types/shared';\nimport {ListCollection} from './ListCollection';\nimport {MultipleSelectionStateProps, useMultipleSelectionState} from '../selection/useMultipleSelectionState';\nimport {SelectionManager} from '../selection/SelectionManager';\nimport {useCallback, useEffect, useMemo, useRef} from 'react';\nimport {useCollection} from '../collections/useCollection';\n\nexport interface ListProps<T> extends CollectionStateBase<T>, MultipleSelectionStateProps {\n /** Filter function to generate a filtered list of nodes. */\n filter?: (nodes: Iterable<Node<T>>) => Iterable<Node<T>>,\n /** @private */\n suppressTextValueWarning?: boolean,\n /**\n * A delegate object that provides layout information for items in the collection.\n * This can be used to override the behavior of shift selection.\n */\n layoutDelegate?: LayoutDelegate\n}\n\nexport interface ListState<T> {\n /** A collection of items in the list. */\n collection: Collection<Node<T>>,\n\n /** A set of items that are disabled. */\n disabledKeys: Set<Key>,\n\n /** A selection manager to read and update multiple selection state. */\n selectionManager: SelectionManager\n}\n\n/**\n * Provides state management for list-like components. Handles building a collection\n * of items from props, and manages multiple selection state.\n */\nexport function useListState<T extends object>(props: ListProps<T>): ListState<T> {\n let {filter, layoutDelegate} = props;\n\n let selectionState = useMultipleSelectionState(props);\n let disabledKeys = useMemo(() =>\n props.disabledKeys ? new Set(props.disabledKeys) : new Set<Key>()\n , [props.disabledKeys]);\n\n let factory = useCallback(nodes => filter ? new ListCollection(filter(nodes)) : new ListCollection(nodes as Iterable<Node<T>>), [filter]);\n let context = useMemo(() => ({suppressTextValueWarning: props.suppressTextValueWarning}), [props.suppressTextValueWarning]);\n\n let collection = useCollection(props, factory, context);\n\n let selectionManager = useMemo(() =>\n new SelectionManager(collection, selectionState, {layoutDelegate})\n , [collection, selectionState, layoutDelegate]\n );\n\n useFocusedKeyReset(collection, selectionManager);\n\n return {\n collection,\n disabledKeys,\n selectionManager\n };\n}\n\n/**\n * Filters a collection using the provided filter function and returns a new ListState.\n */\nexport function UNSTABLE_useFilteredListState<T extends object>(state: ListState<T>, filterFn: ((nodeValue: string, node: Node<T>) => boolean) | null | undefined): ListState<T> {\n let collection = useMemo(() => filterFn ? state.collection.filter!(filterFn) : state.collection, [state.collection, filterFn]);\n let selectionManager = state.selectionManager.withCollection(collection);\n useFocusedKeyReset(collection, selectionManager);\n return {\n collection,\n selectionManager,\n disabledKeys: state.disabledKeys\n };\n}\n\nfunction useFocusedKeyReset<T>(collection: Collection<Node<T>>, selectionManager: SelectionManager) {\n // Reset focused key if that item is deleted from the collection.\n const cachedCollection = useRef<Collection<Node<T>> | null>(null);\n useEffect(() => {\n if (selectionManager.focusedKey != null && !collection.getItem(selectionManager.focusedKey) && cachedCollection.current) {\n // Walk forward in the old collection to find the next key that still exists in the new collection.\n let key = cachedCollection.current.getKeyAfter(selectionManager.focusedKey);\n let nextFocusedKey: Key | null = null;\n while (key != null) {\n let node = collection.getItem(key);\n if (node && node.type === 'item' && !selectionManager.isDisabled(key)) {\n nextFocusedKey = key;\n break;\n }\n\n key = cachedCollection.current.getKeyAfter(key);\n }\n\n // If no such key exists, walk backward.\n if (nextFocusedKey == null) {\n key = cachedCollection.current.getKeyBefore(selectionManager.focusedKey);\n while (key != null) {\n let node = collection.getItem(key);\n if (node && node.type === 'item' && !selectionManager.isDisabled(key)) {\n nextFocusedKey = key;\n break;\n }\n\n key = cachedCollection.current.getKeyBefore(key);\n }\n }\n\n selectionManager.setFocusedKey(nextFocusedKey);\n }\n cachedCollection.current = collection;\n }, [collection, selectionManager]);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {useCallback} from 'react';\nimport {useControlledState} from '../utils/useControlledState';\n\nexport interface OverlayTriggerProps {\n /** Whether the overlay is open by default (controlled). */\n isOpen?: boolean,\n /** Whether the overlay is open by default (uncontrolled). */\n defaultOpen?: boolean,\n /** Handler that is called when the overlay's open state changes. */\n onOpenChange?: (isOpen: boolean) => void\n}\n\nexport interface OverlayTriggerState {\n /** Whether the overlay is currently open. */\n readonly isOpen: boolean,\n /** Sets whether the overlay is open. */\n setOpen(isOpen: boolean): void,\n /** Opens the overlay. */\n open(): void,\n /** Closes the overlay. */\n close(): void,\n /** Toggles the overlay's visibility. */\n toggle(): void\n}\n\n/**\n * Manages state for an overlay trigger. Tracks whether the overlay is open, and provides\n * methods to toggle this state.\n */\nexport function useOverlayTriggerState(props: OverlayTriggerProps): OverlayTriggerState {\n let [isOpen, setOpen] = useControlledState(props.isOpen, props.defaultOpen || false, props.onOpenChange);\n\n const open = useCallback(() => {\n setOpen(true);\n }, [setOpen]);\n\n const close = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const toggle = useCallback(() => {\n setOpen(!isOpen);\n }, [setOpen, isOpen]);\n\n return {\n isOpen,\n setOpen,\n open,\n close,\n toggle\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {ItemElement, ItemProps} from '@react-types/shared';\nimport {PartialNode} from './types';\nimport React, {JSX, ReactElement} from 'react';\n\nfunction Item<T>(props: ItemProps<T>): ReactElement | null { // eslint-disable-line @typescript-eslint/no-unused-vars\n return null;\n}\n\nItem.getCollectionNode = function* getCollectionNode<T>(props: ItemProps<T>, context: any): Generator<PartialNode<T>> {\n let {childItems, title, children} = props;\n\n let rendered = props.title || props.children;\n let textValue = props.textValue || (typeof rendered === 'string' ? rendered : '') || props['aria-label'] || '';\n\n // suppressTextValueWarning is used in components like Tabs, which don't have type to select support.\n if (!textValue && !context?.suppressTextValueWarning && process.env.NODE_ENV !== 'production') {\n console.warn('<Item> with non-plain text contents is unsupported by type to select for accessibility. Please add a `textValue` prop.');\n }\n\n yield {\n type: 'item',\n props: props,\n rendered,\n textValue,\n 'aria-label': props['aria-label'],\n hasChildNodes: hasChildItems(props),\n *childNodes() {\n if (childItems) {\n for (let child of childItems) {\n yield {\n type: 'item',\n value: child\n };\n }\n } else if (title) {\n let items: PartialNode<T>[] = [];\n React.Children.forEach(children, child => {\n items.push({\n type: 'item',\n element: child as ItemElement<T>\n });\n });\n\n yield* items;\n }\n }\n };\n};\n\nfunction hasChildItems<T>(props: ItemProps<T>) {\n if (props.hasChildItems != null) {\n return props.hasChildItems;\n }\n\n if (props.childItems) {\n return true;\n }\n\n if (props.title && React.Children.count(props.children) > 0) {\n return true;\n }\n\n return false;\n}\n\n// We don't want getCollectionNode to show up in the type definition\nlet _Item = Item as <T>(props: ItemProps<T>) => JSX.Element;\nexport {_Item as Item};\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CollectionStateBase, Key, Node, Selection, SingleSelection} from '@react-types/shared';\nimport {ListState, useListState} from './useListState';\nimport {useControlledState} from '../utils/useControlledState';\nimport {useMemo} from 'react';\n\nexport interface SingleSelectListProps<T> extends CollectionStateBase<T>, Omit<SingleSelection, 'disallowEmptySelection'> {\n /** Filter function to generate a filtered list of nodes. */\n filter?: (nodes: Iterable<Node<T>>) => Iterable<Node<T>>,\n /** @private */\n suppressTextValueWarning?: boolean\n}\n\nexport interface SingleSelectListState<T> extends ListState<T> {\n /** The key for the currently selected item. */\n readonly selectedKey: Key | null,\n\n /** Sets the selected key. */\n setSelectedKey(key: Key | null): void,\n\n /** The value of the currently selected item. */\n readonly selectedItem: Node<T> | null\n}\n\n/**\n * Provides state management for list-like components with single selection.\n * Handles building a collection of items from props, and manages selection state.\n */\nexport function useSingleSelectListState<T extends object>(props: SingleSelectListProps<T>): SingleSelectListState<T> {\n let [selectedKey, setSelectedKey] = useControlledState(props.selectedKey, props.defaultSelectedKey ?? null, props.onSelectionChange);\n let selectedKeys = useMemo(() => selectedKey != null ? [selectedKey] : [], [selectedKey]);\n let {collection, disabledKeys, selectionManager} = useListState({\n ...props,\n selectionMode: 'single',\n disallowEmptySelection: true,\n allowDuplicateSelectionEvents: true,\n selectedKeys,\n onSelectionChange: (keys: Selection) => {\n // impossible, but TS doesn't know that\n if (keys === 'all') {\n return;\n }\n let key = keys.values().next().value ?? null;\n\n // Always fire onSelectionChange, even if the key is the same\n // as the current key (useControlledState does not).\n if (key === selectedKey && props.onSelectionChange) {\n props.onSelectionChange(key);\n }\n\n setSelectedKey(key);\n }\n });\n\n let selectedItem = selectedKey != null\n ? collection.getItem(selectedKey)\n : null;\n\n return {\n collection,\n disabledKeys,\n selectionManager,\n selectedKey,\n setSelectedKey,\n selectedItem\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {FocusStrategy, Key} from '@react-types/shared';\nimport {OverlayTriggerProps, OverlayTriggerState, useOverlayTriggerState} from '../overlays/useOverlayTriggerState';\nimport {useState} from 'react';\n\nexport type MenuTriggerType = 'press' | 'longPress';\n\nexport interface MenuTriggerProps extends OverlayTriggerProps {\n /**\n * How the menu is triggered.\n * @default 'press'\n */\n trigger?: MenuTriggerType\n}\n\nexport interface MenuTriggerState extends OverlayTriggerState {\n /** Controls which item will be auto focused when the menu opens. */\n readonly focusStrategy: FocusStrategy | null,\n\n /** Opens the menu. */\n open(focusStrategy?: FocusStrategy | null): void,\n\n /** Toggles the menu. */\n toggle(focusStrategy?: FocusStrategy | null): void\n}\n\nexport interface RootMenuTriggerState extends MenuTriggerState {\n /** Opens a specific submenu tied to a specific menu item at a specific level. */\n openSubmenu: (triggerKey: Key, level: number) => void,\n\n /** Closes a specific submenu tied to a specific menu item at a specific level. */\n closeSubmenu: (triggerKey: Key, level: number) => void,\n\n /** An array of open submenu trigger keys within the menu tree.\n * The index of key within array matches the submenu level in the tree.\n */\n expandedKeysStack: Key[],\n\n /** Closes the menu and all submenus in the menu tree. */\n close: () => void\n}\n\n/**\n * Manages state for a menu trigger. Tracks whether the menu is currently open,\n * and controls which item will receive focus when it opens. Also tracks the open submenus within\n * the menu tree via their trigger keys.\n */\nexport function useMenuTriggerState(props: MenuTriggerProps): RootMenuTriggerState {\n let overlayTriggerState = useOverlayTriggerState(props);\n let [focusStrategy, setFocusStrategy] = useState<FocusStrategy | null>(null);\n let [expandedKeysStack, setExpandedKeysStack] = useState<Key[]>([]);\n\n let closeAll = () => {\n setExpandedKeysStack([]);\n overlayTriggerState.close();\n };\n\n let openSubmenu = (triggerKey: Key, level: number) => {\n setExpandedKeysStack(oldStack => {\n if (level > oldStack.length) {\n return oldStack;\n }\n\n return [...oldStack.slice(0, level), triggerKey];\n });\n };\n\n let closeSubmenu = (triggerKey: Key, level: number) => {\n setExpandedKeysStack(oldStack => {\n let key = oldStack[level];\n if (key === triggerKey) {\n return oldStack.slice(0, level);\n } else {\n return oldStack;\n }\n });\n };\n\n return {\n focusStrategy,\n ...overlayTriggerState,\n open(focusStrategy: FocusStrategy | null = null) {\n setFocusStrategy(focusStrategy);\n overlayTriggerState.open();\n },\n toggle(focusStrategy: FocusStrategy | null = null) {\n setFocusStrategy(focusStrategy);\n overlayTriggerState.toggle();\n },\n close() {\n closeAll();\n },\n expandedKeysStack,\n openSubmenu,\n closeSubmenu\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {FocusEvents, HelpTextProps, InputBase, InputDOMProps, LabelableProps, Orientation, Validation, ValidationState, ValueBase} from '@react-types/shared';\nimport {FormValidationState, useFormValidationState} from '../form/useFormValidationState';\nimport {useControlledState} from '../utils/useControlledState';\nimport {useMemo, useState} from 'react';\n\nexport interface RadioGroupProps extends ValueBase<string|null, string>, InputBase, Pick<InputDOMProps, 'name'>, Validation<string>, LabelableProps, HelpTextProps, FocusEvents {\n /**\n * The axis the Radio Button(s) should align with.\n * @default 'vertical'\n */\n orientation?: Orientation\n}\n\nexport interface RadioGroupState extends FormValidationState {\n /**\n * The name for the group, used for native form submission.\n * @deprecated\n * @private\n */\n readonly name: string,\n\n /** Whether the radio group is disabled. */\n readonly isDisabled: boolean,\n\n /** Whether the radio group is read only. */\n readonly isReadOnly: boolean,\n\n /** Whether the radio group is required. */\n readonly isRequired: boolean,\n\n /**\n * Whether the radio group is valid or invalid.\n * @deprecated Use `isInvalid` instead.\n */\n readonly validationState: ValidationState | null,\n\n /** Whether the radio group is invalid. */\n readonly isInvalid: boolean,\n\n /** The currently selected value. */\n readonly selectedValue: string | null,\n\n /** The default selected value. */\n readonly defaultSelectedValue: string | null,\n\n /** Sets the selected value. */\n setSelectedValue(value: string | null): void,\n\n /** The value of the last focused radio. */\n readonly lastFocusedValue: string | null,\n\n /** Sets the last focused value. */\n setLastFocusedValue(value: string | null): void\n}\n\nlet instance = Math.round(Math.random() * 10000000000);\nlet i = 0;\n\n/**\n * Provides state management for a radio group component. Provides a name for the group,\n * and manages selection and focus state.\n */\nexport function useRadioGroupState(props: RadioGroupProps): RadioGroupState {\n // Preserved here for backward compatibility. React Aria now generates the name instead of stately.\n let name = useMemo(() => props.name || `radio-group-${instance}-${++i}`, [props.name]);\n let [selectedValue, setSelected] = useControlledState(props.value, props.defaultValue ?? null, props.onChange);\n let [initialValue] = useState(selectedValue);\n let [lastFocusedValue, setLastFocusedValue] = useState<string | null>(null);\n\n let validation = useFormValidationState({\n ...props,\n value: selectedValue\n });\n\n let setSelectedValue = (value) => {\n if (!props.isReadOnly && !props.isDisabled) {\n setSelected(value);\n validation.commitValidation();\n }\n };\n\n let isInvalid = validation.displayValidation.isInvalid;\n\n return {\n ...validation,\n name,\n selectedValue: selectedValue,\n defaultSelectedValue: props.value !== undefined ? initialValue : props.defaultValue ?? null,\n setSelectedValue,\n lastFocusedValue,\n setLastFocusedValue,\n isDisabled: props.isDisabled || false,\n isReadOnly: props.isReadOnly || false,\n isRequired: props.isRequired || false,\n validationState: props.validationState || (isInvalid ? 'invalid' : null),\n isInvalid\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CollectionBase, CollectionStateBase, FocusableProps, FocusStrategy, HelpTextProps, InputBase, Key, LabelableProps, Node, Selection, TextInputBase, Validation, ValueBase} from '@react-types/shared';\nimport {FormValidationState, useFormValidationState} from '../form/useFormValidationState';\nimport {ListState, useListState} from '../list/useListState';\nimport {OverlayTriggerState, useOverlayTriggerState} from '../overlays/useOverlayTriggerState';\nimport {useControlledState} from '../utils/useControlledState';\nimport {useMemo, useState} from 'react';\n\nexport type SelectionMode = 'single' | 'multiple';\nexport type ValueType<M extends SelectionMode> = M extends 'single' ? Key | null : readonly Key[];\nexport type ChangeValueType<M extends SelectionMode> = M extends 'single' ? Key | null : Key[];\ntype ValidationType<M extends SelectionMode> = M extends 'single' ? Key : Key[];\n\nexport interface SelectProps<T, M extends SelectionMode = 'single'> extends CollectionBase<T>, Omit<InputBase, 'isReadOnly'>, ValueBase<ValueType<M>, ChangeValueType<M>>, Validation<ValidationType<M>>, HelpTextProps, LabelableProps, TextInputBase, FocusableProps {\n /**\n * Whether single or multiple selection is enabled.\n * @default 'single'\n */\n selectionMode?: M,\n /**\n * The currently selected key in the collection (controlled).\n * @deprecated\n */\n selectedKey?: Key | null,\n /**\n * The initial selected key in the collection (uncontrolled).\n * @deprecated\n */\n defaultSelectedKey?: Key | null,\n /**\n * Handler that is called when the selection changes.\n * @deprecated\n */\n onSelectionChange?: (key: Key | null) => void,\n /** Sets the open state of the menu. */\n isOpen?: boolean,\n /** Sets the default open state of the menu. */\n defaultOpen?: boolean,\n /** Method that is called when the open state of the menu changes. */\n onOpenChange?: (isOpen: boolean) => void,\n /** Whether the Select should close when an item is selected. Defaults to true if selectionMode is single, false otherwise. */\n shouldCloseOnSelect?: boolean,\n /** Whether the select should be allowed to be open when the collection is empty. */\n allowsEmptyCollection?: boolean\n}\n\nexport interface SelectStateOptions<T, M extends SelectionMode = 'single'> extends Omit<SelectProps<T, M>, 'children'>, CollectionStateBase<T> {}\n\nexport interface SelectState<T, M extends SelectionMode = 'single'> extends ListState<T>, OverlayTriggerState, FormValidationState {\n /**\n * The key for the first selected item.\n * @deprecated\n */\n readonly selectedKey: Key | null,\n\n /**\n * The default selected key.\n * @deprecated\n */\n readonly defaultSelectedKey: Key | null,\n\n /**\n * Sets the selected key.\n * @deprecated\n */\n setSelectedKey(key: Key | null): void,\n\n /** The current select value. */\n readonly value: ValueType<M>,\n\n /** The default select value. */\n readonly defaultValue: ValueType<M>,\n\n /** Sets the select value. */\n setValue(value: Key | readonly Key[] | null): void,\n\n /**\n * The value of the first selected item.\n * @deprecated\n */\n readonly selectedItem: Node<T> | null,\n\n /** The value of the selected items. */\n readonly selectedItems: Node<T>[],\n\n /** Whether the select is currently focused. */\n readonly isFocused: boolean,\n\n /** Sets whether the select is focused. */\n setFocused(isFocused: boolean): void,\n\n /** Controls which item will be auto focused when the menu opens. */\n readonly focusStrategy: FocusStrategy | null,\n\n /** Opens the menu. */\n open(focusStrategy?: FocusStrategy | null): void,\n\n /** Toggles the menu. */\n toggle(focusStrategy?: FocusStrategy | null): void\n}\n\n/**\n * Provides state management for a select component. Handles building a collection\n * of items from props, handles the open state for the popup menu, and manages\n * multiple selection state.\n */\nexport function useSelectState<T extends object, M extends SelectionMode = 'single'>(props: SelectStateOptions<T, M>): SelectState<T, M> {\n let {\n selectionMode = 'single' as M,\n shouldCloseOnSelect = selectionMode === 'single'\n } = props;\n let triggerState = useOverlayTriggerState(props);\n let [focusStrategy, setFocusStrategy] = useState<FocusStrategy | null>(null);\n let defaultValue = useMemo(() => {\n return props.defaultValue !== undefined ? props.defaultValue : (selectionMode === 'single' ? props.defaultSelectedKey ?? null : []) as ValueType<M>;\n }, [props.defaultValue, props.defaultSelectedKey, selectionMode]);\n let value = useMemo(() => {\n return props.value !== undefined ? props.value : (selectionMode === 'single' ? props.selectedKey : undefined) as ValueType<M>;\n }, [props.value, props.selectedKey, selectionMode]);\n let [controlledValue, setControlledValue] = useControlledState<Key | readonly Key[] | null>(value, defaultValue, props.onChange as any);\n // Only display the first selected item if in single selection mode but the value is an array.\n let displayValue = selectionMode === 'single' && Array.isArray(controlledValue) ? controlledValue[0] : controlledValue;\n let setValue = (value: Key | Key[] | null) => {\n if (selectionMode === 'single') {\n let key = Array.isArray(value) ? value[0] ?? null : value;\n setControlledValue(key);\n if (key !== displayValue) {\n props.onSelectionChange?.(key);\n }\n } else {\n let keys: Key[] = [];\n if (Array.isArray(value)) {\n keys = value;\n } else if (value != null) {\n keys = [value];\n }\n\n setControlledValue(keys);\n }\n };\n\n let listState = useListState({\n ...props,\n selectionMode,\n disallowEmptySelection: selectionMode === 'single',\n allowDuplicateSelectionEvents: true,\n selectedKeys: useMemo(() => convertValue(displayValue), [displayValue]),\n onSelectionChange: (keys: Selection) => {\n // impossible, but TS doesn't know that\n if (keys === 'all') {\n return;\n }\n\n if (selectionMode === 'single') {\n let key = keys.values().next().value ?? null;\n setValue(key);\n } else {\n setValue([...keys]);\n }\n if (shouldCloseOnSelect) {\n triggerState.close();\n }\n\n validationState.commitValidation();\n }\n });\n\n let selectedKey = listState.selectionManager.firstSelectedKey;\n let selectedItems = useMemo(() => {\n return [...listState.selectionManager.selectedKeys].map(key => listState.collection.getItem(key)).filter(item => item != null);\n }, [listState.selectionManager.selectedKeys, listState.collection]);\n\n let validationState = useFormValidationState({\n ...props,\n value: Array.isArray(displayValue) && displayValue.length === 0 ? null : displayValue as any\n });\n\n let [isFocused, setFocused] = useState(false);\n let [initialValue] = useState(displayValue);\n\n return {\n ...validationState,\n ...listState,\n ...triggerState,\n value: displayValue as ValueType<M>,\n defaultValue: defaultValue ?? initialValue as ValueType<M>,\n setValue,\n selectedKey,\n setSelectedKey: setValue,\n selectedItem: selectedItems[0] ?? null,\n selectedItems,\n defaultSelectedKey: props.defaultSelectedKey ?? (props.selectionMode === 'single' ? initialValue as Key : null),\n focusStrategy,\n open(focusStrategy: FocusStrategy | null = null) {\n // Don't open if the collection is empty.\n if (listState.collection.size !== 0 || props.allowsEmptyCollection) {\n setFocusStrategy(focusStrategy);\n triggerState.open();\n }\n },\n toggle(focusStrategy: FocusStrategy | null = null) {\n if (listState.collection.size !== 0 || props.allowsEmptyCollection) {\n setFocusStrategy(focusStrategy);\n triggerState.toggle();\n }\n },\n isFocused,\n setFocused\n };\n}\n\nfunction convertValue(value: Key | Key[] | null | undefined) {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return [];\n }\n return Array.isArray(value) ? value : [value];\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Collection, CollectionBase, CollectionStateBase, Key, Node, SingleSelection} from '@react-types/shared';\nimport {SingleSelectListState, useSingleSelectListState} from '../list/useSingleSelectListState';\nimport {useEffect, useRef} from 'react';\n\nexport interface TabListProps<T> extends CollectionBase<T>, Omit<SingleSelection, 'disallowEmptySelection' | 'selectedKey' | 'defaultSelectedKey' | 'onSelectionChange'> {\n /**\n * Whether the TabList is disabled.\n * Shows that a selection exists, but is not available in that circumstance.\n */\n isDisabled?: boolean,\n /** The currently selected key in the collection (controlled). */\n selectedKey?: Key,\n /** The initial selected keys in the collection (uncontrolled). */\n defaultSelectedKey?: Key,\n /** Handler that is called when the selection changes. */\n onSelectionChange?: (key: Key) => void\n}\n\nexport interface TabListStateOptions<T> extends Omit<TabListProps<T>, 'children'>, CollectionStateBase<T> {}\n\nexport interface TabListState<T> extends SingleSelectListState<T> {\n /** Whether the tab list is disabled. */\n isDisabled: boolean\n}\n\n/**\n * Provides state management for a Tabs component. Tabs include a TabList which tracks\n * which tab is currently selected and displays the content associated with that Tab in a TabPanel.\n */\nexport function useTabListState<T extends object>(props: TabListStateOptions<T>): TabListState<T> {\n let state = useSingleSelectListState<T>({\n ...props,\n onSelectionChange: props.onSelectionChange ? (key => {\n if (key != null) {\n props.onSelectionChange?.(key);\n }\n }) : undefined,\n suppressTextValueWarning: true,\n defaultSelectedKey: props.defaultSelectedKey ?? findDefaultSelectedKey(props.collection, props.disabledKeys ? new Set(props.disabledKeys) : new Set()) ?? undefined\n });\n\n let {\n selectionManager,\n collection,\n selectedKey: currentSelectedKey\n } = state;\n\n let lastSelectedKey = useRef(currentSelectedKey);\n useEffect(() => {\n // Ensure a tab is always selected (in case no selected key was specified or if selected item was deleted from collection)\n let selectedKey = currentSelectedKey;\n if (props.selectedKey == null && (selectionManager.isEmpty || selectedKey == null || !collection.getItem(selectedKey))) {\n selectedKey = findDefaultSelectedKey(collection, state.disabledKeys);\n if (selectedKey != null) {\n // directly set selection because replace/toggle selection won't consider disabled keys\n selectionManager.setSelectedKeys([selectedKey]);\n }\n }\n\n // If the tablist doesn't have focus and the selected key changes or if there isn't a focused key yet, change focused key to the selected key if it exists.\n if (selectedKey != null && selectionManager.focusedKey == null || (!selectionManager.isFocused && selectedKey !== lastSelectedKey.current)) {\n selectionManager.setFocusedKey(selectedKey);\n }\n lastSelectedKey.current = selectedKey;\n });\n\n return {\n ...state,\n isDisabled: props.isDisabled || false\n };\n}\n\nfunction findDefaultSelectedKey<T>(collection: Collection<Node<T>> | undefined, disabledKeys: Set<Key>) {\n let selectedKey: Key | null = null;\n if (collection) {\n selectedKey = collection.getFirstKey();\n // loop over tabs until we find one that isn't disabled and select that\n while (selectedKey != null && (disabledKeys.has(selectedKey) || collection.getItem(selectedKey)?.props?.isDisabled) && selectedKey !== collection.getLastKey()) {\n selectedKey = collection.getKeyAfter(selectedKey);\n }\n // if this check is true, then every item is disabled, it makes more sense to default to the first key than the last\n if (selectedKey != null && (disabledKeys.has(selectedKey) || collection.getItem(selectedKey)?.props?.isDisabled) && selectedKey === collection.getLastKey()) {\n selectedKey = collection.getFirstKey();\n }\n }\n\n return selectedKey;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {FocusableProps, InputBase, Validation} from '@react-types/shared';\nimport {ReactNode, useState} from 'react';\nimport {useControlledState} from '../utils/useControlledState';\n\nexport interface ToggleStateOptions extends InputBase {\n /**\n * Whether the element should be selected (uncontrolled).\n */\n defaultSelected?: boolean,\n /**\n * Whether the element should be selected (controlled).\n */\n isSelected?: boolean,\n /**\n * Handler that is called when the element's selection state changes.\n */\n onChange?: (isSelected: boolean) => void\n}\n\nexport interface ToggleProps extends ToggleStateOptions, Validation<boolean>, FocusableProps {\n /**\n * The label for the element.\n */\n children?: ReactNode,\n /**\n * The value of the input element, used when submitting an HTML form. See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#htmlattrdefvalue).\n */\n value?: string\n}\n\nexport interface ToggleState {\n /** Whether the toggle is selected. */\n readonly isSelected: boolean,\n\n /** Whether the toggle is selected by default. */\n readonly defaultSelected: boolean,\n\n /** Updates selection state. */\n setSelected(isSelected: boolean): void,\n\n /** Toggle the selection state. */\n toggle(): void\n}\n\n/**\n * Provides state management for toggle components like checkboxes and switches.\n */\nexport function useToggleState(props: ToggleStateOptions = {}): ToggleState {\n let {isReadOnly} = props;\n\n // have to provide an empty function so useControlledState doesn't throw a fit\n // can't use useControlledState's prop calling because we need the event object from the change\n let [isSelected, setSelected] = useControlledState(props.isSelected, props.defaultSelected || false, props.onChange);\n let [initialValue] = useState(isSelected);\n\n function updateSelected(value) {\n if (!isReadOnly) {\n setSelected(value);\n }\n }\n\n function toggleState() {\n if (!isReadOnly) {\n setSelected(!isSelected);\n }\n }\n\n return {\n isSelected,\n defaultSelected: props.defaultSelected ?? initialValue,\n setSelected: updateSelected,\n toggle: toggleState\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {OverlayTriggerProps, useOverlayTriggerState} from '../overlays/useOverlayTriggerState';\nimport {useEffect, useMemo, useRef} from 'react';\n\nexport interface TooltipTriggerProps extends OverlayTriggerProps {\n /**\n * Whether the tooltip should be disabled, independent from the trigger.\n */\n isDisabled?: boolean,\n\n /**\n * The delay time for the tooltip to show up. [See guidelines](https://spectrum.adobe.com/page/tooltip/#Immediate-or-delayed-appearance).\n * @default 1500\n */\n delay?: number,\n\n /**\n * The delay time for the tooltip to close. [See guidelines](https://spectrum.adobe.com/page/tooltip/#Warmup-and-cooldown).\n * @default 500\n */\n closeDelay?: number,\n\n /**\n * By default, opens for both focus and hover. Can be made to open only for focus.\n * @default 'hover'\n */\n trigger?: 'hover' | 'focus',\n\n /**\n * Whether the tooltip should close when the trigger is pressed.\n * @default true\n */\n shouldCloseOnPress?: boolean\n}\n\nconst TOOLTIP_DELAY = 1500; // this seems to be a 1.5 second delay, check with design\nconst TOOLTIP_COOLDOWN = 500;\n\nexport interface TooltipTriggerState {\n /** Whether the tooltip is currently showing. */\n isOpen: boolean,\n /**\n * Shows the tooltip. By default, the tooltip becomes visible after a delay\n * depending on a global warmup timer. The `immediate` option shows the\n * tooltip immediately instead.\n */\n open(immediate?: boolean): void,\n /** Hides the tooltip. */\n close(immediate?: boolean): void\n}\n\nlet tooltips = {};\nlet tooltipId = 0;\nlet globalWarmedUp = false;\nlet globalWarmUpTimeout: ReturnType<typeof setTimeout> | null = null;\nlet globalCooldownTimeout: ReturnType<typeof setTimeout> | null = null;\n\n/**\n * Manages state for a tooltip trigger. Tracks whether the tooltip is open, and provides\n * methods to toggle this state. Ensures only one tooltip is open at a time and controls\n * the delay for showing a tooltip.\n */\nexport function useTooltipTriggerState(props: TooltipTriggerProps = {}): TooltipTriggerState {\n let {delay = TOOLTIP_DELAY, closeDelay = TOOLTIP_COOLDOWN} = props;\n let {isOpen, open, close} = useOverlayTriggerState(props);\n let id = useMemo(() => `${++tooltipId}`, []);\n let closeTimeout = useRef<ReturnType<typeof setTimeout> | null>(null);\n let closeCallback = useRef<() => void>(close);\n\n let ensureTooltipEntry = () => {\n tooltips[id] = hideTooltip;\n };\n\n let closeOpenTooltips = () => {\n for (let hideTooltipId in tooltips) {\n if (hideTooltipId !== id) {\n tooltips[hideTooltipId](true);\n delete tooltips[hideTooltipId];\n }\n }\n };\n\n let showTooltip = () => {\n if (closeTimeout.current) {\n clearTimeout(closeTimeout.current);\n }\n closeTimeout.current = null;\n closeOpenTooltips();\n ensureTooltipEntry();\n globalWarmedUp = true;\n open();\n if (globalWarmUpTimeout) {\n clearTimeout(globalWarmUpTimeout);\n globalWarmUpTimeout = null;\n }\n if (globalCooldownTimeout) {\n clearTimeout(globalCooldownTimeout);\n globalCooldownTimeout = null;\n }\n };\n\n let hideTooltip = (immediate?: boolean) => {\n if (immediate || closeDelay <= 0) {\n if (closeTimeout.current) {\n clearTimeout(closeTimeout.current);\n }\n closeTimeout.current = null;\n closeCallback.current();\n } else if (!closeTimeout.current) {\n closeTimeout.current = setTimeout(() => {\n closeTimeout.current = null;\n closeCallback.current();\n }, closeDelay);\n }\n\n if (globalWarmUpTimeout) {\n clearTimeout(globalWarmUpTimeout);\n globalWarmUpTimeout = null;\n }\n if (globalWarmedUp) {\n if (globalCooldownTimeout) {\n clearTimeout(globalCooldownTimeout);\n }\n globalCooldownTimeout = setTimeout(() => {\n delete tooltips[id];\n globalCooldownTimeout = null;\n globalWarmedUp = false;\n }, Math.max(TOOLTIP_COOLDOWN, closeDelay));\n }\n };\n\n let warmupTooltip = () => {\n closeOpenTooltips();\n ensureTooltipEntry();\n if (!isOpen && !globalWarmedUp) {\n if (globalWarmUpTimeout) {\n clearTimeout(globalWarmUpTimeout);\n }\n\n globalWarmUpTimeout = setTimeout(() => {\n globalWarmUpTimeout = null;\n globalWarmedUp = true;\n showTooltip();\n }, delay);\n } else if (!isOpen) {\n showTooltip();\n }\n };\n\n useEffect(() => {\n closeCallback.current = close;\n }, [close]);\n\n\n useEffect(() => {\n return () => {\n if (closeTimeout.current) {\n clearTimeout(closeTimeout.current);\n }\n let tooltip = tooltips[id];\n if (tooltip) {\n delete tooltips[id];\n }\n };\n }, [id]);\n\n return {\n isOpen,\n open: (immediate) => {\n if (!immediate && delay > 0 && !closeTimeout.current) {\n warmupTooltip();\n } else {\n showTooltip();\n }\n },\n close: hideTooltip\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Collection, Key, Node} from '@react-types/shared';\n\nexport class TreeCollection<T> implements Collection<Node<T>> {\n private keyMap: Map<Key, Node<T>> = new Map();\n private iterable: Iterable<Node<T>>;\n private firstKey: Key | null = null;\n private lastKey: Key | null = null;\n\n constructor(nodes: Iterable<Node<T>>, {expandedKeys}: {expandedKeys?: Set<Key>} = {}) {\n this.iterable = nodes;\n expandedKeys = expandedKeys || new Set();\n\n let visit = (node: Node<T>) => {\n this.keyMap.set(node.key, node);\n\n if (node.childNodes && (node.type === 'section' || expandedKeys.has(node.key))) {\n for (let child of node.childNodes) {\n visit(child);\n }\n }\n };\n\n for (let node of nodes) {\n visit(node);\n }\n\n let last: Node<T> | null = null;\n let index = 0;\n for (let [key, node] of this.keyMap) {\n if (last) {\n last.nextKey = key;\n node.prevKey = last.key;\n } else {\n this.firstKey = key;\n node.prevKey = undefined;\n }\n\n if (node.type === 'item') {\n node.index = index++;\n }\n\n last = node;\n\n // Set nextKey as undefined since this might be the last node\n // If it isn't the last node, last.nextKey will properly set at start of new loop\n last.nextKey = undefined;\n }\n\n this.lastKey = last?.key ?? null;\n }\n\n *[Symbol.iterator](): IterableIterator<Node<T>> {\n yield* this.iterable;\n }\n\n get size(): number {\n return this.keyMap.size;\n }\n\n getKeys(): IterableIterator<Key> {\n return this.keyMap.keys();\n }\n\n getKeyBefore(key: Key): Key | null {\n let node = this.keyMap.get(key);\n return node ? node.prevKey ?? null : null;\n }\n\n getKeyAfter(key: Key): Key | null {\n let node = this.keyMap.get(key);\n return node ? node.nextKey ?? null : null;\n }\n\n getFirstKey(): Key | null {\n return this.firstKey;\n }\n\n getLastKey(): Key | null {\n return this.lastKey;\n }\n\n getItem(key: Key): Node<T> | null {\n return this.keyMap.get(key) ?? null;\n }\n\n at(idx: number): Node<T> | null {\n const keys = [...this.getKeys()];\n return this.getItem(keys[idx]);\n }\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n Collection,\n CollectionStateBase,\n DisabledBehavior,\n Expandable,\n Key,\n MultipleSelection,\n Node\n} from '@react-types/shared';\nimport {SelectionManager} from '../selection/SelectionManager';\nimport {TreeCollection} from './TreeCollection';\nimport {useCallback, useEffect, useMemo} from 'react';\nimport {useCollection} from '../collections/useCollection';\nimport {useControlledState} from '../utils/useControlledState';\nimport {useMultipleSelectionState} from '../selection/useMultipleSelectionState';\n\nexport interface TreeProps<T>\n extends CollectionStateBase<T>,\n Expandable,\n MultipleSelection {\n /** Whether `disabledKeys` applies to all interactions, or only selection. */\n disabledBehavior?: DisabledBehavior\n}\nexport interface TreeState<T> {\n /** A collection of items in the tree. */\n readonly collection: Collection<Node<T>>,\n\n /** A set of keys for items that are disabled. */\n readonly disabledKeys: Set<Key>,\n\n /** A set of keys for items that are expanded. */\n readonly expandedKeys: Set<Key>,\n\n /** Toggles the expanded state for an item by its key. */\n toggleKey(key: Key): void,\n\n /** Replaces the set of expanded keys. */\n setExpandedKeys(keys: Set<Key>): void,\n\n /** A selection manager to read and update multiple selection state. */\n readonly selectionManager: SelectionManager\n}\n\n/**\n * Provides state management for tree-like components. Handles building a collection\n * of items from props, item expanded state, and manages multiple selection state.\n */\nexport function useTreeState<T extends object>(props: TreeProps<T>): TreeState<T> {\n let {\n onExpandedChange\n } = props;\n\n let [expandedKeys, setExpandedKeys] = useControlledState(\n props.expandedKeys ? new Set(props.expandedKeys) : undefined,\n props.defaultExpandedKeys ? new Set(props.defaultExpandedKeys) : new Set(),\n onExpandedChange\n );\n\n let selectionState = useMultipleSelectionState(props);\n let disabledKeys = useMemo(() =>\n props.disabledKeys ? new Set(props.disabledKeys) : new Set<Key>()\n , [props.disabledKeys]);\n\n let tree = useCollection(props, useCallback(nodes => new TreeCollection(nodes, {expandedKeys}), [expandedKeys]), null);\n\n // Reset focused key if that item is deleted from the collection.\n useEffect(() => {\n if (selectionState.focusedKey != null && !tree.getItem(selectionState.focusedKey)) {\n selectionState.setFocusedKey(null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tree, selectionState.focusedKey]);\n\n let onToggle = (key: Key) => {\n setExpandedKeys(toggleKey(expandedKeys, key));\n };\n\n return {\n collection: tree,\n expandedKeys,\n disabledKeys,\n toggleKey: onToggle,\n setExpandedKeys,\n selectionManager: new SelectionManager(tree, selectionState)\n };\n}\n\nfunction toggleKey(set: Set<Key>, key: Key): Set<Key> {\n let res = new Set(set);\n if (res.has(key)) {\n res.delete(key);\n } else {\n res.add(key);\n }\n\n return res;\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface ChatBubbleProps {\n variant?: \"user\" | \"bot\" | \"system\";\n author?: ReactNode;\n timestamp?: ReactNode;\n avatar?: ReactNode;\n initial?: ReactNode;\n hideAvatar?: boolean;\n children: ReactNode;\n className?: string;\n}\n\nexport function ChatBubble({\n variant = \"bot\",\n author,\n timestamp,\n avatar,\n initial,\n hideAvatar = false,\n children,\n className,\n}: ChatBubbleProps) {\n const isUser = variant === \"user\";\n return (\n <div className={cn(\"ods-chat\", `ods-chat--${variant}`, className)}>\n {!hideAvatar && (\n <div className=\"ods-chat__avatar\" aria-hidden=\"true\">\n {avatar ?? (\n <span>\n {initial ?? (typeof author === \"string\" ? author.charAt(0).toUpperCase() : isUser ? \"U\" : \"AI\")}\n </span>\n )}\n </div>\n )}\n <div className=\"ods-chat__bubble\">\n <div className=\"ods-chat__body\">{children}</div>\n {(author || timestamp) && (\n <div className=\"ods-chat__meta\">\n {author && <span className=\"ods-chat__author\">{author}</span>}\n {timestamp && <span className=\"ods-chat__time\">{timestamp}</span>}\n </div>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\nimport {\n type ReactNode,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../utils/cn\";\n\nexport type HoverCardPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport interface HoverCardProps {\n content: ReactNode;\n placement?: HoverCardPlacement;\n offset?: number;\n openDelay?: number; // ms before it opens on hover\n closeDelay?: number; // ms before it closes when mouse leaves\n children: ReactNode;\n className?: string;\n}\n\ninterface Coords { top: number; left: number; }\n\nfunction computePosition(rect: DOMRect, panelRect: DOMRect, placement: HoverCardPlacement, offset: number): Coords {\n const cx = rect.left + rect.width / 2;\n const cy = rect.top + rect.height / 2;\n switch (placement) {\n case \"top\": return { top: rect.top - panelRect.height - offset, left: cx - panelRect.width / 2 };\n case \"bottom\": return { top: rect.bottom + offset, left: cx - panelRect.width / 2 };\n case \"left\": return { top: cy - panelRect.height / 2, left: rect.left - panelRect.width - offset };\n case \"right\": return { top: cy - panelRect.height / 2, left: rect.right + offset };\n }\n}\n\nexport function HoverCard({\n content,\n placement = \"bottom\",\n offset = 8,\n openDelay = 300,\n closeDelay = 180,\n children,\n className,\n}: HoverCardProps) {\n const [open, setOpen] = useState(false);\n const triggerRef = useRef<HTMLSpanElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const openTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const [coords, setCoords] = useState<Coords | null>(null);\n\n const clearTimers = () => {\n if (openTimer.current) { clearTimeout(openTimer.current); openTimer.current = null; }\n if (closeTimer.current) { clearTimeout(closeTimer.current); closeTimer.current = null; }\n };\n useEffect(() => () => clearTimers(), []);\n\n const show = () => {\n clearTimers();\n openTimer.current = setTimeout(() => setOpen(true), openDelay);\n };\n const hide = () => {\n clearTimers();\n closeTimer.current = setTimeout(() => setOpen(false), closeDelay);\n };\n\n const reposition = useCallback(() => {\n if (!triggerRef.current || !panelRef.current) return;\n const trigRect = triggerRef.current.getBoundingClientRect();\n const panelRect = panelRef.current.getBoundingClientRect();\n setCoords(computePosition(trigRect, panelRect, placement, offset));\n }, [placement, offset]);\n\n useLayoutEffect(() => {\n if (!open) return;\n reposition();\n const id = requestAnimationFrame(reposition);\n return () => cancelAnimationFrame(id);\n }, [open, reposition]);\n\n useEffect(() => {\n if (!open) return;\n const h = () => reposition();\n window.addEventListener(\"scroll\", h, true);\n window.addEventListener(\"resize\", h);\n return () => { window.removeEventListener(\"scroll\", h, true); window.removeEventListener(\"resize\", h); };\n }, [open, reposition]);\n\n // Wrapper span anchors the hover card — works even if the child component\n // (e.g. our Button) doesn't forward refs.\n const triggerEl = (\n <span\n ref={triggerRef}\n className=\"ods-hover-card__anchor\"\n onMouseEnter={show}\n onMouseLeave={hide}\n onFocusCapture={show}\n onBlurCapture={hide}\n >\n {children}\n </span>\n );\n\n const portal =\n typeof document !== \"undefined\" && open\n ? createPortal(\n <div\n ref={panelRef}\n role=\"tooltip\"\n data-placement={placement}\n className={cn(\"ods-hover-card\", className)}\n onMouseEnter={show}\n onMouseLeave={hide}\n style={{\n position: \"fixed\",\n zIndex: 1000,\n top: coords?.top ?? -9999,\n left: coords?.left ?? -9999,\n visibility: coords ? \"visible\" : \"hidden\",\n }}\n >\n {content}\n </div>,\n document.body,\n )\n : null;\n\n return (\n <>\n {triggerEl}\n {portal}\n </>\n );\n}\n","\"use client\";\nimport {\n type ReactNode,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../utils/cn\";\n\nexport type PopoverPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport interface PopoverProps {\n content: ReactNode;\n placement?: PopoverPlacement;\n offset?: number;\n open?: boolean; // controlled\n defaultOpen?: boolean; // uncontrolled\n onOpenChange?: (open: boolean) => void;\n trigger?: \"click\" | \"manual\";\n closeOnClickOutside?: boolean;\n closeOnEsc?: boolean;\n arrow?: boolean;\n children: ReactNode;\n className?: string;\n}\n\ninterface Coords { top: number; left: number; }\n\nfunction computePosition(rect: DOMRect, popRect: DOMRect, placement: PopoverPlacement, offset: number): Coords {\n const cx = rect.left + rect.width / 2;\n const cy = rect.top + rect.height / 2;\n switch (placement) {\n case \"top\": return { top: rect.top - popRect.height - offset, left: cx - popRect.width / 2 };\n case \"bottom\": return { top: rect.bottom + offset, left: cx - popRect.width / 2 };\n case \"left\": return { top: cy - popRect.height / 2, left: rect.left - popRect.width - offset };\n case \"right\": return { top: cy - popRect.height / 2, left: rect.right + offset };\n }\n}\n\nexport function Popover({\n content,\n placement = \"bottom\",\n offset = 8,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n trigger = \"click\",\n closeOnClickOutside = true,\n closeOnEsc = true,\n arrow = true,\n children,\n className,\n}: PopoverProps) {\n const [openState, setOpenState] = useState(defaultOpen);\n const open = openProp ?? openState;\n const setOpen = useCallback((v: boolean) => {\n if (openProp === undefined) setOpenState(v);\n onOpenChange?.(v);\n }, [openProp, onOpenChange]);\n\n const triggerRef = useRef<HTMLSpanElement>(null);\n const popRef = useRef<HTMLDivElement>(null);\n const [coords, setCoords] = useState<Coords | null>(null);\n\n const reposition = useCallback(() => {\n if (!triggerRef.current || !popRef.current) return;\n const trigRect = triggerRef.current.getBoundingClientRect();\n const popRect = popRef.current.getBoundingClientRect();\n setCoords(computePosition(trigRect, popRect, placement, offset));\n }, [placement, offset]);\n\n useLayoutEffect(() => {\n if (!open) return;\n reposition();\n const id = requestAnimationFrame(reposition);\n return () => cancelAnimationFrame(id);\n }, [open, reposition, content]);\n\n useEffect(() => {\n if (!open) return;\n const onScroll = () => reposition();\n window.addEventListener(\"scroll\", onScroll, true);\n window.addEventListener(\"resize\", onScroll);\n return () => {\n window.removeEventListener(\"scroll\", onScroll, true);\n window.removeEventListener(\"resize\", onScroll);\n };\n }, [open, reposition]);\n\n useEffect(() => {\n if (!open || !closeOnClickOutside) return;\n const onDoc = (e: MouseEvent) => {\n const t = e.target as Node;\n if (!triggerRef.current?.contains(t) && !popRef.current?.contains(t)) {\n setOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", onDoc);\n return () => document.removeEventListener(\"mousedown\", onDoc);\n }, [open, closeOnClickOutside, setOpen]);\n\n useEffect(() => {\n if (!open || !closeOnEsc) return;\n const onKey = (e: KeyboardEvent) => { if (e.key === \"Escape\") setOpen(false); };\n document.addEventListener(\"keydown\", onKey);\n return () => document.removeEventListener(\"keydown\", onKey);\n }, [open, closeOnEsc, setOpen]);\n\n // Wrapper span anchors the popover — works regardless of whether the\n // child component forwards refs (e.g. our Button doesn't).\n const triggerEl = (\n <span\n ref={triggerRef}\n className=\"ods-popover__anchor\"\n onClickCapture={() => {\n if (trigger === \"click\") setOpen(!open);\n }}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n >\n {children}\n </span>\n );\n\n const portal =\n typeof document !== \"undefined\" && open\n ? createPortal(\n <div\n ref={popRef}\n role=\"dialog\"\n data-placement={placement}\n className={cn(\"ods-popover\", className)}\n style={{\n position: \"fixed\",\n zIndex: 1000,\n top: coords?.top ?? -9999,\n left: coords?.left ?? -9999,\n visibility: coords ? \"visible\" : \"hidden\",\n }}\n >\n {content}\n {arrow && <span className=\"ods-popover__arrow\" aria-hidden=\"true\" />}\n </div>,\n document.body,\n )\n : null;\n\n return (\n <>\n {triggerEl}\n {portal}\n </>\n );\n}\n","\"use client\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { type ReactNode, useEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../utils/cn\";\n\nexport type SheetSide = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport interface SheetProps {\n open: boolean;\n onClose: () => void;\n side?: SheetSide;\n size?: \"sm\" | \"md\" | \"lg\" | \"full\" | number | string;\n title?: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n closeOnOverlayClick?: boolean;\n closeOnEsc?: boolean;\n dragHandle?: boolean; // render the notch at the top (bottom/top sheets)\n className?: string;\n}\n\nconst slideVariants: Record<SheetSide, { initial: any; animate: any; exit: any }> = {\n top: { initial: { y: \"-100%\" }, animate: { y: 0 }, exit: { y: \"-100%\" } },\n bottom: { initial: { y: \"100%\" }, animate: { y: 0 }, exit: { y: \"100%\" } },\n left: { initial: { x: \"-100%\" }, animate: { x: 0 }, exit: { x: \"-100%\" } },\n right: { initial: { x: \"100%\" }, animate: { x: 0 }, exit: { x: \"100%\" } },\n};\n\nfunction resolveSize(side: SheetSide, size: SheetProps[\"size\"]): string {\n const isVertical = side === \"left\" || side === \"right\";\n if (size === \"full\") return isVertical ? \"100vw\" : \"100vh\";\n if (typeof size === \"number\") return `${size}px`;\n if (typeof size === \"string\") return size;\n const scale = { sm: isVertical ? 320 : 240, md: isVertical ? 420 : 360, lg: isVertical ? 560 : 480 };\n return `${scale[size ?? \"md\"]}px`;\n}\n\nexport function Sheet({\n open,\n onClose,\n side = \"bottom\",\n size = \"md\",\n title,\n description,\n children,\n footer,\n closeOnOverlayClick = true,\n closeOnEsc = true,\n dragHandle = true,\n className,\n}: SheetProps) {\n useEffect(() => {\n if (!open || !closeOnEsc) return;\n const onKey = (e: KeyboardEvent) => { if (e.key === \"Escape\") onClose(); };\n document.addEventListener(\"keydown\", onKey);\n return () => document.removeEventListener(\"keydown\", onKey);\n }, [open, closeOnEsc, onClose]);\n\n const variant = slideVariants[side];\n const resolved = resolveSize(side, size);\n const isVertical = side === \"left\" || side === \"right\";\n\n const content = (\n <AnimatePresence>\n {open && (\n <>\n <motion.div\n className=\"ods-sheet__backdrop\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.18 }}\n onClick={closeOnOverlayClick ? onClose : undefined}\n aria-hidden=\"true\"\n />\n <motion.div\n className={cn(\"ods-sheet\", `ods-sheet--${side}`, className)}\n style={isVertical ? { width: resolved } : { height: resolved }}\n role=\"dialog\"\n aria-modal=\"true\"\n initial={variant.initial}\n animate={variant.animate}\n exit={variant.exit}\n transition={{ type: \"tween\", ease: [0.32, 0.72, 0, 1], duration: 0.28 }}\n >\n {(side === \"bottom\" || side === \"top\") && dragHandle && (\n <div className=\"ods-sheet__handle\" aria-hidden=\"true\" />\n )}\n {(title || description) && (\n <header className=\"ods-sheet__head\">\n {title && <h2 className=\"ods-sheet__title\">{title}</h2>}\n {description && <p className=\"ods-sheet__desc\">{description}</p>}\n </header>\n )}\n <div className=\"ods-sheet__body\">{children}</div>\n {footer && <footer className=\"ods-sheet__footer\">{footer}</footer>}\n </motion.div>\n </>\n )}\n </AnimatePresence>\n );\n\n if (typeof document === \"undefined\") return null;\n return createPortal(content, document.body);\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface ChipProps {\n variant?: \"default\" | \"primary\" | \"success\" | \"warning\" | \"error\";\n size?: \"sm\" | \"md\";\n avatar?: ReactNode;\n icon?: ReactNode;\n removable?: boolean;\n onRemove?: () => void;\n onClick?: () => void;\n disabled?: boolean;\n children: ReactNode;\n className?: string;\n}\n\nexport function Chip({\n variant = \"default\",\n size = \"md\",\n avatar,\n icon,\n removable = false,\n onRemove,\n onClick,\n disabled = false,\n children,\n className,\n}: ChipProps) {\n const interactive = Boolean(onClick) && !disabled;\n return (\n <span\n className={cn(\n \"ods-chip\",\n `ods-chip--${variant}`,\n `ods-chip--${size}`,\n avatar && \"ods-chip--avatar\",\n interactive && \"ods-chip--interactive\",\n disabled && \"ods-chip--disabled\",\n className,\n )}\n onClick={interactive ? onClick : undefined}\n role={interactive ? \"button\" : undefined}\n tabIndex={interactive ? 0 : undefined}\n >\n {avatar && <span className=\"ods-chip__avatar\">{avatar}</span>}\n {icon && !avatar && <span className=\"ods-chip__icon\" aria-hidden=\"true\">{icon}</span>}\n <span className=\"ods-chip__label\">{children}</span>\n {removable && (\n <button\n type=\"button\"\n className=\"ods-chip__remove\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove?.();\n }}\n aria-label=\"Remove\"\n disabled={disabled}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M3 3L9 9M9 3L3 9\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n )}\n </span>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface ChoiceCardProps {\n icon?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n selected?: boolean;\n disabled?: boolean;\n badge?: ReactNode;\n onClick?: () => void;\n className?: string;\n}\n\nexport function ChoiceCard({ icon, title, description, selected = false, disabled = false, badge, onClick, className }: ChoiceCardProps) {\n return (\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n disabled={disabled}\n onClick={onClick}\n className={cn(\n \"ods-choice-card\",\n selected && \"ods-choice-card--selected\",\n disabled && \"ods-choice-card--disabled\",\n className,\n )}\n >\n <div className=\"ods-choice-card__head\">\n {icon && <span className=\"ods-choice-card__icon\">{icon}</span>}\n {badge ? (\n <span className=\"ods-choice-card__badge\">{badge}</span>\n ) : (\n <span className={cn(\"ods-choice-card__check\", selected && \"ods-choice-card__check--on\")}>\n {selected && (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"m3 7.5 3 3 5-6\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )}\n </span>\n )}\n </div>\n <div className=\"ods-choice-card__title\">{title}</div>\n {description && <div className=\"ods-choice-card__desc\">{description}</div>}\n </button>\n );\n}\n","\"use client\";\nimport { type ChangeEvent, type ReactNode, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface ColorPickerProps {\n label?: ReactNode;\n value: string;\n onChange?: (value: string) => void;\n swatches?: string[];\n showHex?: boolean;\n showPicker?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n disabled?: boolean;\n className?: string;\n}\n\nconst DEFAULT_SWATCHES = [\n \"#ef4444\", \"#f59e0b\", \"#22c55e\", \"#0ea5e9\",\n \"#6366f1\", \"#8b5cf6\", \"#ec4899\", \"#1e1b4b\",\n];\n\nfunction isValidHex(v: string): boolean {\n return /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(v);\n}\n\nexport function ColorPicker({\n label,\n value,\n onChange,\n swatches = DEFAULT_SWATCHES,\n showHex = true,\n showPicker = true,\n size = \"md\",\n disabled = false,\n className,\n}: ColorPickerProps) {\n const [hex, setHex] = useState(value);\n\n const commit = (v: string) => {\n setHex(v);\n if (isValidHex(v)) onChange?.(v);\n };\n\n const onHexChange = (e: ChangeEvent<HTMLInputElement>) => {\n let v = e.target.value;\n if (v && !v.startsWith(\"#\")) v = `#${v}`;\n commit(v);\n };\n\n const onNativeChange = (e: ChangeEvent<HTMLInputElement>) => {\n commit(e.target.value);\n };\n\n return (\n <div\n className={cn(\n \"ods-color\",\n `ods-color--${size}`,\n disabled && \"ods-color--disabled\",\n className,\n )}\n >\n {label && <label className=\"ods-color__label\">{label}</label>}\n <div className=\"ods-color__field\">\n <span className=\"ods-color__swatch\" style={{ background: value }} />\n {showHex && (\n <input\n type=\"text\"\n className=\"ods-color__hex\"\n value={hex.toUpperCase()}\n onChange={onHexChange}\n onBlur={() => isValidHex(hex) ? null : setHex(value)}\n disabled={disabled}\n spellCheck={false}\n />\n )}\n {showPicker && (\n <label className=\"ods-color__pick\" aria-label=\"Open native color picker\">\n <input\n type=\"color\"\n value={isValidHex(value) ? value : \"#000000\"}\n onChange={onNativeChange}\n disabled={disabled}\n tabIndex={-1}\n />\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M3 11l8-8M9 1l4 4-2 2-4-4 2-2zM3 11v2h2\" stroke=\"currentColor\" strokeWidth=\"1.4\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </label>\n )}\n </div>\n {swatches.length > 0 && (\n <div className=\"ods-color__swatches\" role=\"radiogroup\" aria-label=\"Preset colors\">\n {swatches.map((c) => {\n const active = c.toLowerCase() === value.toLowerCase();\n return (\n <button\n key={c}\n type=\"button\"\n role=\"radio\"\n aria-checked={active}\n aria-label={c}\n className={cn(\"ods-color__sw\", active && \"ods-color__sw--active\")}\n style={{ background: c }}\n onClick={() => !disabled && commit(c)}\n disabled={disabled}\n />\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\nimport {\n type KeyboardEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface ConditionField {\n value: string;\n label: string;\n icon?: ReactNode;\n description?: string;\n}\n\nexport interface ConditionOperator {\n value: string;\n label: string;\n symbol?: string; // e.g. \"=\", \"≠\", \">\", \"<=\"\n description?: string;\n}\n\nexport interface Condition {\n field: string;\n operator: string;\n value: string;\n}\n\nexport interface ConditionGroup {\n type: \"group\";\n joinOperator: \"AND\" | \"OR\";\n conditions: (Condition | ConditionGroup)[];\n}\n\nexport interface ConditionBuilderProps {\n conditions: Condition[];\n onChange: (conditions: Condition[]) => void;\n fields: ConditionField[];\n operators: ConditionOperator[];\n /** Auto-enables search above 8 options. Force on/off via boolean. */\n searchable?: boolean;\n allowGroups?: boolean;\n joinOperator?: \"AND\" | \"OR\";\n onJoinChange?: (join: \"AND\" | \"OR\") => void;\n className?: string;\n}\n\ninterface DropdownOption {\n value: string;\n label: string;\n icon?: ReactNode;\n symbol?: string;\n description?: string;\n}\n\ninterface OptionDropdownProps {\n value: string;\n options: DropdownOption[];\n onChange: (value: string) => void;\n placeholder?: string;\n searchable?: boolean | \"auto\";\n ariaLabel: string;\n minWidth?: number;\n}\n\nfunction OptionDropdown({\n value,\n options,\n onChange,\n placeholder = \"Select…\",\n searchable = \"auto\",\n ariaLabel,\n minWidth = 140,\n}: OptionDropdownProps) {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [activeIdx, setActiveIdx] = useState(0);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const listboxId = useId();\n\n const showSearch = searchable === true || (searchable === \"auto\" && options.length > 8);\n\n const selected = options.find((o) => o.value === value);\n\n const filtered = useMemo(() => {\n if (!showSearch || !query.trim()) return options;\n const q = query.trim().toLowerCase();\n return options.filter(\n (o) =>\n o.label.toLowerCase().includes(q) ||\n o.value.toLowerCase().includes(q) ||\n o.description?.toLowerCase().includes(q),\n );\n }, [options, query, showSearch]);\n\n // Reset active index when filter changes\n useEffect(() => {\n setActiveIdx(0);\n }, [query, open]);\n\n // Click outside closes\n useEffect(() => {\n if (!open) return;\n const onDoc = (e: MouseEvent) => {\n const t = e.target as Node;\n if (\n !triggerRef.current?.contains(t) &&\n !panelRef.current?.contains(t)\n ) {\n setOpen(false);\n setQuery(\"\");\n }\n };\n document.addEventListener(\"mousedown\", onDoc);\n return () => document.removeEventListener(\"mousedown\", onDoc);\n }, [open]);\n\n // Focus search input when opened with searchable\n useEffect(() => {\n if (open && showSearch) {\n requestAnimationFrame(() => inputRef.current?.focus());\n }\n }, [open, showSearch]);\n\n const select = (v: string) => {\n onChange(v);\n setOpen(false);\n setQuery(\"\");\n triggerRef.current?.focus();\n };\n\n const handleKey = (e: KeyboardEvent) => {\n if (!open) {\n if (e.key === \"Enter\" || e.key === \" \" || e.key === \"ArrowDown\") {\n e.preventDefault();\n setOpen(true);\n }\n return;\n }\n if (e.key === \"Escape\") {\n e.preventDefault();\n setOpen(false);\n setQuery(\"\");\n triggerRef.current?.focus();\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setActiveIdx((i) => Math.min(filtered.length - 1, i + 1));\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setActiveIdx((i) => Math.max(0, i - 1));\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n const opt = filtered[activeIdx];\n if (opt) select(opt.value);\n } else if (e.key === \"Home\") {\n e.preventDefault();\n setActiveIdx(0);\n } else if (e.key === \"End\") {\n e.preventDefault();\n setActiveIdx(filtered.length - 1);\n }\n };\n\n return (\n <div className=\"ods-cb-dd\" style={{ minWidth }} onKeyDown={handleKey}>\n <button\n ref={triggerRef}\n type=\"button\"\n className={cn(\"ods-cb-dd__trigger\", open && \"ods-cb-dd__trigger--open\")}\n onClick={() => setOpen((o) => !o)}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? listboxId : undefined}\n aria-label={ariaLabel}\n >\n {selected?.icon && <span className=\"ods-cb-dd__icon\" aria-hidden=\"true\">{selected.icon}</span>}\n {selected?.symbol && <span className=\"ods-cb-dd__symbol\">{selected.symbol}</span>}\n <span className={cn(\"ods-cb-dd__label\", !selected && \"ods-cb-dd__label--placeholder\")}>\n {selected?.label ?? placeholder}\n </span>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\" className=\"ods-cb-dd__chev\">\n <path d=\"M3 4.5 6 7.5 9 4.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n {open && (\n <div ref={panelRef} className=\"ods-cb-dd__panel\" role=\"presentation\">\n {showSearch && (\n <div className=\"ods-cb-dd__search\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"6\" cy=\"6\" r=\"4.5\" stroke=\"currentColor\" strokeWidth=\"1.4\" />\n <path d=\"m12 12-2.5-2.5\" stroke=\"currentColor\" strokeWidth=\"1.4\" strokeLinecap=\"round\" />\n </svg>\n <input\n ref={inputRef}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder=\"Search…\"\n aria-label=\"Search options\"\n />\n </div>\n )}\n <ul\n id={listboxId}\n role=\"listbox\"\n aria-label={ariaLabel}\n className=\"ods-cb-dd__list\"\n >\n {filtered.length === 0 && (\n <li className=\"ods-cb-dd__empty\">No matches</li>\n )}\n {filtered.map((opt, idx) => (\n <li key={opt.value}>\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={opt.value === value}\n className={cn(\n \"ods-cb-dd__opt\",\n opt.value === value && \"ods-cb-dd__opt--selected\",\n idx === activeIdx && \"ods-cb-dd__opt--active\",\n )}\n onClick={() => select(opt.value)}\n onMouseEnter={() => setActiveIdx(idx)}\n >\n {opt.icon && <span className=\"ods-cb-dd__opt-icon\" aria-hidden=\"true\">{opt.icon}</span>}\n {opt.symbol && <span className=\"ods-cb-dd__opt-symbol\">{opt.symbol}</span>}\n <span className=\"ods-cb-dd__opt-text\">\n <span className=\"ods-cb-dd__opt-label\">{opt.label}</span>\n {opt.description && <span className=\"ods-cb-dd__opt-desc\">{opt.description}</span>}\n </span>\n {opt.value === value && (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\" className=\"ods-cb-dd__opt-check\">\n <path d=\"m3 7.5 3 3 5-6\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )}\n </button>\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n );\n}\n\nexport function ConditionBuilder({\n conditions,\n onChange,\n fields,\n operators,\n searchable,\n joinOperator = \"AND\",\n onJoinChange,\n className,\n}: ConditionBuilderProps) {\n const handleFieldChange = useCallback(\n (index: number, field: string) => {\n const next = [...conditions];\n next[index] = { ...next[index], field };\n onChange(next);\n },\n [conditions, onChange],\n );\n\n const handleOperatorChange = useCallback(\n (index: number, operator: string) => {\n const next = [...conditions];\n next[index] = { ...next[index], operator };\n onChange(next);\n },\n [conditions, onChange],\n );\n\n const handleValueChange = useCallback(\n (index: number, value: string) => {\n const next = [...conditions];\n next[index] = { ...next[index], value };\n onChange(next);\n },\n [conditions, onChange],\n );\n\n const handleRemove = useCallback(\n (index: number) => {\n onChange(conditions.filter((_, i) => i !== index));\n },\n [conditions, onChange],\n );\n\n const handleAdd = useCallback(() => {\n onChange([\n ...conditions,\n { field: fields[0]?.value ?? \"\", operator: operators[0]?.value ?? \"\", value: \"\" },\n ]);\n }, [conditions, onChange, fields, operators]);\n\n const handleJoinToggle = useCallback(() => {\n if (onJoinChange) onJoinChange(joinOperator === \"AND\" ? \"OR\" : \"AND\");\n }, [joinOperator, onJoinChange]);\n\n return (\n <div className={cn(\"ods-condition-builder\", className)}>\n {conditions.map((condition, index) => (\n <div key={index}>\n {index > 0 && (\n <div className=\"ods-condition-builder__join\">\n <button\n type=\"button\"\n className={cn(\n \"ods-condition-builder__join-btn\",\n onJoinChange && \"ods-condition-builder__join-btn--clickable\",\n )}\n onClick={onJoinChange ? handleJoinToggle : undefined}\n aria-label={`Join operator: ${joinOperator}.${onJoinChange ? \" Click to toggle.\" : \"\"}`}\n >\n {joinOperator}\n </button>\n </div>\n )}\n <div className=\"ods-condition-row\">\n <OptionDropdown\n ariaLabel=\"Field\"\n value={condition.field}\n options={fields}\n onChange={(v) => handleFieldChange(index, v)}\n searchable={typeof searchable === \"boolean\" ? searchable : \"auto\"}\n minWidth={160}\n />\n <OptionDropdown\n ariaLabel=\"Operator\"\n value={condition.operator}\n options={operators}\n onChange={(v) => handleOperatorChange(index, v)}\n searchable={typeof searchable === \"boolean\" ? searchable : \"auto\"}\n minWidth={140}\n />\n <input\n type=\"text\"\n className=\"ods-condition-row__value\"\n value={condition.value}\n onChange={(e) => handleValueChange(index, e.target.value)}\n placeholder=\"Value\"\n aria-label=\"Value\"\n />\n <button\n type=\"button\"\n className=\"ods-condition-row__remove\"\n onClick={() => handleRemove(index)}\n aria-label=\"Remove condition\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path\n fillRule=\"evenodd\"\n d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n </div>\n </div>\n ))}\n <div className=\"ods-condition-builder__actions\">\n <button type=\"button\" className=\"ods-condition-builder__add\" onClick={handleAdd}>\n + Add condition\n </button>\n </div>\n </div>\n );\n}\n","\"use client\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { type ReactNode, useRef } from \"react\";\nimport { useButton } from \"react-aria\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface ConfigPanelProps {\n open?: boolean;\n onClose?: () => void;\n title?: string;\n icon?: ReactNode;\n children?: ReactNode;\n onSave?: () => void;\n onCancel?: () => void;\n className?: string;\n}\n\nexport function ConfigPanel({\n open = false,\n onClose,\n title = \"Configure\",\n icon,\n children,\n onSave,\n onCancel,\n className,\n}: ConfigPanelProps) {\n const closeRef = useRef<HTMLButtonElement>(null);\n const saveRef = useRef<HTMLButtonElement>(null);\n const cancelRef = useRef<HTMLButtonElement>(null);\n\n const { buttonProps: closeProps } = useButton(\n { onPress: onClose, \"aria-label\": \"Close panel\" },\n closeRef,\n );\n const { buttonProps: saveProps } = useButton({ onPress: onSave }, saveRef);\n const { buttonProps: cancelProps } = useButton({ onPress: onCancel || onClose }, cancelRef);\n\n // Strip conflicting event props from react-aria before passing to DOM/motion\n const safeCloseProps = stripMotionConflicts(closeProps);\n const safeSaveProps = stripMotionConflicts(saveProps);\n const safeCancelProps = stripMotionConflicts(cancelProps);\n\n return (\n <AnimatePresence>\n {open && (\n <motion.div\n className={cn('ods-config-panel', className)}\n initial={{ x: 320, opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: 320, opacity: 0 }}\n transition={{ type: \"spring\", stiffness: 300, damping: 30 }}\n data-testid=\"config-panel\"\n role=\"dialog\"\n aria-label={title}\n >\n {/* Header */}\n <div className={'ods-config-panel__header'}>\n <div className={'ods-config-panel__header-left'}>\n {icon && <div className={'ods-config-panel__icon'}>{icon}</div>}\n <h2 className={'ods-config-panel__title'}>{title}</h2>\n </div>\n <button\n {...safeCloseProps}\n ref={closeRef}\n className={'ods-config-panel__close'}\n data-testid=\"config-panel-close\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M4.646 4.646a.5.5 0 01.708 0L8 7.293l2.646-2.647a.5.5 0 01.708.708L8.707 8l2.647 2.646a.5.5 0 01-.708.708L8 8.707l-2.646 2.647a.5.5 0 01-.708-.708L7.293 8 4.646 5.354a.5.5 0 010-.708z\" />\n </svg>\n </button>\n </div>\n\n {/* Body */}\n <div className={'ods-config-panel__body'} data-testid=\"config-panel-body\">\n {children}\n </div>\n\n {/* Footer */}\n <div className={'ods-config-panel__footer'}>\n <button\n {...safeCancelProps}\n ref={cancelRef}\n className={cn(\n 'ods-config-panel__btn',\n 'ods-config-panel__btn--cancel',\n )}\n data-testid=\"config-panel-cancel\"\n >\n Cancel\n </button>\n <button\n {...safeSaveProps}\n ref={saveRef}\n className={cn('ods-config-panel__btn', 'ods-config-panel__btn--save')}\n data-testid=\"config-panel-save\"\n >\n Save\n </button>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n );\n}\n\n/** Strip event props that conflict with Framer Motion from React Aria's buttonProps */\nfunction stripMotionConflicts(props: Record<string, any>) {\n const { onDrag, onDragStart, onDragEnd, onAnimationStart, ...safe } = props;\n return safe;\n}\n","\"use client\";\nimport { type ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface DataMapperField {\n key: string;\n label: string;\n type?: string;\n children?: DataMapperField[];\n}\n\nexport interface DataMapping {\n source: string;\n target: string;\n}\n\nexport interface DataMapperProps {\n sourceFields: DataMapperField[];\n targetFields: DataMapperField[];\n mappings: DataMapping[];\n onChange: (mappings: DataMapping[]) => void;\n className?: string;\n}\n\ninterface DotPosition {\n key: string;\n x: number;\n y: number;\n}\n\nexport function DataMapper({\n sourceFields,\n targetFields,\n mappings,\n onChange,\n className,\n}: DataMapperProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const [expandedNodes, setExpandedNodes] = useState<Set<string>>(new Set());\n const [pendingSource, setPendingSource] = useState<string | null>(null);\n const [dotPositions, setDotPositions] = useState<{\n source: DotPosition[];\n target: DotPosition[];\n }>({ source: [], target: [] });\n\n const toggleExpand = useCallback((key: string) => {\n setExpandedNodes((prev) => {\n const next = new Set(prev);\n if (next.has(key)) {\n next.delete(key);\n } else {\n next.add(key);\n }\n return next;\n });\n }, []);\n\n const handleSourceDotClick = useCallback(\n (key: string) => {\n if (pendingSource === key) {\n setPendingSource(null);\n } else {\n setPendingSource(key);\n }\n },\n [pendingSource],\n );\n\n const handleTargetDotClick = useCallback(\n (key: string) => {\n if (pendingSource) {\n const exists = mappings.some((m) => m.source === pendingSource && m.target === key);\n if (!exists) {\n onChange([...mappings, { source: pendingSource, target: key }]);\n }\n setPendingSource(null);\n }\n },\n [pendingSource, mappings, onChange],\n );\n\n const handleLineClick = useCallback(\n (mapping: DataMapping) => {\n onChange(\n mappings.filter((m) => !(m.source === mapping.source && m.target === mapping.target)),\n );\n },\n [mappings, onChange],\n );\n\n // Recalculate dot positions after renders\n useEffect(() => {\n if (!containerRef.current) return;\n const container = containerRef.current;\n const containerRect = container.getBoundingClientRect();\n\n const sourceDots: DotPosition[] = [];\n const targetDots: DotPosition[] = [];\n\n container.querySelectorAll(\"[data-source-key]\").forEach((el) => {\n const rect = el.getBoundingClientRect();\n sourceDots.push({\n key: el.getAttribute(\"data-source-key\")!,\n x: rect.right - containerRect.left,\n y: rect.top + rect.height / 2 - containerRect.top,\n });\n });\n\n container.querySelectorAll(\"[data-target-key]\").forEach((el) => {\n const rect = el.getBoundingClientRect();\n targetDots.push({\n key: el.getAttribute(\"data-target-key\")!,\n x: rect.left - containerRect.left,\n y: rect.top + rect.height / 2 - containerRect.top,\n });\n });\n\n setDotPositions({ source: sourceDots, target: targetDots });\n }, []);\n\n const renderSourceTree = (fields: DataMapperField[], depth: number = 0): ReactNode => {\n return fields.map((field) => {\n const hasChildren = field.children && field.children.length > 0;\n const isExpanded = expandedNodes.has(field.key);\n const isMapped = mappings.some((m) => m.source === field.key);\n\n return (\n <div key={field.key}>\n <div\n className={cn(\n 'ods-data-mapper__field',\n isMapped && 'ods-data-mapper__field--mapped',\n pendingSource === field.key && 'ods-data-mapper__field--pending',\n )}\n style={{ paddingLeft: `${depth * 20 + 12}px` }}\n >\n {hasChildren && (\n <button\n type=\"button\"\n className={cn(\n 'ods-data-mapper__tree-toggle',\n isExpanded && 'ods-data-mapper__tree-toggle--open',\n )}\n onClick={() => toggleExpand(field.key)}\n aria-label={isExpanded ? \"Collapse\" : \"Expand\"}\n >\n ▶\n </button>\n )}\n {!hasChildren && <span className={'ods-data-mapper__tree-spacer'} />}\n <span className={'ods-data-mapper__field-label'}>{field.label}</span>\n {field.type && (\n <span className={'ods-data-mapper__field-type'}>{field.type}</span>\n )}\n <button\n type=\"button\"\n className={cn(\n 'ods-data-mapper__dot',\n 'ods-data-mapper__dot--source',\n isMapped && 'ods-data-mapper__dot--connected',\n pendingSource === field.key && 'ods-data-mapper__dot--active',\n )}\n data-source-key={field.key}\n onClick={() => handleSourceDotClick(field.key)}\n aria-label={`Map from ${field.label}`}\n />\n </div>\n {hasChildren && isExpanded && renderSourceTree(field.children!, depth + 1)}\n </div>\n );\n });\n };\n\n const renderTargetList = (): ReactNode => {\n return targetFields.map((field) => {\n const isMapped = mappings.some((m) => m.target === field.key);\n\n return (\n <div\n key={field.key}\n className={cn(\n 'ods-data-mapper__field',\n isMapped && 'ods-data-mapper__field--mapped',\n )}\n >\n <button\n type=\"button\"\n className={cn(\n 'ods-data-mapper__dot',\n 'ods-data-mapper__dot--target',\n isMapped && 'ods-data-mapper__dot--connected',\n pendingSource && 'ods-data-mapper__dot--receptive',\n )}\n data-target-key={field.key}\n onClick={() => handleTargetDotClick(field.key)}\n aria-label={`Map to ${field.label}`}\n />\n <span className={'ods-data-mapper__field-label'}>{field.label}</span>\n {field.type && (\n <span className={'ods-data-mapper__field-type'}>{field.type}</span>\n )}\n </div>\n );\n });\n };\n\n const renderLines = (): ReactNode => {\n return mappings.map((mapping) => {\n const sourcePos = dotPositions.source.find((d) => d.key === mapping.source);\n const targetPos = dotPositions.target.find((d) => d.key === mapping.target);\n if (!sourcePos || !targetPos) return null;\n\n const midX = (sourcePos.x + targetPos.x) / 2;\n\n return (\n <g\n key={`${mapping.source}-${mapping.target}`}\n onClick={() => handleLineClick(mapping)}\n style={{ cursor: \"pointer\" }}\n role=\"button\"\n aria-label={`Remove mapping from ${mapping.source} to ${mapping.target}`}\n >\n <path\n d={`M ${sourcePos.x} ${sourcePos.y} C ${midX} ${sourcePos.y}, ${midX} ${targetPos.y}, ${targetPos.x} ${targetPos.y}`}\n className={'ods-data-mapper__line'}\n />\n {/* Invisible wider path for easier clicking */}\n <path\n d={`M ${sourcePos.x} ${sourcePos.y} C ${midX} ${sourcePos.y}, ${midX} ${targetPos.y}, ${targetPos.x} ${targetPos.y}`}\n stroke=\"transparent\"\n strokeWidth=\"12\"\n fill=\"none\"\n />\n </g>\n );\n });\n };\n\n return (\n <div ref={containerRef} className={cn('ods-data-mapper', className)}>\n <div className={'ods-data-mapper__source'}>\n <div className={'ods-data-mapper__panel-header'}>Source</div>\n {renderSourceTree(sourceFields)}\n </div>\n <svg className={'ods-data-mapper__svg'}>{renderLines()}</svg>\n <div className={'ods-data-mapper__target'}>\n <div className={'ods-data-mapper__panel-header'}>Target</div>\n {renderTargetList()}\n </div>\n </div>\n );\n}\n","\"use client\";\nimport { type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { Calendar } from \"../Calendar\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface DatePickerProps {\n label?: ReactNode;\n value: Date | null;\n onChange?: (value: Date | null) => void;\n placeholder?: string;\n format?: (d: Date) => string;\n size?: \"sm\" | \"md\" | \"lg\";\n disabled?: boolean;\n error?: ReactNode;\n helperText?: ReactNode;\n minDate?: Date;\n maxDate?: Date;\n className?: string;\n}\n\nconst defaultFormat = (d: Date) =>\n d.toLocaleDateString(undefined, { month: \"short\", day: \"numeric\", year: \"numeric\" });\n\nexport function DatePicker({\n label,\n value,\n onChange,\n placeholder = \"Select date\",\n format = defaultFormat,\n size = \"md\",\n disabled = false,\n error,\n helperText,\n minDate,\n maxDate,\n className,\n}: DatePickerProps) {\n const [open, setOpen] = useState(false);\n const wrapRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const onDoc = (e: MouseEvent) => {\n if (!wrapRef.current?.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener(\"mousedown\", onDoc);\n return () => document.removeEventListener(\"mousedown\", onDoc);\n }, [open]);\n\n return (\n <div\n ref={wrapRef}\n className={cn(\"ods-datepicker\", `ods-datepicker--${size}`, disabled && \"ods-datepicker--disabled\", error && \"ods-datepicker--error\", className)}\n >\n {label && <label className=\"ods-datepicker__label\">{label}</label>}\n <button\n type=\"button\"\n className=\"ods-datepicker__trigger\"\n onClick={() => !disabled && setOpen((o) => !o)}\n disabled={disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"2\" y=\"3.5\" width=\"12\" height=\"10\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M5 2v3M11 2v3M2 6.5h12\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n <span className={cn(\"ods-datepicker__value\", !value && \"ods-datepicker__value--placeholder\")}>\n {value ? format(value) : placeholder}\n </span>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\" className=\"ods-datepicker__chev\">\n <path d=\"M3 4.5 6 7.5 9 4.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n {open && (\n <div className=\"ods-datepicker__popover\" role=\"dialog\">\n <Calendar\n mode=\"single\"\n value={value}\n onChange={(d) => {\n onChange?.(d as Date);\n setOpen(false);\n }}\n minDate={minDate}\n maxDate={maxDate}\n />\n </div>\n )}\n {error ? <div className=\"ods-datepicker__hint ods-datepicker__hint--error\">{error}</div>\n : helperText ? <div className=\"ods-datepicker__hint\">{helperText}</div>\n : null}\n </div>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface DonutSegment {\n label: ReactNode;\n value: number;\n color: string;\n}\n\nexport interface DonutChartProps {\n data: DonutSegment[];\n size?: number;\n strokeWidth?: number;\n title?: ReactNode;\n centerLabel?: ReactNode; // overrides default \"total\"\n showLegend?: boolean;\n className?: string;\n}\n\nexport function DonutChart({\n data,\n size = 160,\n strokeWidth = 22,\n title,\n centerLabel,\n showLegend = true,\n className,\n}: DonutChartProps) {\n const total = data.reduce((s, d) => s + d.value, 0) || 1;\n const r = (size - strokeWidth) / 2;\n const c = 2 * Math.PI * r;\n\n let offset = 0;\n const segs = data.map((d) => {\n const len = (d.value / total) * c;\n const seg = { ...d, dash: `${len} ${c - len}`, dashoffset: -offset };\n offset += len;\n return seg;\n });\n\n return (\n <div className={cn(\"ods-donut\", className)}>\n {title && <div className=\"ods-donut__title\">{title}</div>}\n <div className=\"ods-donut__ring\" style={{ width: size, height: size }}>\n <svg width={size} height={size}>\n <circle\n cx={size / 2}\n cy={size / 2}\n r={r}\n fill=\"none\"\n stroke=\"#f3f1ff\"\n strokeWidth={strokeWidth}\n />\n <g transform={`rotate(-90 ${size / 2} ${size / 2})`}>\n {segs.map((s, i) => (\n <circle\n key={i}\n cx={size / 2}\n cy={size / 2}\n r={r}\n fill=\"none\"\n stroke={s.color}\n strokeWidth={strokeWidth}\n strokeDasharray={s.dash}\n strokeDashoffset={s.dashoffset}\n strokeLinecap=\"butt\"\n />\n ))}\n </g>\n </svg>\n <div className=\"ods-donut__center\">\n {centerLabel ?? (\n <>\n <div className=\"ods-donut__value\">{total}</div>\n <div className=\"ods-donut__small\">total</div>\n </>\n )}\n </div>\n </div>\n {showLegend && (\n <ul className=\"ods-donut__legend\">\n {data.map((d, i) => (\n <li key={i} className=\"ods-donut__legend-item\">\n <span className=\"ods-donut__dot\" style={{ background: d.color }} />\n <span className=\"ods-donut__legend-label\">{d.label}</span>\n <span className=\"ods-donut__legend-pct\">{Math.round((d.value / total) * 100)}%</span>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface DescriptionListItem {\n label: ReactNode;\n value: ReactNode;\n key?: string | number;\n}\n\nexport interface DescriptionListProps {\n items: DescriptionListItem[];\n layout?: \"row\" | \"stacked\";\n divided?: boolean;\n size?: \"sm\" | \"md\";\n labelWidth?: number | string;\n className?: string;\n}\n\nexport function DescriptionList({\n items,\n layout = \"row\",\n divided = true,\n size = \"md\",\n labelWidth = 120,\n className,\n}: DescriptionListProps) {\n return (\n <dl\n className={cn(\n \"ods-dl\",\n `ods-dl--${layout}`,\n `ods-dl--${size}`,\n divided && \"ods-dl--divided\",\n className,\n )}\n >\n {items.map((item, i) => (\n <div className=\"ods-dl__row\" key={item.key ?? i}>\n <dt\n className=\"ods-dl__label\"\n style={layout === \"row\" ? { width: labelWidth } : undefined}\n >\n {item.label}\n </dt>\n <dd className=\"ods-dl__value\">{item.value}</dd>\n </div>\n ))}\n </dl>\n );\n}\n","\"use client\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { type ReactNode, useRef } from \"react\";\nimport { FocusScope, useDialog, useModal, useOverlay } from \"react-aria\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../utils/cn\";\nimport { odsMotion } from \"../../utils/motion\";\n\nexport interface DialogProps {\n open: boolean;\n onClose: () => void;\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n title?: ReactNode;\n description?: ReactNode;\n closeOnOverlayClick?: boolean;\n closeOnEsc?: boolean;\n children?: ReactNode;\n footer?: ReactNode;\n className?: string;\n}\n\nfunction DialogContent({\n open,\n onClose,\n size = \"md\",\n title,\n description,\n closeOnOverlayClick = true,\n closeOnEsc = true,\n children,\n footer,\n className,\n}: DialogProps) {\n const overlayRef = useRef<HTMLDivElement>(null);\n const dialogRef = useRef<HTMLDivElement>(null);\n\n const { overlayProps, underlayProps } = useOverlay(\n {\n isOpen: open,\n onClose,\n isDismissable: closeOnOverlayClick,\n isKeyboardDismissDisabled: !closeOnEsc,\n },\n overlayRef,\n );\n\n const { modalProps } = useModal();\n const { dialogProps, titleProps } = useDialog({}, dialogRef);\n\n // Destructure conflicting motion props\n const { onDrag, onDragStart, onDragEnd, onAnimationStart, ...safeOverlayProps } =\n overlayProps as any;\n\n return (\n <AnimatePresence>\n {open && (\n <motion.div\n className={'ods-dialog'}\n {...(() => { const { onDrag, onDragStart, onDragEnd, onAnimationStart, ...safe } = underlayProps as any; return safe; })()}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n data-testid=\"dialog-overlay\"\n >\n <FocusScope contain restoreFocus autoFocus>\n <motion.div\n {...safeOverlayProps}\n {...modalProps}\n {...dialogProps}\n ref={(node) => {\n (overlayRef as any).current = node;\n (dialogRef as any).current = node;\n }}\n className={cn(\n 'ods-dialog__card',\n `ods-dialog__card--${size}`,\n className,\n )}\n initial={odsMotion.scaleIn.initial}\n animate={odsMotion.scaleIn.animate}\n exit={odsMotion.scaleIn.exit}\n transition={odsMotion.scaleIn.transition}\n >\n {title && (\n <div className={'ods-dialog__header'}>\n <h2 {...titleProps} className={'ods-dialog__title'}>\n {title}\n </h2>\n {description && (\n <p className={'ods-dialog__description'}>{description}</p>\n )}\n <button\n className={'ods-dialog__close'}\n onClick={onClose}\n aria-label=\"Close dialog\"\n type=\"button\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path d=\"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z\" />\n </svg>\n </button>\n </div>\n )}\n <div className={'ods-dialog__body'}>{children}</div>\n {footer && <div className={'ods-dialog__footer'}>{footer}</div>}\n </motion.div>\n </FocusScope>\n </motion.div>\n )}\n </AnimatePresence>\n );\n}\n\nexport function Dialog(props: DialogProps) {\n if (typeof document === \"undefined\") return null;\n return createPortal(<DialogContent {...props} />, document.body);\n}\n","// Motion presets matching v3 prototype — fast, subtle, not sluggish\nexport const odsMotion = {\n // Instant fade (100ms) — tooltips, badges\n fadeIn: {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: { opacity: 0 },\n transition: { duration: 0.1 },\n },\n // Quick scale (120ms) — dropdowns, popovers\n scaleIn: {\n initial: { opacity: 0, scale: 0.97 },\n animate: { opacity: 1, scale: 1 },\n exit: { opacity: 0, scale: 0.97 },\n transition: { duration: 0.12, ease: [0.4, 0, 0.2, 1] },\n },\n // Slide panel (150ms) — config panels, slideouts\n slideRight: {\n initial: { x: \"100%\" },\n animate: { x: 0 },\n exit: { x: \"100%\" },\n transition: { duration: 0.15, ease: [0.4, 0, 0.2, 1] },\n },\n // Slide up (120ms) — toasts, modals\n slideUp: {\n initial: { opacity: 0, y: 8 },\n animate: { opacity: 1, y: 0 },\n exit: { opacity: 0, y: 8 },\n transition: { duration: 0.12, ease: [0.4, 0, 0.2, 1] },\n },\n // Tap feedback — buttons\n tap: { whileTap: { scale: 0.97 } },\n // Hover lift — cards (subtle, 1px not 2px)\n hover: { whileHover: { y: -1 } },\n};\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface DrawerProps {\n title?: ReactNode;\n subtitle?: ReactNode;\n onClose?: () => void;\n children?: ReactNode;\n footer?: ReactNode;\n width?: number | string;\n height?: number | string;\n className?: string;\n}\n\n/**\n * Inline drawer / detail panel — not a portaled overlay.\n * Use SlideoutPanel for overlay+focus-trap UX.\n */\nexport function Drawer({\n title,\n subtitle,\n onClose,\n children,\n footer,\n width = 420,\n height = \"100%\",\n className,\n}: DrawerProps) {\n return (\n <aside\n className={cn(\"ods-drawer\", className)}\n style={{ width, height }}\n aria-label={typeof title === \"string\" ? title : undefined}\n >\n {(title || subtitle || onClose) && (\n <header className=\"ods-drawer__head\">\n <div className=\"ods-drawer__titles\">\n {title && <h3 className=\"ods-drawer__title\">{title}</h3>}\n {subtitle && <p className=\"ods-drawer__subtitle\">{subtitle}</p>}\n </div>\n {onClose && (\n <button\n type=\"button\"\n className=\"ods-drawer__close\"\n onClick={onClose}\n aria-label=\"Close\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n )}\n </header>\n )}\n <div className=\"ods-drawer__body\">{children}</div>\n {footer && <footer className=\"ods-drawer__footer\">{footer}</footer>}\n </aside>\n );\n}\n","\"use client\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { type ReactNode, useRef } from \"react\";\nimport { useButton, useMenu, useMenuItem, useMenuTrigger } from \"react-aria\";\nimport { createPortal } from \"react-dom\";\nimport { Item, useMenuTriggerState, useTreeState } from \"react-stately\";\nimport { cn } from \"../../utils/cn\";\nimport { odsMotion } from \"../../utils/motion\";\n\nexport interface DropdownMenuItem {\n label: string;\n icon?: ReactNode;\n onClick?: () => void;\n danger?: boolean;\n disabled?: boolean;\n separator?: boolean;\n}\n\nexport interface DropdownMenuProps {\n trigger: ReactNode;\n items: DropdownMenuItem[];\n align?: \"start\" | \"end\";\n className?: string;\n}\n\nfunction MenuItemComponent({ item, state, onAction }: any) {\n const ref = useRef<HTMLLIElement>(null);\n const { menuItemProps } = useMenuItem({ key: item.key, onAction }, state, ref);\n\n const menuItem = item.value as DropdownMenuItem;\n const isDisabled = state.disabledKeys.has(item.key);\n\n return (\n <li\n {...menuItemProps}\n ref={ref}\n className={cn(\n 'ods-dropdown__item',\n menuItem.danger && 'ods-dropdown__item--danger',\n isDisabled && 'ods-dropdown__item--disabled',\n )}\n >\n {menuItem.icon && <span className={'ods-dropdown__icon'}>{menuItem.icon}</span>}\n <span>{menuItem.label}</span>\n </li>\n );\n}\n\nfunction MenuPopup({\n state,\n menuItems,\n triggerRef,\n align,\n className,\n}: {\n state: ReturnType<typeof useMenuTriggerState>;\n menuItems: DropdownMenuItem[];\n triggerRef: React.RefObject<HTMLButtonElement | null>;\n align: \"start\" | \"end\";\n className?: string;\n}) {\n const menuRef = useRef<HTMLUListElement>(null);\n\n // Build items for react-stately, filtering separators\n const nonSepItems = menuItems.filter((i) => !i.separator);\n const children = nonSepItems.map((item, idx) => (\n <Item key={idx} textValue={item.label}>\n {item.label}\n </Item>\n ));\n\n const treeState = useTreeState({\n children,\n selectionMode: \"none\",\n disabledKeys: nonSepItems\n .map((item, idx) => (item.disabled ? String(idx) : null))\n .filter(Boolean) as string[],\n });\n\n const { menuProps } = useMenu({}, treeState, menuRef);\n\n const onAction = (key: any) => {\n const idx = Number(key);\n nonSepItems[idx]?.onClick?.();\n state.close();\n };\n\n const getStyle = (): React.CSSProperties => {\n if (!triggerRef.current) return {};\n const rect = triggerRef.current.getBoundingClientRect();\n const style: React.CSSProperties = {\n position: \"fixed\",\n zIndex: 1200,\n top: rect.bottom + 4,\n };\n\n if (align === \"end\") {\n style.right = window.innerWidth - rect.right;\n } else {\n style.left = rect.left;\n }\n\n return style;\n };\n\n // Build the full list with separators\n let nonSepIdx = 0;\n const renderedItems: ReactNode[] = [];\n\n menuItems.forEach((menuItem, rawIdx) => {\n if (menuItem.separator) {\n renderedItems.push(\n <li key={`sep-${rawIdx}`} className={'ods-dropdown__separator'} />,\n );\n } else {\n const treeItem = [...treeState.collection][nonSepIdx];\n if (treeItem) {\n renderedItems.push(\n <MenuItemComponent\n key={treeItem.key}\n item={{ ...treeItem, value: menuItem }}\n state={treeState}\n onAction={onAction}\n />,\n );\n }\n nonSepIdx++;\n }\n });\n\n const portalContent = (\n <AnimatePresence>\n {state.isOpen && (\n <motion.ul\n {...(() => { const { onDrag, onDragStart, onDragEnd, onAnimationStart, ...safe } = menuProps as any; return safe; })()}\n ref={menuRef}\n className={cn('ods-dropdown', className)}\n style={getStyle()}\n initial={odsMotion.scaleIn.initial}\n animate={odsMotion.scaleIn.animate}\n exit={odsMotion.scaleIn.exit}\n transition={odsMotion.scaleIn.transition as any}\n >\n {renderedItems}\n </motion.ul>\n )}\n </AnimatePresence>\n );\n\n if (typeof document !== \"undefined\") {\n return createPortal(portalContent, document.body);\n }\n\n return null;\n}\n\nexport function DropdownMenu({ trigger, items, align = \"start\", className }: DropdownMenuProps) {\n const triggerRef = useRef<HTMLButtonElement>(null);\n const state = useMenuTriggerState({});\n const { menuTriggerProps } = useMenuTrigger({}, state, triggerRef);\n const { buttonProps } = useButton(menuTriggerProps, triggerRef);\n\n // Remove motion-conflicting props\n const { onDrag, onDragStart, onDragEnd, onAnimationStart, ...safeTriggerProps } =\n buttonProps as any;\n\n return (\n <>\n <button {...safeTriggerProps} ref={triggerRef} className={'ods-dropdown__trigger'}>\n {trigger}\n </button>\n <MenuPopup\n state={state}\n menuItems={items}\n triggerRef={triggerRef}\n align={align}\n className={className}\n />\n </>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface EmptyStateProps {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n className?: string;\n}\n\nexport function EmptyState({ icon, title, description, action, className }: EmptyStateProps) {\n return (\n <div className={cn('ods-empty-state', className)}>\n {icon && (\n <div className={'ods-empty-state__icon'} aria-hidden=\"true\">\n {icon}\n </div>\n )}\n <h3 className={'ods-empty-state__title'}>{title}</h3>\n {description && <p className={'ods-empty-state__description'}>{description}</p>}\n {action && <div className={'ods-empty-state__action'}>{action}</div>}\n </div>\n );\n}\n","\"use client\";\nimport { motion } from \"framer-motion\";\nimport { type ReactNode, useEffect, useRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport type LogLevel = \"info\" | \"warn\" | \"error\" | \"debug\" | \"success\";\n\nexport interface LogEntry {\n timestamp: string;\n level: LogLevel;\n message: string;\n}\n\nexport interface ExecutionConsoleProps {\n open?: boolean;\n onToggle?: () => void;\n logs?: LogEntry[];\n running?: boolean;\n /** Handler for the built-in Stop button — only rendered when `running` is true. */\n onStop?: () => void;\n /** Handler for the built-in Clear button. */\n onClear?: () => void;\n /** Handler for the built-in Copy button — copies log text to the clipboard. */\n onCopy?: () => void;\n /** Extra toolbar content rendered in the top-right, after the built-in actions. */\n toolbar?: ReactNode;\n className?: string;\n}\n\n// ── Inline icons (lucide-compatible) ─────────────────────────────────────────\nconst iconProps = {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\" as const,\n strokeLinejoin: \"round\" as const,\n \"aria-hidden\": true,\n};\nconst StopIcon = () => (\n <svg {...iconProps} width={14} height={14}>\n <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"1\" />\n </svg>\n);\nconst CopyIcon = () => (\n <svg {...iconProps} width={14} height={14}>\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n);\nconst TrashIcon = () => (\n <svg {...iconProps} width={14} height={14}>\n <polyline points=\"3 6 5 6 21 6\" />\n <path d=\"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6\" />\n <path d=\"M10 11v6M14 11v6\" />\n <path d=\"M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2\" />\n </svg>\n);\n\nconst COLLAPSED_HEIGHT = 36;\nconst EXPANDED_HEIGHT = 220;\n\nexport function ExecutionConsole({\n open = false,\n onToggle,\n logs = [],\n running = false,\n onStop,\n onClear,\n onCopy,\n toolbar,\n className,\n}: ExecutionConsoleProps) {\n const logEndRef = useRef<HTMLDivElement>(null);\n\n const handleCopy = () => {\n if (onCopy) {\n onCopy();\n return;\n }\n if (typeof navigator !== \"undefined\" && navigator.clipboard) {\n const text = logs\n .map((l) => `${l.timestamp} ${l.level.toUpperCase()} ${l.message}`)\n .join(\"\\n\");\n void navigator.clipboard.writeText(text);\n }\n };\n\n useEffect(() => {\n if (open && logEndRef.current) {\n logEndRef.current.scrollIntoView?.({ behavior: \"smooth\" });\n }\n }, [open]);\n\n return (\n <motion.div\n className={cn('ods-console', className)}\n animate={{ height: open ? EXPANDED_HEIGHT : COLLAPSED_HEIGHT }}\n transition={{ type: \"spring\", stiffness: 300, damping: 30 }}\n data-testid=\"execution-console\"\n >\n {/* Mini bar / header */}\n <div className={'ods-console__bar'} data-testid=\"console-bar\">\n <button\n className={'ods-console__toggle'}\n onClick={onToggle}\n aria-label={open ? \"Collapse console\" : \"Expand console\"}\n data-testid=\"console-toggle\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"currentColor\"\n style={{\n transform: open ? \"rotate(180deg)\" : \"rotate(0deg)\",\n transition: \"transform 0.2s\",\n }}\n >\n <path\n d=\"M3 9l4-4 4 4\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n fill=\"none\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n <span className={'ods-console__label'}>\n Console\n {running && (\n <span className=\"ods-console__status\" data-testid=\"console-running\">\n <span className=\"ods-console__status-dot\" aria-hidden=\"true\" />\n <span className=\"ods-console__status-text\">Running…</span>\n </span>\n )}\n </span>\n <span className={'ods-console__count'} data-testid=\"console-count\">\n {logs.length} {logs.length === 1 ? \"entry\" : \"entries\"}\n </span>\n <div className={'ods-console__actions'} role=\"toolbar\" aria-label=\"Console actions\">\n {running && onStop && (\n <button\n type=\"button\"\n className={cn('ods-console__action', 'ods-console__action--stop')}\n onClick={onStop}\n aria-label=\"Stop execution\"\n title=\"Stop\"\n data-testid=\"console-stop\"\n >\n <StopIcon />\n </button>\n )}\n {logs.length > 0 && (\n <button\n type=\"button\"\n className={'ods-console__action'}\n onClick={handleCopy}\n aria-label=\"Copy logs\"\n title=\"Copy logs\"\n data-testid=\"console-copy\"\n >\n <CopyIcon />\n </button>\n )}\n {onClear && (\n <button\n type=\"button\"\n className={'ods-console__action'}\n onClick={onClear}\n aria-label=\"Clear console\"\n title=\"Clear\"\n data-testid=\"console-clear\"\n >\n <TrashIcon />\n </button>\n )}\n {toolbar && (\n <>\n <span className=\"ods-console__action-separator\" aria-hidden=\"true\" />\n {toolbar}\n </>\n )}\n </div>\n </div>\n\n {/* Log area */}\n {open && (\n <div className={'ods-console__logs'} data-testid=\"console-logs\">\n {logs.length === 0 && (\n <div className={'ods-console__empty'} data-testid=\"console-empty\">\n No log entries\n </div>\n )}\n {logs.map((log, i) => (\n <div\n key={i}\n className={cn('ods-console__line', `ods-console__line--${log.level}`)}\n data-testid=\"console-log-line\"\n >\n <span className={'ods-console__timestamp'}>{log.timestamp}</span>\n <span\n className={cn(\n 'ods-console__level',\n `ods-console__level--${log.level}`,\n )}\n >\n {log.level.toUpperCase()}\n </span>\n <span className={'ods-console__message'}>{log.message}</span>\n </div>\n ))}\n <div ref={logEndRef} />\n </div>\n )}\n </motion.div>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface FeatureCardProps {\n icon: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n link?: { label: ReactNode; href?: string; onClick?: () => void };\n variant?: \"default\" | \"primary\" | \"success\" | \"warning\" | \"error\";\n className?: string;\n}\n\nexport function FeatureCard({ icon, title, description, link, variant = \"primary\", className }: FeatureCardProps) {\n const Comp = link?.href ? \"a\" : \"button\";\n return (\n <div className={cn(\"ods-feature-card\", `ods-feature-card--${variant}`, className)}>\n <span className=\"ods-feature-card__icon\" aria-hidden=\"true\">{icon}</span>\n <div className=\"ods-feature-card__title\">{title}</div>\n {description && <div className=\"ods-feature-card__desc\">{description}</div>}\n {link && (\n <Comp\n href={link.href}\n onClick={link.onClick as any}\n type={link.href ? undefined : \"button\"}\n className=\"ods-feature-card__link\"\n >\n <span>{link.label}</span>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M3 7h8m-3-3l3 3-3 3\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </Comp>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport {\n type ReactNode,\n type ComponentPropsWithoutRef,\n useRef,\n useCallback,\n} from 'react';\nimport { AnimatePresence } from 'framer-motion';\nimport { cn } from '../../utils/cn';\nimport type { WorkflowNode, WorkflowEdge, CanvasViewport } from '../../workflow/types';\nimport { FlowNode, type FlowNodeProps } from '../FlowNode/FlowNode';\nimport { FlowEdge } from '../FlowEdge/FlowEdge';\n\nexport interface FlowCanvasProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children'> {\n nodes: WorkflowNode[];\n edges: WorkflowEdge[];\n viewport: CanvasViewport;\n connectingFrom?: FlowNodeProps['connectingFrom'];\n\n // Viewport\n onViewportChange?: (viewport: Partial<CanvasViewport>) => void;\n minZoom?: number;\n maxZoom?: number;\n\n // Selection\n onNodeSelect?: (id: string) => void;\n onEdgeSelect?: (id: string) => void;\n onDeselectAll?: () => void;\n\n // Node interactions\n onNodePositionChange?: (id: string, position: { x: number; y: number }) => void;\n onNodeDelete?: (id: string) => void;\n onNodesDelete?: (ids: string[]) => void;\n\n // Edge interactions\n onEdgeDelete?: (id: string) => void;\n\n // Connecting\n onStartConnecting?: FlowNodeProps['onStartConnecting'];\n onEndConnecting?: FlowNodeProps['onEndConnecting'];\n validateConnection?: FlowNodeProps['validateConnection'];\n\n selectedNodeId?: string;\n children?: ReactNode;\n emptyState?: ReactNode;\n\n gridSize?: number;\n showGrid?: boolean;\n isLockMode?: boolean;\n height?: number | string;\n width?: number | string;\n}\n\n/**\n * FlowCanvas - Canvas for workflow editor\n *\n * TODO: This is a stub implementation. Full feature set from octaviaflow-ui needs to be ported:\n * - Pan and zoom controls\n * - Grid background\n * - Touch gestures\n * - Keyboard shortcuts\n * - Execution console\n * - History panel\n * - Validation panel\n * - Debug panel\n * - Layout algorithms\n * - SSE streaming\n *\n * See: octaviaflow-ui/src/components/WorkFlowCanvas for full implementation\n */\nexport function FlowCanvas({\n nodes,\n edges,\n viewport,\n connectingFrom,\n onViewportChange,\n minZoom = 0.25,\n maxZoom = 2,\n onNodeSelect,\n onEdgeSelect,\n onDeselectAll,\n onNodePositionChange,\n onNodeDelete,\n onNodesDelete,\n onEdgeDelete,\n onStartConnecting,\n onEndConnecting,\n validateConnection,\n selectedNodeId,\n children,\n emptyState,\n gridSize = 20,\n showGrid = true,\n isLockMode = false,\n height = '100%',\n width = '100%',\n className,\n ...props\n}: FlowCanvasProps) {\n const canvasRef = useRef<HTMLDivElement>(null);\n const isEmpty = nodes.length === 0 && edges.length === 0;\n\n const handleCanvasClick = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement;\n if (target === canvasRef.current) {\n onDeselectAll?.();\n }\n },\n [onDeselectAll]\n );\n\n return (\n <div\n ref={canvasRef}\n className={cn('ods-flow-canvas', className)}\n style={{ width, height }}\n onClick={handleCanvasClick}\n role=\"application\"\n aria-label=\"Workflow canvas\"\n {...props}\n >\n {/* Grid background */}\n {showGrid && (\n <div\n className=\"ods-flow-canvas__grid\"\n style={{\n backgroundSize: `${gridSize}px ${gridSize}px`,\n }}\n />\n )}\n\n {/* Viewport content */}\n <div\n className=\"ods-flow-canvas__viewport\"\n style={{\n transform: `translate(${viewport.x}px, ${viewport.y}px) scale(${viewport.zoom})`,\n transformOrigin: '0 0',\n }}\n >\n {/* Edges layer */}\n <svg\n className=\"ods-flow-canvas__edges\"\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n overflow: 'visible',\n }}\n >\n <g style={{ pointerEvents: 'auto' }}>\n {edges.map((edge) => (\n <FlowEdge\n key={edge.id}\n edge={edge}\n nodes={nodes}\n onSelect={onEdgeSelect}\n onDelete={onEdgeDelete}\n />\n ))}\n </g>\n </svg>\n\n {/* Nodes layer */}\n <AnimatePresence>\n {nodes.map((node) => (\n <FlowNode\n key={node.id}\n node={node}\n viewport={viewport}\n connectingFrom={connectingFrom}\n isLockMode={isLockMode}\n isConfigOpen={selectedNodeId === node.id}\n onSelect={onNodeSelect}\n onDelete={onNodeDelete}\n onPositionChange={onNodePositionChange}\n onStartConnecting={onStartConnecting}\n onEndConnecting={onEndConnecting}\n validateConnection={validateConnection}\n />\n ))}\n </AnimatePresence>\n </div>\n\n {/* Empty state */}\n {isEmpty && emptyState && (\n <div className=\"ods-flow-canvas__empty\">{emptyState}</div>\n )}\n\n {/* Chrome slot (toolbar, drawer, panels) */}\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport { motion } from \"framer-motion\";\nimport {\n type CSSProperties,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n type TouchEvent as ReactTouchEvent,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { ConfigStatusResult } from \"../../workflow/configStatus\";\nimport type {\n WorkflowEdge as WorkflowEdgeType,\n WorkflowNode as WorkflowNodeType,\n} from \"../../workflow/types\";\n\nconst DEFAULT_NODE_WIDTH = 368;\nconst DRAG_THRESHOLD_PX = 5;\n\nexport interface FlowNodeIconSlots {\n statusValid?: ReactNode;\n statusWarning?: ReactNode;\n statusError?: ReactNode;\n statusUnconfigured?: ReactNode;\n delete?: ReactNode;\n running?: ReactNode;\n trigger?: ReactNode;\n action?: ReactNode;\n}\n\nexport interface FlowNodeProps {\n node: WorkflowNodeType;\n className?: string;\n style?: CSSProperties;\n /** Canvas viewport — used to scale drag deltas. */\n viewport?: { zoom: number; x: number; y: number };\n isLockMode?: boolean;\n isConfigOpen?: boolean;\n /** Pre-computed config status (from `getNodeConfigStatus`). */\n configStatus?: ConfigStatusResult;\n /** Edges, used to highlight ports whose incoming/outgoing edge is selected. */\n edges?: WorkflowEdgeType[];\n /** Shared connection-in-progress state, passed down from the canvas. */\n connectingFrom?: {\n nodeId: string;\n portId: string;\n portType: \"input\" | \"output\";\n } | null;\n /** Slot overrides for the handful of internal icons. */\n icons?: FlowNodeIconSlots;\n\n onSelect?: (id: string) => void;\n onDelete?: (id: string) => void;\n onPositionChange?: (id: string, position: { x: number; y: number }) => void;\n onStartConnecting?: (\n nodeId: string,\n portId: string,\n portType: \"input\" | \"output\",\n ) => void;\n onEndConnecting?: (\n target: { nodeId: string; portId: string; portType: \"input\" | \"output\" } | null,\n ) => void;\n validateConnection?: (\n targetNodeId: string,\n targetPortId: string,\n targetPortType: \"input\" | \"output\",\n ) => { valid: boolean; reason?: string };\n}\n\n// ── Inline default icons ─────────────────────────────────────────────────────\n// Kept lucide-compatible (24x24 viewBox, stroke-based) for visual harmony with\n// the rest of the design system. Consumers may override via the `icons` prop.\n\nconst iconBaseProps = {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\" as const,\n strokeLinejoin: \"round\" as const,\n};\n\nconst CheckCircleSvg = ({ size = 16 }: { size?: number }) => (\n <svg {...iconBaseProps} width={size} height={size} aria-hidden=\"true\">\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22 4 12 14.01 9 11.01\" />\n </svg>\n);\nconst AlertTriangleSvg = ({ size = 16 }: { size?: number }) => (\n <svg {...iconBaseProps} width={size} height={size} aria-hidden=\"true\">\n <path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0Z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n);\nconst XCircleSvg = ({ size = 16 }: { size?: number }) => (\n <svg {...iconBaseProps} width={size} height={size} aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </svg>\n);\nconst CircleDashedSvg = ({ size = 16 }: { size?: number }) => (\n <svg {...iconBaseProps} width={size} height={size} aria-hidden=\"true\" strokeDasharray=\"3 3\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n </svg>\n);\nconst TrashSvg = ({ size = 16 }: { size?: number }) => (\n <svg {...iconBaseProps} width={size} height={size} aria-hidden=\"true\">\n <polyline points=\"3 6 5 6 21 6\" />\n <path d=\"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6\" />\n <path d=\"M10 11v6M14 11v6\" />\n <path d=\"M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2\" />\n </svg>\n);\nconst LoaderSvg = ({ size = 24 }: { size?: number }) => (\n <svg {...iconBaseProps} width={size} height={size} aria-hidden=\"true\">\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n);\nconst PlaySvg = ({ size = 14 }: { size?: number }) => (\n <svg {...iconBaseProps} width={size} height={size} aria-hidden=\"true\">\n <polygon points=\"5 3 19 12 5 21 5 3\" />\n </svg>\n);\nconst LinkSvg = ({ size = 14 }: { size?: number }) => (\n <svg {...iconBaseProps} width={size} height={size} aria-hidden=\"true\">\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </svg>\n);\n\nfunction resolveIcon(slot: ReactNode | undefined, fallback: ReactNode): ReactNode {\n return slot !== undefined ? slot : fallback;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\nexport const FlowNode = forwardRef<HTMLDivElement, FlowNodeProps>(\n function FlowNode(\n {\n node,\n viewport,\n isLockMode = false,\n isConfigOpen = false,\n configStatus,\n edges = [],\n connectingFrom = null,\n icons,\n onSelect,\n onDelete,\n onPositionChange,\n onStartConnecting,\n onEndConnecting,\n validateConnection,\n className,\n style,\n },\n ref,\n ) {\n const [isDragging, setIsDragging] = useState(false);\n const [wasDragged, setWasDragged] = useState(false);\n const dragStartRef = useRef<{ x: number; y: number } | null>(null);\n const zoom = viewport?.zoom ?? 1;\n\n // ── Selection / click ──\n const handleClick = useCallback(\n (e: ReactMouseEvent<HTMLDivElement>) => {\n e.stopPropagation();\n if (wasDragged) {\n setWasDragged(false);\n return;\n }\n onSelect?.(node.id);\n },\n [node.id, onSelect, wasDragged],\n );\n\n const handleDelete = useCallback(\n (e: ReactMouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n if (isLockMode) return;\n onDelete?.(node.id);\n },\n [node.id, onDelete, isLockMode],\n );\n\n // ── Drag (mouse) ──\n const handleMouseDown = useCallback(\n (e: ReactMouseEvent<HTMLDivElement>) => {\n if (isLockMode) return;\n const target = e.target as HTMLElement;\n if (\n target.closest('[data-flow-node-no-drag=\"true\"]') ||\n target.closest(\".ods-flow-node__delete-btn\") ||\n target.closest(\".ods-flow-node__port\")\n ) {\n return;\n }\n e.stopPropagation();\n setIsDragging(true);\n dragStartRef.current = { x: e.clientX, y: e.clientY };\n },\n [isLockMode],\n );\n\n const handleTouchStart = useCallback(\n (e: ReactTouchEvent<HTMLDivElement>) => {\n if (isLockMode) return;\n if (e.touches.length !== 1) return;\n const target = e.target as HTMLElement;\n if (\n target.closest('[data-flow-node-no-drag=\"true\"]') ||\n target.closest(\".ods-flow-node__delete-btn\") ||\n target.closest(\".ods-flow-node__port\")\n ) {\n return;\n }\n e.stopPropagation();\n setIsDragging(true);\n dragStartRef.current = {\n x: e.touches[0].clientX,\n y: e.touches[0].clientY,\n };\n },\n [isLockMode],\n );\n\n useEffect(() => {\n if (!isDragging) return;\n\n const applyDelta = (clientX: number, clientY: number) => {\n const start = dragStartRef.current;\n if (!start) return;\n const deltaX = (clientX - start.x) / zoom;\n const deltaY = (clientY - start.y) / zoom;\n if (Math.abs(deltaX) > DRAG_THRESHOLD_PX || Math.abs(deltaY) > DRAG_THRESHOLD_PX) {\n setWasDragged(true);\n }\n onPositionChange?.(node.id, {\n x: node.position.x + deltaX,\n y: node.position.y + deltaY,\n });\n dragStartRef.current = { x: clientX, y: clientY };\n };\n\n const onMouseMove = (e: MouseEvent) => applyDelta(e.clientX, e.clientY);\n const onMouseUp = () => {\n setIsDragging(false);\n dragStartRef.current = null;\n // small delay so the trailing click can be suppressed\n window.setTimeout(() => setWasDragged(false), 100);\n };\n const onTouchMove = (e: TouchEvent) => {\n if (e.touches.length !== 1) return;\n e.preventDefault();\n applyDelta(e.touches[0].clientX, e.touches[0].clientY);\n };\n const onTouchEnd = () => {\n setIsDragging(false);\n dragStartRef.current = null;\n window.setTimeout(() => setWasDragged(false), 100);\n };\n\n document.addEventListener(\"mousemove\", onMouseMove);\n document.addEventListener(\"mouseup\", onMouseUp);\n document.addEventListener(\"touchmove\", onTouchMove, { passive: false });\n document.addEventListener(\"touchend\", onTouchEnd);\n document.addEventListener(\"touchcancel\", onTouchEnd);\n return () => {\n document.removeEventListener(\"mousemove\", onMouseMove);\n document.removeEventListener(\"mouseup\", onMouseUp);\n document.removeEventListener(\"touchmove\", onTouchMove);\n document.removeEventListener(\"touchend\", onTouchEnd);\n document.removeEventListener(\"touchcancel\", onTouchEnd);\n };\n }, [isDragging, zoom, node.id, node.position.x, node.position.y, onPositionChange]);\n\n // ── Ports: connection-state helpers ──\n const handlePortMouseDown = useCallback(\n (e: ReactMouseEvent, portId: string, portType: \"input\" | \"output\") => {\n e.stopPropagation();\n if (isLockMode) return;\n if (!connectingFrom) {\n onStartConnecting?.(node.id, portId, portType);\n }\n },\n [connectingFrom, isLockMode, node.id, onStartConnecting],\n );\n\n const handlePortMouseUp = useCallback(\n (e: ReactMouseEvent, portId: string, portType: \"input\" | \"output\") => {\n e.stopPropagation();\n if (isLockMode) return;\n if (!connectingFrom) return;\n onEndConnecting?.({ nodeId: node.id, portId, portType });\n },\n [connectingFrom, isLockMode, node.id, onEndConnecting],\n );\n\n const isPortEdgeSelected = useCallback(\n (portId: string, portType: \"input\" | \"output\") =>\n edges.some(\n (edge) =>\n edge.selected &&\n (portType === \"input\"\n ? edge.target === node.id && edge.targetPort === portId\n : edge.source === node.id && edge.sourcePort === portId),\n ),\n [edges, node.id],\n );\n\n // ── Config status (falls back to simple node.configStatus enum) ──\n const statusValue = configStatus?.status ?? node.configStatus;\n const statusTitle = (() => {\n if (!statusValue || statusValue === \"hidden\") return undefined;\n if (statusValue === \"valid\") return \"Configured\";\n if (statusValue === \"warning\") {\n return configStatus?.missingRequired?.length\n ? `Missing required: ${configStatus.missingRequired.join(\", \")}`\n : \"Incomplete configuration\";\n }\n if (statusValue === \"error\") {\n const total = configStatus?.requiredTotal;\n return total\n ? `Not configured (${total} required field${total !== 1 ? \"s\" : \"\"})`\n : \"Not configured\";\n }\n return \"Unknown action\";\n })();\n\n const statusIcon: ReactNode = (() => {\n switch (statusValue) {\n case \"valid\":\n return resolveIcon(icons?.statusValid, <CheckCircleSvg />);\n case \"warning\":\n return resolveIcon(icons?.statusWarning, <AlertTriangleSvg />);\n case \"error\":\n return resolveIcon(icons?.statusError, <XCircleSvg />);\n case \"unconfigured\":\n return resolveIcon(icons?.statusUnconfigured, <CircleDashedSvg />);\n default:\n return null;\n }\n })();\n\n const nodeStyle: CSSProperties = {\n left: node.position.x,\n top: node.position.y,\n cursor: isDragging ? \"grabbing\" : \"grab\",\n WebkitFontSmoothing: \"antialiased\",\n MozOsxFontSmoothing: \"grayscale\",\n textRendering: \"geometricPrecision\",\n willChange: \"transform\",\n backfaceVisibility: \"hidden\",\n perspective: \"1000px\",\n ...style,\n };\n\n const outputIsBranching = node.ports.output.length > 1;\n const subtitle = node.type === \"trigger\" ? \"Start\" : \"Action\";\n const triggerDescription =\n typeof node.config?.description === \"string\" ? node.config.description : \"Manually Triggered\";\n const actionName =\n node.type === \"action\" && typeof node.config?.name === \"string\" ? node.config.name : null;\n\n return (\n <motion.div\n ref={ref}\n data-node-id={node.id}\n className={cn(\n \"ods-flow-node\",\n `ods-flow-node--${node.type}`,\n node.selected && \"ods-flow-node--selected\",\n isDragging && \"ods-flow-node--dragging\",\n isConfigOpen && \"ods-flow-node--config-open\",\n className,\n )}\n style={nodeStyle}\n onClick={handleClick}\n onMouseDown={handleMouseDown}\n onTouchStart={handleTouchStart}\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0.8, opacity: 0 }}\n transition={{ type: \"spring\", stiffness: 300, damping: 25 }}\n >\n {/* Config status indicator */}\n {statusIcon && statusValue !== \"hidden\" && (\n <div\n className={cn(\n \"ods-flow-node__status\",\n statusValue && `ods-flow-node__status--${statusValue}`,\n )}\n title={statusTitle}\n data-flow-node-no-drag=\"true\"\n >\n {statusIcon}\n </div>\n )}\n\n {/* Header band */}\n <div className=\"ods-flow-node__header\">\n <div className=\"ods-flow-node__header-left\">\n {node.icon ? (\n <div className=\"ods-flow-node__icon\">{node.icon as ReactNode}</div>\n ) : null}\n <div className=\"ods-flow-node__title\">\n <div className=\"ods-flow-node__label\">{node.label}</div>\n </div>\n </div>\n </div>\n\n {/* Body */}\n <div className=\"ods-flow-node__body\">\n <div className=\"ods-flow-node__content\">\n {node.icon ? (\n <div className=\"ods-flow-node__content-icon\">{node.icon as ReactNode}</div>\n ) : null}\n <div className=\"ods-flow-node__content-text\">\n <div className=\"ods-flow-node__content-title\">{node.label}</div>\n <div className=\"ods-flow-node__content-subtitle\">{subtitle}</div>\n\n {node.type === \"trigger\" && (\n <div className=\"ods-flow-node__content-info\">\n {resolveIcon(icons?.trigger, <PlaySvg />)}\n <span>{triggerDescription}</span>\n </div>\n )}\n {actionName && (\n <div className=\"ods-flow-node__content-info\">\n {resolveIcon(icons?.action, <LinkSvg />)}\n <span>{actionName}</span>\n </div>\n )}\n </div>\n </div>\n\n {node.description && (\n <div className=\"ods-flow-node__description\">\n {node.description.length > 50\n ? `${node.description.substring(0, 50)}...`\n : node.description}\n </div>\n )}\n\n {!isLockMode && onDelete && (\n <button\n type=\"button\"\n className=\"ods-flow-node__delete-btn\"\n data-flow-node-no-drag=\"true\"\n onClick={handleDelete}\n title=\"Delete node\"\n aria-label={`Delete ${node.label}`}\n >\n {resolveIcon(icons?.delete, <TrashSvg />)}\n </button>\n )}\n </div>\n\n {/* Input ports */}\n {node.ports.input.length > 0 && (\n <div className=\"ods-flow-node__ports ods-flow-node__ports--input\">\n {node.ports.input.map((port) => {\n const validation = connectingFrom\n ? validateConnection?.(node.id, port.id, \"input\") ?? { valid: true }\n : { valid: true };\n const isConnectingPort =\n connectingFrom?.nodeId === node.id && connectingFrom?.portId === port.id;\n const showConnectable =\n !!connectingFrom && connectingFrom.portType === \"output\" && validation.valid;\n const showInvalid = !!connectingFrom && !validation.valid;\n const edgeSelected = isPortEdgeSelected(port.id, \"input\");\n\n return (\n <div\n key={port.id}\n className={cn(\n \"ods-flow-node__port\",\n port.connected && \"ods-flow-node__port--connected\",\n isConnectingPort && \"ods-flow-node__port--connecting\",\n showConnectable && \"ods-flow-node__port--connectable\",\n showInvalid && \"ods-flow-node__port--invalid\",\n edgeSelected && \"ods-flow-node__port--edge-selected\",\n )}\n data-port-id={port.id}\n data-port-type=\"input\"\n title={showInvalid ? validation.reason : port.id}\n onMouseDown={(e) => handlePortMouseDown(e, port.id, \"input\")}\n onMouseUp={(e) => handlePortMouseUp(e, port.id, \"input\")}\n >\n <div className=\"ods-flow-node__port-dot\" />\n </div>\n );\n })}\n </div>\n )}\n\n {/* Output ports */}\n {node.ports.output.length > 0 && (\n <div\n className={cn(\n \"ods-flow-node__ports\",\n \"ods-flow-node__ports--output\",\n outputIsBranching && \"ods-flow-node__ports--branching\",\n )}\n >\n {node.ports.output.map((port) => {\n const validation = connectingFrom\n ? validateConnection?.(node.id, port.id, \"output\") ?? { valid: true }\n : { valid: true };\n const isConnectingPort =\n connectingFrom?.nodeId === node.id && connectingFrom?.portId === port.id;\n const showConnectable =\n !!connectingFrom && connectingFrom.portType === \"input\" && validation.valid;\n const showInvalid = !!connectingFrom && !validation.valid;\n const edgeSelected = isPortEdgeSelected(port.id, \"output\");\n\n return (\n <div\n key={port.id}\n className={cn(\n \"ods-flow-node__port\",\n port.connected && \"ods-flow-node__port--connected\",\n isConnectingPort && \"ods-flow-node__port--connecting\",\n showConnectable && \"ods-flow-node__port--connectable\",\n showInvalid && \"ods-flow-node__port--invalid\",\n edgeSelected && \"ods-flow-node__port--edge-selected\",\n port.label && \"ods-flow-node__port--labeled\",\n )}\n data-port-id={port.id}\n data-port-type=\"output\"\n title={showInvalid ? validation.reason : port.label || port.id}\n onMouseDown={(e) => handlePortMouseDown(e, port.id, \"output\")}\n onMouseUp={(e) => handlePortMouseUp(e, port.id, \"output\")}\n >\n {port.label && (\n <span className=\"ods-flow-node__port-label\">{port.label}</span>\n )}\n <div className=\"ods-flow-node__port-dot\" />\n </div>\n );\n })}\n </div>\n )}\n\n {/* Execution overlay */}\n {node.status === \"running\" && (\n <motion.div\n className=\"ods-flow-node__running-overlay\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n data-flow-node-no-drag=\"true\"\n >\n {resolveIcon(icons?.running, <LoaderSvg />)}\n </motion.div>\n )}\n </motion.div>\n );\n },\n);\n\nFlowNode.displayName = \"FlowNode\";\n\n// Export node width constant for consumers that need to lay out nodes or edges.\nexport const FLOW_NODE_WIDTH = DEFAULT_NODE_WIDTH;\n","\"use client\";\n\nimport { type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils/cn';\nimport type { WorkflowEdge as WorkflowEdgeType, WorkflowNode } from '../../workflow/types';\n\nexport interface FlowEdgeProps extends Omit<ComponentPropsWithoutRef<'g'>, 'id' | 'onSelect'> {\n edge: WorkflowEdgeType;\n nodes?: WorkflowNode[];\n onSelect?: (id: string) => void;\n onDelete?: (id: string) => void;\n}\n\n/**\n * FlowEdge - Connection line between workflow nodes\n *\n * TODO: This is a stub implementation. Full feature set from octaviaflow-ui needs to be ported:\n * - Bezier curve calculations\n * - Selection handling\n * - Delete button\n * - Hover states\n * - Port-aware positioning\n *\n * See: octaviaflow-ui/src/components/WorkflowEdge for full implementation\n */\nexport function FlowEdge({ edge, nodes = [], onSelect, className, ...props }: FlowEdgeProps) {\n // Simple straight line for stub - TODO: implement bezier curves\n const sourceNode = nodes.find(n => n.id === edge.source);\n const targetNode = nodes.find(n => n.id === edge.target);\n\n if (!sourceNode || !targetNode) {\n return null;\n }\n\n const startX = sourceNode.position.x + 184; // half of node width (368/2)\n const startY = sourceNode.position.y + 108; // node height\n const endX = targetNode.position.x + 184;\n const endY = targetNode.position.y;\n\n const path = `M ${startX},${startY} L ${endX},${endY}`;\n\n return (\n <g\n className={cn('ods-flow-edge', className)}\n onClick={() => onSelect?.(edge.id)}\n {...props}\n >\n {/* Invisible hitbox for easier clicking */}\n <path\n d={path}\n className=\"ods-flow-edge__hitbox\"\n stroke=\"transparent\"\n strokeWidth={20}\n fill=\"none\"\n />\n\n {/* Visible path */}\n <path\n d={path}\n className={cn(\n 'ods-flow-edge__path',\n edge.selected && 'ods-flow-edge__path--selected'\n )}\n stroke=\"#8b8ca0\"\n strokeWidth={2}\n fill=\"none\"\n />\n </g>\n );\n}\n","\"use client\";\nimport { type MouseEvent, useCallback, useMemo } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface FlowMinimapNode {\n id: string;\n x: number;\n y: number;\n width: number;\n height: number;\n color?: string;\n}\n\nexport interface FlowMinimapEdge {\n from: { x: number; y: number };\n to: { x: number; y: number };\n}\n\nexport interface FlowMinimapViewportRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface FlowMinimapProps {\n nodes?: FlowMinimapNode[];\n edges?: FlowMinimapEdge[];\n viewportRect?: FlowMinimapViewportRect;\n totalWidth?: number;\n totalHeight?: number;\n onViewportChange?: (x: number, y: number) => void;\n className?: string;\n}\n\nconst MINIMAP_WIDTH = 140;\nconst MINIMAP_HEIGHT = 100;\n\nexport function FlowMinimap({\n nodes = [],\n edges = [],\n viewportRect,\n totalWidth = 2000,\n totalHeight = 1500,\n onViewportChange,\n className,\n}: FlowMinimapProps) {\n const scaleX = MINIMAP_WIDTH / totalWidth;\n const scaleY = MINIMAP_HEIGHT / totalHeight;\n\n const scaledNodes = useMemo(\n () =>\n nodes.map((n) => ({\n ...n,\n sx: n.x * scaleX,\n sy: n.y * scaleY,\n sw: Math.max(n.width * scaleX, 4),\n sh: Math.max(n.height * scaleY, 3),\n })),\n [nodes, scaleX, scaleY],\n );\n\n const scaledEdges = useMemo(\n () =>\n edges.map((e) => ({\n x1: e.from.x * scaleX,\n y1: e.from.y * scaleY,\n x2: e.to.x * scaleX,\n y2: e.to.y * scaleY,\n })),\n [edges, scaleX, scaleY],\n );\n\n const scaledViewport = useMemo(() => {\n if (!viewportRect) return null;\n return {\n x: viewportRect.x * scaleX,\n y: viewportRect.y * scaleY,\n width: viewportRect.width * scaleX,\n height: viewportRect.height * scaleY,\n };\n }, [viewportRect, scaleX, scaleY]);\n\n const handleClick = useCallback(\n (e: MouseEvent<SVGSVGElement>) => {\n if (!onViewportChange) return;\n const rect = e.currentTarget.getBoundingClientRect();\n const clickX = e.clientX - rect.left;\n const clickY = e.clientY - rect.top;\n const worldX = clickX / scaleX;\n const worldY = clickY / scaleY;\n onViewportChange(worldX, worldY);\n },\n [onViewportChange, scaleX, scaleY],\n );\n\n return (\n <div className={cn('ods-flow-minimap', className)} data-testid=\"flow-minimap\">\n <svg\n width={MINIMAP_WIDTH}\n height={MINIMAP_HEIGHT}\n viewBox={`0 0 ${MINIMAP_WIDTH} ${MINIMAP_HEIGHT}`}\n onClick={handleClick}\n data-testid=\"flow-minimap-svg\"\n >\n {/* Edges */}\n {scaledEdges.map((e, i) => (\n <line\n key={i}\n x1={e.x1}\n y1={e.y1}\n x2={e.x2}\n y2={e.y2}\n className={'ods-flow-minimap__edge'}\n />\n ))}\n\n {/* Nodes */}\n {scaledNodes.map((n) => (\n <rect\n key={n.id}\n x={n.sx}\n y={n.sy}\n width={n.sw}\n height={n.sh}\n rx={1}\n fill={n.color || \"var(--ods-color-brand-500, #3b5bff)\"}\n className={'ods-flow-minimap__node'}\n data-testid={`minimap-node-${n.id}`}\n />\n ))}\n\n {/* Viewport rectangle */}\n {scaledViewport && (\n <rect\n x={scaledViewport.x}\n y={scaledViewport.y}\n width={scaledViewport.width}\n height={scaledViewport.height}\n className={'ods-flow-minimap__viewport'}\n data-testid=\"minimap-viewport\"\n />\n )}\n </svg>\n </div>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface FlowToolbarProps {\n children?: ReactNode;\n /** \"left\" / \"right\" pin to side and stack vertically; \"top\" / \"bottom\" stack horizontally. */\n placement?: \"left\" | \"top\" | \"right\" | \"bottom\";\n className?: string;\n}\n\nexport function FlowToolbar({ children, placement = \"left\", className }: FlowToolbarProps) {\n return (\n <div\n className={cn(\"ods-flow-toolbar\", `ods-flow-toolbar--${placement}`, className)}\n role=\"toolbar\"\n aria-label=\"Canvas toolbar\"\n >\n {children}\n </div>\n );\n}\n\nexport interface FlowToolbarButtonProps {\n icon: ReactNode;\n label: string;\n onClick?: () => void;\n active?: boolean;\n disabled?: boolean;\n danger?: boolean;\n /** Optional keyboard shortcut hint — shown in the tooltip. */\n shortcut?: string;\n /** When provided, acts as the hover-tooltip text. Defaults to `label`. */\n tooltip?: string;\n className?: string;\n}\n\nexport function FlowToolbarButton({\n icon,\n label,\n onClick,\n active = false,\n disabled = false,\n danger = false,\n shortcut,\n tooltip,\n className,\n}: FlowToolbarButtonProps) {\n const hoverLabel = tooltip ?? label;\n const title = shortcut ? `${hoverLabel} (${shortcut})` : hoverLabel;\n return (\n <span\n className=\"ods-flow-toolbar__btn-wrapper\"\n data-tooltip={title}\n >\n <button\n type=\"button\"\n className={cn(\n \"ods-flow-toolbar__btn\",\n active && \"ods-flow-toolbar__btn--active\",\n danger && \"ods-flow-toolbar__btn--danger\",\n className,\n )}\n onClick={onClick}\n disabled={disabled}\n aria-label={label}\n aria-pressed={active}\n title={title}\n >\n <span className=\"ods-flow-toolbar__btn-icon\">{icon}</span>\n </button>\n </span>\n );\n}\n\nexport interface FlowToolbarDividerProps {\n className?: string;\n}\n\nexport function FlowToolbarDivider({ className }: FlowToolbarDividerProps) {\n return <span className={cn(\"ods-flow-toolbar__divider\", className)} aria-hidden=\"true\" />;\n}\n\nexport interface FlowToolbarZoomProps {\n zoom: number;\n onZoomIn?: () => void;\n onZoomOut?: () => void;\n onFit?: () => void;\n onReset?: () => void;\n className?: string;\n}\n\n// ── Shared icon set — kept simple lucide-style, stroke-based ─────────────────\nconst SVG_BASE = {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\" as const,\n strokeLinejoin: \"round\" as const,\n \"aria-hidden\": true,\n};\nconst mkIcon = (children: ReactNode) => (\n <svg {...SVG_BASE} width=\"16\" height=\"16\">\n {children}\n </svg>\n);\n\nexport const FlowToolbarIcons = {\n save: mkIcon(\n <>\n <path d=\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\" />\n <polyline points=\"17 21 17 13 7 13 7 21\" />\n <polyline points=\"7 3 7 8 15 8\" />\n </>,\n ),\n run: mkIcon(<polygon points=\"6 4 20 12 6 20 6 4\" fill=\"currentColor\" stroke=\"none\" />),\n stop: mkIcon(<rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"1\" />),\n lock: mkIcon(\n <>\n <rect x=\"4\" y=\"11\" width=\"16\" height=\"10\" rx=\"2\" />\n <path d=\"M8 11V7a4 4 0 0 1 8 0v4\" />\n </>,\n ),\n unlock: mkIcon(\n <>\n <rect x=\"4\" y=\"11\" width=\"16\" height=\"10\" rx=\"2\" />\n <path d=\"M8 11V7a4 4 0 0 1 8 0\" />\n </>,\n ),\n reset: mkIcon(\n <>\n <polyline points=\"1 4 1 10 7 10\" />\n <path d=\"M3.51 15a9 9 0 1 0 2.13-9.36L1 10\" />\n </>,\n ),\n undo: mkIcon(\n <>\n <path d=\"M3 7v6h6\" />\n <path d=\"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-7.07 3.43L3 13\" />\n </>,\n ),\n redo: mkIcon(\n <>\n <path d=\"M21 7v6h-6\" />\n <path d=\"M3 17a9 9 0 0 1 9-9 9 9 0 0 1 7.07 3.43L21 13\" />\n </>,\n ),\n drawerOpen: mkIcon(\n <>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\" />\n <polyline points=\"13 9 16 12 13 15\" />\n </>,\n ),\n drawerClose: mkIcon(\n <>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\" />\n <polyline points=\"16 9 13 12 16 15\" />\n </>,\n ),\n settings: mkIcon(\n <>\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n <path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z\" />\n </>,\n ),\n history: mkIcon(\n <>\n <path d=\"M22 12A10 10 0 1 1 12 2\" />\n <polyline points=\"22 2 22 8 16 8\" />\n <polyline points=\"12 7 12 12 15 15\" />\n </>,\n ),\n debug: mkIcon(\n <>\n <polyline points=\"4 17 10 11 4 5\" />\n <line x1=\"12\" y1=\"19\" x2=\"20\" y2=\"19\" />\n </>,\n ),\n zoomIn: mkIcon(\n <>\n <circle cx=\"11\" cy=\"11\" r=\"7\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n <line x1=\"11\" y1=\"8\" x2=\"11\" y2=\"14\" />\n <line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\" />\n </>,\n ),\n zoomOut: mkIcon(\n <>\n <circle cx=\"11\" cy=\"11\" r=\"7\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n <line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\" />\n </>,\n ),\n zoomReset: mkIcon(\n <>\n <circle cx=\"11\" cy=\"11\" r=\"7\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n <polyline points=\"8 9 8 13 12 13\" />\n <path d=\"M14 8a4 4 0 0 1 0 6\" />\n </>,\n ),\n fit: mkIcon(\n <>\n <path d=\"M3 7V5a2 2 0 0 1 2-2h2\" />\n <path d=\"M17 3h2a2 2 0 0 1 2 2v2\" />\n <path d=\"M21 17v2a2 2 0 0 1-2 2h-2\" />\n <path d=\"M7 21H5a2 2 0 0 1-2-2v-2\" />\n </>,\n ),\n};\n\nexport function FlowToolbarZoom({\n zoom,\n onZoomIn,\n onZoomOut,\n onFit,\n onReset,\n className,\n}: FlowToolbarZoomProps) {\n return (\n <div className={cn(\"ods-flow-toolbar__zoom\", className)}>\n <FlowToolbarButton\n icon={FlowToolbarIcons.zoomIn}\n label=\"Zoom in\"\n onClick={onZoomIn}\n shortcut=\"⌘+\"\n />\n <FlowToolbarButton\n icon={FlowToolbarIcons.zoomOut}\n label=\"Zoom out\"\n onClick={onZoomOut}\n shortcut=\"⌘−\"\n />\n {onReset && (\n <FlowToolbarButton\n icon={FlowToolbarIcons.zoomReset}\n label=\"Reset zoom\"\n tooltip=\"Reset zoom to 100%\"\n onClick={onReset}\n shortcut=\"⌘0\"\n />\n )}\n {onFit && (\n <FlowToolbarButton\n icon={FlowToolbarIcons.fit}\n label=\"Fit to view\"\n onClick={onFit}\n shortcut=\"⌘.\"\n />\n )}\n <div\n className=\"ods-flow-toolbar__zoom-label\"\n aria-label={`Current zoom ${Math.round(zoom * 100)} percent`}\n title=\"Current zoom\"\n >\n {Math.round(zoom * 100)}%\n </div>\n </div>\n );\n}\n","\"use client\";\nimport { type ReactNode, useCallback, useMemo, useState } from \"react\";\nimport { useWorkflow, type UseWorkflowOptions } from \"../../hooks/useWorkflow\";\nimport { wouldCreateCycle } from \"../../workflow/validator\";\nimport { cn } from \"../../utils/cn\";\nimport { FlowCanvas } from \"../FlowCanvas/FlowCanvas\";\nimport {\n FlowToolbar,\n FlowToolbarButton,\n FlowToolbarDivider,\n FlowToolbarIcons,\n FlowToolbarZoom,\n} from \"../FlowToolbar/FlowToolbar\";\nimport type { WorkflowNode, WorkflowPolicies } from \"../../workflow/types\";\n\nexport interface WorkflowEditorProps extends UseWorkflowOptions {\n /** Slot at the top-left — defaults to FlowToolbar with common actions. */\n toolbar?: ReactNode | \"default\" | null;\n\n /** Left-side drawer slot (e.g. an ActionDrawer). Rendered before the canvas. */\n drawer?: ReactNode;\n\n /** Bottom slot (e.g. an ExecutionConsole). Rendered absolutely at the bottom. */\n console?: ReactNode;\n\n /** Minimap slot — rendered in the bottom-right of the canvas. */\n minimap?: ReactNode;\n\n /** Empty-state contents (shown when no nodes/edges). */\n emptyState?: ReactNode;\n\n /** Action side-panel (e.g. a config form) — rendered as overlay via `children`. */\n children?: ReactNode;\n\n // Editor-level callbacks\n onSave?: (workflow: ReturnType<typeof useWorkflow>[\"workflow\"]) => void;\n onRun?: () => void;\n onStop?: () => void;\n onSettings?: () => void;\n /** Called when Reset is pressed — consumer should clear workflow state or ignore. */\n onReset?: () => void;\n onToggleDrawer?: (open: boolean) => void;\n onToggleHistory?: (open: boolean) => void;\n onToggleDebug?: (open: boolean) => void;\n onToggleLockMode?: (locked: boolean) => void;\n /** Controlled lock mode. If omitted, editor owns the state. */\n isLockMode?: boolean;\n /** Controlled drawer state. If omitted, editor owns the state. */\n isDrawerOpen?: boolean;\n /** Controlled history panel state. */\n isHistoryOpen?: boolean;\n /** Controlled debug console state. */\n isDebugOpen?: boolean;\n /** Show/hide the debug button in the default toolbar. */\n isDebugModeEnabled?: boolean;\n /** Show the Run button as an active \"stop\" button while true. */\n isExecuting?: boolean;\n\n height?: number | string;\n width?: number | string;\n className?: string;\n}\n\nconst NODE_DEFAULT_WIDTH = 368;\nconst NODE_DEFAULT_HEIGHT = 108;\n\nfunction computeFitViewport(\n nodes: WorkflowNode[],\n containerWidth: number,\n containerHeight: number,\n padding = 80,\n): { x: number; y: number; zoom: number } | null {\n if (nodes.length === 0) return null;\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const n of nodes) {\n const w = n.dimensions?.width ?? NODE_DEFAULT_WIDTH;\n const h = n.dimensions?.height ?? NODE_DEFAULT_HEIGHT;\n minX = Math.min(minX, n.position.x);\n minY = Math.min(minY, n.position.y);\n maxX = Math.max(maxX, n.position.x + w);\n maxY = Math.max(maxY, n.position.y + h);\n }\n const contentW = maxX - minX;\n const contentH = maxY - minY;\n const zoomX = (containerWidth - padding * 2) / contentW;\n const zoomY = (containerHeight - padding * 2) / contentH;\n const zoom = Math.min(zoomX, zoomY, 1.5);\n const clampedZoom = Math.max(zoom, 0.25);\n const centerX = (minX + maxX) / 2;\n const centerY = (minY + maxY) / 2;\n return {\n zoom: clampedZoom,\n x: containerWidth / 2 - centerX * clampedZoom,\n y: containerHeight / 2 - centerY * clampedZoom,\n };\n}\n\nexport function WorkflowEditor({\n toolbar = \"default\",\n drawer,\n console: consoleSlot,\n minimap,\n emptyState = <DefaultEmptyState />,\n children,\n onSave,\n onRun,\n onStop,\n onSettings,\n onReset,\n onToggleDrawer,\n onToggleHistory,\n onToggleDebug,\n onToggleLockMode,\n isLockMode: controlledLockMode,\n isDrawerOpen: controlledDrawerOpen,\n isHistoryOpen: controlledHistoryOpen,\n isDebugOpen: controlledDebugOpen,\n isDebugModeEnabled = false,\n isExecuting = false,\n height = 720,\n width = \"100%\",\n className,\n ...options\n}: WorkflowEditorProps) {\n const wf = useWorkflow(options);\n const { workflow, dispatch, canUndo, canRedo, undo, redo } = wf;\n\n // ── Uncontrolled state for lock/drawer/history/debug ────────────────────\n const [uncontrolledLock, setUncontrolledLock] = useState(false);\n const [uncontrolledDrawer, setUncontrolledDrawer] = useState(!!drawer);\n const [uncontrolledHistory, setUncontrolledHistory] = useState(false);\n const [uncontrolledDebug, setUncontrolledDebug] = useState(false);\n const isLockMode = controlledLockMode ?? uncontrolledLock;\n const isDrawerOpen = controlledDrawerOpen ?? uncontrolledDrawer;\n const isHistoryOpen = controlledHistoryOpen ?? uncontrolledHistory;\n const isDebugOpen = controlledDebugOpen ?? uncontrolledDebug;\n\n const toggleLock = useCallback(() => {\n const next = !isLockMode;\n if (controlledLockMode === undefined) setUncontrolledLock(next);\n onToggleLockMode?.(next);\n }, [isLockMode, controlledLockMode, onToggleLockMode]);\n\n const toggleDrawer = useCallback(() => {\n const next = !isDrawerOpen;\n if (controlledDrawerOpen === undefined) setUncontrolledDrawer(next);\n onToggleDrawer?.(next);\n }, [isDrawerOpen, controlledDrawerOpen, onToggleDrawer]);\n\n const toggleHistory = useCallback(() => {\n const next = !isHistoryOpen;\n if (controlledHistoryOpen === undefined) setUncontrolledHistory(next);\n onToggleHistory?.(next);\n }, [isHistoryOpen, controlledHistoryOpen, onToggleHistory]);\n\n const toggleDebug = useCallback(() => {\n const next = !isDebugOpen;\n if (controlledDebugOpen === undefined) setUncontrolledDebug(next);\n onToggleDebug?.(next);\n }, [isDebugOpen, controlledDebugOpen, onToggleDebug]);\n\n const handleReset = useCallback(() => {\n if (onReset) onReset();\n else dispatch({ type: \"RESET\" });\n }, [onReset, dispatch]);\n\n // ── Canvas sizing for fit-to-view ───────────────────────────────────────\n const [canvasSize, setCanvasSize] = useState<{ w: number; h: number }>({\n w: 0,\n h: 0,\n });\n\n const handleCanvasRef = useCallback((node: HTMLDivElement | null) => {\n if (!node) return;\n setCanvasSize({ w: node.clientWidth, h: node.clientHeight });\n }, []);\n\n const fitToView = useCallback(() => {\n const viewport = computeFitViewport(\n workflow.canvas.nodes as WorkflowNode[],\n canvasSize.w || 800,\n canvasSize.h || 600,\n );\n if (viewport) wf.setViewport(viewport);\n }, [workflow.canvas.nodes, canvasSize, wf]);\n\n const policies: WorkflowPolicies = workflow.policies;\n\n // ── Connection validation used by FlowNode ──\n const validateConnection = useCallback(\n (\n targetNodeId: string,\n targetPortId: string,\n targetPortType: \"input\" | \"output\",\n ) => {\n const from = workflow.canvas.connectingFrom;\n if (!from) return { valid: true };\n\n if (!policies.connection.allowSelfLoop && from.nodeId === targetNodeId) {\n return { valid: false, reason: \"Self-loops are not allowed\" };\n }\n if (from.portType === targetPortType) {\n return {\n valid: false,\n reason: `Cannot connect ${targetPortType} to ${targetPortType}`,\n };\n }\n const maxPerNode = policies.connection.maxConnectionsPerNode;\n if (maxPerNode !== undefined) {\n const count = workflow.canvas.edges.filter(\n (e) => e.source === targetNodeId || e.target === targetNodeId,\n ).length;\n if (count >= maxPerNode) {\n return { valid: false, reason: `Max ${maxPerNode} connections per node` };\n }\n }\n if (!policies.connection.allowMultipleInputs && targetPortType === \"input\") {\n if (\n workflow.canvas.edges.some(\n (e) => e.target === targetNodeId && e.targetPort === targetPortId,\n )\n ) {\n return { valid: false, reason: \"Port already has a connection\" };\n }\n }\n if (!policies.connection.allowMultipleOutputs && targetPortType === \"output\") {\n if (\n workflow.canvas.edges.some(\n (e) => e.source === targetNodeId && e.sourcePort === targetPortId,\n )\n ) {\n return { valid: false, reason: \"Port already has a connection\" };\n }\n }\n if (policies.connection.preventCircularDependencies) {\n const [src, tgt] = from.portType === \"output\"\n ? [from.nodeId, targetNodeId]\n : [targetNodeId, from.nodeId];\n if (wouldCreateCycle(src, tgt, workflow.canvas.edges)) {\n return { valid: false, reason: \"Would create a circular dependency\" };\n }\n }\n return { valid: true };\n },\n [policies, workflow.canvas.connectingFrom, workflow.canvas.edges],\n );\n\n const handleEndConnecting = useCallback(\n (\n target:\n | { nodeId: string; portId: string; portType: \"input\" | \"output\" }\n | null,\n ) => {\n const from = workflow.canvas.connectingFrom;\n if (!from) return;\n if (!target) {\n wf.endConnecting();\n return;\n }\n const result = validateConnection(target.nodeId, target.portId, target.portType);\n if (!result.valid) {\n wf.endConnecting();\n return;\n }\n if (from.portType === \"output\" && target.portType === \"input\") {\n wf.createEdge(from.nodeId, from.portId, target.nodeId, target.portId);\n } else if (from.portType === \"input\" && target.portType === \"output\") {\n wf.createEdge(target.nodeId, target.portId, from.nodeId, from.portId);\n }\n wf.endConnecting();\n },\n [workflow.canvas.connectingFrom, validateConnection, wf],\n );\n\n const selectedNodeId = workflow.canvas.selectedNodes[0];\n\n // ── Default toolbar: Save / Run / Lock / Reset / Drawer / Settings / History / Zoom ──\n const defaultToolbar = useMemo(\n () => (\n <FlowToolbar placement=\"left\">\n {onSave && (\n <FlowToolbarButton\n icon={FlowToolbarIcons.save}\n label=\"Save\"\n shortcut=\"⌘S\"\n onClick={() => onSave(workflow)}\n />\n )}\n {onRun && (\n <FlowToolbarButton\n icon={isExecuting ? FlowToolbarIcons.stop : FlowToolbarIcons.run}\n label={isExecuting ? \"Stop\" : \"Run\"}\n tooltip={isExecuting ? \"Running — click to stop\" : \"Run workflow\"}\n shortcut=\"⌘↵\"\n active={isExecuting}\n onClick={isExecuting ? onStop : onRun}\n />\n )}\n <FlowToolbarButton\n icon={isLockMode ? FlowToolbarIcons.lock : FlowToolbarIcons.unlock}\n label={isLockMode ? \"Unlock canvas\" : \"Lock canvas\"}\n tooltip={isLockMode ? \"Unlock canvas (edit mode)\" : \"Lock canvas\"}\n active={isLockMode}\n onClick={toggleLock}\n />\n <FlowToolbarButton\n icon={FlowToolbarIcons.reset}\n label=\"Reset canvas\"\n onClick={handleReset}\n />\n {drawer && (\n <FlowToolbarButton\n icon={isDrawerOpen ? FlowToolbarIcons.drawerClose : FlowToolbarIcons.drawerOpen}\n label={isDrawerOpen ? \"Hide actions drawer\" : \"Show actions drawer\"}\n active={isDrawerOpen}\n onClick={toggleDrawer}\n />\n )}\n <FlowToolbarDivider />\n {onSettings && (\n <FlowToolbarButton\n icon={FlowToolbarIcons.settings}\n label=\"Settings\"\n onClick={onSettings}\n />\n )}\n <FlowToolbarButton\n icon={FlowToolbarIcons.history}\n label={isHistoryOpen ? \"Hide history\" : \"Show history\"}\n active={isHistoryOpen}\n onClick={toggleHistory}\n />\n {isDebugModeEnabled && (\n <FlowToolbarButton\n icon={FlowToolbarIcons.debug}\n label={isDebugOpen ? \"Hide debug console\" : \"Show debug console\"}\n active={isDebugOpen}\n onClick={toggleDebug}\n />\n )}\n <FlowToolbarDivider />\n <FlowToolbarButton\n icon={FlowToolbarIcons.undo}\n label=\"Undo\"\n shortcut=\"⌘Z\"\n disabled={!canUndo}\n onClick={undo}\n />\n <FlowToolbarButton\n icon={FlowToolbarIcons.redo}\n label=\"Redo\"\n shortcut=\"⌘⇧Z\"\n disabled={!canRedo}\n onClick={redo}\n />\n <FlowToolbarDivider />\n <FlowToolbarZoom\n zoom={workflow.canvas.viewport.zoom}\n onZoomIn={wf.zoomIn}\n onZoomOut={wf.zoomOut}\n onReset={wf.resetViewport}\n onFit={fitToView}\n />\n </FlowToolbar>\n ),\n [\n onSave,\n onRun,\n onStop,\n onSettings,\n isExecuting,\n isLockMode,\n isDrawerOpen,\n isHistoryOpen,\n isDebugOpen,\n isDebugModeEnabled,\n drawer,\n toggleLock,\n toggleDrawer,\n toggleHistory,\n toggleDebug,\n handleReset,\n canUndo,\n canRedo,\n undo,\n redo,\n workflow,\n wf,\n fitToView,\n ],\n );\n\n const resolvedToolbar =\n toolbar === \"default\" ? defaultToolbar : toolbar === null ? null : toolbar;\n\n return (\n <div\n className={cn(\"ods-workflow-editor\", className)}\n style={{ width, height, position: \"relative\", display: \"flex\", overflow: \"hidden\" }}\n >\n {drawer && isDrawerOpen && (\n <div className=\"ods-workflow-editor__drawer\">{drawer}</div>\n )}\n <div\n ref={handleCanvasRef}\n className=\"ods-workflow-editor__canvas-wrapper\"\n style={{ position: \"relative\", flex: 1, minWidth: 0 }}\n >\n <FlowCanvas\n nodes={workflow.canvas.nodes as WorkflowNode[]}\n edges={workflow.canvas.edges}\n viewport={workflow.canvas.viewport}\n connectingFrom={workflow.canvas.connectingFrom}\n selectedNodeId={selectedNodeId}\n isLockMode={isLockMode}\n onViewportChange={wf.setViewport}\n onNodeSelect={(id) => wf.selectNode(id)}\n onEdgeSelect={wf.selectEdge}\n onDeselectAll={wf.deselectAll}\n onNodePositionChange={(id, pos) => wf.updateNode(id, { position: pos })}\n onNodeDelete={wf.deleteNode}\n onNodesDelete={wf.deleteNodes}\n onEdgeDelete={wf.deleteEdge}\n onStartConnecting={(nodeId, portId, portType) =>\n dispatch({ type: \"START_CONNECTING\", payload: { nodeId, portId, portType } })\n }\n onEndConnecting={handleEndConnecting}\n validateConnection={validateConnection}\n emptyState={emptyState}\n >\n {resolvedToolbar}\n {minimap && (\n <div className=\"ods-workflow-editor__minimap\">{minimap}</div>\n )}\n {consoleSlot && (\n <div className=\"ods-workflow-editor__console\">{consoleSlot}</div>\n )}\n {children}\n </FlowCanvas>\n </div>\n </div>\n );\n}\n\nfunction DefaultEmptyState() {\n return (\n <div\n style={{\n textAlign: \"center\",\n color: \"#8b8ca0\",\n maxWidth: 280,\n lineHeight: 1.5,\n }}\n >\n <div style={{ fontSize: 14, fontWeight: 600, color: \"#1e1b4b\", marginBottom: 4 }}>\n Start with a trigger\n </div>\n <div style={{ fontSize: 12 }}>\n Drop an action here, or use the drawer to add your first node.\n </div>\n </div>\n );\n}\n","\"use client\";\nimport { useCallback, useMemo, useReducer } from \"react\";\nimport { validateWorkflow } from \"../workflow/validator\";\nimport {\n type CanvasViewport,\n DEFAULT_WORKFLOW_POLICIES,\n type Position,\n type ValidationResult,\n type Workflow,\n type WorkflowAction,\n type WorkflowEdge,\n type WorkflowNode,\n type WorkflowPolicies,\n} from \"../workflow/types\";\n\n// ── Initial workflow ────────────────────────────────────────────────────────\nconst now = () => new Date().toISOString();\n\nfunction buildInitialWorkflow(\n overrides: Partial<Workflow> = {},\n): Workflow {\n const base: Workflow = {\n metadata: {\n id: \"\",\n name: \"Untitled Workflow\",\n projectId: undefined,\n version: \"1.0.0\",\n status: \"draft\",\n createdAt: now(),\n updatedAt: now(),\n tags: [],\n },\n canvas: {\n nodes: [],\n edges: [],\n viewport: { x: 0, y: 0, zoom: 1 },\n selectedNodes: [],\n selectedEdges: [],\n isDragging: false,\n isPanning: false,\n isConnecting: false,\n settings: {\n snapToGrid: true,\n gridSize: 20,\n showGrid: true,\n showMinimap: false,\n autoLayout: false,\n useAdvancedLayout: false,\n theme: \"light\",\n },\n history: { past: [], future: [] },\n },\n policies: DEFAULT_WORKFLOW_POLICIES,\n validation: { isValid: true, errors: [], warnings: [] },\n };\n return {\n ...base,\n ...overrides,\n metadata: { ...base.metadata, ...(overrides.metadata ?? {}) },\n canvas: { ...base.canvas, ...(overrides.canvas ?? {}) },\n policies: { ...base.policies, ...(overrides.policies ?? {}) },\n };\n}\n\n// ── Reducer helpers ────────────────────────────────────────────────────────\nfunction withValidation(state: Workflow): Workflow {\n return { ...state, validation: validateWorkflow(state.canvas.nodes, state.canvas.edges) };\n}\n\nfunction snapshot(state: Workflow): Pick<Workflow[\"canvas\"], \"nodes\" | \"edges\"> {\n return { nodes: state.canvas.nodes, edges: state.canvas.edges };\n}\n\nfunction withHistoryCheckpoint(state: Workflow): Workflow {\n return {\n ...state,\n canvas: {\n ...state.canvas,\n history: {\n past: [...state.canvas.history.past, snapshot(state)].slice(-50),\n future: [],\n },\n },\n };\n}\n\n// ── Reducer ─────────────────────────────────────────────────────────────────\nfunction reducer(state: Workflow, action: WorkflowAction): Workflow {\n switch (action.type) {\n case \"ADD_NODE\": {\n const checkpoint = withHistoryCheckpoint(state);\n return withValidation({\n ...checkpoint,\n canvas: { ...checkpoint.canvas, nodes: [...checkpoint.canvas.nodes, action.payload] },\n metadata: { ...checkpoint.metadata, updatedAt: now() },\n });\n }\n case \"UPDATE_NODE\": {\n const { id, updates } = action.payload;\n return withValidation({\n ...state,\n canvas: {\n ...state.canvas,\n nodes: state.canvas.nodes.map((n) =>\n n.id === id ? { ...n, ...updates, updatedAt: now() } : n,\n ),\n },\n metadata: { ...state.metadata, updatedAt: now() },\n });\n }\n case \"DELETE_NODE\": {\n const checkpoint = withHistoryCheckpoint(state);\n const nodeId = action.payload;\n return withValidation({\n ...checkpoint,\n canvas: {\n ...checkpoint.canvas,\n nodes: checkpoint.canvas.nodes.filter((n) => n.id !== nodeId),\n edges: checkpoint.canvas.edges.filter(\n (e) => e.source !== nodeId && e.target !== nodeId,\n ),\n selectedNodes: checkpoint.canvas.selectedNodes.filter((id) => id !== nodeId),\n },\n metadata: { ...checkpoint.metadata, updatedAt: now() },\n });\n }\n case \"DELETE_NODES\": {\n const checkpoint = withHistoryCheckpoint(state);\n const ids = action.payload;\n return withValidation({\n ...checkpoint,\n canvas: {\n ...checkpoint.canvas,\n nodes: checkpoint.canvas.nodes.filter((n) => !ids.includes(n.id)),\n edges: checkpoint.canvas.edges.filter(\n (e) => !ids.includes(e.source) && !ids.includes(e.target),\n ),\n selectedNodes: checkpoint.canvas.selectedNodes.filter((id) => !ids.includes(id)),\n },\n metadata: { ...checkpoint.metadata, updatedAt: now() },\n });\n }\n case \"ADD_EDGE\": {\n const checkpoint = withHistoryCheckpoint(state);\n return withValidation({\n ...checkpoint,\n canvas: { ...checkpoint.canvas, edges: [...checkpoint.canvas.edges, action.payload] },\n metadata: { ...checkpoint.metadata, updatedAt: now() },\n });\n }\n case \"DELETE_EDGE\": {\n const checkpoint = withHistoryCheckpoint(state);\n const edgeId = action.payload;\n return withValidation({\n ...checkpoint,\n canvas: {\n ...checkpoint.canvas,\n edges: checkpoint.canvas.edges.filter((e) => e.id !== edgeId),\n selectedEdges: checkpoint.canvas.selectedEdges.filter((id) => id !== edgeId),\n },\n metadata: { ...checkpoint.metadata, updatedAt: now() },\n });\n }\n case \"DELETE_EDGES\": {\n const checkpoint = withHistoryCheckpoint(state);\n const ids = action.payload;\n return withValidation({\n ...checkpoint,\n canvas: {\n ...checkpoint.canvas,\n edges: checkpoint.canvas.edges.filter((e) => !ids.includes(e.id)),\n selectedEdges: checkpoint.canvas.selectedEdges.filter((id) => !ids.includes(id)),\n },\n metadata: { ...checkpoint.metadata, updatedAt: now() },\n });\n }\n case \"SELECT_NODE\": {\n const id = action.payload;\n return {\n ...state,\n canvas: {\n ...state.canvas,\n selectedNodes: [id],\n selectedEdges: [],\n nodes: state.canvas.nodes.map((n) => ({ ...n, selected: n.id === id })),\n edges: state.canvas.edges.map((e) => ({ ...e, selected: false })),\n },\n };\n }\n case \"SELECT_NODES\": {\n const ids = action.payload;\n return {\n ...state,\n canvas: {\n ...state.canvas,\n selectedNodes: ids,\n selectedEdges: [],\n nodes: state.canvas.nodes.map((n) => ({ ...n, selected: ids.includes(n.id) })),\n edges: state.canvas.edges.map((e) => ({ ...e, selected: false })),\n },\n };\n }\n case \"SELECT_EDGE\": {\n const id = action.payload;\n return {\n ...state,\n canvas: {\n ...state.canvas,\n selectedNodes: [],\n selectedEdges: [id],\n nodes: state.canvas.nodes.map((n) => ({ ...n, selected: false })),\n edges: state.canvas.edges.map((e) => ({ ...e, selected: e.id === id })),\n },\n };\n }\n case \"DESELECT_ALL\":\n return {\n ...state,\n canvas: {\n ...state.canvas,\n selectedNodes: [],\n selectedEdges: [],\n nodes: state.canvas.nodes.map((n) => ({ ...n, selected: false })),\n edges: state.canvas.edges.map((e) => ({ ...e, selected: false })),\n },\n };\n case \"UPDATE_VIEWPORT\":\n return {\n ...state,\n canvas: { ...state.canvas, viewport: { ...state.canvas.viewport, ...action.payload } },\n };\n case \"UPDATE_SETTINGS\":\n return {\n ...state,\n canvas: { ...state.canvas, settings: { ...state.canvas.settings, ...action.payload } },\n };\n case \"START_CONNECTING\":\n return {\n ...state,\n canvas: { ...state.canvas, isConnecting: true, connectingFrom: action.payload },\n };\n case \"END_CONNECTING\":\n return {\n ...state,\n canvas: { ...state.canvas, isConnecting: false, connectingFrom: undefined },\n };\n case \"REPLACE_NODES\": {\n const checkpoint = withHistoryCheckpoint(state);\n return withValidation({\n ...checkpoint,\n canvas: { ...checkpoint.canvas, nodes: action.payload },\n metadata: { ...checkpoint.metadata, updatedAt: now() },\n });\n }\n case \"REPLACE_EDGES\": {\n const checkpoint = withHistoryCheckpoint(state);\n return withValidation({\n ...checkpoint,\n canvas: { ...checkpoint.canvas, edges: action.payload },\n metadata: { ...checkpoint.metadata, updatedAt: now() },\n });\n }\n case \"UNDO\": {\n const { past, future } = state.canvas.history;\n if (past.length === 0) return state;\n const previous = past[past.length - 1];\n const newPast = past.slice(0, -1);\n return withValidation({\n ...state,\n canvas: {\n ...state.canvas,\n nodes: previous.nodes,\n edges: previous.edges,\n history: {\n past: newPast,\n future: [snapshot(state), ...future].slice(0, 50),\n },\n },\n });\n }\n case \"REDO\": {\n const { past, future } = state.canvas.history;\n if (future.length === 0) return state;\n const [next, ...rest] = future;\n return withValidation({\n ...state,\n canvas: {\n ...state.canvas,\n nodes: next.nodes,\n edges: next.edges,\n history: {\n past: [...past, snapshot(state)].slice(-50),\n future: rest,\n },\n },\n });\n }\n case \"RESET\":\n return buildInitialWorkflow();\n default:\n return state;\n }\n}\n\n// ── Hook ────────────────────────────────────────────────────────────────────\nexport interface UseWorkflowOptions {\n initialNodes?: WorkflowNode[];\n initialEdges?: WorkflowEdge[];\n initialViewport?: Partial<CanvasViewport>;\n policies?: Partial<WorkflowPolicies>;\n metadata?: Partial<Workflow[\"metadata\"]>;\n}\n\nexport interface UseWorkflowReturn {\n workflow: Workflow;\n dispatch: React.Dispatch<WorkflowAction>;\n\n // Nodes\n addNode: (node: WorkflowNode) => void;\n createNode: (partial: Partial<WorkflowNode> & { label: string; position: Position }) => WorkflowNode;\n updateNode: (id: string, updates: Partial<WorkflowNode>) => void;\n deleteNode: (id: string) => void;\n deleteNodes: (ids: string[]) => void;\n replaceNodes: (nodes: WorkflowNode[]) => void;\n\n // Edges\n addEdge: (edge: WorkflowEdge) => void;\n createEdge: (source: string, sourcePort: string, target: string, targetPort: string) => WorkflowEdge;\n deleteEdge: (id: string) => void;\n replaceEdges: (edges: WorkflowEdge[]) => void;\n\n // Connecting\n startConnecting: (nodeId: string, portId: string, portType: \"input\" | \"output\") => void;\n endConnecting: () => void;\n\n // Selection\n selectNode: (id: string, multi?: boolean) => void;\n selectNodes: (ids: string[]) => void;\n selectEdge: (id: string) => void;\n deselectAll: () => void;\n\n // Viewport\n zoomIn: () => void;\n zoomOut: () => void;\n resetViewport: () => void;\n setViewport: (viewport: Partial<CanvasViewport>) => void;\n\n // History\n undo: () => void;\n redo: () => void;\n canUndo: boolean;\n canRedo: boolean;\n\n // Validation\n validate: () => ValidationResult;\n}\n\nlet idCounter = 0;\nfunction genId(prefix: string): string {\n idCounter += 1;\n return `${prefix}_${Date.now().toString(36)}_${idCounter}`;\n}\n\nexport function useWorkflow(options: UseWorkflowOptions = {}): UseWorkflowReturn {\n const initial = useMemo(\n () =>\n buildInitialWorkflow({\n metadata: options.metadata ? { ...options.metadata } as Workflow[\"metadata\"] : undefined,\n canvas: {\n nodes: options.initialNodes ?? [],\n edges: options.initialEdges ?? [],\n viewport: {\n x: options.initialViewport?.x ?? 0,\n y: options.initialViewport?.y ?? 0,\n zoom: options.initialViewport?.zoom ?? 1,\n },\n selectedNodes: [],\n selectedEdges: [],\n isDragging: false,\n isPanning: false,\n isConnecting: false,\n settings: {\n snapToGrid: true,\n gridSize: 20,\n showGrid: true,\n showMinimap: false,\n autoLayout: false,\n useAdvancedLayout: false,\n theme: \"light\",\n },\n history: { past: [], future: [] },\n },\n policies: options.policies\n ? { ...DEFAULT_WORKFLOW_POLICIES, ...options.policies } as WorkflowPolicies\n : undefined,\n }),\n // Initial value only; subsequent option changes don't reset state.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n const [workflow, dispatch] = useReducer(reducer, initial);\n\n const addNode = useCallback((node: WorkflowNode) => dispatch({ type: \"ADD_NODE\", payload: node }), []);\n\n const createNode = useCallback(\n (partial: Partial<WorkflowNode> & { label: string; position: Position }): WorkflowNode => {\n const id = partial.id ?? genId(\"node\");\n const ports = partial.ports ?? {\n input: partial.type === \"trigger\" ? [] : [{\n id: `${id}_input_0`,\n type: \"input\" as const,\n position: \"left\" as const,\n connected: false,\n }],\n output: [{\n id: `${id}_output_0`,\n type: \"output\" as const,\n position: \"right\" as const,\n connected: false,\n }],\n };\n const node: WorkflowNode = {\n id,\n type: partial.type ?? \"action\",\n label: partial.label,\n description: partial.description,\n icon: partial.icon,\n color: partial.color,\n position: partial.position,\n config: partial.config ?? {},\n ports,\n status: partial.status ?? \"idle\",\n selected: false,\n dragging: false,\n isValid: partial.isValid ?? true,\n expanded: true,\n minimized: false,\n locked: false,\n createdAt: now(),\n updatedAt: now(),\n actionDefinitionId: partial.actionDefinitionId,\n data: partial.data,\n configStatus: partial.configStatus,\n };\n dispatch({ type: \"ADD_NODE\", payload: node });\n return node;\n },\n [],\n );\n\n const updateNode = useCallback(\n (id: string, updates: Partial<WorkflowNode>) =>\n dispatch({ type: \"UPDATE_NODE\", payload: { id, updates } }),\n [],\n );\n const deleteNode = useCallback((id: string) => dispatch({ type: \"DELETE_NODE\", payload: id }), []);\n const deleteNodes = useCallback((ids: string[]) => dispatch({ type: \"DELETE_NODES\", payload: ids }), []);\n const replaceNodes = useCallback(\n (nodes: WorkflowNode[]) => dispatch({ type: \"REPLACE_NODES\", payload: nodes }),\n [],\n );\n\n const addEdge = useCallback((edge: WorkflowEdge) => dispatch({ type: \"ADD_EDGE\", payload: edge }), []);\n const createEdge = useCallback(\n (source: string, sourcePort: string, target: string, targetPort: string): WorkflowEdge => {\n const edge: WorkflowEdge = {\n id: genId(\"edge\"),\n type: \"default\",\n source,\n sourcePort,\n target,\n targetPort,\n selected: false,\n animated: false,\n createdAt: now(),\n };\n dispatch({ type: \"ADD_EDGE\", payload: edge });\n return edge;\n },\n [],\n );\n const deleteEdge = useCallback((id: string) => dispatch({ type: \"DELETE_EDGE\", payload: id }), []);\n const replaceEdges = useCallback(\n (edges: WorkflowEdge[]) => dispatch({ type: \"REPLACE_EDGES\", payload: edges }),\n [],\n );\n\n const startConnecting = useCallback(\n (nodeId: string, portId: string, portType: \"input\" | \"output\") =>\n dispatch({ type: \"START_CONNECTING\", payload: { nodeId, portId, portType } }),\n [],\n );\n const endConnecting = useCallback(() => dispatch({ type: \"END_CONNECTING\" }), []);\n\n const selectNode = useCallback(\n (id: string, multi = false) => {\n if (multi) {\n const current = workflow.canvas.selectedNodes;\n const next = current.includes(id) ? current.filter((x) => x !== id) : [...current, id];\n dispatch({ type: \"SELECT_NODES\", payload: next });\n } else {\n dispatch({ type: \"SELECT_NODE\", payload: id });\n }\n },\n [workflow.canvas.selectedNodes],\n );\n const selectNodes = useCallback(\n (ids: string[]) => dispatch({ type: \"SELECT_NODES\", payload: ids }),\n [],\n );\n const selectEdge = useCallback((id: string) => dispatch({ type: \"SELECT_EDGE\", payload: id }), []);\n const deselectAll = useCallback(() => dispatch({ type: \"DESELECT_ALL\" }), []);\n\n const zoomIn = useCallback(() => {\n const z = Math.min(workflow.canvas.viewport.zoom * 1.2, 2);\n dispatch({ type: \"UPDATE_VIEWPORT\", payload: { zoom: z } });\n }, [workflow.canvas.viewport.zoom]);\n\n const zoomOut = useCallback(() => {\n const z = Math.max(workflow.canvas.viewport.zoom / 1.2, 0.25);\n dispatch({ type: \"UPDATE_VIEWPORT\", payload: { zoom: z } });\n }, [workflow.canvas.viewport.zoom]);\n\n const resetViewport = useCallback(\n () => dispatch({ type: \"UPDATE_VIEWPORT\", payload: { x: 0, y: 0, zoom: 1 } }),\n [],\n );\n const setViewport = useCallback(\n (viewport: Partial<CanvasViewport>) => dispatch({ type: \"UPDATE_VIEWPORT\", payload: viewport }),\n [],\n );\n\n const undo = useCallback(() => dispatch({ type: \"UNDO\" }), []);\n const redo = useCallback(() => dispatch({ type: \"REDO\" }), []);\n const canUndo = workflow.canvas.history.past.length > 0;\n const canRedo = workflow.canvas.history.future.length > 0;\n\n const validate = useCallback((): ValidationResult => workflow.validation, [workflow.validation]);\n\n return {\n workflow,\n dispatch,\n addNode,\n createNode,\n updateNode,\n deleteNode,\n deleteNodes,\n replaceNodes,\n addEdge,\n createEdge,\n deleteEdge,\n replaceEdges,\n startConnecting,\n endConnecting,\n selectNode,\n selectNodes,\n selectEdge,\n deselectAll,\n zoomIn,\n zoomOut,\n resetViewport,\n setViewport,\n undo,\n redo,\n canUndo,\n canRedo,\n validate,\n };\n}\n","import type { ValidationIssue, ValidationResult, WorkflowEdge, WorkflowNode } from \"./types\";\n\n// ── Node validation ─────────────────────────────────────────────────────────\nexport function validateNode(\n node: WorkflowNode,\n _allNodes: WorkflowNode[],\n allEdges: WorkflowEdge[],\n): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n\n if (!node.id || node.id.trim().length === 0) {\n issues.push({\n id: `node-${node.id}-id`,\n type: \"node\",\n severity: \"error\",\n message: \"Node ID is required\",\n nodeId: node.id,\n });\n }\n\n if (!node.label || (typeof node.label === \"string\" && node.label.trim().length === 0)) {\n issues.push({\n id: `node-${node.id}-label`,\n type: \"node\",\n severity: \"error\",\n message: \"Node label is required\",\n nodeId: node.id,\n });\n }\n\n if (!node.isValid) {\n issues.push({\n id: `node-${node.id}-config`,\n type: \"node\",\n severity: \"error\",\n message: `Node \"${node.label}\" has incomplete configuration`,\n nodeId: node.id,\n });\n }\n\n if (node.type !== \"trigger\") {\n const hasInput = allEdges.some((edge) => edge.target === node.id);\n if (!hasInput) {\n issues.push({\n id: `node-${node.id}-input`,\n type: \"node\",\n severity: \"warning\",\n message: `Node \"${node.label}\" has no incoming connections`,\n nodeId: node.id,\n });\n }\n }\n\n const hasOutput = allEdges.some((edge) => edge.source === node.id);\n if (!hasOutput && node.type === \"trigger\") {\n issues.push({\n id: `node-${node.id}-output`,\n type: \"node\",\n severity: \"warning\",\n message: `Trigger \"${node.label}\" has no outgoing connections`,\n nodeId: node.id,\n });\n }\n\n return issues;\n}\n\n// ── Edge validation ─────────────────────────────────────────────────────────\nexport function validateEdge(edge: WorkflowEdge, allNodes: WorkflowNode[]): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n\n const sourceNode = allNodes.find((n) => n.id === edge.source);\n if (!sourceNode) {\n issues.push({\n id: `edge-${edge.id}-source`,\n type: \"edge\",\n severity: \"error\",\n message: `Source node \"${edge.source}\" does not exist`,\n edgeId: edge.id,\n });\n }\n\n const targetNode = allNodes.find((n) => n.id === edge.target);\n if (!targetNode) {\n issues.push({\n id: `edge-${edge.id}-target`,\n type: \"edge\",\n severity: \"error\",\n message: `Target node \"${edge.target}\" does not exist`,\n edgeId: edge.id,\n });\n }\n\n if (edge.source === edge.target) {\n issues.push({\n id: `edge-${edge.id}-loop`,\n type: \"edge\",\n severity: \"error\",\n message: \"Nodes cannot connect to themselves\",\n edgeId: edge.id,\n });\n }\n\n return issues;\n}\n\n// ── Workflow-level validation ──────────────────────────────────────────────\nexport function validateWorkflow(\n nodes: WorkflowNode[],\n edges: WorkflowEdge[],\n): ValidationResult {\n const all: ValidationIssue[] = [];\n\n const hasTrigger = nodes.some((n) => n.type === \"trigger\");\n if (!hasTrigger) {\n all.push({\n id: \"workflow-trigger\",\n type: \"workflow\",\n severity: \"error\",\n message: \"Workflow must have at least one trigger node\",\n });\n }\n\n const hasAction = nodes.some((n) => n.type === \"action\");\n if (!hasAction && nodes.length > 0) {\n all.push({\n id: \"workflow-action\",\n type: \"workflow\",\n severity: \"warning\",\n message: \"Workflow should have at least one action node\",\n });\n }\n\n for (const node of nodes) all.push(...validateNode(node, nodes, edges));\n for (const edge of edges) all.push(...validateEdge(edge, nodes));\n\n // Orphan detection\n for (const node of nodes) {\n if (node.type === \"trigger\") continue;\n const connected = edges.some((e) => e.source === node.id || e.target === node.id);\n if (!connected) {\n all.push({\n id: `node-${node.id}-orphan`,\n type: \"node\",\n severity: \"warning\",\n message: `Node \"${node.label}\" is not connected to the workflow`,\n nodeId: node.id,\n });\n }\n }\n\n const errors = all.filter((e) => e.severity === \"error\");\n const warnings = all.filter((e) => e.severity === \"warning\");\n\n return { isValid: errors.length === 0, errors, warnings };\n}\n\n// ── Selectors ───────────────────────────────────────────────────────────────\nexport function getNodeValidationStatus(\n nodeId: string,\n result: ValidationResult,\n): \"valid\" | \"error\" | \"warning\" {\n if (result.errors.some((e) => e.nodeId === nodeId)) return \"error\";\n if (result.warnings.some((e) => e.nodeId === nodeId)) return \"warning\";\n return \"valid\";\n}\n\nexport function getEdgeValidationStatus(\n edgeId: string,\n result: ValidationResult,\n): \"valid\" | \"error\" | \"warning\" {\n if (result.errors.some((e) => e.edgeId === edgeId)) return \"error\";\n if (result.warnings.some((e) => e.edgeId === edgeId)) return \"warning\";\n return \"valid\";\n}\n\n// ── Cycle detection ─────────────────────────────────────────────────────────\nexport function wouldCreateCycle(\n source: string,\n target: string,\n edges: WorkflowEdge[],\n): boolean {\n if (source === target) return true;\n const visited = new Set<string>();\n const queue: string[] = [target];\n while (queue.length > 0) {\n const current = queue.shift();\n if (!current) continue;\n if (current === source) return true;\n if (visited.has(current)) continue;\n visited.add(current);\n for (const edge of edges) if (edge.source === current && !visited.has(edge.target)) queue.push(edge.target);\n }\n return false;\n}\n","// ============================================================================\n// Workflow types — ported from octaviaflow-ui, decoupled from app-specific\n// ActionDefinition/Next.js so the design system can stand alone.\n// Consumers can extend WorkflowNode via the `data` field for their own schemas.\n// ============================================================================\n\n// ── Geometry ────────────────────────────────────────────────────────────────\nexport interface Position {\n x: number;\n y: number;\n}\nexport interface Dimensions {\n width: number;\n height: number;\n}\nexport interface Bounds {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n// ── Node ────────────────────────────────────────────────────────────────────\nexport type NodeStatus = \"idle\" | \"running\" | \"success\" | \"error\" | \"warning\" | \"disabled\";\nexport type NodeKind = \"trigger\" | \"action\" | \"condition\" | \"transform\";\nexport type ConfigStatus = \"valid\" | \"warning\" | \"error\" | \"unconfigured\" | \"hidden\";\n\nexport interface NodePort {\n id: string;\n type: \"input\" | \"output\";\n position: \"top\" | \"right\" | \"bottom\" | \"left\";\n label?: string;\n connected: boolean;\n maxConnections?: number;\n}\n\nexport interface DataSchema {\n type: \"object\" | \"array\" | \"string\" | \"number\" | \"boolean\" | \"null\";\n properties?: Record<string, DataSchema>;\n items?: DataSchema;\n required?: string[];\n description?: string;\n example?: unknown;\n}\n\nexport interface WorkflowNode<TData = unknown> {\n id: string;\n type: NodeKind;\n\n /** Optional reference to an action-definition id in the consumer's registry. */\n actionDefinitionId?: string;\n\n // Display\n name?: string;\n label: string;\n description?: string;\n /**\n * Icon — a ReactNode rendered inside the node chrome. Consumer provides it\n * (Lucide, Carbon, custom SVG, whatever). The DS doesn't bundle icons.\n */\n icon?: unknown;\n color?: string;\n\n // Position & size\n position: Position;\n dimensions?: Dimensions;\n\n // Configuration (arbitrary consumer data). `data` is a type-safe bag.\n config: Record<string, unknown>;\n data?: TData;\n configStatus?: ConfigStatus;\n\n // Ports\n ports: {\n input: NodePort[];\n output: NodePort[];\n };\n\n // Data flow schemas\n inputSchema?: DataSchema;\n outputSchema?: DataSchema;\n\n // Runtime state\n status: NodeStatus;\n selected: boolean;\n dragging: boolean;\n\n // Validation\n isValid: boolean;\n validationErrors?: string[];\n\n // UI state\n expanded: boolean;\n minimized: boolean;\n locked: boolean;\n\n // Execution data\n executionData?: {\n lastRun?: string;\n duration?: number;\n output?: unknown;\n error?: string;\n };\n\n // Metadata\n createdAt: string;\n updatedAt: string;\n notes?: string;\n}\n\n// ── Edge ────────────────────────────────────────────────────────────────────\nexport type EdgeType = \"default\" | \"conditional\" | \"loop\" | \"error\";\n\nexport interface EdgeStyle {\n stroke?: string;\n strokeWidth?: number;\n strokeDasharray?: string;\n animated?: boolean;\n}\n\nexport interface WorkflowEdge {\n id: string;\n type: EdgeType;\n source: string;\n sourcePort: string;\n target: string;\n targetPort: string;\n style?: EdgeStyle;\n label?: string;\n condition?: string;\n selected: boolean;\n animated: boolean;\n createdAt: string;\n}\n\n// ── Viewport & settings ─────────────────────────────────────────────────────\nexport interface CanvasViewport {\n x: number;\n y: number;\n zoom: number;\n}\n\nexport interface CanvasSettings {\n snapToGrid: boolean;\n gridSize: number;\n showGrid: boolean;\n showMinimap: boolean;\n autoLayout: boolean;\n useAdvancedLayout: boolean;\n theme: \"light\" | \"dark\";\n}\n\n// ── Canvas state ────────────────────────────────────────────────────────────\nexport interface WorkflowCanvasState {\n nodes: WorkflowNode[];\n edges: WorkflowEdge[];\n viewport: CanvasViewport;\n selectedNodes: string[];\n selectedEdges: string[];\n isDragging: boolean;\n isPanning: boolean;\n isConnecting: boolean;\n connectingFrom?: {\n nodeId: string;\n portId: string;\n portType: \"input\" | \"output\";\n };\n settings: CanvasSettings;\n history: {\n past: Array<Pick<WorkflowCanvasState, \"nodes\" | \"edges\">>;\n future: Array<Pick<WorkflowCanvasState, \"nodes\" | \"edges\">>;\n };\n}\n\n// ── Actions (reducer input) ─────────────────────────────────────────────────\nexport type WorkflowAction =\n | { type: \"ADD_NODE\"; payload: WorkflowNode }\n | { type: \"UPDATE_NODE\"; payload: { id: string; updates: Partial<WorkflowNode> } }\n | { type: \"DELETE_NODE\"; payload: string }\n | { type: \"DELETE_NODES\"; payload: string[] }\n | { type: \"ADD_EDGE\"; payload: WorkflowEdge }\n | { type: \"DELETE_EDGE\"; payload: string }\n | { type: \"DELETE_EDGES\"; payload: string[] }\n | { type: \"SELECT_NODE\"; payload: string }\n | { type: \"SELECT_NODES\"; payload: string[] }\n | { type: \"SELECT_EDGE\"; payload: string }\n | { type: \"DESELECT_ALL\" }\n | { type: \"UPDATE_VIEWPORT\"; payload: Partial<CanvasViewport> }\n | { type: \"UPDATE_SETTINGS\"; payload: Partial<CanvasSettings> }\n | { type: \"START_CONNECTING\"; payload: { nodeId: string; portId: string; portType: \"input\" | \"output\" } }\n | { type: \"END_CONNECTING\" }\n | { type: \"UNDO\" }\n | { type: \"REDO\" }\n | { type: \"REPLACE_NODES\"; payload: WorkflowNode[] }\n | { type: \"REPLACE_EDGES\"; payload: WorkflowEdge[] }\n | { type: \"RESET\" };\n\n// ── Policies ────────────────────────────────────────────────────────────────\nexport interface ConnectionPolicies {\n allowSelfLoop: boolean;\n allowMultipleOutputs: boolean;\n allowMultipleInputs: boolean;\n strictTypeChecking: boolean;\n maxConnectionsPerNode?: number;\n preventCircularDependencies: boolean;\n allowConditionalConnections: boolean;\n requireAllInputsConnected: boolean;\n}\n\nexport interface NodePolicies {\n minNodes: number;\n maxNodes?: number;\n allowDuplicateTypes: boolean;\n requiredNodeTypes?: string[];\n forbiddenNodeTypes?: string[];\n allowOrphanNodes: boolean;\n snapToGrid: boolean;\n gridSize: number;\n}\n\nexport interface ExecutionPolicies {\n allowParallelExecution: boolean;\n maxExecutionTime?: number;\n retryFailedNodes: boolean;\n maxRetries: number;\n continueOnError: boolean;\n requireApproval: boolean;\n}\n\nexport interface ValidationPolicies {\n validateOnChange: boolean;\n validateBeforeExecution: boolean;\n blockExecutionOnValidationError: boolean;\n showValidationWarnings: boolean;\n strictMode: boolean;\n}\n\nexport interface WorkflowPolicies {\n connection: ConnectionPolicies;\n node: NodePolicies;\n execution: ExecutionPolicies;\n validation: ValidationPolicies;\n}\n\nexport const DEFAULT_WORKFLOW_POLICIES: WorkflowPolicies = {\n connection: {\n allowSelfLoop: false,\n allowMultipleOutputs: true,\n allowMultipleInputs: false,\n strictTypeChecking: true,\n maxConnectionsPerNode: undefined,\n preventCircularDependencies: true,\n allowConditionalConnections: true,\n requireAllInputsConnected: false,\n },\n node: {\n minNodes: 1,\n maxNodes: undefined,\n allowDuplicateTypes: true,\n requiredNodeTypes: undefined,\n forbiddenNodeTypes: undefined,\n allowOrphanNodes: true,\n snapToGrid: true,\n gridSize: 20,\n },\n execution: {\n allowParallelExecution: true,\n maxExecutionTime: undefined,\n retryFailedNodes: true,\n maxRetries: 3,\n continueOnError: false,\n requireApproval: false,\n },\n validation: {\n validateOnChange: true,\n validateBeforeExecution: true,\n blockExecutionOnValidationError: true,\n showValidationWarnings: true,\n strictMode: false,\n },\n};\n\n// ── Validation ──────────────────────────────────────────────────────────────\nexport interface ValidationIssue {\n id: string;\n type: \"node\" | \"edge\" | \"workflow\";\n severity: \"error\" | \"warning\";\n message: string;\n nodeId?: string;\n edgeId?: string;\n}\n\nexport interface ValidationResult {\n isValid: boolean;\n errors: ValidationIssue[];\n warnings: ValidationIssue[];\n}\n\n// ── Workflow metadata & aggregate ───────────────────────────────────────────\nexport interface WorkflowMetadata {\n id: string;\n name: string;\n description?: string;\n projectId?: string;\n version: string;\n status: \"draft\" | \"published\" | \"archived\";\n createdAt: string;\n updatedAt: string;\n createdBy?: string;\n tags: string[];\n}\n\nexport interface Workflow {\n metadata: WorkflowMetadata;\n canvas: WorkflowCanvasState;\n policies: WorkflowPolicies;\n validation: ValidationResult;\n}\n\n// ── Helpers ─────────────────────────────────────────────────────────────────\nexport interface ConnectionValidation {\n valid: boolean;\n reason?: string;\n}\n","import type { WorkflowEdge, WorkflowNode } from \"./types\";\n\nconst NODE_WIDTH = 368;\nconst NODE_HEIGHT = 108;\n\nexport interface LayoutResult {\n nodes: WorkflowNode[];\n}\n\nfunction buildAdjacencyList(edges: WorkflowEdge[]): Map<string, string[]> {\n const adj = new Map<string, string[]>();\n for (const edge of edges) {\n const children = adj.get(edge.source) ?? [];\n children.push(edge.target);\n adj.set(edge.source, children);\n }\n return adj;\n}\n\nfunction findRootNodes(nodes: WorkflowNode[], edges: WorkflowEdge[]): Set<string> {\n const hasIncoming = new Set<string>();\n for (const edge of edges) hasIncoming.add(edge.target);\n const roots = new Set<string>();\n for (const node of nodes) if (!hasIncoming.has(node.id)) roots.add(node.id);\n return roots;\n}\n\nfunction assignLevels(nodes: WorkflowNode[], edges: WorkflowEdge[]): Map<string, number> {\n const levels = new Map<string, number>();\n const adj = buildAdjacencyList(edges);\n const roots = findRootNodes(nodes, edges);\n\n if (roots.size === 0 && nodes.length > 0) roots.add(nodes[0].id);\n\n const queue: Array<{ id: string; level: number }> = [];\n const visited = new Set<string>();\n for (const rootId of roots) queue.push({ id: rootId, level: 0 });\n\n while (queue.length > 0) {\n const next = queue.shift();\n if (!next) continue;\n const { id, level } = next;\n if (visited.has(id)) continue;\n visited.add(id);\n levels.set(id, level);\n\n const children = adj.get(id) ?? [];\n for (const childId of children) {\n if (!visited.has(childId)) queue.push({ id: childId, level: level + 1 });\n }\n }\n\n for (const node of nodes) if (!levels.has(node.id)) levels.set(node.id, 0);\n return levels;\n}\n\nexport interface LayoutOptions {\n direction?: \"horizontal\" | \"vertical\";\n nodeSpacing?: number;\n rankSpacing?: number;\n startX?: number;\n startY?: number;\n nodeWidth?: number;\n nodeHeight?: number;\n}\n\nexport function applyLayout(\n nodes: WorkflowNode[],\n edges: WorkflowEdge[],\n options: LayoutOptions = {},\n): LayoutResult {\n if (nodes.length === 0) return { nodes: [] };\n\n const direction = options.direction ?? \"horizontal\";\n const nodeW = options.nodeWidth ?? NODE_WIDTH;\n const nodeH = options.nodeHeight ?? NODE_HEIGHT;\n const startX = options.startX ?? 50;\n const startY = options.startY ?? 50;\n\n const horizontalSpacing = options.rankSpacing ?? (direction === \"horizontal\" ? 150 : 100);\n const verticalSpacing = options.nodeSpacing ?? (direction === \"horizontal\" ? 80 : 120);\n\n const levels = assignLevels(nodes, edges);\n const nodesByLevel = new Map<number, WorkflowNode[]>();\n for (const node of nodes) {\n const level = levels.get(node.id) ?? 0;\n const group = nodesByLevel.get(level) ?? [];\n group.push(node);\n nodesByLevel.set(level, group);\n }\n\n const laid: WorkflowNode[] = [];\n const sortedLevels = Array.from(nodesByLevel.keys()).sort((a, b) => a - b);\n\n for (const level of sortedLevels) {\n const group = nodesByLevel.get(level) ?? [];\n if (direction === \"horizontal\") {\n const x = startX + level * (nodeW + horizontalSpacing);\n for (let i = 0; i < group.length; i++) {\n const y = startY + i * (nodeH + verticalSpacing);\n laid.push({ ...group[i], position: { x, y } });\n }\n } else {\n const y = startY + level * (nodeH + verticalSpacing);\n for (let i = 0; i < group.length; i++) {\n const x = startX + i * (nodeW + horizontalSpacing);\n laid.push({ ...group[i], position: { x, y } });\n }\n }\n }\n\n return { nodes: laid };\n}\n\nexport function applyHorizontalLayout(\n nodes: WorkflowNode[],\n edges: WorkflowEdge[],\n): LayoutResult {\n return applyLayout(nodes, edges, { direction: \"horizontal\" });\n}\n\nexport function applyVerticalLayout(\n nodes: WorkflowNode[],\n edges: WorkflowEdge[],\n): LayoutResult {\n return applyLayout(nodes, edges, { direction: \"vertical\" });\n}\n","import type { ConfigStatus, WorkflowNode } from \"./types\";\n\n/**\n * Lightweight field schema type the DS uses to compute config status.\n * Consumers map their own schemas (zod, yup, custom) to this shape.\n */\nexport interface FieldConditional {\n action: \"show\" | \"hide\" | \"require\" | \"disable\";\n field: string;\n operator: \"==\" | \"!=\" | \">\" | \"<\" | \">=\" | \"<=\" | \"in\" | \"not_in\" | \"contains\";\n value: unknown;\n}\n\nexport interface FieldSchema {\n key: string;\n required?: boolean;\n defaultValue?: unknown;\n hidden?: boolean;\n conditional?: FieldConditional[];\n}\n\nexport interface ConfigStatusResult {\n status: ConfigStatus;\n requiredTotal: number;\n requiredFilled: number;\n optionalTotal: number;\n optionalFilled: number;\n missingRequired: string[];\n filledOptional: string[];\n}\n\nfunction isFilled(value: unknown): boolean {\n if (value === undefined || value === null) return false;\n if (typeof value === \"string\") return value.trim().length > 0;\n if (typeof value === \"number\" || typeof value === \"boolean\") return true;\n if (Array.isArray(value)) return value.length > 0;\n if (typeof value === \"object\") return Object.keys(value as Record<string, unknown>).length > 0;\n return false;\n}\n\nfunction getNested(config: Record<string, unknown>, keyPath: string): unknown {\n const parts = keyPath.split(\".\");\n let current: unknown = config;\n for (const part of parts) {\n if (current === null || current === undefined || typeof current !== \"object\") return undefined;\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n\nfunction isActive(field: FieldSchema, config: Record<string, unknown>): boolean {\n if (!field.conditional || field.conditional.length === 0) return true;\n return field.conditional.some((cond) => {\n if (cond.action !== \"show\" && cond.action !== \"require\") return false;\n const value = getNested(config, cond.field);\n switch (cond.operator) {\n case \"==\": return value === cond.value;\n case \"!=\": return value !== cond.value;\n case \">\": return (value as number) > (cond.value as number);\n case \"<\": return (value as number) < (cond.value as number);\n case \">=\": return (value as number) >= (cond.value as number);\n case \"<=\": return (value as number) <= (cond.value as number);\n case \"in\": return Array.isArray(cond.value) && (cond.value as unknown[]).includes(value);\n case \"not_in\": return Array.isArray(cond.value) && !(cond.value as unknown[]).includes(value);\n case \"contains\":\n return typeof value === \"string\" && value.includes(cond.value as string);\n default: return false;\n }\n });\n}\n\n/**\n * Compute the config status of a node, given its fields schema.\n * Returns \"hidden\" if no schema is provided — caller can wrap this and\n * apply their own registry lookup.\n */\nexport function getNodeConfigStatus(\n node: WorkflowNode,\n fields: FieldSchema[] | undefined,\n options: { hiddenActionIds?: Set<string> } = {},\n): ConfigStatusResult {\n const hiddenIds = options.hiddenActionIds;\n if (node.actionDefinitionId && hiddenIds?.has(node.actionDefinitionId)) {\n return {\n status: \"hidden\",\n requiredTotal: 0,\n requiredFilled: 0,\n optionalTotal: 0,\n optionalFilled: 0,\n missingRequired: [],\n filledOptional: [],\n };\n }\n\n if (!fields) {\n return {\n status: \"unconfigured\",\n requiredTotal: 0,\n requiredFilled: 0,\n optionalTotal: 0,\n optionalFilled: 0,\n missingRequired: [],\n filledOptional: [],\n };\n }\n\n const config = node.config ?? {};\n const active = fields.filter((f) => !f.hidden && isActive(f, config));\n const required = active.filter((f) => f.required);\n const optional = active.filter((f) => !f.required);\n\n const missingRequired: string[] = [];\n let requiredFilled = 0;\n\n for (const field of required) {\n const value = getNested(config, field.key);\n if (isFilled(value) || isFilled(field.defaultValue)) requiredFilled++;\n else missingRequired.push(field.key);\n }\n\n const filledOptional: string[] = [];\n let optionalFilled = 0;\n\n for (const field of optional) {\n const value = getNested(config, field.key);\n if (isFilled(value)) {\n optionalFilled++;\n filledOptional.push(field.key);\n }\n }\n\n let status: ConfigStatus;\n if (required.length === 0) status = \"valid\";\n else if (missingRequired.length === 0) status = \"valid\";\n else if (requiredFilled > 0 || optionalFilled > 0) status = \"warning\";\n else status = \"error\";\n\n return {\n status,\n requiredTotal: required.length,\n requiredFilled,\n optionalTotal: optional.length,\n optionalFilled,\n missingRequired,\n filledOptional,\n };\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface IconCardProps {\n variant?: \"default\" | \"primary\" | \"success\" | \"warning\" | \"error\";\n icon: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n action?: ReactNode;\n onClick?: () => void;\n className?: string;\n}\n\nexport function IconCard({\n variant = \"default\",\n icon,\n title,\n description,\n action,\n onClick,\n className,\n}: IconCardProps) {\n const interactive = Boolean(onClick);\n return (\n <div\n className={cn(\n \"ods-icon-card\",\n `ods-icon-card--${variant}`,\n interactive && \"ods-icon-card--interactive\",\n className,\n )}\n onClick={onClick}\n role={interactive ? \"button\" : undefined}\n tabIndex={interactive ? 0 : undefined}\n >\n <span className=\"ods-icon-card__icon\" aria-hidden=\"true\">{icon}</span>\n <div className=\"ods-icon-card__body\">\n <div className=\"ods-icon-card__title\">{title}</div>\n {description && <div className=\"ods-icon-card__description\">{description}</div>}\n </div>\n {action && <div className=\"ods-icon-card__action\">{action}</div>}\n </div>\n );\n}\n","\"use client\";\nimport { type InputHTMLAttributes, type ReactNode, useId, useRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n type?: \"text\" | \"email\" | \"password\" | \"search\" | \"number\" | \"tel\" | \"url\";\n size?: \"sm\" | \"md\" | \"lg\";\n error?: boolean;\n errorMessage?: string;\n label?: ReactNode;\n helperText?: ReactNode;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n}\n\nexport function Input({\n type = \"text\",\n size = \"md\",\n error = false,\n errorMessage,\n label,\n helperText,\n leftIcon,\n rightIcon,\n disabled = false,\n id,\n className,\n ...props\n}: InputProps) {\n const ref = useRef<HTMLInputElement>(null);\n const reactId = useId();\n const inputId = id ?? `${reactId}-input`;\n const errorId = `${reactId}-err`;\n const helperId = `${reactId}-help`;\n\n const describedBy =\n error && errorMessage ? errorId : helperText ? helperId : undefined;\n\n return (\n <div\n className={cn(\n \"ods-input\",\n `ods-input--${size}`,\n error && \"ods-input--error\",\n disabled && \"ods-input--disabled\",\n className,\n )}\n >\n {label && (\n <label htmlFor={inputId} className=\"ods-input__label\">\n {label}\n </label>\n )}\n <div className=\"ods-input__wrapper\">\n {leftIcon && (\n <span className=\"ods-input__icon--left\" aria-hidden=\"true\">\n {leftIcon}\n </span>\n )}\n <input\n {...props}\n id={inputId}\n ref={ref}\n type={type}\n disabled={disabled}\n className={cn(\n \"ods-input__field\",\n leftIcon && \"ods-input__field--with-left-icon\",\n rightIcon && \"ods-input__field--with-right-icon\",\n )}\n aria-invalid={error || undefined}\n aria-describedby={describedBy}\n />\n {rightIcon && (\n <span className=\"ods-input__icon--right\" aria-hidden=\"true\">\n {rightIcon}\n </span>\n )}\n </div>\n {error && errorMessage && (\n <div id={errorId} className=\"ods-input__error-message\" role=\"alert\">\n {errorMessage}\n </div>\n )}\n {!error && helperText && (\n <div id={helperId} className=\"ods-input__helper\">\n {helperText}\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface KbdProps {\n size?: \"sm\" | \"md\";\n children: ReactNode;\n className?: string;\n}\n\nexport function Kbd({ size = \"md\", children, className }: KbdProps) {\n return (\n <kbd className={cn(\"ods-kbd\", `ods-kbd--${size}`, className)}>\n {children}\n </kbd>\n );\n}\n\nexport interface KbdGroupProps {\n size?: \"sm\" | \"md\";\n separator?: ReactNode;\n keys: ReactNode[];\n className?: string;\n}\n\nexport function KbdGroup({ size = \"md\", separator = \"+\", keys, className }: KbdGroupProps) {\n return (\n <span className={cn(\"ods-kbd-group\", className)}>\n {keys.map((k, i) => (\n <span key={i} className=\"ods-kbd-group__item\">\n <Kbd size={size}>{k}</Kbd>\n {i < keys.length - 1 && (\n <span className=\"ods-kbd-group__sep\" aria-hidden=\"true\">{separator}</span>\n )}\n </span>\n ))}\n </span>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface LinePoint {\n x: number | string;\n y: number;\n}\n\nexport interface LineChartProps {\n data: LinePoint[];\n height?: number;\n stroke?: string;\n fill?: string; // area fill under line\n title?: ReactNode;\n total?: ReactNode;\n smooth?: boolean;\n className?: string;\n}\n\nfunction buildPath(points: [number, number][], smooth: boolean): string {\n if (points.length === 0) return \"\";\n if (!smooth) {\n return points.map(([x, y], i) => `${i === 0 ? \"M\" : \"L\"}${x},${y}`).join(\" \");\n }\n // Simple Catmull-Rom → Bezier smoothing\n let d = `M${points[0][0]},${points[0][1]}`;\n for (let i = 0; i < points.length - 1; i++) {\n const [x0, y0] = points[Math.max(0, i - 1)];\n const [x1, y1] = points[i];\n const [x2, y2] = points[i + 1];\n const [x3, y3] = points[Math.min(points.length - 1, i + 2)];\n const cp1x = x1 + (x2 - x0) / 6;\n const cp1y = y1 + (y2 - y0) / 6;\n const cp2x = x2 - (x3 - x1) / 6;\n const cp2y = y2 - (y3 - y1) / 6;\n d += ` C${cp1x},${cp1y} ${cp2x},${cp2y} ${x2},${y2}`;\n }\n return d;\n}\n\nexport function LineChart({\n data,\n height = 120,\n stroke = \"#6c5ce7\",\n fill,\n title,\n total,\n smooth = true,\n className,\n}: LineChartProps) {\n const W = 360;\n const H = 100;\n const pad = 6;\n const ys = data.map((d) => d.y);\n const min = Math.min(...ys);\n const max = Math.max(...ys);\n const range = Math.max(1, max - min);\n const stepX = (W - pad * 2) / Math.max(1, data.length - 1);\n\n const pts: [number, number][] = data.map((d, i) => [\n pad + i * stepX,\n pad + (1 - (d.y - min) / range) * (H - pad * 2),\n ]);\n\n const path = buildPath(pts, smooth);\n const areaPath = fill && pts.length\n ? `${path} L${pts[pts.length - 1][0]},${H - pad} L${pts[0][0]},${H - pad} Z`\n : null;\n\n return (\n <div className={cn(\"ods-line-chart\", className)}>\n {(title || total) && (\n <div className=\"ods-line-chart__head\">\n {title && <div className=\"ods-line-chart__title\">{title}</div>}\n {total && <div className=\"ods-line-chart__total\">{total}</div>}\n </div>\n )}\n <svg className=\"ods-line-chart__svg\" viewBox={`0 0 ${W} ${H}`} preserveAspectRatio=\"none\" style={{ height }}>\n {areaPath && <path d={areaPath} fill={fill} />}\n <path d={path} fill=\"none\" stroke={stroke} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </div>\n );\n}\n","\"use client\";\nimport type { AnchorHTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface LinkButtonProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n variant?: \"primary\" | \"neutral\" | \"danger\";\n size?: \"sm\" | \"md\" | \"lg\";\n underline?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n children: ReactNode;\n}\n\nexport function LinkButton({\n variant = \"primary\",\n size = \"md\",\n underline = false,\n leftIcon,\n rightIcon,\n className,\n children,\n ...props\n}: LinkButtonProps) {\n return (\n <a\n {...props}\n className={cn(\n \"ods-link-btn\",\n `ods-link-btn--${variant}`,\n `ods-link-btn--${size}`,\n underline && \"ods-link-btn--underline\",\n className,\n )}\n >\n {leftIcon && <span className=\"ods-link-btn__icon ods-link-btn__icon--left\" aria-hidden=\"true\">{leftIcon}</span>}\n <span className=\"ods-link-btn__label\">{children}</span>\n {rightIcon && <span className=\"ods-link-btn__icon ods-link-btn__icon--right\" aria-hidden=\"true\">{rightIcon}</span>}\n </a>\n );\n}\n","\"use client\";\nimport { type ChangeEvent, type ReactNode, useCallback } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface NumberInputProps {\n label?: ReactNode;\n value: number;\n onChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n prefix?: ReactNode;\n suffix?: ReactNode;\n size?: \"sm\" | \"md\" | \"lg\";\n disabled?: boolean;\n error?: ReactNode;\n helperText?: ReactNode;\n placeholder?: string;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport function NumberInput({\n label,\n value,\n onChange,\n min,\n max,\n step = 1,\n prefix,\n suffix,\n size = \"md\",\n disabled = false,\n error,\n helperText,\n placeholder,\n className,\n ...props\n}: NumberInputProps) {\n const clamp = useCallback(\n (v: number) => {\n if (typeof min === \"number\") v = Math.max(min, v);\n if (typeof max === \"number\") v = Math.min(max, v);\n return v;\n },\n [min, max],\n );\n\n const dec = () => !disabled && onChange?.(clamp(value - step));\n const inc = () => !disabled && onChange?.(clamp(value + step));\n const handleInput = (e: ChangeEvent<HTMLInputElement>) => {\n const num = Number(e.target.value);\n if (!Number.isNaN(num)) onChange?.(clamp(num));\n };\n\n return (\n <div className={cn(\"ods-num\", `ods-num--${size}`, disabled && \"ods-num--disabled\", error && \"ods-num--error\", className)}>\n {label && <label className=\"ods-num__label\">{label}</label>}\n <div className=\"ods-num__field\">\n <button\n type=\"button\"\n className=\"ods-num__step ods-num__step--dec\"\n onClick={dec}\n disabled={disabled || (typeof min === \"number\" && value <= min)}\n aria-label=\"Decrease\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M3 7h8\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" />\n </svg>\n </button>\n {prefix && <span className=\"ods-num__prefix\">{prefix}</span>}\n <input\n type=\"number\"\n className=\"ods-num__input\"\n value={Number.isFinite(value) ? value : \"\"}\n onChange={handleInput}\n disabled={disabled}\n min={min}\n max={max}\n step={step}\n placeholder={placeholder}\n aria-label={props[\"aria-label\"]}\n />\n {suffix && <span className=\"ods-num__suffix\">{suffix}</span>}\n <button\n type=\"button\"\n className=\"ods-num__step ods-num__step--inc\"\n onClick={inc}\n disabled={disabled || (typeof max === \"number\" && value >= max)}\n aria-label=\"Increase\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M7 3v8M3 7h8\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n {error ? <div className=\"ods-num__hint ods-num__hint--error\">{error}</div>\n : helperText ? <div className=\"ods-num__hint\">{helperText}</div>\n : null}\n </div>\n );\n}\n","\"use client\";\nimport {\n type ClipboardEvent,\n type KeyboardEvent,\n type ReactNode,\n useCallback,\n useRef,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface OTPInputProps {\n label?: ReactNode;\n length?: number;\n value: string;\n onChange?: (value: string) => void;\n onComplete?: (value: string) => void;\n disabled?: boolean;\n error?: ReactNode;\n type?: \"numeric\" | \"alphanumeric\";\n mask?: boolean;\n autoFocus?: boolean;\n className?: string;\n}\n\nexport function OTPInput({\n label,\n length = 6,\n value,\n onChange,\n onComplete,\n disabled = false,\n error,\n type = \"numeric\",\n mask = false,\n autoFocus = false,\n className,\n}: OTPInputProps) {\n const refs = useRef<(HTMLInputElement | null)[]>([]);\n const pattern = type === \"numeric\" ? /[^0-9]/g : /[^a-zA-Z0-9]/g;\n\n const setCharAt = useCallback(\n (idx: number, ch: string) => {\n const cleaned = ch.replace(pattern, \"\").slice(0, 1);\n const chars = value.split(\"\");\n while (chars.length < length) chars.push(\"\");\n chars[idx] = cleaned;\n const next = chars.join(\"\").slice(0, length);\n onChange?.(next);\n if (cleaned && idx < length - 1) refs.current[idx + 1]?.focus();\n if (next.length === length && !next.includes(\"\")) onComplete?.(next);\n },\n [value, length, onChange, onComplete, pattern],\n );\n\n const handleKeyDown = (idx: number) => (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Backspace\" && !value[idx] && idx > 0) {\n refs.current[idx - 1]?.focus();\n }\n if (e.key === \"ArrowLeft\" && idx > 0) refs.current[idx - 1]?.focus();\n if (e.key === \"ArrowRight\" && idx < length - 1) refs.current[idx + 1]?.focus();\n };\n\n const handlePaste = (e: ClipboardEvent<HTMLInputElement>) => {\n e.preventDefault();\n const paste = e.clipboardData.getData(\"text\").replace(pattern, \"\").slice(0, length);\n onChange?.(paste);\n if (paste.length === length) onComplete?.(paste);\n refs.current[Math.min(paste.length, length - 1)]?.focus();\n };\n\n return (\n <div className={cn(\"ods-otp\", disabled && \"ods-otp--disabled\", error && \"ods-otp--error\", className)}>\n {label && <label className=\"ods-otp__label\">{label}</label>}\n <div className=\"ods-otp__row\" role=\"group\" aria-label={typeof label === \"string\" ? label : \"One-time passcode\"}>\n {Array.from({ length }).map((_, i) => {\n const ch = value[i] ?? \"\";\n return (\n <input\n key={i}\n ref={(el) => {\n refs.current[i] = el;\n }}\n type={mask ? \"password\" : \"text\"}\n inputMode={type === \"numeric\" ? \"numeric\" : \"text\"}\n maxLength={1}\n value={ch}\n disabled={disabled}\n autoFocus={autoFocus && i === 0}\n onChange={(e) => setCharAt(i, e.target.value)}\n onKeyDown={handleKeyDown(i)}\n onPaste={handlePaste}\n className={cn(\"ods-otp__cell\", ch && \"ods-otp__cell--filled\")}\n aria-label={`Digit ${i + 1} of ${length}`}\n />\n );\n })}\n </div>\n {error && <div className=\"ods-otp__hint\">{error}</div>}\n </div>\n );\n}\n","\"use client\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport {\n type KeyboardEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface MultiSelectOption {\n value: string;\n label: string;\n icon?: ReactNode;\n description?: string;\n}\n\nexport interface MultiSelectProps {\n options: MultiSelectOption[];\n value?: string[];\n defaultValue?: string[];\n onChange?: (values: string[]) => void;\n placeholder?: string;\n searchPlaceholder?: string;\n label?: string;\n error?: boolean;\n errorMessage?: string;\n disabled?: boolean;\n size?: \"sm\" | \"md\";\n /** Force searchable on/off. Auto: enabled when options.length > 6. */\n searchable?: boolean;\n /** Hard cap on visible chips. Overrides auto-measurement. */\n maxVisibleTags?: number;\n /** Maximum number of selectable options. */\n maxTags?: number;\n className?: string;\n}\n\nconst RESERVED_TAIL_PX = 64; // reserved for the \"Add more…\" hint + clear button\nconst TAGS_GAP = 6;\n\nexport function MultiSelect({\n options,\n value: controlledValue,\n defaultValue,\n onChange,\n placeholder = \"Select options…\",\n searchPlaceholder = \"Search options…\",\n label,\n error = false,\n errorMessage,\n disabled = false,\n size = \"md\",\n searchable,\n maxVisibleTags,\n maxTags,\n className,\n}: MultiSelectProps) {\n // ── State ──────────────────────────────────────\n const [internalValue, setInternalValue] = useState<string[]>(defaultValue ?? []);\n const selectedValues = controlledValue ?? internalValue;\n\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [activeIdx, setActiveIdx] = useState(0);\n const [dropdownPos, setDropdownPos] = useState({ top: 0, left: 0, width: 0 });\n\n // ── Refs ───────────────────────────────────────\n const wrapRef = useRef<HTMLDivElement>(null);\n const tagsRowRef = useRef<HTMLDivElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const chipRefs = useRef<(HTMLSpanElement | null)[]>([]);\n\n // ── Helpers ────────────────────────────────────\n const commit = useCallback(\n (next: string[]) => {\n if (controlledValue === undefined) setInternalValue(next);\n onChange?.(next);\n },\n [controlledValue, onChange],\n );\n\n const availableOptions = useMemo(() => {\n const selected = new Set(selectedValues);\n const unselected = options.filter((o) => !selected.has(o.value));\n if (!query.trim()) return unselected;\n const q = query.trim().toLowerCase();\n return unselected.filter(\n (o) =>\n o.label.toLowerCase().includes(q) ||\n o.value.toLowerCase().includes(q) ||\n o.description?.toLowerCase().includes(q),\n );\n }, [options, selectedValues, query]);\n\n const showSearch = searchable ?? options.length > 6;\n const getLabel = (v: string) => options.find((o) => o.value === v)?.label ?? v;\n const getIcon = (v: string) => options.find((o) => o.value === v)?.icon;\n\n // ── Position dropdown ──────────────────────────\n const updatePosition = useCallback(() => {\n if (!wrapRef.current) return;\n const rect = wrapRef.current.getBoundingClientRect();\n setDropdownPos({ top: rect.bottom + 4, left: rect.left, width: rect.width });\n }, []);\n\n useEffect(() => {\n if (!open) return;\n updatePosition();\n window.addEventListener(\"scroll\", updatePosition, true);\n window.addEventListener(\"resize\", updatePosition);\n return () => {\n window.removeEventListener(\"scroll\", updatePosition, true);\n window.removeEventListener(\"resize\", updatePosition);\n };\n }, [open, updatePosition]);\n\n // Close on outside click\n useEffect(() => {\n if (!open) return;\n const onDoc = (e: MouseEvent) => {\n const t = e.target as Node;\n if (\n !wrapRef.current?.contains(t) &&\n !dropdownRef.current?.contains(t)\n ) {\n setOpen(false);\n setQuery(\"\");\n }\n };\n document.addEventListener(\"mousedown\", onDoc);\n return () => document.removeEventListener(\"mousedown\", onDoc);\n }, [open]);\n\n // Focus the search when opened\n useEffect(() => {\n if (open && showSearch) {\n requestAnimationFrame(() => searchRef.current?.focus());\n }\n }, [open, showSearch]);\n\n // Reset highlight when filter changes\n useEffect(() => setActiveIdx(0), [query, open]);\n\n // ── Chip overflow measurement ──────────────────\n // Renders all chips first (hidden), then measures widths and decides how many fit.\n // Re-measures on selected-list change and on wrapper resize.\n const [fitCount, setFitCount] = useState(selectedValues.length);\n const [tick, setTick] = useState(0);\n\n useLayoutEffect(() => {\n if (maxVisibleTags !== undefined) {\n setFitCount(Math.min(selectedValues.length, maxVisibleTags));\n return;\n }\n const row = tagsRowRef.current;\n if (!row) return;\n const rowRect = row.getBoundingClientRect();\n const available = Math.max(0, rowRect.width - RESERVED_TAIL_PX);\n // If we can't measure (zero-width container e.g. jsdom), show everything.\n if (available <= 0) {\n setFitCount(selectedValues.length);\n return;\n }\n let sum = 0;\n let count = 0;\n for (let i = 0; i < chipRefs.current.length; i++) {\n const chip = chipRefs.current[i];\n if (!chip) break;\n const w = chip.getBoundingClientRect().width;\n sum += w + TAGS_GAP;\n if (sum > available) break;\n count++;\n }\n if (count < selectedValues.length && count > 0) count = Math.max(1, count - 1);\n setFitCount(count);\n }, [tick, selectedValues, maxVisibleTags]);\n\n // ResizeObserver isn't available in non-browser envs (jsdom tests).\n useEffect(() => {\n if (typeof ResizeObserver === \"undefined\") return;\n const row = tagsRowRef.current;\n if (!row) return;\n const ro = new ResizeObserver(() => setTick((t) => t + 1));\n ro.observe(row);\n return () => ro.disconnect();\n }, []);\n\n // ── Actions ────────────────────────────────────\n const addValue = useCallback(\n (val: string) => {\n if (maxTags && selectedValues.length >= maxTags) return;\n commit([...selectedValues, val]);\n setQuery(\"\");\n setActiveIdx(0);\n searchRef.current?.focus();\n },\n [selectedValues, maxTags, commit],\n );\n\n const removeValue = useCallback(\n (val: string) => {\n commit(selectedValues.filter((v) => v !== val));\n },\n [selectedValues, commit],\n );\n\n const clearAll = useCallback(() => {\n commit([]);\n setQuery(\"\");\n }, [commit]);\n\n // ── Keyboard ───────────────────────────────────\n const handleSearchKey = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Escape\") {\n setOpen(false);\n setQuery(\"\");\n return;\n }\n if (e.key === \"Backspace\" && !query && selectedValues.length > 0) {\n removeValue(selectedValues[selectedValues.length - 1]);\n return;\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setActiveIdx((i) => Math.min(availableOptions.length - 1, i + 1));\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setActiveIdx((i) => Math.max(0, i - 1));\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n const opt = availableOptions[activeIdx];\n if (opt) addValue(opt.value);\n } else if (e.key === \"Home\") {\n e.preventDefault();\n setActiveIdx(0);\n } else if (e.key === \"End\") {\n e.preventDefault();\n setActiveIdx(availableOptions.length - 1);\n }\n },\n [query, selectedValues, availableOptions, activeIdx, addValue, removeValue],\n );\n\n // ── Render ─────────────────────────────────────\n const visibleChips = selectedValues.slice(0, fitCount);\n const overflow = selectedValues.length - visibleChips.length;\n\n return (\n <div\n className={cn(\n \"ods-multiselect\",\n `ods-multiselect--${size}`,\n error && \"ods-multiselect--error\",\n disabled && \"ods-multiselect--disabled\",\n className,\n )}\n >\n {label && <label className=\"ods-multiselect__label\">{label}</label>}\n\n <div\n ref={wrapRef}\n className={cn(\n \"ods-multiselect__input-wrap\",\n open && \"ods-multiselect__input-wrap--open\",\n )}\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-disabled={disabled}\n onClick={() => !disabled && setOpen(true)}\n >\n <div ref={tagsRowRef} className=\"ods-multiselect__tags\">\n {/* Hidden measurement copies: render ALL chips to measure width, then visibly render only the first N */}\n <div className=\"ods-multiselect__measure\" aria-hidden=\"true\">\n {selectedValues.map((val, i) => (\n <span\n key={val}\n ref={(el) => { chipRefs.current[i] = el; }}\n className=\"ods-multiselect__tag\"\n >\n {getIcon(val) && <span className=\"ods-multiselect__tag-icon\">{getIcon(val)}</span>}\n <span>{getLabel(val)}</span>\n <span className=\"ods-multiselect__tag-remove-spacer\" aria-hidden=\"true\" />\n </span>\n ))}\n </div>\n\n {/* Actually displayed chips */}\n {visibleChips.map((val) => (\n <span key={val} className=\"ods-multiselect__tag\">\n {getIcon(val) && <span className=\"ods-multiselect__tag-icon\">{getIcon(val)}</span>}\n <span>{getLabel(val)}</span>\n <button\n type=\"button\"\n className=\"ods-multiselect__tag-remove\"\n onClick={(e) => { e.stopPropagation(); removeValue(val); }}\n aria-label={`Remove ${getLabel(val)}`}\n tabIndex={-1}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M3 3L9 9M9 3L3 9\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </span>\n ))}\n\n {overflow > 0 && (\n <span\n className=\"ods-multiselect__tag ods-multiselect__tag--overflow\"\n title={selectedValues.slice(fitCount).map(getLabel).join(\", \")}\n >\n +{overflow}\n </span>\n )}\n\n {selectedValues.length === 0 && (\n <span className=\"ods-multiselect__placeholder\">{placeholder}</span>\n )}\n </div>\n\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n className={cn(\"ods-multiselect__chevron\", open && \"ods-multiselect__chevron--open\")}\n >\n <path d=\"M4 6l4 4 4-4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n\n {selectedValues.length > 0 && !disabled && (\n <button\n type=\"button\"\n className=\"ods-multiselect__clear\"\n onClick={(e) => { e.stopPropagation(); clearAll(); }}\n aria-label=\"Clear all\"\n tabIndex={-1}\n >\n Clear\n </button>\n )}\n </div>\n\n {typeof document !== \"undefined\" &&\n createPortal(\n <AnimatePresence>\n {open && (\n <motion.div\n ref={dropdownRef}\n className=\"ods-multiselect__dropdown\"\n style={{\n position: \"fixed\",\n top: dropdownPos.top,\n left: dropdownPos.left,\n width: dropdownPos.width,\n }}\n initial={{ opacity: 0, y: -4 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -4 }}\n transition={{ duration: 0.15, ease: \"easeOut\" }}\n role=\"listbox\"\n aria-label={label || \"Options\"}\n >\n {showSearch && (\n <div className=\"ods-multiselect__search\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"6\" cy=\"6\" r=\"4.5\" stroke=\"currentColor\" strokeWidth=\"1.4\" />\n <path d=\"m12 12-2.5-2.5\" stroke=\"currentColor\" strokeWidth=\"1.4\" strokeLinecap=\"round\" />\n </svg>\n <input\n ref={searchRef}\n className=\"ods-multiselect__search-input\"\n type=\"text\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onKeyDown={handleSearchKey}\n placeholder={searchPlaceholder}\n aria-label=\"Search options\"\n autoComplete=\"off\"\n />\n </div>\n )}\n <div className=\"ods-multiselect__list\">\n {availableOptions.length > 0 ? (\n availableOptions.map((opt, idx) => (\n <div\n key={opt.value}\n className={cn(\n \"ods-multiselect__option\",\n idx === activeIdx && \"ods-multiselect__option--highlighted\",\n )}\n role=\"option\"\n aria-selected={false}\n onClick={() => addValue(opt.value)}\n onMouseEnter={() => setActiveIdx(idx)}\n >\n {opt.icon && <span className=\"ods-multiselect__option-icon\">{opt.icon}</span>}\n <span className=\"ods-multiselect__option-text\">\n <span>{opt.label}</span>\n {opt.description && (\n <span className=\"ods-multiselect__option-desc\">{opt.description}</span>\n )}\n </span>\n </div>\n ))\n ) : (\n <div className=\"ods-multiselect__empty\">No results</div>\n )}\n </div>\n </motion.div>\n )}\n </AnimatePresence>,\n document.body,\n )}\n\n {error && errorMessage && (\n <span className=\"ods-multiselect__error\">{errorMessage}</span>\n )}\n </div>\n );\n}\n","\"use client\";\nimport {\n type ChangeEvent,\n type InputHTMLAttributes,\n type ReactNode,\n useState,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\n\ntype NativeProps = Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\" | \"value\" | \"onChange\">;\n\nexport interface PasswordInputProps extends NativeProps {\n label?: ReactNode;\n value: string;\n onChange?: (value: string) => void;\n size?: \"sm\" | \"md\" | \"lg\";\n error?: ReactNode;\n helperText?: ReactNode;\n strength?: 0 | 1 | 2 | 3 | 4;\n showToggle?: boolean;\n leftIcon?: ReactNode;\n className?: string;\n}\n\nconst strengthLabels = [\"Very weak\", \"Weak\", \"Fair\", \"Strong\", \"Very strong\"] as const;\n\nexport function PasswordInput({\n label,\n value,\n onChange,\n size = \"md\",\n error,\n helperText,\n strength,\n showToggle = true,\n leftIcon,\n disabled,\n className,\n ...rest\n}: PasswordInputProps) {\n const [shown, setShown] = useState(false);\n const handle = (e: ChangeEvent<HTMLInputElement>) => onChange?.(e.target.value);\n\n return (\n <div className={cn(\"ods-pwd\", `ods-pwd--${size}`, disabled && \"ods-pwd--disabled\", error && \"ods-pwd--error\", className)}>\n {label && <label className=\"ods-pwd__label\">{label}</label>}\n <div className=\"ods-pwd__field\">\n {leftIcon && <span className=\"ods-pwd__icon\" aria-hidden=\"true\">{leftIcon}</span>}\n <input\n {...rest}\n type={shown ? \"text\" : \"password\"}\n value={value}\n onChange={handle}\n disabled={disabled}\n className=\"ods-pwd__input\"\n />\n {showToggle && (\n <button\n type=\"button\"\n className=\"ods-pwd__toggle\"\n onClick={() => setShown((s) => !s)}\n aria-label={shown ? \"Hide password\" : \"Show password\"}\n disabled={disabled}\n >\n {shown ? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M2 8c1.5-2.6 3.6-4 6-4s4.5 1.4 6 4c-1.5 2.6-3.6 4-6 4s-4.5-1.4-6-4z\" stroke=\"currentColor\" strokeWidth=\"1.3\" />\n <circle cx=\"8\" cy=\"8\" r=\"1.8\" stroke=\"currentColor\" strokeWidth=\"1.3\" />\n <path d=\"M2 2l12 12\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinecap=\"round\" />\n </svg>\n ) : (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M2 8c1.5-2.6 3.6-4 6-4s4.5 1.4 6 4c-1.5 2.6-3.6 4-6 4s-4.5-1.4-6-4z\" stroke=\"currentColor\" strokeWidth=\"1.3\" />\n <circle cx=\"8\" cy=\"8\" r=\"2\" stroke=\"currentColor\" strokeWidth=\"1.3\" />\n </svg>\n )}\n </button>\n )}\n </div>\n {typeof strength === \"number\" && (\n <div className=\"ods-pwd__strength\" data-level={strength}>\n <span className=\"ods-pwd__meter\">\n <span className={cn(\"ods-pwd__bar\", `ods-pwd__bar--${strength}`)} />\n </span>\n <span className=\"ods-pwd__strength-label\">{strengthLabels[strength]}</span>\n </div>\n )}\n {error ? <div className=\"ods-pwd__hint ods-pwd__hint--error\">{error}</div>\n : helperText ? <div className=\"ods-pwd__hint\">{helperText}</div>\n : null}\n </div>\n );\n}\n","\"use client\";\nimport { type ChangeEvent, type ReactNode, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface CountryOption {\n code: string; // ISO-3166-1 alpha-2 (US, GB, IN, ...)\n name: string;\n dialCode: string; // \"+1\", \"+44\", \"+91\"\n flag?: string; // Emoji flag\n}\n\nexport interface PhoneInputProps {\n label?: ReactNode;\n value: string; // local number (without dial code)\n countryCode: string; // current selected country code (e.g. \"US\")\n onChange?: (value: string) => void;\n onCountryChange?: (code: string) => void;\n countries?: CountryOption[];\n placeholder?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n disabled?: boolean;\n error?: ReactNode;\n helperText?: ReactNode;\n className?: string;\n}\n\nconst DEFAULT_COUNTRIES: CountryOption[] = [\n { code: \"US\", name: \"United States\", dialCode: \"+1\", flag: \"🇺🇸\" },\n { code: \"GB\", name: \"United Kingdom\", dialCode: \"+44\", flag: \"🇬🇧\" },\n { code: \"IN\", name: \"India\", dialCode: \"+91\", flag: \"🇮🇳\" },\n { code: \"DE\", name: \"Germany\", dialCode: \"+49\", flag: \"🇩🇪\" },\n { code: \"FR\", name: \"France\", dialCode: \"+33\", flag: \"🇫🇷\" },\n { code: \"JP\", name: \"Japan\", dialCode: \"+81\", flag: \"🇯🇵\" },\n { code: \"AU\", name: \"Australia\", dialCode: \"+61\", flag: \"🇦🇺\" },\n { code: \"BR\", name: \"Brazil\", dialCode: \"+55\", flag: \"🇧🇷\" },\n];\n\nexport function PhoneInput({\n label,\n value,\n countryCode,\n onChange,\n onCountryChange,\n countries = DEFAULT_COUNTRIES,\n placeholder = \"(555) 123-4567\",\n size = \"md\",\n disabled = false,\n error,\n helperText,\n className,\n}: PhoneInputProps) {\n const [open, setOpen] = useState(false);\n const country = countries.find((c) => c.code === countryCode) ?? countries[0];\n\n const onInput = (e: ChangeEvent<HTMLInputElement>) => onChange?.(e.target.value);\n\n return (\n <div\n className={cn(\n \"ods-phone\",\n `ods-phone--${size}`,\n disabled && \"ods-phone--disabled\",\n error && \"ods-phone--error\",\n className,\n )}\n >\n {label && <label className=\"ods-phone__label\">{label}</label>}\n <div className=\"ods-phone__field\">\n <button\n type=\"button\"\n className=\"ods-phone__country\"\n onClick={() => !disabled && setOpen((o) => !o)}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n >\n <span className=\"ods-phone__flag\" aria-hidden=\"true\">{country.flag}</span>\n <span className=\"ods-phone__dial\">{country.dialCode}</span>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M3 4.5L6 7.5L9 4.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n <input\n type=\"tel\"\n className=\"ods-phone__input\"\n value={value}\n onChange={onInput}\n disabled={disabled}\n placeholder={placeholder}\n aria-label={typeof label === \"string\" ? `${label} number` : \"Phone number\"}\n />\n {open && (\n <ul className=\"ods-phone__menu\" role=\"listbox\" aria-label=\"Country\">\n {countries.map((c) => (\n <li key={c.code}>\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={c.code === countryCode}\n className={cn(\n \"ods-phone__menu-item\",\n c.code === countryCode && \"ods-phone__menu-item--active\",\n )}\n onClick={() => {\n onCountryChange?.(c.code);\n setOpen(false);\n }}\n >\n <span className=\"ods-phone__flag\" aria-hidden=\"true\">{c.flag}</span>\n <span className=\"ods-phone__menu-name\">{c.name}</span>\n <span className=\"ods-phone__menu-dial\">{c.dialCode}</span>\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n {error ? <div className=\"ods-phone__hint ods-phone__hint--error\">{error}</div>\n : helperText ? <div className=\"ods-phone__hint\">{helperText}</div>\n : null}\n </div>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface QuoteProps {\n variant?: \"default\" | \"muted\" | \"primary\";\n author?: ReactNode;\n attribution?: ReactNode;\n size?: \"sm\" | \"md\" | \"lg\";\n children: ReactNode;\n className?: string;\n}\n\nexport function Quote({\n variant = \"default\",\n author,\n attribution,\n size = \"md\",\n children,\n className,\n}: QuoteProps) {\n return (\n <blockquote\n className={cn(\n \"ods-quote\",\n `ods-quote--${variant}`,\n `ods-quote--${size}`,\n className,\n )}\n >\n <span className=\"ods-quote__mark\" aria-hidden=\"true\">\"</span>\n <p className=\"ods-quote__text\">{children}</p>\n {(author || attribution) && (\n <footer className=\"ods-quote__footer\">\n {author && <cite className=\"ods-quote__author\">{author}</cite>}\n {attribution && <span className=\"ods-quote__attribution\">{attribution}</span>}\n </footer>\n )}\n </blockquote>\n );\n}\n","\"use client\";\nimport { useRef } from \"react\";\nimport { useRadio } from \"react-aria\";\nimport { cn } from \"../../utils/cn\";\nimport { useRadioGroupContext } from \"./RadioGroup\";\n\nexport interface RadioProps {\n value: string;\n label?: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport function Radio({ value, label, disabled = false, className }: RadioProps) {\n const state = useRadioGroupContext();\n const ref = useRef<HTMLInputElement>(null);\n\n const { inputProps } = useRadio(\n {\n value,\n isDisabled: disabled,\n \"aria-label\": label,\n },\n state,\n ref,\n );\n\n const isSelected = state.selectedValue === value;\n\n return (\n <label\n className={cn(\n 'ods-radio',\n isSelected && 'ods-radio--selected',\n disabled && 'ods-radio--disabled',\n className,\n )}\n >\n <input {...inputProps} ref={ref} className={'ods-radio__input'} />\n <div className={'ods-radio__circle'} aria-hidden=\"true\">\n <div\n className={cn('ods-radio__dot', isSelected && 'ods-radio__dot--visible')}\n />\n </div>\n {label && <span className={'ods-radio__label'}>{label}</span>}\n </label>\n );\n}\n","\"use client\";\nimport { createContext, type ReactNode, useContext, useRef } from \"react\";\nimport { useRadioGroup } from \"react-aria\";\nimport { type RadioGroupState, useRadioGroupState } from \"react-stately\";\nimport { cn } from \"../../utils/cn\";\n\nexport const RadioGroupContext = createContext<RadioGroupState | null>(null);\n\nexport function useRadioGroupContext() {\n const context = useContext(RadioGroupContext);\n if (!context) {\n throw new Error(\"Radio must be used within a RadioGroup\");\n }\n return context;\n}\n\nexport interface RadioGroupProps {\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n label?: string | ReactNode;\n orientation?: \"horizontal\" | \"vertical\";\n disabled?: boolean;\n children: ReactNode;\n className?: string;\n}\n\nexport function RadioGroup({\n value,\n defaultValue,\n onChange,\n label,\n orientation = \"vertical\",\n disabled = false,\n children,\n className,\n}: RadioGroupProps) {\n const ariaProps = {\n label: typeof label === \"string\" ? label : \"radio group\",\n value,\n defaultValue,\n onChange,\n isDisabled: disabled,\n orientation,\n };\n\n const state = useRadioGroupState(ariaProps);\n const ref = useRef<HTMLDivElement>(null);\n const { radioGroupProps, labelProps } = useRadioGroup(ariaProps, state);\n\n return (\n <div\n {...radioGroupProps}\n ref={ref}\n className={cn(\n 'ods-radio-group',\n `ods-radio-group--${orientation}`,\n disabled && 'ods-radio-group--disabled',\n className,\n )}\n >\n {label && (\n <span {...labelProps} className={'ods-radio-group__label'}>\n {label}\n </span>\n )}\n <RadioGroupContext.Provider value={state}>\n <div className={'ods-radio-group__items'}>{children}</div>\n </RadioGroupContext.Provider>\n </div>\n );\n}\n","\"use client\";\nimport { type ChangeEvent, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface RangeSliderProps {\n label?: ReactNode;\n value: [number, number];\n onChange?: (value: [number, number]) => void;\n min?: number;\n max?: number;\n step?: number;\n formatValue?: (value: number) => ReactNode;\n showValue?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n disabled?: boolean;\n className?: string;\n}\n\nexport function RangeSlider({\n label,\n value,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n formatValue,\n showValue = true,\n size = \"md\",\n disabled = false,\n className,\n}: RangeSliderProps) {\n const [lo, hi] = value;\n const fmt = (v: number) => (formatValue ? formatValue(v) : `${v}`);\n const span = max - min || 1;\n const loPct = ((lo - min) / span) * 100;\n const hiPct = ((hi - min) / span) * 100;\n\n const setLo = (e: ChangeEvent<HTMLInputElement>) => {\n const next = Math.min(Number(e.target.value), hi);\n onChange?.([next, hi]);\n };\n const setHi = (e: ChangeEvent<HTMLInputElement>) => {\n const next = Math.max(Number(e.target.value), lo);\n onChange?.([lo, next]);\n };\n\n return (\n <div\n className={cn(\n \"ods-range-slider\",\n `ods-range-slider--${size}`,\n disabled && \"ods-range-slider--disabled\",\n className,\n )}\n >\n {(label || showValue) && (\n <div className=\"ods-range-slider__head\">\n {label && <span className=\"ods-range-slider__label\">{label}</span>}\n {showValue && (\n <span className=\"ods-range-slider__value\">\n {fmt(lo)} – {fmt(hi)}\n </span>\n )}\n </div>\n )}\n <div className=\"ods-range-slider__track\">\n <span\n className=\"ods-range-slider__fill\"\n style={{ left: `${loPct}%`, right: `${100 - hiPct}%` }}\n />\n <input\n type=\"range\"\n className=\"ods-range-slider__input ods-range-slider__input--lo\"\n min={min}\n max={max}\n step={step}\n value={lo}\n onChange={setLo}\n disabled={disabled}\n aria-label=\"Minimum\"\n />\n <input\n type=\"range\"\n className=\"ods-range-slider__input ods-range-slider__input--hi\"\n min={min}\n max={max}\n step={step}\n value={hi}\n onChange={setHi}\n disabled={disabled}\n aria-label=\"Maximum\"\n />\n </div>\n </div>\n );\n}\n","\"use client\";\nimport { type ReactNode, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface RatingProps {\n value: number;\n onChange?: (value: number) => void;\n max?: number;\n size?: \"sm\" | \"md\" | \"lg\";\n allowHalf?: boolean;\n readOnly?: boolean;\n disabled?: boolean;\n showLabel?: boolean;\n label?: ReactNode;\n icon?: \"star\" | \"heart\";\n className?: string;\n}\n\nfunction StarIcon({ fill }: { fill: number }) {\n const pathId = `r-${Math.random().toString(36).slice(2)}`;\n return (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\" aria-hidden=\"true\">\n <defs>\n <linearGradient id={pathId} x1=\"0\" x2=\"1\" y1=\"0\" y2=\"0\">\n <stop offset={`${fill * 100}%`} stopColor=\"#f59e0b\" />\n <stop offset={`${fill * 100}%`} stopColor=\"#e1e5eb\" />\n </linearGradient>\n </defs>\n <path\n d=\"M11 2l2.6 5.4 6 .9-4.3 4.2 1 6-5.3-2.8-5.3 2.8 1-6L2 8.3l6-.9L11 2z\"\n fill={`url(#${pathId})`}\n stroke=\"currentColor\"\n strokeWidth=\"0.6\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction HeartIcon({ fill }: { fill: number }) {\n const pathId = `h-${Math.random().toString(36).slice(2)}`;\n return (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\" aria-hidden=\"true\">\n <defs>\n <linearGradient id={pathId} x1=\"0\" x2=\"1\" y1=\"0\" y2=\"0\">\n <stop offset={`${fill * 100}%`} stopColor=\"#ec4899\" />\n <stop offset={`${fill * 100}%`} stopColor=\"#e1e5eb\" />\n </linearGradient>\n </defs>\n <path\n d=\"M11 18s-6-4-6-8.5A3.5 3.5 0 0 1 11 6a3.5 3.5 0 0 1 6 3.5c0 4.5-6 8.5-6 8.5z\"\n fill={`url(#${pathId})`}\n stroke=\"currentColor\"\n strokeWidth=\"0.6\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport function Rating({\n value,\n onChange,\n max = 5,\n size = \"md\",\n allowHalf = false,\n readOnly = false,\n disabled = false,\n showLabel = false,\n label,\n icon = \"star\",\n className,\n}: RatingProps) {\n const [hover, setHover] = useState<number | null>(null);\n const display = hover ?? value;\n const interactive = !readOnly && !disabled;\n const Icon = icon === \"heart\" ? HeartIcon : StarIcon;\n\n const click = (idx: number, half: boolean) => {\n if (!interactive) return;\n onChange?.(half ? idx + 0.5 : idx + 1);\n };\n\n return (\n <div\n className={cn(\n \"ods-rating\",\n `ods-rating--${size}`,\n readOnly && \"ods-rating--readonly\",\n disabled && \"ods-rating--disabled\",\n interactive && \"ods-rating--interactive\",\n className,\n )}\n role=\"radiogroup\"\n aria-label={typeof label === \"string\" ? label : \"Rating\"}\n >\n {Array.from({ length: max }).map((_, i) => {\n const fill = Math.max(0, Math.min(1, display - i));\n return (\n <button\n key={i}\n type=\"button\"\n role=\"radio\"\n aria-checked={Math.ceil(value) === i + 1}\n disabled={!interactive}\n onMouseLeave={() => setHover(null)}\n className=\"ods-rating__item\"\n >\n <span\n className=\"ods-rating__half ods-rating__half--left\"\n onMouseEnter={() => interactive && allowHalf && setHover(i + 0.5)}\n onClick={() => click(i, allowHalf)}\n />\n <span\n className=\"ods-rating__half ods-rating__half--right\"\n onMouseEnter={() => interactive && setHover(i + 1)}\n onClick={() => click(i, false)}\n />\n <Icon fill={fill} />\n </button>\n );\n })}\n {showLabel && (\n <span className=\"ods-rating__label\">\n {typeof label === \"string\" || label ? label : `${value.toFixed(allowHalf ? 1 : 0)}/${max}`}\n </span>\n )}\n </div>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface RibbonProps {\n variant?: \"primary\" | \"success\" | \"warning\" | \"error\" | \"neutral\";\n icon?: ReactNode;\n size?: \"sm\" | \"md\";\n children: ReactNode;\n className?: string;\n}\n\nexport function Ribbon({\n variant = \"primary\",\n icon,\n size = \"md\",\n children,\n className,\n}: RibbonProps) {\n return (\n <span\n className={cn(\n \"ods-ribbon\",\n `ods-ribbon--${variant}`,\n `ods-ribbon--${size}`,\n className,\n )}\n >\n {icon && <span className=\"ods-ribbon__icon\" aria-hidden=\"true\">{icon}</span>}\n <span className=\"ods-ribbon__label\">{children}</span>\n </span>\n );\n}\n","\"use client\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { HiddenSelect, useButton, useListBox, useOption, useSelect } from \"react-aria\";\nimport { createPortal } from \"react-dom\";\nimport { Item, useSelectState } from \"react-stately\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface SelectOption {\n value: string;\n label: string;\n icon?: ReactNode;\n description?: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps {\n options: SelectOption[];\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n placeholder?: string;\n searchable?: boolean;\n label?: string;\n error?: boolean;\n errorMessage?: string;\n disabled?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n /** Name for form submission */\n name?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Internal ListBox rendered inside the dropdown */\n/* ------------------------------------------------------------------ */\n\nfunction ListBox(props: any) {\n const ref = useRef<HTMLUListElement>(null);\n const { listBoxRef = ref, state } = props;\n const { listBoxProps } = useListBox(props, state, listBoxRef);\n\n return (\n <ul {...listBoxProps} ref={listBoxRef} className={'ods-select__options'}>\n {[...state.collection].map((item: any) => (\n <Option key={item.key} item={item} state={state} />\n ))}\n </ul>\n );\n}\n\nfunction Option({ item, state }: any) {\n const ref = useRef<HTMLLIElement>(null);\n const { optionProps, isSelected, isFocused, isDisabled } = useOption(\n { key: item.key },\n state,\n ref,\n );\n\n // item.value is the items-array object; the actual SelectOption is nested inside\n const raw = item.value;\n const option: SelectOption | undefined = raw?.value ?? raw;\n\n return (\n <li\n {...optionProps}\n ref={ref}\n className={cn(\n 'ods-select__option',\n isFocused && 'ods-select__option--highlighted',\n isSelected && 'ods-select__option--selected',\n isDisabled && 'ods-select__option--disabled',\n )}\n >\n {option?.icon && <span className={'ods-select__option-icon'}>{option.icon}</span>}\n <span className={'ods-select__option-text'}>\n <span className={'ods-select__option-label'}>{item.rendered}</span>\n {option?.description && (\n <span className={'ods-select__option-desc'}>{option.description}</span>\n )}\n </span>\n {isSelected && (\n <span className={'ods-select__check'} aria-hidden=\"true\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M3.5 8.5L6.5 11.5L12.5 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n )}\n </li>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Chevron SVG */\n/* ------------------------------------------------------------------ */\nfunction ChevronDown({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M4 6L8 10L12 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Main Select component */\n/* ------------------------------------------------------------------ */\n\nexport function Select({\n options,\n value,\n defaultValue,\n onChange,\n placeholder = \"Select an option...\",\n searchable = false,\n label,\n error = false,\n errorMessage,\n disabled = false,\n size = \"md\",\n className,\n name,\n}: SelectProps) {\n const triggerRef = useRef<HTMLButtonElement>(null);\n const listBoxRef = useRef<HTMLUListElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [dropdownPos, setDropdownPos] = useState({ top: 0, left: 0, width: 0 });\n\n // Build react-stately items from options, applying search filter\n const filteredOptions = useMemo(() => {\n if (!searchable || !searchQuery) return options;\n const q = searchQuery.toLowerCase();\n return options.filter(\n (o) => o.label.toLowerCase().includes(q) || o.description?.toLowerCase().includes(q),\n );\n }, [options, searchQuery, searchable]);\n\n // Build collection props for useSelectState\n const ariaProps = useMemo(() => {\n const items = filteredOptions.map((o) => ({\n key: o.value,\n label: o.label,\n value: o,\n isDisabled: o.disabled,\n }));\n\n const props: any = {\n label: label || \"Select\",\n items,\n children: (item: any) => (\n <Item key={item.key} textValue={item.label}>\n {item.label}\n </Item>\n ),\n isDisabled: disabled,\n onSelectionChange: (key: any) => {\n onChange?.(String(key));\n setSearchQuery(\"\");\n },\n };\n\n if (value !== undefined) {\n props.selectedKey = value;\n }\n if (defaultValue !== undefined) {\n props.defaultSelectedKey = defaultValue;\n }\n\n return props;\n }, [filteredOptions, label, disabled, value, defaultValue, onChange]);\n\n const state = useSelectState(ariaProps);\n\n const { triggerProps, menuProps } = useSelect(ariaProps, state, triggerRef);\n const { buttonProps } = useButton(triggerProps, triggerRef);\n\n // Position dropdown using getBoundingClientRect (fixed positioning to escape stacking contexts)\n const updatePosition = useCallback(() => {\n if (!triggerRef.current) return;\n const rect = triggerRef.current.getBoundingClientRect();\n setDropdownPos({\n top: rect.bottom + 4,\n left: rect.left,\n width: rect.width,\n });\n }, []);\n\n useEffect(() => {\n if (state.isOpen) {\n updatePosition();\n window.addEventListener(\"scroll\", updatePosition, true);\n window.addEventListener(\"resize\", updatePosition);\n return () => {\n window.removeEventListener(\"scroll\", updatePosition, true);\n window.removeEventListener(\"resize\", updatePosition);\n };\n }\n }, [state.isOpen, updatePosition]);\n\n // Focus search input when dropdown opens\n useEffect(() => {\n if (state.isOpen && searchable && searchRef.current) {\n // Small delay to allow animation frame\n requestAnimationFrame(() => searchRef.current?.focus());\n }\n }, [state.isOpen, searchable]);\n\n // Find currently selected option for display\n const selectedOption = options.find((o) => o.value === String(state.selectedKey ?? \"\"));\n\n return (\n <div\n className={cn(\n 'ods-select',\n `ods-select--${size}`,\n error && 'ods-select--error',\n disabled && 'ods-select--disabled',\n className,\n )}\n >\n {label && <label className={'ods-select__label'}>{label}</label>}\n\n <HiddenSelect state={state} triggerRef={triggerRef} label={label} name={name} />\n\n <button\n {...buttonProps}\n ref={triggerRef}\n className={cn(\n 'ods-select__trigger',\n state.isOpen && 'ods-select__trigger--open',\n )}\n >\n <span className={'ods-select__value'}>\n {selectedOption ? (\n <>\n {selectedOption.icon && (\n <span className={'ods-select__value-icon'}>{selectedOption.icon}</span>\n )}\n {selectedOption.label}\n </>\n ) : (\n <span className={'ods-select__placeholder'}>{placeholder}</span>\n )}\n </span>\n <ChevronDown\n className={cn(\n 'ods-select__chevron',\n state.isOpen && 'ods-select__chevron--open',\n )}\n />\n </button>\n\n {typeof document !== \"undefined\" &&\n createPortal(\n <AnimatePresence>\n {state.isOpen && (\n <motion.div\n className={'ods-select__dropdown'}\n style={{\n position: \"fixed\",\n top: dropdownPos.top,\n left: dropdownPos.left,\n width: dropdownPos.width,\n }}\n initial={{ opacity: 0, scale: 0.95 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.95 }}\n transition={{ duration: 0.2, ease: [0.16, 1, 0.3, 1] }}\n >\n {searchable && (\n <div className={'ods-select__search-wrap'}>\n <input\n ref={searchRef}\n className={'ods-select__search'}\n type=\"text\"\n placeholder=\"Search...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n aria-label=\"Search options\"\n onKeyDown={(e) => {\n // Allow Escape to close the dropdown\n if (e.key === \"Escape\") {\n state.close();\n }\n }}\n />\n </div>\n )}\n <ListBox {...menuProps} listBoxRef={listBoxRef} state={state} />\n {filteredOptions.length === 0 && (\n <div className={'ods-select__empty'}>No results found</div>\n )}\n </motion.div>\n )}\n </AnimatePresence>,\n document.body,\n )}\n\n {error && errorMessage && <span className={'ods-select__error'}>{errorMessage}</span>}\n </div>\n );\n}\n","\"use client\";\nimport { type ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface SidebarNavItem {\n id: string;\n label: ReactNode;\n icon: ReactNode;\n badge?: ReactNode;\n tag?: ReactNode;\n active?: boolean;\n /** Shortcut hint shown in rail tooltip, e.g. \"⌘1\". */\n shortcut?: string;\n onClick?: () => void;\n href?: string;\n /** Nested children (L2/L3). Items with children expand in place. */\n children?: SidebarNavItem[];\n /** Start expanded. Defaults to active (so active path is pre-revealed). */\n defaultExpanded?: boolean;\n}\n\nexport interface SidebarSection {\n id?: string;\n label?: ReactNode;\n items: SidebarNavItem[];\n}\n\nexport interface SidebarUser {\n name: ReactNode;\n email?: ReactNode;\n initial?: ReactNode;\n avatar?: ReactNode;\n onClick?: () => void;\n}\n\nexport interface SidebarProps {\n /**\n * - \"rail\" — always-collapsed 64px rail\n * - \"expanded\" — always-expanded 260px\n * - \"auto\" — rail that expands into a floating overlay on hover;\n * user can pin it to stay expanded (persisted to localStorage)\n */\n variant?: \"rail\" | \"expanded\" | \"auto\";\n brand?: { name: ReactNode; subtitle?: ReactNode };\n logo?: ReactNode;\n sections?: SidebarSection[];\n items?: SidebarNavItem[];\n footerItems?: SidebarNavItem[];\n user?: SidebarUser;\n /** For rail/expanded: toggle callback. For auto: optional hook called on pin change. */\n onToggle?: () => void;\n\n // ── \"auto\" controls ────────────────────────────\n pinned?: boolean;\n defaultPinned?: boolean;\n onPinnedChange?: (pinned: boolean) => void;\n pinStorageKey?: string;\n hoverOpenDelay?: number;\n hoverCloseDelay?: number;\n\n // ── rail tooltip ───────────────────────────────\n tooltipDelay?: number;\n\n height?: number | string;\n className?: string;\n}\n\nexport function Sidebar({\n variant = \"expanded\",\n brand,\n logo,\n sections,\n items,\n footerItems,\n user,\n onToggle,\n pinned: pinnedProp,\n defaultPinned = false,\n onPinnedChange,\n pinStorageKey = \"ods-sidebar-pinned\",\n hoverOpenDelay = 100,\n hoverCloseDelay = 250,\n tooltipDelay = 300,\n height = \"100%\",\n className,\n}: SidebarProps) {\n const allSections: SidebarSection[] = sections ?? (items ? [{ items }] : []);\n\n // ── Pin state (persisted) ────────────────────\n const [internalPinned, setInternalPinned] = useState<boolean>(() => {\n if (typeof window === \"undefined\") return defaultPinned;\n try {\n const stored = window.localStorage.getItem(pinStorageKey);\n if (stored !== null) return stored === \"true\";\n } catch { /* noop */ }\n return defaultPinned;\n });\n const pinned = pinnedProp ?? internalPinned;\n const setPinned = useCallback((p: boolean) => {\n if (pinnedProp === undefined) setInternalPinned(p);\n try { window.localStorage.setItem(pinStorageKey, String(p)); } catch { /* noop */ }\n onPinnedChange?.(p);\n }, [pinnedProp, pinStorageKey, onPinnedChange]);\n\n // ── Hover overlay ────────────────────────────\n const [hoverOpen, setHoverOpen] = useState(false);\n const openTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const clearTimers = () => {\n if (openTimer.current) { clearTimeout(openTimer.current); openTimer.current = null; }\n if (closeTimer.current) { clearTimeout(closeTimer.current); closeTimer.current = null; }\n };\n useEffect(() => () => clearTimers(), []);\n const handleEnter = () => {\n clearTimers();\n openTimer.current = setTimeout(() => setHoverOpen(true), hoverOpenDelay);\n };\n const handleLeave = () => {\n clearTimers();\n closeTimer.current = setTimeout(() => setHoverOpen(false), hoverCloseDelay);\n };\n\n const autoMode = variant === \"auto\";\n const showAsRail = autoMode ? !pinned : variant === \"rail\";\n const overlayOpen = autoMode && !pinned && hoverOpen;\n\n return (\n <nav\n className={cn(\n \"ods-sidebar\",\n `ods-sidebar--${showAsRail ? \"rail\" : \"expanded\"}`,\n autoMode && \"ods-sidebar--auto\",\n overlayOpen && \"ods-sidebar--overlay-open\",\n className,\n )}\n style={{ height }}\n aria-label=\"Sidebar navigation\"\n onMouseEnter={autoMode && !pinned ? handleEnter : undefined}\n onMouseLeave={autoMode && !pinned ? handleLeave : undefined}\n >\n {showAsRail ? (\n <RailLayout\n logo={logo}\n sections={allSections}\n footerItems={footerItems}\n user={user}\n onToggle={autoMode ? () => setPinned(true) : onToggle}\n tooltipDelay={tooltipDelay}\n suppressTooltips={overlayOpen}\n />\n ) : (\n <ExpandedLayout\n logo={logo}\n brand={brand}\n sections={allSections}\n footerItems={footerItems}\n user={user}\n onToggle={autoMode ? () => setPinned(false) : onToggle}\n pinned={autoMode ? pinned : undefined}\n onPinToggle={autoMode ? () => setPinned(!pinned) : undefined}\n />\n )}\n\n {overlayOpen && (\n <div className=\"ods-sidebar__overlay\" onMouseEnter={handleEnter} onMouseLeave={handleLeave}>\n <ExpandedLayout\n logo={logo}\n brand={brand}\n sections={allSections}\n footerItems={footerItems}\n user={user}\n onToggle={() => setPinned(true)}\n pinned={false}\n onPinToggle={() => setPinned(!pinned)}\n />\n </div>\n )}\n </nav>\n );\n}\n\n// ──────────────────────────────────────────────────────────────────────\n// Rail (collapsed) — 64px wide, icon-only\n// ──────────────────────────────────────────────────────────────────────\nfunction RailLayout({\n logo,\n sections,\n footerItems,\n user,\n onToggle,\n tooltipDelay,\n suppressTooltips,\n}: Pick<SidebarProps, \"logo\" | \"footerItems\" | \"user\" | \"onToggle\"> & {\n sections: SidebarSection[];\n tooltipDelay: number;\n suppressTooltips?: boolean;\n}) {\n return (\n <>\n {logo && <div className=\"ods-sidebar__logo-rail\">{logo}</div>}\n {onToggle && (\n <button\n type=\"button\"\n className=\"ods-sidebar__expand-rail\"\n onClick={onToggle}\n aria-label=\"Expand sidebar\"\n title=\"Expand sidebar\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M13 3v10M5 5l3 3-3 3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n )}\n <div className=\"ods-sidebar__nav-rail\">\n {sections.flatMap((s) => s.items).map((item) => (\n <RailItem key={item.id} item={item} tooltipDelay={tooltipDelay} suppressTooltip={suppressTooltips} />\n ))}\n </div>\n <div className=\"ods-sidebar__spacer\" />\n {footerItems && footerItems.length > 0 && (\n <div className=\"ods-sidebar__footer-rail\">\n {footerItems.map((item) => (\n <RailItem key={item.id} item={item} tooltipDelay={tooltipDelay} suppressTooltip={suppressTooltips} />\n ))}\n </div>\n )}\n {user && (\n <button\n type=\"button\"\n className=\"ods-sidebar__user-rail\"\n onClick={user.onClick}\n aria-label={typeof user.name === \"string\" ? user.name : \"User\"}\n >\n {user.avatar ?? (\n <span>{user.initial ?? (typeof user.name === \"string\" ? user.name.charAt(0).toUpperCase() : \"?\")}</span>\n )}\n </button>\n )}\n </>\n );\n}\n\nfunction RailItem({\n item,\n tooltipDelay,\n suppressTooltip,\n}: {\n item: SidebarNavItem;\n tooltipDelay: number;\n suppressTooltip?: boolean;\n}) {\n const [tipOpen, setTipOpen] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const clear = () => {\n if (timerRef.current) { clearTimeout(timerRef.current); timerRef.current = null; }\n };\n useEffect(() => () => clear(), []);\n\n const show = () => {\n if (suppressTooltip) return;\n clear();\n timerRef.current = setTimeout(() => setTipOpen(true), tooltipDelay);\n };\n const hide = () => {\n clear();\n setTipOpen(false);\n };\n\n const Comp = item.href ? \"a\" : \"button\";\n const labelText = typeof item.label === \"string\" ? item.label : undefined;\n\n return (\n <div\n className=\"ods-sidebar__rail-wrap\"\n onMouseEnter={show}\n onMouseLeave={hide}\n onFocus={show}\n onBlur={hide}\n >\n <Comp\n type={item.href ? undefined : \"button\"}\n href={item.href}\n onClick={item.onClick}\n className={cn(\n \"ods-sidebar__rail-item\",\n item.active && \"ods-sidebar__rail-item--active\",\n )}\n aria-current={item.active ? \"page\" : undefined}\n aria-label={labelText}\n title={labelText}\n >\n <span className=\"ods-sidebar__rail-icon\">{item.icon}</span>\n </Comp>\n {tipOpen && labelText && (\n <div className=\"ods-sidebar__rail-tooltip\" role=\"tooltip\">\n <span className=\"ods-sidebar__rail-tooltip-label\">{labelText}</span>\n {item.shortcut && (\n <kbd className=\"ods-sidebar__rail-kbd\">{item.shortcut}</kbd>\n )}\n </div>\n )}\n </div>\n );\n}\n\n// ──────────────────────────────────────────────────────────────────────\n// Expanded — 260px wide, with labels + sections + footer + user card\n// ──────────────────────────────────────────────────────────────────────\nfunction ExpandedLayout({\n logo,\n brand,\n sections,\n footerItems,\n user,\n onToggle,\n pinned,\n onPinToggle,\n}: Pick<SidebarProps, \"logo\" | \"brand\" | \"footerItems\" | \"user\" | \"onToggle\"> & {\n sections: SidebarSection[];\n pinned?: boolean;\n onPinToggle?: () => void;\n}) {\n return (\n <>\n <div className=\"ods-sidebar__header\">\n {logo && <div className=\"ods-sidebar__logo\">{logo}</div>}\n {brand && (\n <div className=\"ods-sidebar__brand\">\n <span className=\"ods-sidebar__brand-name\">{brand.name}</span>\n {brand.subtitle && <span className=\"ods-sidebar__brand-sub\">{brand.subtitle}</span>}\n </div>\n )}\n {onPinToggle && (\n <button\n type=\"button\"\n className={cn(\"ods-sidebar__pin\", pinned && \"ods-sidebar__pin--pinned\")}\n onClick={onPinToggle}\n aria-label={pinned ? \"Unpin sidebar\" : \"Pin sidebar\"}\n aria-pressed={pinned}\n title={pinned ? \"Unpin (collapse on leave)\" : \"Pin (keep expanded)\"}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M5.5 1h3v3l2 3h-3v3l-1.5 2L4.5 10V7h-3l2-3V1z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.3\"\n strokeLinejoin=\"round\"\n fill={pinned ? \"currentColor\" : \"none\"}\n />\n </svg>\n </button>\n )}\n {onToggle && !onPinToggle && (\n <button\n type=\"button\"\n className=\"ods-sidebar__collapse\"\n onClick={onToggle}\n aria-label=\"Collapse sidebar\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M3 3v10M11 5l-3 3 3 3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n )}\n </div>\n <div className=\"ods-sidebar__body\">\n {sections.map((section, sIdx) => (\n <div className=\"ods-sidebar__section\" key={section.id ?? sIdx}>\n {section.label && (\n <div className=\"ods-sidebar__section-label\">{section.label}</div>\n )}\n {section.items.map((item) => (\n <ExpandedItem key={item.id} item={item} level={0} />\n ))}\n </div>\n ))}\n </div>\n {(footerItems || user) && (\n <div className=\"ods-sidebar__footer\">\n {footerItems && footerItems.length > 0 && (\n <div className=\"ods-sidebar__footer-list\">\n {footerItems.map((item) => (\n <ExpandedItem key={item.id} item={item} level={0} />\n ))}\n </div>\n )}\n {user && (\n <button\n type=\"button\"\n className=\"ods-sidebar__user-card\"\n onClick={user.onClick}\n >\n <span className=\"ods-sidebar__user-avatar\">\n {user.avatar ?? (\n <span>{user.initial ?? (typeof user.name === \"string\" ? user.name.charAt(0).toUpperCase() : \"?\")}</span>\n )}\n </span>\n <span className=\"ods-sidebar__user-info\">\n <span className=\"ods-sidebar__user-name\">{user.name}</span>\n {user.email && <span className=\"ods-sidebar__user-email\">{user.email}</span>}\n </span>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"3\" r=\"1.3\" fill=\"currentColor\" />\n <circle cx=\"8\" cy=\"8\" r=\"1.3\" fill=\"currentColor\" />\n <circle cx=\"8\" cy=\"13\" r=\"1.3\" fill=\"currentColor\" />\n </svg>\n </button>\n )}\n </div>\n )}\n </>\n );\n}\n\nfunction ExpandedItem({ item, level }: { item: SidebarNavItem; level: number }) {\n const hasChildren = !!(item.children && item.children.length > 0);\n const [open, setOpen] = useState<boolean>(\n item.defaultExpanded ?? (hasChildren && hasActiveDescendant(item)),\n );\n\n if (hasChildren) {\n return (\n <>\n <button\n type=\"button\"\n className={cn(\n \"ods-sidebar__item\",\n level > 0 && `ods-sidebar__item--l${Math.min(level + 1, 3)}`,\n item.active && \"ods-sidebar__item--active\",\n open && \"ods-sidebar__item--open\",\n )}\n onClick={(e) => {\n setOpen((o) => !o);\n item.onClick?.();\n e.stopPropagation();\n }}\n aria-expanded={open}\n >\n <span className=\"ods-sidebar__icon\">{item.icon}</span>\n <span className=\"ods-sidebar__label\">{item.label}</span>\n {item.tag && <span className=\"ods-sidebar__tag\">{item.tag}</span>}\n {item.badge && <span className=\"ods-sidebar__badge\">{item.badge}</span>}\n <svg\n className={cn(\"ods-sidebar__chevron\", open && \"ods-sidebar__chevron--open\")}\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path d=\"M4.5 3l3 3-3 3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n {open && (\n <div className={cn(\"ods-sidebar__subtree\", `ods-sidebar__subtree--l${Math.min(level + 1, 3)}`)}>\n {item.children!.map((child) => (\n <ExpandedItem key={child.id} item={child} level={level + 1} />\n ))}\n </div>\n )}\n </>\n );\n }\n\n const Comp = item.href ? \"a\" : \"button\";\n return (\n <Comp\n type={item.href ? undefined : \"button\"}\n href={item.href}\n onClick={item.onClick}\n className={cn(\n \"ods-sidebar__item\",\n level > 0 && `ods-sidebar__item--l${Math.min(level + 1, 3)}`,\n item.active && \"ods-sidebar__item--active\",\n )}\n aria-current={item.active ? \"page\" : undefined}\n >\n <span className=\"ods-sidebar__icon\">{item.icon}</span>\n <span className=\"ods-sidebar__label\">{item.label}</span>\n {item.tag && <span className=\"ods-sidebar__tag\">{item.tag}</span>}\n {item.badge && <span className=\"ods-sidebar__badge\">{item.badge}</span>}\n </Comp>\n );\n}\n\nfunction hasActiveDescendant(item: SidebarNavItem): boolean {\n if (!item.children) return false;\n for (const c of item.children) {\n if (c.active) return true;\n if (hasActiveDescendant(c)) return true;\n }\n return false;\n}\n","\"use client\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface SkeletonProps {\n variant?: \"text\" | \"circular\" | \"rectangular\";\n width?: string | number;\n height?: string | number;\n lines?: number;\n className?: string;\n}\n\nexport function Skeleton({ variant = \"text\", width, height, lines = 1, className }: SkeletonProps) {\n const resolvedWidth = typeof width === \"number\" ? `${width}px` : width;\n const resolvedHeight = typeof height === \"number\" ? `${height}px` : height;\n\n if (variant === \"text\" && lines > 1) {\n return (\n <div\n className={cn('ods-skeleton__group', className)}\n role=\"status\"\n aria-label=\"Loading\"\n >\n {Array.from({ length: lines }).map((_, i) => (\n <div\n key={i}\n className={cn('ods-skeleton', 'ods-skeleton--text')}\n style={{\n width: i === lines - 1 ? \"75%\" : resolvedWidth || \"100%\",\n height: resolvedHeight,\n }}\n />\n ))}\n </div>\n );\n }\n\n return (\n <div\n className={cn('ods-skeleton', `ods-skeleton--${variant}`, className)}\n style={{\n width: resolvedWidth,\n height: resolvedHeight,\n }}\n role=\"status\"\n aria-label=\"Loading\"\n />\n );\n}\n","\"use client\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { type ReactNode, useRef } from \"react\";\nimport { FocusScope, useDialog, useModal, useOverlay } from \"react-aria\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface SlideoutPanelProps {\n open: boolean;\n onClose: () => void;\n position?: \"left\" | \"right\";\n width?: number | string;\n title?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n className?: string;\n}\n\nconst slideVariants = {\n left: {\n initial: { x: \"-100%\" },\n animate: { x: 0 },\n exit: { x: \"-100%\" },\n },\n right: {\n initial: { x: \"100%\" },\n animate: { x: 0 },\n exit: { x: \"100%\" },\n },\n};\n\nfunction SlideoutContent({\n open,\n onClose,\n position = \"right\",\n width = 360,\n title,\n children,\n footer,\n className,\n}: SlideoutPanelProps) {\n const overlayRef = useRef<HTMLDivElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n\n const { overlayProps } = useOverlay(\n {\n isOpen: open,\n onClose,\n isDismissable: true,\n },\n overlayRef,\n );\n\n const { modalProps } = useModal();\n const { dialogProps, titleProps } = useDialog({}, panelRef);\n\n // Remove motion-conflicting props\n const { onDrag, onDragStart, onDragEnd, onAnimationStart, ...safeOverlayProps } =\n overlayProps as any;\n\n const variant = slideVariants[position];\n const panelWidth = typeof width === \"number\" ? `${width}px` : width;\n\n return (\n <AnimatePresence>\n {open && (\n <>\n {/* Backdrop */}\n <motion.div\n className={'ods-slideout__backdrop'}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n onClick={onClose}\n data-testid=\"slideout-backdrop\"\n aria-hidden=\"true\"\n />\n\n {/* Panel */}\n <FocusScope contain restoreFocus autoFocus>\n <motion.div\n {...safeOverlayProps}\n {...modalProps}\n {...dialogProps}\n ref={(node) => {\n (overlayRef as any).current = node;\n (panelRef as any).current = node;\n }}\n className={cn(\n 'ods-slideout__panel',\n `ods-slideout__panel--${position}`,\n className,\n )}\n style={{ width: panelWidth }}\n initial={variant.initial}\n animate={variant.animate}\n exit={variant.exit}\n transition={{ type: \"tween\", ease: [0.32, 0.72, 0, 1], duration: 0.28 }}\n >\n {title && (\n <div className={'ods-slideout__header'}>\n <h2 {...titleProps} className={'ods-slideout__title'}>\n {title}\n </h2>\n <button\n className={'ods-slideout__close'}\n onClick={onClose}\n aria-label=\"Close panel\"\n type=\"button\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path d=\"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z\" />\n </svg>\n </button>\n </div>\n )}\n <div className={'ods-slideout__body'}>{children}</div>\n {footer && <div className={'ods-slideout__footer'}>{footer}</div>}\n </motion.div>\n </FocusScope>\n </>\n )}\n </AnimatePresence>\n );\n}\n\nexport function SlideoutPanel(props: SlideoutPanelProps) {\n if (typeof document === \"undefined\") return null;\n return createPortal(<SlideoutContent {...props} />, document.body);\n}\n","\"use client\";\nimport { type ChangeEvent, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface SliderProps {\n label?: ReactNode;\n value: number;\n onChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n formatValue?: (value: number) => ReactNode;\n showValue?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n disabled?: boolean;\n variant?: \"primary\" | \"success\" | \"warning\" | \"error\";\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport function Slider({\n label,\n value,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n formatValue,\n showValue = true,\n size = \"md\",\n disabled = false,\n variant = \"primary\",\n className,\n ...props\n}: SliderProps) {\n const pct = max === min ? 0 : ((value - min) / (max - min)) * 100;\n const display = formatValue ? formatValue(value) : `${value}`;\n const handle = (e: ChangeEvent<HTMLInputElement>) => onChange?.(Number(e.target.value));\n\n return (\n <div\n className={cn(\n \"ods-slider\",\n `ods-slider--${size}`,\n `ods-slider--${variant}`,\n disabled && \"ods-slider--disabled\",\n className,\n )}\n >\n {(label || showValue) && (\n <div className=\"ods-slider__head\">\n {label && <span className=\"ods-slider__label\">{label}</span>}\n {showValue && <span className=\"ods-slider__value\">{display}</span>}\n </div>\n )}\n <div className=\"ods-slider__track\">\n <span className=\"ods-slider__fill\" style={{ width: `${pct}%` }} />\n <input\n type=\"range\"\n className=\"ods-slider__input\"\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={handle}\n disabled={disabled}\n aria-label={typeof label === \"string\" ? label : props[\"aria-label\"]}\n />\n </div>\n </div>\n );\n}\n","\"use client\";\nimport type { ButtonHTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport type SocialProvider = \"google\" | \"github\" | \"apple\" | \"twitter\" | \"custom\";\n\nexport interface SocialButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n provider: SocialProvider;\n label?: ReactNode; // e.g. \"Continue with Google\"\n icon?: ReactNode; // custom icon override\n size?: \"sm\" | \"md\" | \"lg\";\n fullWidth?: boolean;\n}\n\nconst DEFAULT_LABELS: Record<Exclude<SocialProvider, \"custom\">, string> = {\n google: \"Continue with Google\",\n github: \"Continue with GitHub\",\n apple: \"Continue with Apple\",\n twitter: \"Continue with X\",\n};\n\nconst GoogleIcon = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M17.64 9.2c0-.64-.06-1.25-.16-1.84H9v3.48h4.84a4.14 4.14 0 0 1-1.79 2.72v2.26h2.9c1.69-1.56 2.69-3.85 2.69-6.62z\" fill=\"#4285F4\" />\n <path d=\"M9 18c2.43 0 4.47-.8 5.96-2.18l-2.9-2.26c-.8.54-1.84.86-3.06.86-2.34 0-4.33-1.58-5.04-3.71H.96v2.33A9 9 0 0 0 9 18z\" fill=\"#34A853\" />\n <path d=\"M3.96 10.71A5.38 5.38 0 0 1 3.68 9c0-.6.1-1.18.28-1.71V4.96H.96A9 9 0 0 0 0 9c0 1.45.35 2.82.96 4.04l3-2.33z\" fill=\"#FBBC05\" />\n <path d=\"M9 3.58c1.32 0 2.5.45 3.44 1.35l2.58-2.58A9 9 0 0 0 9 0 9 9 0 0 0 .96 4.96l3 2.33C4.67 5.16 6.66 3.58 9 3.58z\" fill=\"#EA4335\" />\n </svg>\n);\n\nconst GitHubIcon = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M9 .2a9 9 0 0 0-2.85 17.55c.45.08.62-.2.62-.43v-1.5c-2.5.54-3.04-1.2-3.04-1.2-.41-1.05-1-1.33-1-1.33-.82-.56.06-.55.06-.55.9.06 1.38.93 1.38.93.8 1.38 2.11.98 2.63.75.08-.58.31-.98.57-1.2-2-.23-4.1-1-4.1-4.44 0-.98.35-1.78.93-2.41-.1-.23-.4-1.15.09-2.4 0 0 .76-.25 2.48.92a8.6 8.6 0 0 1 4.5 0c1.72-1.17 2.48-.92 2.48-.92.49 1.25.18 2.17.09 2.4.58.63.93 1.43.93 2.4 0 3.45-2.1 4.21-4.1 4.44.32.28.6.82.6 1.67v2.47c0 .24.17.52.63.43A9 9 0 0 0 9 .2z\" fill=\"#ffffff\" />\n </svg>\n);\n\nconst AppleIcon = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M13.4 9.5c0-1.7 1.4-2.5 1.5-2.6-.8-1.2-2.1-1.3-2.5-1.3-1.1-.1-2.1.6-2.6.6-.6 0-1.4-.6-2.3-.6-1.2 0-2.3.7-2.9 1.8-1.2 2.1-.3 5.3.9 7 .6.9 1.3 1.8 2.2 1.8.9 0 1.2-.6 2.3-.6s1.4.6 2.3.6 1.5-.9 2.1-1.8c.7-1 1-2 1-2.1 0 0-1.9-.7-2-2.8zM11.5 4.5c.5-.6.8-1.4.7-2.2-.7 0-1.5.5-2 1.1-.4.5-.8 1.3-.7 2.1.8.1 1.6-.4 2-1z\" fill=\"#ffffff\" />\n </svg>\n);\n\nconst TwitterIcon = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M13.8 1.3h2.6l-5.7 6.5L17.4 16h-5.2l-4.1-5.3L3.4 16H.8l6-6.9L.5 1.3h5.4l3.7 4.9 4.2-4.9z\" fill=\"#ffffff\" />\n </svg>\n);\n\nconst PROVIDER_ICONS: Record<Exclude<SocialProvider, \"custom\">, () => ReactNode> = {\n google: GoogleIcon,\n github: GitHubIcon,\n apple: AppleIcon,\n twitter: TwitterIcon,\n};\n\nexport function SocialButton({\n provider,\n label,\n icon,\n size = \"md\",\n fullWidth = true,\n className,\n children,\n ...props\n}: SocialButtonProps) {\n const resolvedIcon = icon ?? (provider !== \"custom\" ? PROVIDER_ICONS[provider]() : null);\n const resolvedLabel = label ?? children ?? (provider !== \"custom\" ? DEFAULT_LABELS[provider] : null);\n return (\n <button\n type=\"button\"\n {...props}\n className={cn(\n \"ods-social-btn\",\n `ods-social-btn--${provider}`,\n `ods-social-btn--${size}`,\n fullWidth && \"ods-social-btn--full\",\n className,\n )}\n >\n {resolvedIcon && <span className=\"ods-social-btn__icon\" aria-hidden=\"true\">{resolvedIcon}</span>}\n <span className=\"ods-social-btn__label\">{resolvedLabel}</span>\n </button>\n );\n}\n","\"use client\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface SparklineProps {\n data: number[];\n width?: number;\n height?: number;\n stroke?: string;\n fill?: string;\n smooth?: boolean;\n className?: string;\n \"aria-label\"?: string;\n}\n\nexport function Sparkline({\n data,\n width = 80,\n height = 24,\n stroke = \"#6c5ce7\",\n fill,\n smooth = true,\n className,\n \"aria-label\": ariaLabel,\n}: SparklineProps) {\n if (data.length < 2) return null;\n const pad = 1;\n const min = Math.min(...data);\n const max = Math.max(...data);\n const range = Math.max(1, max - min);\n const stepX = (width - pad * 2) / (data.length - 1);\n\n const pts = data.map((y, i) => [\n pad + i * stepX,\n pad + (1 - (y - min) / range) * (height - pad * 2),\n ]) as [number, number][];\n\n let path = `M${pts[0][0]},${pts[0][1]}`;\n if (smooth) {\n for (let i = 0; i < pts.length - 1; i++) {\n const [x0, y0] = pts[Math.max(0, i - 1)];\n const [x1, y1] = pts[i];\n const [x2, y2] = pts[i + 1];\n const [x3, y3] = pts[Math.min(pts.length - 1, i + 2)];\n const cp1x = x1 + (x2 - x0) / 6;\n const cp1y = y1 + (y2 - y0) / 6;\n const cp2x = x2 - (x3 - x1) / 6;\n const cp2y = y2 - (y3 - y1) / 6;\n path += ` C${cp1x},${cp1y} ${cp2x},${cp2y} ${x2},${y2}`;\n }\n } else {\n path += pts.slice(1).map(([x, y]) => ` L${x},${y}`).join(\"\");\n }\n\n const area = fill\n ? `${path} L${pts[pts.length - 1][0]},${height - pad} L${pts[0][0]},${height - pad} Z`\n : null;\n\n return (\n <svg\n className={cn(\"ods-sparkline\", className)}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n {area && <path d={area} fill={fill} />}\n <path d={path} fill=\"none\" stroke={stroke} strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n","\"use client\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface SpinnerProps {\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n color?: string;\n className?: string;\n}\n\nconst sizeMap = {\n sm: 16,\n md: 24,\n lg: 32,\n xl: 48,\n} as const;\n\nexport function Spinner({\n size = \"md\",\n color = \"var(--ods-color-brand-500)\",\n className,\n}: SpinnerProps) {\n const px = sizeMap[size];\n\n return (\n <svg\n className={cn('ods-spinner', `ods-spinner--${size}`, className)}\n width={px}\n height={px}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n role=\"status\"\n aria-label=\"Loading\"\n style={{ color }}\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeDasharray=\"31.4 31.4\"\n className={'ods-spinner__circle'}\n />\n </svg>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface StatProps {\n label: ReactNode;\n value: ReactNode;\n delta?: ReactNode;\n deltaTrend?: \"up\" | \"down\" | \"neutral\";\n deltaSuffix?: ReactNode;\n icon?: ReactNode;\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nexport function Stat({\n label,\n value,\n delta,\n deltaTrend = \"up\",\n deltaSuffix,\n icon,\n size = \"md\",\n className,\n}: StatProps) {\n return (\n <div className={cn(\"ods-stat\", `ods-stat--${size}`, className)}>\n <div className=\"ods-stat__head\">\n <div className=\"ods-stat__label\">{label}</div>\n {icon && <span className=\"ods-stat__icon\" aria-hidden=\"true\">{icon}</span>}\n </div>\n <div className=\"ods-stat__value\">{value}</div>\n {delta && (\n <div className={cn(\"ods-stat__delta\", `ods-stat__delta--${deltaTrend}`)}>\n <span className=\"ods-stat__delta-arrow\" aria-hidden=\"true\">\n {deltaTrend === \"up\" && \"▲\"}\n {deltaTrend === \"down\" && \"▼\"}\n {deltaTrend === \"neutral\" && \"—\"}\n </span>\n <span className=\"ods-stat__delta-value\">{delta}</span>\n {deltaSuffix && <span className=\"ods-stat__delta-suffix\">{deltaSuffix}</span>}\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\nimport { type InputHTMLAttributes, type ReactNode, useRef } from \"react\";\nimport { useSwitch } from \"react-aria\";\nimport { useToggleState } from \"react-stately\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface SwitchProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"onChange\" | \"size\"> {\n checked?: boolean;\n defaultChecked?: boolean;\n onChange?: (isSelected: boolean) => void;\n disabled?: boolean;\n size?: \"sm\" | \"md\";\n label?: string | ReactNode;\n className?: string;\n}\n\nexport function Switch({\n checked,\n defaultChecked,\n onChange,\n disabled = false,\n size = \"md\",\n label,\n className,\n ...props\n}: SwitchProps) {\n const ref = useRef<HTMLInputElement>(null);\n\n const state = useToggleState({\n isSelected: checked,\n defaultSelected: defaultChecked,\n onChange,\n });\n\n const { inputProps } = useSwitch(\n {\n isSelected: state.isSelected,\n isDisabled: disabled,\n onChange,\n \"aria-label\": typeof label === \"string\" ? label : undefined,\n },\n state,\n ref,\n );\n\n const isOn = state.isSelected;\n\n return (\n <label\n className={cn(\n 'ods-switch',\n `ods-switch--${size}`,\n disabled && 'ods-switch--disabled',\n className,\n )}\n >\n <input {...inputProps} ref={ref} className={'ods-switch__input'} />\n <div\n className={cn('ods-switch__track', isOn && 'ods-switch__track--on')}\n aria-hidden=\"true\"\n >\n <div className={'ods-switch__thumb'} />\n </div>\n {label && <span className={'ods-switch__label'}>{label}</span>}\n </label>\n );\n}\n","\"use client\";\nimport { type ReactNode, useCallback, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface TableColumn<T = any> {\n key: string;\n header: ReactNode;\n sortable?: boolean;\n width?: string | number;\n render?: (value: any, row: T, index: number) => ReactNode;\n}\n\nexport interface TableProps<T extends Record<string, any> = Record<string, any>> {\n columns: TableColumn<T>[];\n data: T[];\n selectable?: boolean;\n selectedRows?: Set<number>;\n onSelectionChange?: (selected: Set<number>) => void;\n expandable?: boolean;\n renderExpanded?: (row: T, index: number) => ReactNode;\n onSort?: (key: string, direction: \"asc\" | \"desc\") => void;\n sortKey?: string;\n sortDirection?: \"asc\" | \"desc\";\n loading?: boolean;\n emptyMessage?: string;\n className?: string;\n}\n\nexport function Table<T extends Record<string, any> = Record<string, any>>({\n columns,\n data,\n selectable = false,\n selectedRows,\n onSelectionChange,\n expandable = false,\n renderExpanded,\n onSort,\n sortKey,\n sortDirection,\n loading = false,\n emptyMessage = \"No data available\",\n className,\n}: TableProps<T>) {\n const _expandedRows = new Set<number>();\n // We use a state-free approach: toggling is handled via a local ref to avoid\n // re-renders for internal-only expanded state. But for simplicity we use a\n // controlled approach where the parent can manage expansion if needed.\n // For self-contained usage, we track expanded rows internally.\n\n const handleSort = useCallback(\n (key: string) => {\n if (!onSort) return;\n const col = columns.find((c) => c.key === key);\n if (!col?.sortable) return;\n const newDirection: \"asc\" | \"desc\" =\n sortKey === key && sortDirection === \"asc\" ? \"desc\" : \"asc\";\n onSort(key, newDirection);\n },\n [columns, onSort, sortKey, sortDirection],\n );\n\n const handleSelectAll = useCallback(() => {\n if (!onSelectionChange) return;\n const allSelected = selectedRows?.size === data.length;\n if (allSelected) {\n onSelectionChange(new Set());\n } else {\n onSelectionChange(new Set(data.map((_, i) => i)));\n }\n }, [data, onSelectionChange, selectedRows]);\n\n const handleSelectRow = useCallback(\n (index: number) => {\n if (!onSelectionChange || !selectedRows) return;\n const next = new Set(selectedRows);\n if (next.has(index)) {\n next.delete(index);\n } else {\n next.add(index);\n }\n onSelectionChange(next);\n },\n [onSelectionChange, selectedRows],\n );\n\n const totalCols = columns.length + (selectable ? 1 : 0) + (expandable ? 1 : 0);\n\n return (\n <div\n className={cn('ods-table-wrapper', className)}\n role=\"region\"\n aria-label=\"Data table\"\n >\n <table className={'ods-table'}>\n <thead className={'ods-table__header'}>\n <tr>\n {selectable && (\n <th className={'ods-table__cell--checkbox'} scope=\"col\">\n <input\n type=\"checkbox\"\n aria-label=\"Select all rows\"\n checked={data.length > 0 && selectedRows?.size === data.length}\n onChange={handleSelectAll}\n />\n </th>\n )}\n {expandable && (\n <th className={'ods-table__cell--expand'} scope=\"col\" aria-label=\"Expand\" />\n )}\n {columns.map((col) => (\n <th\n key={col.key}\n className={cn(\n 'ods-table__cell',\n col.sortable && 'ods-table__cell--sortable',\n )}\n style={col.width ? { width: col.width } : undefined}\n scope=\"col\"\n aria-sort={\n sortKey === col.key\n ? sortDirection === \"asc\"\n ? \"ascending\"\n : \"descending\"\n : undefined\n }\n onClick={col.sortable ? () => handleSort(col.key) : undefined}\n >\n <span className={'ods-table__header-content'}>\n {col.header}\n {col.sortable && (\n <span\n className={cn(\n 'ods-table__sort-icon',\n sortKey === col.key && 'ods-table__sort-icon--active',\n sortKey === col.key &&\n sortDirection === \"desc\" &&\n 'ods-table__sort-icon--desc',\n )}\n aria-hidden=\"true\"\n >\n ▲\n </span>\n )}\n </span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {loading && (\n <tr>\n <td colSpan={totalCols} className={'ods-table__loading'}>\n <div className={'ods-table__loading-bar'} />\n </td>\n </tr>\n )}\n {!loading && data.length === 0 && (\n <tr>\n <td colSpan={totalCols} className={'ods-table__empty'}>\n {emptyMessage}\n </td>\n </tr>\n )}\n {data.map((row, rowIndex) => (\n <TableRow\n key={rowIndex}\n row={row}\n rowIndex={rowIndex}\n columns={columns}\n selectable={selectable}\n selectedRows={selectedRows}\n onSelectRow={handleSelectRow}\n expandable={expandable}\n renderExpanded={renderExpanded}\n totalCols={totalCols}\n />\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n\ninterface TableRowProps<T extends Record<string, any>> {\n row: T;\n rowIndex: number;\n columns: TableColumn<T>[];\n selectable: boolean;\n selectedRows?: Set<number>;\n onSelectRow: (index: number) => void;\n expandable: boolean;\n renderExpanded?: (row: T, index: number) => ReactNode;\n totalCols: number;\n}\n\nfunction TableRow<T extends Record<string, any>>({\n row,\n rowIndex,\n columns,\n selectable,\n selectedRows,\n onSelectRow,\n expandable,\n renderExpanded,\n totalCols,\n}: TableRowProps<T>) {\n const isSelected = selectedRows?.has(rowIndex) ?? false;\n const [expanded, setExpanded] = useState(false);\n\n return (\n <>\n <tr\n className={cn('ods-table__row', isSelected && 'ods-table__row--selected')}\n data-row-index={rowIndex}\n >\n {selectable && (\n <td className={'ods-table__cell--checkbox'}>\n <input\n type=\"checkbox\"\n aria-label={`Select row ${rowIndex + 1}`}\n checked={isSelected}\n onChange={() => onSelectRow(rowIndex)}\n />\n </td>\n )}\n {expandable && (\n <td className={'ods-table__cell--expand'}>\n <button\n type=\"button\"\n className={cn(\n 'ods-table__expand-btn',\n expanded && 'ods-table__expand-btn--open',\n )}\n aria-label={expanded ? \"Collapse row\" : \"Expand row\"}\n onClick={() => setExpanded(!expanded)}\n >\n ▶\n </button>\n </td>\n )}\n {columns.map((col) => (\n <td key={col.key} className={'ods-table__cell'}>\n {col.render ? col.render(row[col.key], row, rowIndex) : row[col.key]}\n </td>\n ))}\n </tr>\n {expandable && expanded && renderExpanded && (\n <tr className={'ods-table__row--expanded'}>\n <td colSpan={totalCols} className={'ods-table__expanded-cell'}>\n {renderExpanded(row, rowIndex)}\n </td>\n </tr>\n )}\n </>\n );\n}\n","\"use client\";\nimport { motion } from \"framer-motion\";\nimport { type ReactNode, useMemo, useRef, useState } from \"react\";\nimport { useTab, useTabList, useTabPanel } from \"react-aria\";\nimport { Item, type TabListStateOptions, useTabListState } from \"react-stately\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface TabItem {\n value: string;\n label: string;\n icon?: ReactNode;\n disabled?: boolean;\n children?: ReactNode;\n}\n\nexport interface TabsProps {\n items: TabItem[];\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n orientation?: \"horizontal\" | \"vertical\";\n className?: string;\n}\n\nfunction TabButton({ item, state }: { item: any; state: any }) {\n const ref = useRef<HTMLDivElement>(null);\n const { tabProps } = useTab({ key: item.key }, state, ref);\n const isSelected = state.selectedKey === item.key;\n const isDisabled = state.disabledKeys.has(item.key);\n\n // Remove motion-conflicting props\n const { onDrag, onDragStart, onDragEnd, onAnimationStart, ...safeTabProps } = tabProps as any;\n\n return (\n <motion.div\n {...safeTabProps}\n ref={ref}\n className={cn(\n 'ods-tabs__tab',\n isSelected && 'ods-tabs__tab--selected',\n isDisabled && 'ods-tabs__tab--disabled',\n )}\n >\n {item.rendered}\n {isSelected && (\n <motion.div\n className={'ods-tabs__indicator'}\n layoutId=\"ods-tabs-indicator\"\n transition={{ type: \"spring\", damping: 30, stiffness: 400 }}\n />\n )}\n </motion.div>\n );\n}\n\nfunction TabPanelContent({ state, panelContent, ...props }: any) {\n const ref = useRef<HTMLDivElement>(null);\n const { tabPanelProps } = useTabPanel(props, state, ref);\n return (\n <div {...tabPanelProps} ref={ref} className={'ods-tabs__panel'}>\n {panelContent}\n </div>\n );\n}\n\nexport function Tabs({\n items,\n value,\n defaultValue,\n onChange,\n orientation = \"horizontal\",\n className,\n}: TabsProps) {\n const [internalValue, setInternalValue] = useState(defaultValue || items[0]?.value);\n const selectedKey = value ?? internalValue;\n\n const handleSelectionChange = (key: any) => {\n const keyStr = String(key);\n if (!value) setInternalValue(keyStr);\n onChange?.(keyStr);\n };\n\n // Build a map of value -> panel content\n const panelContentMap = useMemo(() => {\n const map = new Map<string, ReactNode>();\n items.forEach((item) => {\n map.set(item.value, item.children);\n });\n return map;\n }, [items]);\n\n const stateProps: TabListStateOptions<any> = {\n children: items.map((item) => (\n <Item key={item.value} textValue={item.label}>\n {item.icon && <span className={'ods-tabs__icon'}>{item.icon}</span>}\n <span>{item.label}</span>\n </Item>\n )),\n selectedKey,\n onSelectionChange: handleSelectionChange,\n disabledKeys: items.filter((i) => i.disabled).map((i) => i.value),\n };\n\n const state = useTabListState(stateProps);\n const ref = useRef<HTMLDivElement>(null);\n const { tabListProps } = useTabList({ ...stateProps, orientation }, state, ref);\n\n const currentPanelContent = panelContentMap.get(String(selectedKey));\n\n return (\n <div className={cn('ods-tabs', `ods-tabs--${orientation}`, className)}>\n <div {...tabListProps} ref={ref} className={'ods-tabs__list'}>\n {[...state.collection].map((item) => (\n <TabButton key={item.key} item={item} state={state} />\n ))}\n </div>\n <TabPanelContent key={state.selectedKey} state={state} panelContent={currentPanelContent} />\n </div>\n );\n}\n","\"use client\";\nimport { type KeyboardEvent, type ReactNode, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface TagsInputProps {\n label?: ReactNode;\n value: string[];\n onChange?: (value: string[]) => void;\n placeholder?: string;\n maxTags?: number;\n disabled?: boolean;\n error?: ReactNode;\n helperText?: ReactNode;\n size?: \"sm\" | \"md\" | \"lg\";\n validate?: (tag: string) => boolean;\n separators?: string[];\n className?: string;\n}\n\nexport function TagsInput({\n label,\n value,\n onChange,\n placeholder = \"Add tag...\",\n maxTags,\n disabled = false,\n error,\n helperText,\n size = \"md\",\n validate,\n separators = [\"Enter\", \",\"],\n className,\n}: TagsInputProps) {\n const [draft, setDraft] = useState(\"\");\n\n const addTag = (raw: string) => {\n const tag = raw.trim();\n if (!tag) return;\n if (validate && !validate(tag)) return;\n if (value.includes(tag)) {\n setDraft(\"\");\n return;\n }\n if (maxTags && value.length >= maxTags) return;\n onChange?.([...value, tag]);\n setDraft(\"\");\n };\n\n const removeTag = (i: number) => {\n onChange?.(value.filter((_, idx) => idx !== i));\n };\n\n const onKey = (e: KeyboardEvent<HTMLInputElement>) => {\n if (separators.includes(e.key)) {\n e.preventDefault();\n addTag(draft);\n } else if (e.key === \"Backspace\" && !draft && value.length) {\n removeTag(value.length - 1);\n }\n };\n\n return (\n <div\n className={cn(\n \"ods-tags\",\n `ods-tags--${size}`,\n disabled && \"ods-tags--disabled\",\n error && \"ods-tags--error\",\n className,\n )}\n >\n {label && <label className=\"ods-tags__label\">{label}</label>}\n <div className=\"ods-tags__field\">\n {value.map((tag, i) => (\n <span key={`${tag}-${i}`} className=\"ods-tags__chip\">\n <span className=\"ods-tags__chip-text\">{tag}</span>\n <button\n type=\"button\"\n className=\"ods-tags__chip-x\"\n onClick={() => removeTag(i)}\n aria-label={`Remove ${tag}`}\n disabled={disabled}\n >\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M2 2l6 6m0-6L2 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </span>\n ))}\n <input\n className=\"ods-tags__input\"\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={onKey}\n onBlur={() => draft && addTag(draft)}\n placeholder={value.length ? \"\" : placeholder}\n disabled={disabled || (maxTags ? value.length >= maxTags : false)}\n />\n </div>\n {error ? <div className=\"ods-tags__hint ods-tags__hint--error\">{error}</div>\n : helperText ? <div className=\"ods-tags__hint\">{helperText}</div>\n : null}\n </div>\n );\n}\n","\"use client\";\nimport { type TextareaHTMLAttributes, useId, useRef, useState } from \"react\";\nimport { useTextField } from \"react-aria\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface TextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, \"size\"> {\n label?: string;\n error?: boolean;\n errorMessage?: string;\n resize?: boolean;\n maxLength?: number;\n size?: \"sm\" | \"md\" | \"lg\";\n rows?: number;\n}\n\nexport function Textarea({\n label,\n error = false,\n errorMessage,\n resize = true,\n maxLength,\n size = \"md\",\n rows = 3,\n disabled = false,\n className,\n defaultValue,\n value,\n onChange,\n ...props\n}: TextareaProps) {\n const ref = useRef<HTMLTextAreaElement>(null);\n const errorId = useId();\n const [charCount, setCharCount] = useState(() => String(value ?? defaultValue ?? \"\").length);\n\n const { labelProps, inputProps } = useTextField(\n {\n label: label || props[\"aria-label\"] || \"textarea\",\n isDisabled: disabled,\n errorMessage,\n validationState: error ? \"invalid\" : undefined,\n inputElementType: \"textarea\",\n value: value as string | undefined,\n defaultValue: defaultValue as string | undefined,\n },\n ref,\n );\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setCharCount(e.target.value.length);\n onChange?.(e);\n };\n\n return (\n <div\n className={cn(\n 'ods-textarea',\n `ods-textarea--${size}`,\n error && 'ods-textarea--error',\n disabled && 'ods-textarea--disabled',\n className,\n )}\n >\n {label && (\n <label {...labelProps} className={'ods-textarea__label'}>\n {label}\n </label>\n )}\n <div className={'ods-textarea__wrapper'}>\n <textarea\n {...inputProps}\n ref={ref}\n rows={rows}\n disabled={disabled}\n maxLength={maxLength}\n defaultValue={defaultValue}\n value={value}\n onChange={handleChange}\n className={cn(\n 'ods-textarea__field',\n !resize && 'ods-textarea__field--no-resize',\n )}\n aria-invalid={error || undefined}\n aria-describedby={error && errorMessage ? errorId : undefined}\n />\n {maxLength != null && (\n <span className={'ods-textarea__count'} aria-live=\"polite\">\n {charCount}/{maxLength}\n </span>\n )}\n </div>\n {error && errorMessage && (\n <div id={errorId} className={'ods-textarea__error-message'} role=\"alert\">\n {errorMessage}\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport type TimelineStatus = \"default\" | \"success\" | \"warning\" | \"error\" | \"muted\";\n\nexport interface TimelineItem {\n id: string;\n title: ReactNode;\n description?: ReactNode;\n meta?: ReactNode;\n icon?: ReactNode;\n status?: TimelineStatus;\n}\n\nexport interface TimelineProps {\n items: TimelineItem[];\n size?: \"sm\" | \"md\";\n className?: string;\n}\n\nexport function Timeline({ items, size = \"md\", className }: TimelineProps) {\n return (\n <ol className={cn(\"ods-timeline\", `ods-timeline--${size}`, className)}>\n {items.map((item, idx) => {\n const last = idx === items.length - 1;\n const status = item.status ?? \"default\";\n return (\n <li key={item.id} className=\"ods-timeline__item\">\n <div className=\"ods-timeline__rail\">\n <span className={cn(\"ods-timeline__dot\", `ods-timeline__dot--${status}`)} aria-hidden=\"true\">\n {item.icon}\n </span>\n {!last && <span className=\"ods-timeline__line\" aria-hidden=\"true\" />}\n </div>\n <div className=\"ods-timeline__body\">\n <div className=\"ods-timeline__title\">{item.title}</div>\n {item.description && <div className=\"ods-timeline__desc\">{item.description}</div>}\n {item.meta && <div className=\"ods-timeline__meta\">{item.meta}</div>}\n </div>\n </li>\n );\n })}\n </ol>\n );\n}\n","\"use client\";\nimport {\n Fragment,\n type KeyboardEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface TimeValue {\n hours: number;\n minutes: number;\n seconds?: number;\n period?: \"AM\" | \"PM\";\n}\n\nexport interface TimePickerProps {\n label?: ReactNode;\n value: TimeValue;\n onChange?: (value: TimeValue) => void;\n use24h?: boolean;\n showSeconds?: boolean;\n minuteStep?: number;\n secondStep?: number;\n size?: \"sm\" | \"md\" | \"lg\";\n disabled?: boolean;\n error?: ReactNode;\n helperText?: ReactNode;\n className?: string;\n}\n\ntype Segment = \"hours\" | \"minutes\" | \"seconds\";\n\nconst pad = (n: number) => n.toString().padStart(2, \"0\");\n\nfunction format(v: TimeValue, use24h: boolean, showSeconds: boolean): string {\n const base = `${pad(v.hours)}:${pad(v.minutes)}${showSeconds ? `:${pad(v.seconds ?? 0)}` : \"\"}`;\n return use24h ? base : `${base} ${v.period ?? \"AM\"}`;\n}\n\nfunction clampSeg(seg: Segment, n: number, use24h: boolean): number {\n if (seg === \"hours\") {\n if (use24h) return Math.max(0, Math.min(23, n));\n return Math.max(1, Math.min(12, n));\n }\n return Math.max(0, Math.min(59, n));\n}\n\nexport function TimePicker({\n label,\n value,\n onChange,\n use24h = false,\n showSeconds = false,\n minuteStep = 1,\n secondStep = 1,\n size = \"md\",\n disabled = false,\n error,\n helperText,\n className,\n}: TimePickerProps) {\n const [open, setOpen] = useState(false);\n const [activeSeg, setActiveSeg] = useState<Segment | null>(null);\n // Keep the in-progress draft in a ref so rapid keystrokes always see the\n // latest digit (state updates are async and would otherwise drop key #2).\n const draftRef = useRef<string>(\"\");\n const wrapRef = useRef<HTMLDivElement>(null);\n const hoursRef = useRef<HTMLButtonElement>(null);\n const minutesRef = useRef<HTMLButtonElement>(null);\n const secondsRef = useRef<HTMLButtonElement>(null);\n\n const refOf = (s: Segment) =>\n s === \"hours\" ? hoursRef : s === \"minutes\" ? minutesRef : secondsRef;\n\n useEffect(() => {\n if (!open) return;\n const onDoc = (e: MouseEvent) => {\n if (!wrapRef.current?.contains(e.target as Node)) {\n setOpen(false);\n setActiveSeg(null);\n }\n };\n document.addEventListener(\"mousedown\", onDoc);\n return () => document.removeEventListener(\"mousedown\", onDoc);\n }, [open]);\n\n const commit = useCallback(\n (seg: Segment, n: number) => {\n const next: TimeValue = { ...value, [seg]: clampSeg(seg, n, use24h) };\n if (showSeconds && next.seconds === undefined) next.seconds = 0;\n onChange?.(next);\n },\n [value, use24h, onChange, showSeconds],\n );\n\n const stepBy = (seg: Segment, delta: number) => {\n const step = seg === \"hours\" ? 1 : seg === \"minutes\" ? minuteStep : secondStep;\n const cur = (seg === \"hours\" ? value.hours : seg === \"minutes\" ? value.minutes : value.seconds ?? 0);\n let next = cur + delta * step;\n if (seg === \"hours\") {\n const max = use24h ? 23 : 12;\n const min = use24h ? 0 : 1;\n if (next > max) next = min;\n if (next < min) next = max;\n } else {\n if (next >= 60) next -= 60;\n if (next < 0) next += 60;\n }\n commit(seg, next);\n };\n\n const setPeriod = (p: \"AM\" | \"PM\") => onChange?.({ ...value, period: p });\n\n const focusSegment = (seg: Segment) => {\n setActiveSeg(seg);\n draftRef.current = \"\";\n requestAnimationFrame(() => refOf(seg).current?.focus());\n };\n\n const segOrder = (): Segment[] => (showSeconds ? [\"hours\", \"minutes\", \"seconds\"] : [\"hours\", \"minutes\"]);\n\n const handleSegKey = (seg: Segment) => (e: KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n stepBy(seg, 1);\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n stepBy(seg, -1);\n } else if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n const order = segOrder();\n focusSegment(order[Math.max(0, order.indexOf(seg) - 1)]);\n } else if (e.key === \"ArrowRight\" || e.key === \":\" || e.key === \" \") {\n e.preventDefault();\n const order = segOrder();\n focusSegment(order[Math.min(order.length - 1, order.indexOf(seg) + 1)]);\n } else if (/^[0-9]$/.test(e.key)) {\n e.preventDefault();\n // Two-digit logic with overflow heuristic:\n // - \"0\" alone keeps draft \"0\" so the next digit appends\n // - first digit too large to fit a 2nd one (e.g. \"5\" in 12h hours, or\n // \"6\"+ for minutes/seconds) commits and advances immediately\n const max = seg === \"hours\" ? (use24h ? 23 : 12) : 59;\n const cur = draftRef.current;\n const combined = cur + e.key;\n const combinedNum = parseInt(combined, 10);\n\n if (cur.length === 0) {\n // First key\n const n = parseInt(e.key, 10);\n if (n * 10 > max) {\n // Cannot prefix a 2nd digit — commit and jump to next segment\n commit(seg, n);\n draftRef.current = \"\";\n const order = segOrder();\n const nx = order[order.indexOf(seg) + 1];\n if (nx) focusSegment(nx);\n } else {\n draftRef.current = e.key;\n commit(seg, n);\n }\n } else {\n // Second key\n if (combinedNum <= max) {\n commit(seg, combinedNum);\n } else {\n commit(seg, parseInt(e.key, 10));\n }\n draftRef.current = \"\";\n const order = segOrder();\n const nx = order[order.indexOf(seg) + 1];\n if (nx) focusSegment(nx);\n }\n } else if (e.key === \"Backspace\") {\n e.preventDefault();\n draftRef.current = \"\";\n commit(seg, 0);\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n setActiveSeg(null);\n draftRef.current = \"\";\n }\n };\n\n const segButton = (seg: Segment, val: number) => (\n <button\n ref={refOf(seg)}\n type=\"button\"\n className={cn(\"ods-timepicker__seg\", activeSeg === seg && \"ods-timepicker__seg--active\")}\n onClick={() => focusSegment(seg)}\n onKeyDown={handleSegKey(seg)}\n onBlur={() => activeSeg === seg && setActiveSeg(null)}\n aria-label={seg}\n >\n {pad(val)}\n </button>\n );\n\n return (\n <div\n ref={wrapRef}\n className={cn(\n \"ods-timepicker\",\n `ods-timepicker--${size}`,\n disabled && \"ods-timepicker--disabled\",\n error && \"ods-timepicker--error\",\n className,\n )}\n >\n {label && <label className=\"ods-timepicker__label\">{label}</label>}\n <button\n type=\"button\"\n className=\"ods-timepicker__trigger\"\n onClick={() => !disabled && setOpen((o) => !o)}\n disabled={disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M8 4.5V8l2.5 1.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n <span className=\"ods-timepicker__value\">{format(value, use24h, showSeconds)}</span>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\" className=\"ods-timepicker__chev\">\n <path d=\"M3 4.5 6 7.5 9 4.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n {open && (\n <div className=\"ods-timepicker__popover\" role=\"dialog\">\n <div className=\"ods-timepicker__head\">\n <div className=\"ods-timepicker__display\">\n {segButton(\"hours\", value.hours)}\n <span className=\"ods-timepicker__display-sep\">:</span>\n {segButton(\"minutes\", value.minutes)}\n {showSeconds && (\n <>\n <span className=\"ods-timepicker__display-sep\">:</span>\n {segButton(\"seconds\", value.seconds ?? 0)}\n </>\n )}\n </div>\n {!use24h && (\n <div className=\"ods-timepicker__period\">\n <button\n type=\"button\"\n className={cn(\"ods-timepicker__period-btn\", value.period === \"AM\" && \"ods-timepicker__period-btn--active\")}\n onClick={() => setPeriod(\"AM\")}\n >AM</button>\n <button\n type=\"button\"\n className={cn(\"ods-timepicker__period-btn\", value.period === \"PM\" && \"ods-timepicker__period-btn--active\")}\n onClick={() => setPeriod(\"PM\")}\n >PM</button>\n </div>\n )}\n </div>\n <div className=\"ods-timepicker__body\">\n {segOrder().map((seg, i, arr) => (\n <Fragment key={seg}>\n <div className=\"ods-timepicker__col\">\n <span className=\"ods-timepicker__col-lbl\">\n {seg === \"hours\" ? \"HOUR\" : seg === \"minutes\" ? \"MIN\" : \"SEC\"}\n </span>\n <button type=\"button\" className=\"ods-timepicker__step\" onClick={() => stepBy(seg, 1)} aria-label={`${seg} up`}>\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5 11l4-4 4 4\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n <span className=\"ods-timepicker__col-val\">\n {pad(seg === \"hours\" ? value.hours : seg === \"minutes\" ? value.minutes : value.seconds ?? 0)}\n </span>\n <button type=\"button\" className=\"ods-timepicker__step\" onClick={() => stepBy(seg, -1)} aria-label={`${seg} down`}>\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5 7l4 4 4-4\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n </div>\n {i < arr.length - 1 && <span className=\"ods-timepicker__sep\">:</span>}\n </Fragment>\n ))}\n </div>\n </div>\n )}\n {error ? <div className=\"ods-timepicker__hint ods-timepicker__hint--error\">{error}</div>\n : helperText ? <div className=\"ods-timepicker__hint\">{helperText}</div>\n : null}\n </div>\n );\n}\n","\"use client\";\nimport { type ReactNode, useEffect, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface TimezoneOption {\n /** IANA name, e.g. \"America/Los_Angeles\". */\n iana: string;\n /** Friendly label e.g. \"Pacific Time\". */\n label: string;\n /** UTC offset string e.g. \"UTC−8\" or \"UTC+5:30\". */\n offset: string;\n /** Optional country / region for filtering. */\n region?: string;\n}\n\nexport interface TimezonePickerProps {\n label?: ReactNode;\n value: string; // IANA name\n onChange?: (iana: string) => void;\n options?: TimezoneOption[];\n size?: \"sm\" | \"md\" | \"lg\";\n disabled?: boolean;\n error?: ReactNode;\n helperText?: ReactNode;\n placeholder?: string;\n className?: string;\n}\n\nconst DEFAULT_TZS: TimezoneOption[] = [\n { iana: \"America/Los_Angeles\", label: \"Pacific Time\", offset: \"UTC−8\" },\n { iana: \"America/Denver\", label: \"Mountain Time\", offset: \"UTC−7\" },\n { iana: \"America/Chicago\", label: \"Central Time\", offset: \"UTC−6\" },\n { iana: \"America/New_York\", label: \"Eastern Time\", offset: \"UTC−5\" },\n { iana: \"Europe/London\", label: \"London\", offset: \"UTC+0\" },\n { iana: \"Europe/Berlin\", label: \"Berlin\", offset: \"UTC+1\" },\n { iana: \"Europe/Athens\", label: \"Athens\", offset: \"UTC+2\" },\n { iana: \"Asia/Dubai\", label: \"Dubai\", offset: \"UTC+4\" },\n { iana: \"Asia/Kolkata\", label: \"India Standard Time\", offset: \"UTC+5:30\" },\n { iana: \"Asia/Singapore\", label: \"Singapore\", offset: \"UTC+8\" },\n { iana: \"Asia/Tokyo\", label: \"Tokyo\", offset: \"UTC+9\" },\n { iana: \"Australia/Sydney\", label: \"Sydney\", offset: \"UTC+10\" },\n];\n\nexport function TimezonePicker({\n label,\n value,\n onChange,\n options = DEFAULT_TZS,\n size = \"md\",\n disabled = false,\n error,\n helperText,\n placeholder = \"Select timezone\",\n className,\n}: TimezonePickerProps) {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const wrapRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const selected = options.find((o) => o.iana === value);\n\n const filtered = useMemo(() => {\n if (!query.trim()) return options;\n const q = query.trim().toLowerCase();\n return options.filter(\n (o) =>\n o.iana.toLowerCase().includes(q) ||\n o.label.toLowerCase().includes(q) ||\n o.offset.toLowerCase().includes(q) ||\n o.region?.toLowerCase().includes(q),\n );\n }, [options, query]);\n\n useEffect(() => {\n if (!open) return;\n const onDoc = (e: MouseEvent) => {\n if (!wrapRef.current?.contains(e.target as Node)) {\n setOpen(false);\n setQuery(\"\");\n }\n };\n document.addEventListener(\"mousedown\", onDoc);\n return () => document.removeEventListener(\"mousedown\", onDoc);\n }, [open]);\n\n useEffect(() => {\n if (open) requestAnimationFrame(() => inputRef.current?.focus());\n }, [open]);\n\n const select = (iana: string) => {\n onChange?.(iana);\n setOpen(false);\n setQuery(\"\");\n };\n\n return (\n <div\n ref={wrapRef}\n className={cn(\"ods-tzpicker\", `ods-tzpicker--${size}`, disabled && \"ods-tzpicker--disabled\", error && \"ods-tzpicker--error\", className)}\n >\n {label && <label className=\"ods-tzpicker__label\">{label}</label>}\n <button\n type=\"button\"\n className=\"ods-tzpicker__trigger\"\n onClick={() => !disabled && setOpen((o) => !o)}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2 8h12M8 2c1.8 2 1.8 10 0 12M8 2c-1.8 2-1.8 10 0 12\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinecap=\"round\" />\n </svg>\n <span className=\"ods-tzpicker__info\">\n {selected ? (\n <>\n <span className=\"ods-tzpicker__name\">{selected.label}</span>\n <span className=\"ods-tzpicker__meta\">\n {selected.iana.split(\"/\").pop()?.replace(/_/g, \" \")} · {selected.offset}\n </span>\n </>\n ) : (\n <span className=\"ods-tzpicker__name ods-tzpicker__name--placeholder\">{placeholder}</span>\n )}\n </span>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\" className=\"ods-tzpicker__chev\">\n <path d=\"M3 4.5 6 7.5 9 4.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n {open && (\n <div className=\"ods-tzpicker__popover\">\n <div className=\"ods-tzpicker__search\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"6\" cy=\"6\" r=\"4.5\" stroke=\"currentColor\" strokeWidth=\"1.4\" />\n <path d=\"m12 12-2.5-2.5\" stroke=\"currentColor\" strokeWidth=\"1.4\" strokeLinecap=\"round\" />\n </svg>\n <input\n ref={inputRef}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder=\"Search timezone or city…\"\n aria-label=\"Search timezones\"\n />\n </div>\n <ul className=\"ods-tzpicker__list\" role=\"listbox\">\n {filtered.length === 0 && <li className=\"ods-tzpicker__empty\">No timezones found</li>}\n {filtered.map((opt) => (\n <li key={opt.iana}>\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={opt.iana === value}\n className={cn(\"ods-tzpicker__opt\", opt.iana === value && \"ods-tzpicker__opt--selected\")}\n onClick={() => select(opt.iana)}\n >\n <span className=\"ods-tzpicker__opt-text\">\n <span className=\"ods-tzpicker__opt-name\">{opt.label}</span>\n <span className=\"ods-tzpicker__opt-iana\">{opt.iana}</span>\n </span>\n <span className=\"ods-tzpicker__opt-off\">{opt.offset}</span>\n {opt.iana === value && (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\" className=\"ods-tzpicker__opt-check\">\n <path d=\"m3 7.5 3 3 5-6\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )}\n </button>\n </li>\n ))}\n </ul>\n </div>\n )}\n {error ? <div className=\"ods-tzpicker__hint ods-tzpicker__hint--error\">{error}</div>\n : helperText ? <div className=\"ods-tzpicker__hint\">{helperText}</div>\n : null}\n </div>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface ToggleOption<T extends string = string> {\n value: T;\n label: ReactNode;\n icon?: ReactNode;\n disabled?: boolean;\n}\n\nexport interface ToggleProps<T extends string = string> {\n options: ToggleOption<T>[];\n value: T;\n onChange?: (value: T) => void;\n size?: \"sm\" | \"md\" | \"lg\";\n fullWidth?: boolean;\n className?: string;\n \"aria-label\"?: string;\n}\n\nexport function Toggle<T extends string = string>({\n options,\n value,\n onChange,\n size = \"md\",\n fullWidth = false,\n className,\n ...props\n}: ToggleProps<T>) {\n return (\n <div\n role=\"radiogroup\"\n aria-label={props[\"aria-label\"]}\n className={cn(\n \"ods-toggle\",\n `ods-toggle--${size}`,\n fullWidth && \"ods-toggle--full\",\n className,\n )}\n >\n {options.map((opt) => {\n const active = opt.value === value;\n return (\n <button\n key={opt.value}\n type=\"button\"\n role=\"radio\"\n aria-checked={active}\n disabled={opt.disabled}\n onClick={() => onChange?.(opt.value)}\n className={cn(\n \"ods-toggle__opt\",\n active && \"ods-toggle__opt--active\",\n )}\n >\n {opt.icon && <span className=\"ods-toggle__icon\" aria-hidden=\"true\">{opt.icon}</span>}\n <span className=\"ods-toggle__label\">{opt.label}</span>\n </button>\n );\n })}\n </div>\n );\n}\n","\"use client\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../utils/cn\";\n\n// ─────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────\nexport type ToastVariant = \"success\" | \"error\" | \"warning\" | \"info\";\nexport type ToastPosition =\n | \"top-left\" | \"top-center\" | \"top-right\"\n | \"bottom-left\" | \"bottom-center\" | \"bottom-right\";\n\nexport interface ToastOptions {\n variant?: ToastVariant;\n /** Shorthand — shown as the title. */\n message?: ReactNode;\n title?: ReactNode;\n description?: ReactNode;\n icon?: ReactNode;\n action?: ReactNode;\n /** Completely replaces the default body. */\n render?: (props: { id: string; dismiss: () => void }) => ReactNode;\n duration?: number;\n closeable?: boolean;\n position?: ToastPosition;\n}\n\ninterface ToastItem extends Omit<ToastOptions, \"duration\" | \"closeable\" | \"variant\" | \"position\"> {\n id: string;\n variant: ToastVariant;\n duration: number;\n closeable: boolean;\n position: ToastPosition;\n}\n\ninterface ToastContextValue {\n toast: (options: ToastOptions) => string;\n dismiss: (id: string) => void;\n dismissAll: (position?: ToastPosition) => void;\n}\n\n// ─────────────────────────────────────────────\n// Default icons\n// ─────────────────────────────────────────────\nconst defaultIcons: Record<ToastVariant, ReactNode> = {\n success: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#22c55e\" fillOpacity=\"0.15\" />\n <path d=\"m6.5 10 2.5 2.5L14 7.5\" stroke=\"#16a34a\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n ),\n error: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#ef4444\" fillOpacity=\"0.15\" />\n <path d=\"M7 7l6 6M13 7l-6 6\" stroke=\"#dc2626\" strokeWidth=\"1.7\" strokeLinecap=\"round\" />\n </svg>\n ),\n warning: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#f59e0b\" fillOpacity=\"0.15\" />\n <path d=\"M10 6v5M10 13.5v.5\" stroke=\"#d97706\" strokeWidth=\"1.7\" strokeLinecap=\"round\" />\n </svg>\n ),\n info: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#6c5ce7\" fillOpacity=\"0.15\" />\n <path d=\"M10 9v5M10 6v0.5\" stroke=\"#5b4bd1\" strokeWidth=\"1.7\" strokeLinecap=\"round\" />\n </svg>\n ),\n};\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\n// ─────────────────────────────────────────────\n// Toast body\n// ─────────────────────────────────────────────\nfunction ToastBody({ item, onDismiss }: { item: ToastItem; onDismiss: (id: string) => void }) {\n const dismiss = () => onDismiss(item.id);\n\n if (item.render) return <>{item.render({ id: item.id, dismiss })}</>;\n\n const title = item.title ?? item.message;\n return (\n <>\n <span className=\"ods-toast__icon\" aria-hidden=\"true\">\n {item.icon ?? defaultIcons[item.variant]}\n </span>\n <div className=\"ods-toast__body\">\n {title && <div className=\"ods-toast__title\">{title}</div>}\n {item.description && <div className=\"ods-toast__desc\">{item.description}</div>}\n </div>\n {item.action && <div className=\"ods-toast__action\">{item.action}</div>}\n {item.closeable && (\n <button\n type=\"button\"\n className=\"ods-toast__close\"\n aria-label=\"Dismiss\"\n onClick={(e) => { e.stopPropagation(); dismiss(); }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M3 3l8 8M11 3l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n )}\n </>\n );\n}\n\n// ─────────────────────────────────────────────\n// Stack per-position (handles stacking, hover expand, click pin)\n// ─────────────────────────────────────────────\ninterface StackProps {\n items: ToastItem[];\n position: ToastPosition;\n onDismiss: (id: string) => void;\n maxStack: number;\n}\n\nfunction PositionStack({ items, position, onDismiss, maxStack }: StackProps) {\n const [hovered, setHovered] = useState(false);\n const [pinned, setPinned] = useState(false);\n const expanded = hovered || pinned;\n\n // Display order: newest first (index 0 = newest)\n const ordered = useMemo(() => [...items].reverse(), [items]);\n const isBottom = position.startsWith(\"bottom\");\n const dir = isBottom ? -1 : 1;\n\n // Reset pinned state when the last toast dismisses\n if (pinned && items.length === 0) setPinned(false);\n\n // Per-index stacked transform (only used when collapsed)\n const stackedStyle = (idx: number) => {\n if (expanded) return { y: 0, scale: 1, opacity: 1 };\n if (idx === 0) return { y: 0, scale: 1, opacity: 1 };\n if (idx < maxStack) {\n return {\n y: idx * 10 * dir,\n scale: 1 - idx * 0.05,\n opacity: 1 - idx * 0.22,\n };\n }\n // Hidden beyond the stack depth\n return { y: maxStack * 10 * dir, scale: 1 - maxStack * 0.05, opacity: 0 };\n };\n\n return (\n <div\n className={cn(\n \"ods-toast-stack\",\n `ods-toast-stack--${position}`,\n expanded && \"ods-toast-stack--expanded\",\n pinned && \"ods-toast-stack--pinned\",\n )}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n aria-live=\"polite\"\n >\n <div\n className={cn(\"ods-toast-stack__scroll\", expanded && \"ods-toast-stack__scroll--expanded\")}\n style={expanded ? { flexDirection: isBottom ? \"column-reverse\" : \"column\" } : undefined}\n onClick={(e) => {\n // Only handle clicks on the container itself (not on a toast or its buttons).\n if (e.target === e.currentTarget && items.length > 1) {\n setPinned((p) => !p);\n }\n }}\n >\n <AnimatePresence mode=\"popLayout\">\n {ordered.map((item, idx) => {\n const s = stackedStyle(idx);\n return (\n <motion.div\n key={item.id}\n layout\n className={cn(\n \"ods-toast\",\n `ods-toast--${item.variant}`,\n !expanded && \"ods-toast--stacked\",\n )}\n style={{\n zIndex: ordered.length - idx,\n transformOrigin: isBottom ? \"bottom center\" : \"top center\",\n }}\n initial={{ opacity: 0, y: 24 * -dir, scale: 0.96 }}\n animate={{ opacity: s.opacity, y: s.y, scale: s.scale }}\n exit={{ opacity: 0, y: 10 * -dir, scale: 0.96 }}\n transition={{ type: \"tween\", duration: 0.28, ease: [0.32, 0.72, 0, 1] }}\n onClick={(e) => {\n // Click on the newest toast (or anywhere on a stacked toast) toggles pin\n if (!expanded && items.length > 1) {\n e.stopPropagation();\n setPinned(true);\n }\n }}\n >\n <ToastBody item={item} onDismiss={onDismiss} />\n </motion.div>\n );\n })}\n </AnimatePresence>\n </div>\n {expanded && items.length > 1 && pinned && (\n <button\n type=\"button\"\n className=\"ods-toast-stack__collapse\"\n onClick={() => setPinned(false)}\n aria-label=\"Collapse toasts\"\n >\n Collapse\n </button>\n )}\n </div>\n );\n}\n\n// ─────────────────────────────────────────────\n// Provider\n// ─────────────────────────────────────────────\nexport interface ToastProviderProps {\n children: ReactNode;\n defaultPosition?: ToastPosition;\n /** How many toasts to show \"peeking\" when collapsed. Default 3. */\n maxStack?: number;\n}\n\nconst POSITIONS: ToastPosition[] = [\n \"top-left\", \"top-center\", \"top-right\",\n \"bottom-left\", \"bottom-center\", \"bottom-right\",\n];\n\nexport function ToastProvider({\n children,\n defaultPosition = \"bottom-right\",\n maxStack = 3,\n}: ToastProviderProps) {\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n const timers = useRef<Map<string, ReturnType<typeof setTimeout>>>(new Map());\n const idCounter = useRef(0);\n\n const dismiss = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n const timer = timers.current.get(id);\n if (timer) {\n clearTimeout(timer);\n timers.current.delete(id);\n }\n }, []);\n\n const dismissAll = useCallback((position?: ToastPosition) => {\n setToasts((prev) => {\n const remaining = position ? prev.filter((t) => t.position !== position) : [];\n for (const t of prev) {\n if (!remaining.find((r) => r.id === t.id)) {\n const timer = timers.current.get(t.id);\n if (timer) { clearTimeout(timer); timers.current.delete(t.id); }\n }\n }\n return remaining;\n });\n }, []);\n\n const toast = useCallback(\n (options: ToastOptions): string => {\n const id = `toast-${++idCounter.current}`;\n const item: ToastItem = {\n id,\n variant: options.variant ?? \"info\",\n message: options.message,\n title: options.title,\n description: options.description,\n icon: options.icon,\n action: options.action,\n render: options.render,\n duration: options.duration ?? 5000,\n closeable: options.closeable ?? true,\n position: options.position ?? defaultPosition,\n };\n setToasts((prev) => [...prev, item]);\n if (item.duration > 0) {\n const timer = setTimeout(() => dismiss(id), item.duration);\n timers.current.set(id, timer);\n }\n return id;\n },\n [dismiss, defaultPosition],\n );\n\n const groups = useMemo(() => {\n const out: Record<ToastPosition, ToastItem[]> = {\n \"top-left\": [], \"top-center\": [], \"top-right\": [],\n \"bottom-left\": [], \"bottom-center\": [], \"bottom-right\": [],\n };\n for (const t of toasts) out[t.position].push(t);\n return out;\n }, [toasts]);\n\n const ctx: ToastContextValue = { toast, dismiss, dismissAll };\n\n const containers = (\n <>\n {POSITIONS.map((pos) => {\n const list = groups[pos];\n if (list.length === 0) return null;\n return (\n <PositionStack\n key={pos}\n items={list}\n position={pos}\n maxStack={maxStack}\n onDismiss={dismiss}\n />\n );\n })}\n </>\n );\n\n return (\n <ToastContext.Provider value={ctx}>\n {children}\n {typeof document !== \"undefined\" && createPortal(containers, document.body)}\n </ToastContext.Provider>\n );\n}\n\n// ─────────────────────────────────────────────\n// Hook\n// ─────────────────────────────────────────────\nexport function useToast() {\n const ctx = useContext(ToastContext);\n if (!ctx) throw new Error(\"useToast must be used within a ToastProvider\");\n const { toast: raw, dismiss, dismissAll } = ctx;\n\n const toast = Object.assign((options: ToastOptions) => raw(options), {\n success: (message: ReactNode, opts: Omit<ToastOptions, \"variant\" | \"message\"> = {}) =>\n raw({ ...opts, variant: \"success\", message }),\n error: (message: ReactNode, opts: Omit<ToastOptions, \"variant\" | \"message\"> = {}) =>\n raw({ ...opts, variant: \"error\", message }),\n warning: (message: ReactNode, opts: Omit<ToastOptions, \"variant\" | \"message\"> = {}) =>\n raw({ ...opts, variant: \"warning\", message }),\n info: (message: ReactNode, opts: Omit<ToastOptions, \"variant\" | \"message\"> = {}) =>\n raw({ ...opts, variant: \"info\", message }),\n custom: (\n render: NonNullable<ToastOptions[\"render\"]>,\n opts: Omit<ToastOptions, \"render\"> = {},\n ) => raw({ ...opts, render }),\n });\n\n return { toast, dismiss, dismissAll };\n}\n","\"use client\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { cloneElement, type ReactElement, type ReactNode, useCallback, useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { useTooltip, useTooltipTrigger } from \"react-aria\";\nimport { createPortal } from \"react-dom\";\nimport { useTooltipTriggerState } from \"react-stately\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface TooltipProps {\n content: ReactNode;\n position?: \"top\" | \"bottom\" | \"left\" | \"right\";\n delay?: number;\n offset?: number;\n children: ReactElement;\n className?: string;\n}\n\ninterface Coords {\n top: number;\n left: number;\n}\n\nfunction computePosition(rect: DOMRect, tipRect: DOMRect, position: NonNullable<TooltipProps[\"position\"]>, offset: number): Coords {\n const cx = rect.left + rect.width / 2;\n const cy = rect.top + rect.height / 2;\n switch (position) {\n case \"top\":\n return { top: rect.top - tipRect.height - offset, left: cx - tipRect.width / 2 };\n case \"bottom\":\n return { top: rect.bottom + offset, left: cx - tipRect.width / 2 };\n case \"left\":\n return { top: cy - tipRect.height / 2, left: rect.left - tipRect.width - offset };\n case \"right\":\n return { top: cy - tipRect.height / 2, left: rect.right + offset };\n }\n}\n\nconst animVariants: Record<NonNullable<TooltipProps[\"position\"]>, { initial: any; animate: any }> = {\n top: { initial: { opacity: 0, y: 4 }, animate: { opacity: 1, y: 0 } },\n bottom: { initial: { opacity: 0, y: -4 }, animate: { opacity: 1, y: 0 } },\n left: { initial: { opacity: 0, x: 4 }, animate: { opacity: 1, x: 0 } },\n right: { initial: { opacity: 0, x: -4 }, animate: { opacity: 1, x: 0 } },\n};\n\nfunction TooltipContent({\n state,\n content,\n position = \"top\",\n triggerRef,\n className,\n offset,\n}: {\n state: ReturnType<typeof useTooltipTriggerState>;\n content: ReactNode;\n position: NonNullable<TooltipProps[\"position\"]>;\n triggerRef: React.RefObject<HTMLElement | null>;\n className?: string;\n offset: number;\n}) {\n const { tooltipProps } = useTooltip({ isOpen: state.isOpen }, state);\n const tipRef = useRef<HTMLDivElement | null>(null);\n const [coords, setCoords] = useState<Coords | null>(null);\n\n const reposition = useCallback(() => {\n if (!triggerRef.current || !tipRef.current) return;\n const trigRect = triggerRef.current.getBoundingClientRect();\n const tipRect = tipRef.current.getBoundingClientRect();\n setCoords(computePosition(trigRect, tipRect, position, offset));\n }, [triggerRef, position, offset]);\n\n // Initial mount has zero size — re-measure next frame for accurate placement.\n useLayoutEffect(() => {\n if (!state.isOpen) return;\n reposition();\n const id = requestAnimationFrame(reposition);\n return () => cancelAnimationFrame(id);\n }, [state.isOpen, reposition]);\n\n useEffect(() => {\n if (!state.isOpen) return;\n const handler = () => reposition();\n window.addEventListener(\"scroll\", handler, true);\n window.addEventListener(\"resize\", handler);\n return () => {\n window.removeEventListener(\"scroll\", handler, true);\n window.removeEventListener(\"resize\", handler);\n };\n }, [state.isOpen, reposition]);\n\n const variants = animVariants[position];\n const { onDrag, onDragStart, onDragEnd, onAnimationStart, ...safeTipProps } = tooltipProps as any;\n\n const portalContent = (\n <AnimatePresence>\n {state.isOpen && (\n // Outer wrapper owns positioning. No transform.\n <div\n className=\"ods-tooltip__wrapper\"\n style={{\n position: \"fixed\",\n zIndex: 1500,\n top: coords?.top ?? -9999,\n left: coords?.left ?? -9999,\n visibility: coords ? \"visible\" : \"hidden\",\n pointerEvents: \"none\",\n }}\n >\n {/* Inner motion div owns the entrance animation. */}\n <motion.div\n ref={tipRef}\n {...safeTipProps}\n role=\"tooltip\"\n data-position={position}\n className={cn(\"ods-tooltip\", className)}\n initial={variants.initial}\n animate={variants.animate}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15, ease: \"easeOut\" }}\n >\n {content}\n <span className=\"ods-tooltip__arrow\" aria-hidden=\"true\" />\n </motion.div>\n </div>\n )}\n </AnimatePresence>\n );\n\n if (typeof document === \"undefined\") return null;\n return createPortal(portalContent, document.body);\n}\n\nexport function Tooltip({\n content,\n position = \"top\",\n delay = 200,\n offset = 8,\n children,\n className,\n}: TooltipProps) {\n const triggerRef = useRef<HTMLElement>(null);\n const state = useTooltipTriggerState({ delay });\n const { triggerProps } = useTooltipTrigger({ delay }, state, triggerRef);\n\n return (\n <>\n {cloneElement(children, {\n ...triggerProps,\n ref: triggerRef,\n } as any)}\n <TooltipContent\n state={state}\n content={content}\n position={position}\n triggerRef={triggerRef}\n offset={offset}\n className={className}\n />\n </>\n );\n}\n","\"use client\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface TopBarBreadcrumb {\n label: string;\n href?: string;\n}\n\nexport interface TopBarProps extends Omit<HTMLAttributes<HTMLElement>, \"title\"> {\n title?: string;\n breadcrumbs?: TopBarBreadcrumb[];\n actions?: ReactNode;\n searchPlaceholder?: string;\n onSearch?: (value: string) => void;\n children?: ReactNode;\n className?: string;\n}\n\nexport function TopBar({\n title,\n breadcrumbs,\n actions,\n searchPlaceholder = \"Search...\",\n onSearch,\n children,\n className,\n ...props\n}: TopBarProps) {\n return (\n <header {...props} className={cn('ods-topbar', className)}>\n <div className={'ods-topbar__left'}>\n {breadcrumbs && breadcrumbs.length > 0 && (\n <nav className={'ods-topbar__breadcrumbs'} aria-label=\"Breadcrumb\">\n <ol>\n {breadcrumbs.map((crumb, idx) => (\n <li key={idx} className={'ods-topbar__crumb'}>\n {idx > 0 && (\n <span className={'ods-topbar__separator'} aria-hidden=\"true\">\n /\n </span>\n )}\n {crumb.href ? (\n <a href={crumb.href}>{crumb.label}</a>\n ) : (\n <span aria-current={idx === breadcrumbs.length - 1 ? \"page\" : undefined}>\n {crumb.label}\n </span>\n )}\n </li>\n ))}\n </ol>\n </nav>\n )}\n {title && <h1 className={'ods-topbar__title'}>{title}</h1>}\n </div>\n\n {children && <div className={'ods-topbar__center'}>{children}</div>}\n\n <div className={'ods-topbar__right'}>\n {onSearch && (\n <div className={'ods-topbar__search'}>\n <svg\n className={'ods-topbar__search-icon'}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z\"\n clipRule=\"evenodd\"\n />\n </svg>\n <input\n type=\"search\"\n placeholder={searchPlaceholder}\n onChange={(e) => onSearch(e.target.value)}\n className={'ods-topbar__search-input'}\n aria-label={searchPlaceholder}\n />\n </div>\n )}\n {actions && <div className={'ods-topbar__actions'}>{actions}</div>}\n </div>\n </header>\n );\n}\n","import type { DeepPartial, OdsConfig } from \"@octaviaflow/config\";\nimport { generateCssVars, resolveConfig } from \"@octaviaflow/config\";\nimport { createContext, type ReactNode, useContext, useEffect, useMemo } from \"react\";\nimport { OverlayProvider } from \"react-aria\";\nimport { odsMotion } from \"../utils/motion\";\n\ntype OdsContextValue = {\n config: OdsConfig;\n};\n\nconst OdsContext = createContext<OdsContextValue | null>(null);\n\ntype OdsProviderProps = {\n config?: DeepPartial<OdsConfig>;\n children: ReactNode;\n};\n\nexport function OdsProvider({ config: userConfig, children }: OdsProviderProps) {\n const resolved = useMemo(() => resolveConfig(userConfig), [userConfig]);\n\n useEffect(() => {\n const cssVarsBlock = generateCssVars(resolved);\n // Extract individual declarations from the :root { ... } block\n const match = cssVarsBlock.match(/:root\\s*\\{([\\s\\S]*)\\}/);\n if (match) {\n const declarations = match[1].trim().split(\"\\n\");\n for (const decl of declarations) {\n const trimmed = decl.trim().replace(/;$/, \"\");\n const colonIndex = trimmed.indexOf(\":\");\n if (colonIndex > -1) {\n const prop = trimmed.slice(0, colonIndex).trim();\n const value = trimmed.slice(colonIndex + 1).trim();\n document.documentElement.style.setProperty(prop, value);\n }\n }\n }\n }, [resolved]);\n\n const contextValue = useMemo(() => ({ config: resolved }), [resolved]);\n\n return (\n <OdsContext.Provider value={contextValue}>\n <OverlayProvider>{children}</OverlayProvider>\n </OdsContext.Provider>\n );\n}\n\nexport function useOds(): OdsConfig {\n const ctx = useContext(OdsContext);\n if (!ctx) {\n throw new Error(\"useOds must be used within an OdsProvider\");\n }\n return ctx.config;\n}\n\ntype MotionPreset = Record<string, unknown>;\ntype MotionPresets = Record<string, MotionPreset>;\n\nconst emptyMotion: MotionPresets = {\n fadeIn: {},\n scaleIn: {},\n slideRight: {},\n slideUp: {},\n tap: {},\n hover: {},\n};\n\nexport function useOdsMotion(): MotionPresets {\n const config = useOds();\n\n return useMemo(() => {\n if (!config.motion.enabled) {\n return emptyMotion;\n }\n\n if (config.motion.reducedMotion === \"always\") {\n return emptyMotion;\n }\n\n if (\n config.motion.reducedMotion === \"respect\" &&\n typeof window !== \"undefined\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n ) {\n return emptyMotion;\n }\n\n return odsMotion as unknown as MotionPresets;\n }, [config.motion.enabled, config.motion.reducedMotion]);\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface PageHeaderBreadcrumb {\n label: ReactNode;\n href?: string;\n onClick?: () => void;\n}\n\nexport interface PageHeaderProps {\n title: ReactNode;\n description?: ReactNode;\n breadcrumbs?: PageHeaderBreadcrumb[];\n actions?: ReactNode;\n meta?: ReactNode;\n className?: string;\n}\n\nexport function PageHeader({\n title,\n description,\n breadcrumbs,\n actions,\n meta,\n className,\n}: PageHeaderProps) {\n return (\n <header className={cn(\"ods-page-header\", className)}>\n <div className=\"ods-page-header__main\">\n {breadcrumbs && breadcrumbs.length > 0 && (\n <nav className=\"ods-page-header__crumbs\" aria-label=\"Breadcrumb\">\n {breadcrumbs.map((c, i) => (\n <span key={i} className=\"ods-page-header__crumb\">\n {c.href ? (\n <a href={c.href} onClick={c.onClick}>{c.label}</a>\n ) : c.onClick ? (\n <button type=\"button\" onClick={c.onClick}>{c.label}</button>\n ) : (\n <span>{c.label}</span>\n )}\n {i < breadcrumbs.length - 1 && (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"m4.5 3 3 3-3 3\" stroke=\"currentColor\" strokeWidth=\"1.4\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )}\n </span>\n ))}\n </nav>\n )}\n <h1 className=\"ods-page-header__title\">{title}</h1>\n {description && <p className=\"ods-page-header__description\">{description}</p>}\n {meta && <div className=\"ods-page-header__meta\">{meta}</div>}\n </div>\n {actions && <div className=\"ods-page-header__actions\">{actions}</div>}\n </header>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface PricingCardProps {\n name: ReactNode;\n description?: ReactNode;\n price: ReactNode;\n pricePeriod?: ReactNode;\n features: ReactNode[];\n badge?: ReactNode;\n highlighted?: boolean;\n cta?: ReactNode;\n className?: string;\n}\n\nexport function PricingCard({\n name, description, price, pricePeriod = \"/month\",\n features, badge, highlighted = false, cta, className,\n}: PricingCardProps) {\n return (\n <div className={cn(\"ods-pricing\", highlighted && \"ods-pricing--highlighted\", className)}>\n <div className=\"ods-pricing__head\">\n {badge && <span className=\"ods-pricing__badge\">{badge}</span>}\n <h3 className=\"ods-pricing__name\">{name}</h3>\n {description && <p className=\"ods-pricing__desc\">{description}</p>}\n </div>\n <div className=\"ods-pricing__price\">\n <span className=\"ods-pricing__amount\">{price}</span>\n {pricePeriod && <span className=\"ods-pricing__period\">{pricePeriod}</span>}\n </div>\n <hr className=\"ods-pricing__sep\" />\n <ul className=\"ods-pricing__features\">\n {features.map((f, i) => (\n <li key={i} className=\"ods-pricing__feature\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"m3 8.5 3 3 7-7\" stroke=\"#16a34a\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n <span>{f}</span>\n </li>\n ))}\n </ul>\n {cta && <div className=\"ods-pricing__cta\">{cta}</div>}\n </div>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface ProductCardProps {\n image?: ReactNode;\n tag?: ReactNode;\n name: ReactNode;\n description?: ReactNode;\n price: ReactNode;\n originalPrice?: ReactNode;\n action?: ReactNode;\n className?: string;\n}\n\nexport function ProductCard({ image, tag, name, description, price, originalPrice, action, className }: ProductCardProps) {\n return (\n <div className={cn(\"ods-product-card\", className)}>\n <div className=\"ods-product-card__image\">{image}</div>\n {tag && <span className=\"ods-product-card__tag\">{tag}</span>}\n <div className=\"ods-product-card__name\">{name}</div>\n {description && <div className=\"ods-product-card__desc\">{description}</div>}\n <div className=\"ods-product-card__footer\">\n <div className=\"ods-product-card__price-group\">\n <span className=\"ods-product-card__price\">{price}</span>\n {originalPrice && <span className=\"ods-product-card__strike\">{originalPrice}</span>}\n </div>\n {action && <div className=\"ods-product-card__action\">{action}</div>}\n </div>\n </div>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface ProgressRingProps {\n value: number; // 0–100\n max?: number;\n size?: number; // px diameter\n strokeWidth?: number;\n variant?: \"primary\" | \"success\" | \"warning\" | \"error\" | \"neutral\";\n trackColor?: string;\n fillColor?: string;\n label?: ReactNode; // override default centered \"{value}%\" label\n showValue?: boolean;\n indeterminate?: boolean;\n className?: string;\n}\n\nconst VARIANT_COLORS: Record<NonNullable<ProgressRingProps[\"variant\"]>, string> = {\n primary: \"#6c5ce7\",\n success: \"#16a34a\",\n warning: \"#d97706\",\n error: \"#dc2626\",\n neutral: \"#6b7280\",\n};\n\nexport function ProgressRing({\n value,\n max = 100,\n size = 120,\n strokeWidth = 10,\n variant = \"primary\",\n trackColor = \"#f3f1ff\",\n fillColor,\n label,\n showValue = true,\n indeterminate = false,\n className,\n}: ProgressRingProps) {\n const r = (size - strokeWidth) / 2;\n const c = 2 * Math.PI * r;\n const pct = Math.max(0, Math.min(1, value / max));\n const dashOffset = c * (1 - pct);\n const stroke = fillColor ?? VARIANT_COLORS[variant];\n\n return (\n <div\n className={cn(\"ods-progress-ring\", indeterminate && \"ods-progress-ring--indeterminate\", className)}\n style={{ width: size, height: size }}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={indeterminate ? undefined : value}\n >\n <svg className=\"ods-progress-ring__svg\" width={size} height={size}>\n <circle\n className=\"ods-progress-ring__track\"\n cx={size / 2}\n cy={size / 2}\n r={r}\n fill=\"none\"\n stroke={trackColor}\n strokeWidth={strokeWidth}\n />\n <circle\n className=\"ods-progress-ring__fill\"\n cx={size / 2}\n cy={size / 2}\n r={r}\n fill=\"none\"\n stroke={stroke}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={c}\n strokeDashoffset={indeterminate ? c * 0.75 : dashOffset}\n transform={`rotate(-90 ${size / 2} ${size / 2})`}\n />\n </svg>\n {!indeterminate && (label || showValue) && (\n <div className=\"ods-progress-ring__center\">\n {label ?? <span className=\"ods-progress-ring__value\">{Math.round(pct * 100)}%</span>}\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface SettingsRowProps {\n title: ReactNode;\n description?: ReactNode;\n icon?: ReactNode;\n control?: ReactNode;\n align?: \"center\" | \"start\";\n className?: string;\n}\n\nexport function SettingsRow({\n title,\n description,\n icon,\n control,\n align = \"center\",\n className,\n}: SettingsRowProps) {\n return (\n <div className={cn(\"ods-settings-row\", `ods-settings-row--${align}`, className)}>\n {icon && <span className=\"ods-settings-row__icon\" aria-hidden=\"true\">{icon}</span>}\n <div className=\"ods-settings-row__body\">\n <div className=\"ods-settings-row__title\">{title}</div>\n {description && <div className=\"ods-settings-row__desc\">{description}</div>}\n </div>\n {control && <div className=\"ods-settings-row__control\">{control}</div>}\n </div>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface TestimonialCardProps {\n quote: ReactNode;\n author: ReactNode;\n role?: ReactNode;\n avatar?: ReactNode;\n initial?: ReactNode;\n rating?: number;\n className?: string;\n}\n\nexport function TestimonialCard({ quote, author, role, avatar, initial, rating, className }: TestimonialCardProps) {\n return (\n <figure className={cn(\"ods-testimonial\", className)}>\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" className=\"ods-testimonial__quote\" aria-hidden=\"true\">\n <path d=\"M9 20H6c-1 0-1.5-.5-1.5-1.5v-3C4.5 11 7 8 11 8v3c-2 0-3 1.5-3 3v1h1v5zm14 0h-3c-1 0-1.5-.5-1.5-1.5v-3C18.5 11 21 8 25 8v3c-2 0-3 1.5-3 3v1h1v5z\" fill=\"currentColor\" />\n </svg>\n <blockquote className=\"ods-testimonial__text\">{quote}</blockquote>\n {typeof rating === \"number\" && (\n <div className=\"ods-testimonial__rating\" aria-label={`${rating} out of 5 stars`}>\n {Array.from({ length: 5 }).map((_, i) => (\n <span key={i} className={cn(\"ods-testimonial__star\", i < rating && \"ods-testimonial__star--on\")}>★</span>\n ))}\n </div>\n )}\n <figcaption className=\"ods-testimonial__author\">\n <span className=\"ods-testimonial__avatar\">\n {avatar ?? <span>{initial ?? (typeof author === \"string\" ? author.charAt(0).toUpperCase() : \"?\")}</span>}\n </span>\n <span className=\"ods-testimonial__author-info\">\n <span className=\"ods-testimonial__author-name\">{author}</span>\n {role && <span className=\"ods-testimonial__author-role\">{role}</span>}\n </span>\n </figcaption>\n </figure>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface UserCardStat {\n label: ReactNode;\n value: ReactNode;\n}\n\nexport interface UserCardProps {\n name: ReactNode;\n role?: ReactNode;\n avatar?: ReactNode;\n initial?: ReactNode;\n stats?: UserCardStat[];\n action?: ReactNode;\n className?: string;\n}\n\nexport function UserCard({ name, role, avatar, initial, stats, action, className }: UserCardProps) {\n return (\n <div className={cn(\"ods-user-card\", className)}>\n <div className=\"ods-user-card__avatar\">\n {avatar ?? <span>{initial ?? (typeof name === \"string\" ? name.charAt(0).toUpperCase() : \"?\")}</span>}\n </div>\n <div className=\"ods-user-card__name\">{name}</div>\n {role && <div className=\"ods-user-card__role\">{role}</div>}\n {stats && stats.length > 0 && (\n <div className=\"ods-user-card__stats\">\n {stats.map((s, i) => (\n <div key={i} className=\"ods-user-card__stat\">\n <div className=\"ods-user-card__stat-value\">{s.value}</div>\n <div className=\"ods-user-card__stat-label\">{s.label}</div>\n </div>\n ))}\n </div>\n )}\n {action && <div className=\"ods-user-card__action\">{action}</div>}\n </div>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface KanbanCardProps {\n title: ReactNode;\n tag?: ReactNode;\n date?: ReactNode;\n comments?: number;\n assignee?: ReactNode;\n priority?: \"low\" | \"medium\" | \"high\";\n onClick?: () => void;\n className?: string;\n}\n\nexport function KanbanCard({ title, tag, date, comments, assignee, priority, onClick, className }: KanbanCardProps) {\n return (\n <div\n role={onClick ? \"button\" : undefined}\n tabIndex={onClick ? 0 : undefined}\n onClick={onClick}\n className={cn(\n \"ods-kanban-card\",\n priority && `ods-kanban-card--${priority}`,\n onClick && \"ods-kanban-card--interactive\",\n className,\n )}\n >\n {tag && (\n <div className=\"ods-kanban-card__head\">\n <span className=\"ods-kanban-card__tag\">{tag}</span>\n <button type=\"button\" className=\"ods-kanban-card__more\" aria-label=\"More options\" onClick={(e) => e.stopPropagation()}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"3\" cy=\"7\" r=\"1.2\" fill=\"currentColor\" />\n <circle cx=\"7\" cy=\"7\" r=\"1.2\" fill=\"currentColor\" />\n <circle cx=\"11\" cy=\"7\" r=\"1.2\" fill=\"currentColor\" />\n </svg>\n </button>\n </div>\n )}\n <div className=\"ods-kanban-card__title\">{title}</div>\n <div className=\"ods-kanban-card__footer\">\n <div className=\"ods-kanban-card__meta\">\n {date && (\n <span className=\"ods-kanban-card__date\">\n <svg width=\"11\" height=\"11\" viewBox=\"0 0 11 11\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"1.5\" y=\"2.5\" width=\"8\" height=\"7\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n <path d=\"M3.5 1.5v2M7.5 1.5v2M1.5 4.5h8\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </svg>\n {date}\n </span>\n )}\n {typeof comments === \"number\" && (\n <span className=\"ods-kanban-card__comments\">\n <svg width=\"11\" height=\"11\" viewBox=\"0 0 11 11\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M2 3a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1H6l-2 2v-2H3a1 1 0 0 1-1-1V3z\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n </svg>\n {comments}\n </span>\n )}\n </div>\n {assignee && <div className=\"ods-kanban-card__assignee\">{assignee}</div>}\n </div>\n </div>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface FormSectionProps {\n title?: ReactNode;\n description?: ReactNode;\n children: ReactNode;\n footer?: ReactNode;\n divided?: boolean;\n className?: string;\n}\n\nexport function FormSection({\n title,\n description,\n children,\n footer,\n divided = true,\n className,\n}: FormSectionProps) {\n return (\n <section className={cn(\"ods-form-section\", divided && \"ods-form-section--divided\", className)}>\n {(title || description) && (\n <header className=\"ods-form-section__head\">\n {title && <h3 className=\"ods-form-section__title\">{title}</h3>}\n {description && <p className=\"ods-form-section__desc\">{description}</p>}\n </header>\n )}\n <div className=\"ods-form-section__body\">{children}</div>\n {footer && <footer className=\"ods-form-section__footer\">{footer}</footer>}\n </section>\n );\n}\n","\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\nexport interface ToolbarProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function Toolbar({ children, className }: ToolbarProps) {\n return (\n <div role=\"toolbar\" className={cn(\"ods-toolbar\", className)}>\n {children}\n </div>\n );\n}\n\nexport interface ToolbarButtonProps {\n icon?: ReactNode;\n label?: ReactNode;\n active?: boolean;\n disabled?: boolean;\n onClick?: () => void;\n ariaLabel?: string;\n className?: string;\n children?: ReactNode;\n}\n\nexport function ToolbarButton({\n icon,\n label,\n active = false,\n disabled = false,\n onClick,\n ariaLabel,\n className,\n children,\n}: ToolbarButtonProps) {\n return (\n <button\n type=\"button\"\n className={cn(\n \"ods-toolbar__btn\",\n active && \"ods-toolbar__btn--active\",\n className,\n )}\n onClick={onClick}\n disabled={disabled}\n aria-pressed={active}\n aria-label={ariaLabel ?? (typeof label === \"string\" ? label : undefined)}\n >\n {icon && <span className=\"ods-toolbar__btn-icon\" aria-hidden=\"true\">{icon}</span>}\n {label && <span className=\"ods-toolbar__btn-label\">{label}</span>}\n {children}\n </button>\n );\n}\n\nexport function ToolbarDivider() {\n return <span className=\"ods-toolbar__divider\" aria-hidden=\"true\" />;\n}\n\nexport function ToolbarSpacer() {\n return <span className=\"ods-toolbar__spacer\" />;\n}\n"],"mappings":"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","names":["import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_react_aria","import_jsx_runtime","import_framer_motion","import_react","import_react_aria","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_framer_motion","import_jsx_runtime","import_react","import_react_aria","$1CcWn$react","$1CcWn$useState","$1CcWn$useRef","$1CcWn$useEffect","$1CcWn$useReducer","$1CcWn$useCallback","value","$8AuPP$createContext","$8AuPP$useMemo","$8AuPP$useContext","name","$8AuPP$useState","$8AuPP$useRef","$8AuPP$useEffect","value","a","a","$7w3VE$useRef","$7w3VE$useState","$7w3VE$useMemo","$7w3VE$useEffect","$jO8i1$react","items","node","$emYU7$useMemo","$3yt54$useMemo","$3yt54$useCallback","$3yt54$useRef","$3yt54$useEffect","$kE40A$useCallback","$dJmKC$react","$jhfZc$useMemo","$aoDK0$useState","focusStrategy","$6Hs9a$useMemo","$6Hs9a$useState","$5t5rb$useState","$5t5rb$useMemo","value","focusStrategy","$eOo4G$useRef","$eOo4G$useEffect","$dAajM$useState","$auOuY$useMemo","$auOuY$useRef","$auOuY$useEffect","$aXIpm$useMemo","$aXIpm$useCallback","$aXIpm$useEffect","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_react_dom","import_jsx_runtime","computePosition","import_framer_motion","import_react","import_react_dom","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_framer_motion","import_react","import_react_aria","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","format","import_jsx_runtime","import_jsx_runtime","import_framer_motion","import_react","import_react_aria","import_react_dom","import_jsx_runtime","onDrag","onDragStart","onDragEnd","onAnimationStart","import_jsx_runtime","import_framer_motion","import_react","import_react_aria","import_react_dom","import_jsx_runtime","import_jsx_runtime","import_framer_motion","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_framer_motion","import_framer_motion","import_react","import_jsx_runtime","FlowNode","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","pad","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_framer_motion","import_react","import_react_dom","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_react_aria","import_react","import_react_aria","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_framer_motion","import_react","import_react_aria","import_react_dom","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_framer_motion","import_react","import_react_aria","import_react_dom","import_jsx_runtime","slideVariants","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","pad","import_jsx_runtime","import_jsx_runtime","import_react","import_react_aria","import_jsx_runtime","import_react","import_jsx_runtime","import_framer_motion","import_react","import_react_aria","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_react_aria","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_framer_motion","import_react","import_react_dom","import_jsx_runtime","idCounter","import_framer_motion","import_react","import_react_aria","import_react_dom","import_jsx_runtime","computePosition","import_jsx_runtime","import_react","import_react_aria","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}