@webiny/admin-ui 0.0.0-unstable.7be00a75a9 → 0.0.0-unstable.7c2def32a7

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 (595) hide show
  1. package/Accordion/Accordion.d.ts +7 -6
  2. package/Accordion/Accordion.stories.d.ts +1 -1
  3. package/Accordion/Accordion.stories.js.map +1 -1
  4. package/Accordion/components/AccordionContent.js +4 -1
  5. package/Accordion/components/AccordionContent.js.map +1 -1
  6. package/Accordion/components/AccordionItem.d.ts +8 -6
  7. package/Accordion/components/AccordionItem.js.map +1 -1
  8. package/Accordion/components/AccordionItemAction.d.ts +7 -6
  9. package/Accordion/components/AccordionItemDragHandle.d.ts +2 -1
  10. package/Accordion/components/AccordionItemDragHandle.js +2 -1
  11. package/Accordion/components/AccordionItemDragHandle.js.map +1 -1
  12. package/Accordion/components/AccordionItemIcon.d.ts +7 -6
  13. package/Accordion/components/AccordionItemSeparator.d.ts +7 -6
  14. package/Accordion/components/AccordionTrigger.js +4 -2
  15. package/Accordion/components/AccordionTrigger.js.map +1 -1
  16. package/Alert/Alert.d.ts +21 -19
  17. package/Alert/Alert.stories.d.ts +1 -1
  18. package/Alert/Alert.stories.js.map +1 -1
  19. package/AutoComplete/AutoComplete.d.ts +7 -6
  20. package/AutoComplete/AutoComplete.stories.d.ts +1 -1
  21. package/AutoComplete/AutoComplete.stories.js.map +1 -1
  22. package/AutoComplete/primitives/AutoCompletePrimitive.d.ts +13 -6
  23. package/AutoComplete/primitives/AutoCompletePrimitive.js +1 -0
  24. package/AutoComplete/primitives/AutoCompletePrimitive.js.map +1 -1
  25. package/AutoComplete/primitives/AutoCompletePrimitive.stories.d.ts +1 -1
  26. package/AutoComplete/primitives/AutoCompletePrimitive.stories.js.map +1 -1
  27. package/Avatar/Avatar.d.ts +9 -8
  28. package/Avatar/Avatar.stories.d.ts +1 -1
  29. package/Avatar/Avatar.stories.js.map +1 -1
  30. package/Avatar/components/AvatarFallback.d.ts +7 -6
  31. package/Avatar/components/AvatarImage.d.ts +7 -6
  32. package/BetaBadge/BetaBadge.d.ts +6 -0
  33. package/BetaBadge/BetaBadge.js +7 -0
  34. package/BetaBadge/BetaBadge.js.map +1 -0
  35. package/Breadcrumbs/Breadcrumbs.d.ts +54 -0
  36. package/Breadcrumbs/Breadcrumbs.js +66 -0
  37. package/Breadcrumbs/Breadcrumbs.js.map +1 -0
  38. package/Breadcrumbs/Breadcrumbs.stories.d.ts +9 -0
  39. package/Breadcrumbs/Breadcrumbs.stories.js +71 -0
  40. package/Breadcrumbs/Breadcrumbs.stories.js.map +1 -0
  41. package/Breadcrumbs/index.d.ts +1 -0
  42. package/Breadcrumbs/index.js +1 -0
  43. package/Button/Button.d.ts +10 -9
  44. package/Button/Button.js +7 -0
  45. package/Button/Button.js.map +1 -1
  46. package/Button/Button.mdx +13 -0
  47. package/Button/Button.stories.d.ts +2 -1
  48. package/Button/Button.stories.js +9 -2
  49. package/Button/Button.stories.js.map +1 -1
  50. package/Button/CopyButton.d.ts +7 -6
  51. package/Button/IconButton.d.ts +10 -9
  52. package/Button/IconButton.stories.d.ts +1 -1
  53. package/Button/IconButton.stories.js.map +1 -1
  54. package/Calendar/Calendar.d.ts +7 -6
  55. package/Calendar/calendarClassNames.js +1 -1
  56. package/Calendar/calendarClassNames.js.map +1 -1
  57. package/Card/Card.d.ts +8 -22
  58. package/Card/Card.stories.d.ts +1 -1
  59. package/Card/Card.stories.js.map +1 -1
  60. package/Card/components/CancelAction.d.ts +8 -6
  61. package/Card/components/CardContent.d.ts +6 -6
  62. package/Card/components/CardTitle.d.ts +2 -2
  63. package/Card/components/ConfirmAction.d.ts +8 -6
  64. package/Card/components/Icon.d.ts +7 -6
  65. package/Checkbox/Checkbox.d.ts +7 -6
  66. package/Checkbox/Checkbox.stories.d.ts +1 -1
  67. package/Checkbox/Checkbox.stories.js.map +1 -1
  68. package/Checkbox/primitives/CheckboxPrimitive.d.ts +17 -12
  69. package/Checkbox/primitives/CheckboxPrimitive.stories.d.ts +1 -1
  70. package/Checkbox/primitives/CheckboxPrimitive.stories.js.map +1 -1
  71. package/CheckboxGroup/CheckboxGroup.d.ts +7 -6
  72. package/CheckboxGroup/CheckboxGroup.stories.d.ts +1 -1
  73. package/CheckboxGroup/CheckboxGroup.stories.js.map +1 -1
  74. package/CheckboxGroup/primitives/CheckboxGroupPrimitive.d.ts +20 -12
  75. package/CheckboxGroup/primitives/CheckboxGroupPrimitive.stories.d.ts +1 -1
  76. package/CheckboxGroup/primitives/CheckboxGroupPrimitive.stories.js.map +1 -1
  77. package/CodeEditor/CodeEditor.d.ts +7 -6
  78. package/CodeEditor/CodeEditor.stories.d.ts +1 -1
  79. package/CodeEditor/CodeEditor.stories.js.map +1 -1
  80. package/CodeEditor/CodeEditorPrimitive.d.ts +7 -6
  81. package/CodeEditor/CodeEditorPrimitive.js +3 -1
  82. package/CodeEditor/CodeEditorPrimitive.js.map +1 -1
  83. package/CodeEditor/CodeEditorPrimitive.stories.d.ts +1 -1
  84. package/CodeEditor/CodeEditorPrimitive.stories.js.map +1 -1
  85. package/ColorPicker/ColorPicker.d.ts +7 -6
  86. package/ColorPicker/ColorPicker.stories.d.ts +1 -1
  87. package/ColorPicker/ColorPicker.stories.js.map +1 -1
  88. package/ColorPicker/primitives/ColorPickerPrimitive.d.ts +7 -6
  89. package/ColorPicker/primitives/ColorPickerPrimitive.stories.d.ts +1 -1
  90. package/ColorPicker/primitives/ColorPickerPrimitive.stories.js.map +1 -1
  91. package/Command/Command.d.ts +10 -8
  92. package/Command/components/List.d.ts +1 -1
  93. package/Command/components/List.js +9 -5
  94. package/Command/components/List.js.map +1 -1
  95. package/DataList/DataListModal.d.ts +6 -3
  96. package/DataTable/DataTable.d.ts +23 -12
  97. package/DataTable/DataTable.js +18 -7
  98. package/DataTable/DataTable.js.map +1 -1
  99. package/DataTable/DataTable.stories.d.ts +1 -1
  100. package/DataTable/DataTable.stories.js.map +1 -1
  101. package/DataTable/components/ColumnsVisibility.d.ts +5 -4
  102. package/DataTable/components/ColumnsVisibility.js +7 -3
  103. package/DataTable/components/ColumnsVisibility.js.map +1 -1
  104. package/DatePicker/DatePicker.d.ts +11 -7
  105. package/DatePicker/DatePicker.js +10 -2
  106. package/DatePicker/DatePicker.js.map +1 -1
  107. package/DatePicker/DatePicker.stories.d.ts +11 -1
  108. package/DatePicker/DatePicker.stories.js +44 -1
  109. package/DatePicker/DatePicker.stories.js.map +1 -1
  110. package/DatePicker/primitives/BirthdayPicker.d.ts +13 -0
  111. package/DatePicker/primitives/BirthdayPicker.js +355 -0
  112. package/DatePicker/primitives/BirthdayPicker.js.map +1 -0
  113. package/DatePicker/primitives/BirthdayPickerCell.d.ts +14 -0
  114. package/DatePicker/primitives/BirthdayPickerCell.js +19 -0
  115. package/DatePicker/primitives/BirthdayPickerCell.js.map +1 -0
  116. package/DatePicker/primitives/BirthdayPickerSegments.d.ts +9 -0
  117. package/DatePicker/primitives/BirthdayPickerSegments.js +43 -0
  118. package/DatePicker/primitives/BirthdayPickerSegments.js.map +1 -0
  119. package/DatePicker/primitives/DateOnlyPicker.js +2 -2
  120. package/DatePicker/primitives/DateOnlyPicker.js.map +1 -1
  121. package/DatePicker/primitives/DatePickerPrimitive.d.ts +7 -6
  122. package/DatePicker/primitives/DatePickerPrimitive.js +3 -0
  123. package/DatePicker/primitives/DatePickerPrimitive.js.map +1 -1
  124. package/DatePicker/primitives/DateRangePicker.js +3 -3
  125. package/DatePicker/primitives/DateRangePicker.js.map +1 -1
  126. package/DatePicker/primitives/DateTimePicker.d.ts +1 -1
  127. package/DatePicker/primitives/DateTimePicker.js +26 -18
  128. package/DatePicker/primitives/DateTimePicker.js.map +1 -1
  129. package/DatePicker/primitives/MultipleDatesPicker.js +3 -3
  130. package/DatePicker/primitives/MultipleDatesPicker.js.map +1 -1
  131. package/DatePicker/primitives/components/DatePickerTrigger.js +2 -2
  132. package/DatePicker/primitives/components/DatePickerTrigger.js.map +1 -1
  133. package/DatePicker/utils/birthdayHelpers.d.ts +77 -0
  134. package/DatePicker/utils/birthdayHelpers.js +145 -0
  135. package/DatePicker/utils/birthdayHelpers.js.map +1 -0
  136. package/DatePicker/utils/birthdayHelpers.test.d.ts +1 -0
  137. package/DatePicker/utils/birthdayHelpers.test.js +394 -0
  138. package/DatePicker/utils/birthdayHelpers.test.js.map +1 -0
  139. package/DatePicker/utils/dateHelpers.d.ts +6 -1
  140. package/DatePicker/utils/dateHelpers.js +13 -5
  141. package/DatePicker/utils/dateHelpers.js.map +1 -1
  142. package/DatePicker/utils/dateHelpers.test.d.ts +1 -0
  143. package/DatePicker/utils/dateHelpers.test.js +32 -0
  144. package/DatePicker/utils/dateHelpers.test.js.map +1 -0
  145. package/DatePicker/utils/index.d.ts +1 -0
  146. package/DatePicker/utils/index.js +1 -0
  147. package/DatePicker/utils/timezoneHelpers.d.ts +3 -0
  148. package/DatePicker/utils/timezoneHelpers.js +32 -0
  149. package/DatePicker/utils/timezoneHelpers.js.map +1 -0
  150. package/DatePicker/utils/types.d.ts +15 -2
  151. package/Dialog/Dialog.d.ts +8 -22
  152. package/Dialog/Dialog.stories.d.ts +1 -1
  153. package/Dialog/Dialog.stories.js.map +1 -1
  154. package/Dialog/components/CancelAction.d.ts +8 -6
  155. package/Dialog/components/ConfirmAction.d.ts +8 -6
  156. package/Dialog/components/DialogContent.d.ts +1 -1
  157. package/Dialog/components/DialogFooter.d.ts +1 -1
  158. package/Dialog/components/DialogTitle.d.ts +1 -1
  159. package/Dialog/components/Icon.d.ts +7 -6
  160. package/DragCursor/DragCursor.d.ts +7 -0
  161. package/DragCursor/DragCursor.js +21 -0
  162. package/DragCursor/DragCursor.js.map +1 -0
  163. package/DragCursor/DragCursor.stories.d.ts +10 -0
  164. package/DragCursor/DragCursor.stories.js +97 -0
  165. package/DragCursor/DragCursor.stories.js.map +1 -0
  166. package/DragCursor/index.d.ts +1 -0
  167. package/DragCursor/index.js +1 -0
  168. package/Drawer/Drawer.d.ts +18 -28
  169. package/Drawer/Drawer.js +2 -1
  170. package/Drawer/Drawer.js.map +1 -1
  171. package/Drawer/Drawer.stories.d.ts +2 -1
  172. package/Drawer/Drawer.stories.js +21 -2
  173. package/Drawer/Drawer.stories.js.map +1 -1
  174. package/Drawer/components/CancelButton.d.ts +8 -6
  175. package/Drawer/components/ConfirmButton.d.ts +8 -6
  176. package/Drawer/components/DrawerContent.d.ts +1 -1
  177. package/Drawer/components/DrawerHeader.d.ts +2 -2
  178. package/Drawer/components/DrawerHeader.js +11 -8
  179. package/Drawer/components/DrawerHeader.js.map +1 -1
  180. package/Drawer/components/Icon.d.ts +7 -6
  181. package/Drawer/components/Icon.js +3 -4
  182. package/Drawer/components/Icon.js.map +1 -1
  183. package/DropdownMenu/DropdownMenu.stories.d.ts +1 -1
  184. package/DropdownMenu/DropdownMenu.stories.js.map +1 -1
  185. package/DropdownMenu/components/DropdownMenuItem.d.ts +8 -2
  186. package/DropdownMenu/components/DropdownMenuItem.js +11 -3
  187. package/DropdownMenu/components/DropdownMenuItem.js.map +1 -1
  188. package/DropdownMenu/components/DropdownMenuLink.d.ts +9 -8
  189. package/DropdownMenu/components/DropdownMenuSeparator.d.ts +7 -6
  190. package/EditableTitle/EditableTitle.d.ts +67 -0
  191. package/EditableTitle/EditableTitle.js +73 -0
  192. package/EditableTitle/EditableTitle.js.map +1 -0
  193. package/EditableTitle/index.d.ts +1 -0
  194. package/EditableTitle/index.js +1 -0
  195. package/EmptyState/EmptyState.d.ts +43 -0
  196. package/EmptyState/EmptyState.js +93 -0
  197. package/EmptyState/EmptyState.js.map +1 -0
  198. package/EmptyState/EmptyState.stories.d.ts +13 -0
  199. package/EmptyState/EmptyState.stories.js +136 -0
  200. package/EmptyState/EmptyState.stories.js.map +1 -0
  201. package/EmptyState/illustrations/ContentIllustration.d.ts +2 -0
  202. package/EmptyState/illustrations/ContentIllustration.js +100 -0
  203. package/EmptyState/illustrations/ContentIllustration.js.map +1 -0
  204. package/EmptyState/illustrations/LayoutIllustration.d.ts +2 -0
  205. package/EmptyState/illustrations/LayoutIllustration.js +93 -0
  206. package/EmptyState/illustrations/LayoutIllustration.js.map +1 -0
  207. package/EmptyState/illustrations/ListingIllustration.d.ts +2 -0
  208. package/EmptyState/illustrations/ListingIllustration.js +92 -0
  209. package/EmptyState/illustrations/ListingIllustration.js.map +1 -0
  210. package/EmptyState/illustrations/SelectIllustration.d.ts +2 -0
  211. package/EmptyState/illustrations/SelectIllustration.js +100 -0
  212. package/EmptyState/illustrations/SelectIllustration.js.map +1 -0
  213. package/EmptyState/illustrations/TableIllustration.d.ts +2 -0
  214. package/EmptyState/illustrations/TableIllustration.js +233 -0
  215. package/EmptyState/illustrations/TableIllustration.js.map +1 -0
  216. package/EmptyState/illustrations/UploadIllustration.d.ts +2 -0
  217. package/EmptyState/illustrations/UploadIllustration.js +77 -0
  218. package/EmptyState/illustrations/UploadIllustration.js.map +1 -0
  219. package/EmptyState/illustrations/index.d.ts +6 -0
  220. package/EmptyState/illustrations/index.js +6 -0
  221. package/EmptyState/index.d.ts +1 -0
  222. package/EmptyState/index.js +1 -0
  223. package/FilePicker/FilePicker.d.ts +19 -18
  224. package/FilePicker/FilePicker.stories.d.ts +7 -1
  225. package/FilePicker/FilePicker.stories.js +24 -1
  226. package/FilePicker/FilePicker.stories.js.map +1 -1
  227. package/FilePicker/primitives/FilePickerPrimitive.d.ts +20 -19
  228. package/FilePicker/primitives/FilePickerPrimitive.stories.d.ts +1 -1
  229. package/FilePicker/primitives/FilePickerPrimitive.stories.js.map +1 -1
  230. package/FilePicker/primitives/components/Trigger.d.ts +1 -1
  231. package/FilePicker/primitives/components/previews/ImagePreview/ImagePreview.d.ts +19 -7
  232. package/FilePicker/primitives/components/previews/ImagePreview/ImagePreview.js +15 -6
  233. package/FilePicker/primitives/components/previews/ImagePreview/ImagePreview.js.map +1 -1
  234. package/FilePicker/primitives/components/previews/ItemActions.js +1 -1
  235. package/FilePicker/primitives/components/previews/ItemActions.js.map +1 -1
  236. package/FilePicker/primitives/components/previews/ItemDescription.js +1 -1
  237. package/FilePicker/primitives/components/previews/ItemDescription.js.map +1 -1
  238. package/FilePicker/primitives/components/previews/RichItemPreview/FileType.d.ts +5 -0
  239. package/FilePicker/primitives/components/previews/RichItemPreview/FileType.js +45 -0
  240. package/FilePicker/primitives/components/previews/RichItemPreview/FileType.js.map +1 -0
  241. package/FilePicker/primitives/components/previews/RichItemPreview/Placeholder.d.ts +5 -0
  242. package/FilePicker/primitives/components/previews/RichItemPreview/Placeholder.js +14 -0
  243. package/FilePicker/primitives/components/previews/RichItemPreview/Placeholder.js.map +1 -0
  244. package/FilePicker/primitives/components/previews/RichItemPreview/RichItemPreview.d.ts +12 -6
  245. package/FilePicker/primitives/components/previews/RichItemPreview/RichItemPreview.js +54 -12
  246. package/FilePicker/primitives/components/previews/RichItemPreview/RichItemPreview.js.map +1 -1
  247. package/FilePicker/primitives/components/previews/RichItemPreview/RichItemThumbnail.d.ts +11 -1
  248. package/FilePicker/primitives/components/previews/RichItemPreview/RichItemThumbnail.js +8 -61
  249. package/FilePicker/primitives/components/previews/RichItemPreview/RichItemThumbnail.js.map +1 -1
  250. package/FilePicker/primitives/components/previews/RichItemPreview/Thumbnail.d.ts +11 -0
  251. package/FilePicker/primitives/components/previews/RichItemPreview/Thumbnail.js +24 -0
  252. package/FilePicker/primitives/components/previews/RichItemPreview/Thumbnail.js.map +1 -0
  253. package/FilePicker/primitives/components/previews/RichItemPreview/ThumbnailActions.d.ts +10 -0
  254. package/FilePicker/primitives/components/previews/RichItemPreview/ThumbnailActions.js +46 -0
  255. package/FilePicker/primitives/components/previews/RichItemPreview/ThumbnailActions.js.map +1 -0
  256. package/FilePicker/primitives/components/previews/TextOnlyPreview/TextOnlyPreview.d.ts +7 -6
  257. package/FilePicker/primitives/components/previews/TruncatedFileName.d.ts +7 -0
  258. package/FilePicker/primitives/components/previews/TruncatedFileName.js +20 -0
  259. package/FilePicker/primitives/components/previews/TruncatedFileName.js.map +1 -0
  260. package/FilePicker/primitives/components/previews/fileName.d.ts +4 -0
  261. package/FilePicker/primitives/components/previews/fileName.js +26 -0
  262. package/FilePicker/primitives/components/previews/fileName.js.map +1 -0
  263. package/FilePicker/primitives/components/previews/index.d.ts +1 -0
  264. package/FilePicker/primitives/components/previews/index.js +1 -0
  265. package/FilePicker/primitives/components/previews/variants.d.ts +1 -1
  266. package/FillViewport/FillViewport.d.ts +63 -0
  267. package/FillViewport/FillViewport.js +67 -0
  268. package/FillViewport/FillViewport.js.map +1 -0
  269. package/FillViewport/index.d.ts +1 -0
  270. package/FillViewport/index.js +1 -0
  271. package/FormComponent/Description.d.ts +7 -6
  272. package/FormComponent/ErrorMessage.d.ts +7 -6
  273. package/FormComponent/Label.d.ts +7 -6
  274. package/FormComponent/Note.d.ts +7 -6
  275. package/Grid/Grid.d.ts +25 -23
  276. package/Grid/Grid.js.map +1 -1
  277. package/Grid/Grid.stories.d.ts +1 -1
  278. package/Grid/Grid.stories.js.map +1 -1
  279. package/HeaderBar/HeaderBar.d.ts +7 -6
  280. package/HeaderBar/HeaderBar.stories.d.ts +1 -1
  281. package/HeaderBar/HeaderBar.stories.js.map +1 -1
  282. package/Heading/Heading.d.ts +8 -7
  283. package/Heading/Heading.stories.d.ts +1 -1
  284. package/Heading/Heading.stories.js.map +1 -1
  285. package/Icon/Icon.d.ts +9 -8
  286. package/Icon/Icon.stories.d.ts +1 -1
  287. package/Icon/Icon.stories.js.map +1 -1
  288. package/IconPicker/IconPicker.d.ts +7 -6
  289. package/IconPicker/IconPicker.stories.d.ts +1 -1
  290. package/IconPicker/IconPicker.stories.js.map +1 -1
  291. package/IconPicker/primitives/IconPickerPrimitive.d.ts +1 -1
  292. package/IconPicker/primitives/IconPickerPrimitive.js +1 -2
  293. package/IconPicker/primitives/IconPickerPrimitive.js.map +1 -1
  294. package/IconPicker/primitives/IconPickerPrimitive.stories.d.ts +1 -1
  295. package/IconPicker/primitives/IconPickerPrimitive.stories.js.map +1 -1
  296. package/IconPicker/primitives/components/IconPickerTrigger.d.ts +1 -1
  297. package/ImageEditor/AspectRatioPreview.d.ts +16 -0
  298. package/ImageEditor/AspectRatioPreview.js +26 -0
  299. package/ImageEditor/AspectRatioPreview.js.map +1 -0
  300. package/ImageEditor/CropHotspotEditor.d.ts +22 -0
  301. package/ImageEditor/CropHotspotEditor.js +402 -0
  302. package/ImageEditor/CropHotspotEditor.js.map +1 -0
  303. package/ImageEditor/ImageEditor.d.ts +18 -0
  304. package/ImageEditor/ImageEditor.js +151 -0
  305. package/ImageEditor/ImageEditor.js.map +1 -0
  306. package/ImageEditor/ImageEditor.stories.d.ts +6 -0
  307. package/ImageEditor/ImageEditor.stories.js +42 -0
  308. package/ImageEditor/ImageEditor.stories.js.map +1 -0
  309. package/ImageEditor/MetaFields.d.ts +12 -0
  310. package/ImageEditor/MetaFields.js +20 -0
  311. package/ImageEditor/MetaFields.js.map +1 -0
  312. package/ImageEditor/SectionLabel.d.ts +8 -0
  313. package/ImageEditor/SectionLabel.js +7 -0
  314. package/ImageEditor/SectionLabel.js.map +1 -0
  315. package/ImageEditor/geometry.d.ts +46 -0
  316. package/ImageEditor/geometry.js +126 -0
  317. package/ImageEditor/geometry.js.map +1 -0
  318. package/ImageEditor/index.d.ts +3 -0
  319. package/ImageEditor/index.js +3 -0
  320. package/ImageEditor/types.d.ts +52 -0
  321. package/ImageEditor/types.js +35 -0
  322. package/ImageEditor/types.js.map +1 -0
  323. package/Input/Input.d.ts +7 -6
  324. package/Input/Input.stories.d.ts +1 -1
  325. package/Input/Input.stories.js.map +1 -1
  326. package/Input/InputPrimitive.d.ts +9 -8
  327. package/Input/InputPrimitive.stories.d.ts +1 -1
  328. package/Input/InputPrimitive.stories.js.map +1 -1
  329. package/Label/Label.d.ts +8 -7
  330. package/Label/Label.stories.d.ts +1 -1
  331. package/Label/Label.stories.js.map +1 -1
  332. package/Label/components/LabelValue.d.ts +1 -1
  333. package/Link/Link.d.ts +3 -3
  334. package/Link/Link.js +1 -1
  335. package/Link/Link.js.map +1 -1
  336. package/Link/Link.stories.d.ts +1 -1
  337. package/Link/Link.stories.js.map +1 -1
  338. package/List/List.d.ts +8 -7
  339. package/List/List.stories.d.ts +1 -1
  340. package/List/List.stories.js.map +1 -1
  341. package/List/components/ListItem.d.ts +7 -6
  342. package/List/components/ListItemAction.d.ts +7 -6
  343. package/List/components/ListItemHandle.d.ts +7 -6
  344. package/List/components/ListItemIcon.d.ts +7 -6
  345. package/List/components/ListItemSeparator.d.ts +7 -6
  346. package/Loader/Loader.d.ts +9 -8
  347. package/Loader/Loader.stories.d.ts +1 -1
  348. package/Loader/Loader.stories.js.map +1 -1
  349. package/Loader/OverlayLoader.d.ts +7 -6
  350. package/Loader/OverlayLoader.stories.d.ts +1 -1
  351. package/Loader/OverlayLoader.stories.js.map +1 -1
  352. package/Markdown/Markdown.d.ts +47 -0
  353. package/Markdown/Markdown.js +17 -0
  354. package/Markdown/Markdown.js.map +1 -0
  355. package/Markdown/index.d.ts +1 -0
  356. package/Markdown/index.js +1 -0
  357. package/MultiAutoComplete/MultiAutoComplete.d.ts +7 -6
  358. package/MultiAutoComplete/MultiAutoComplete.stories.d.ts +1 -1
  359. package/MultiAutoComplete/MultiAutoComplete.stories.js.map +1 -1
  360. package/MultiAutoComplete/primitives/MultiAutoCompletePrimitive.d.ts +13 -6
  361. package/MultiAutoComplete/primitives/MultiAutoCompletePrimitive.js +1 -0
  362. package/MultiAutoComplete/primitives/MultiAutoCompletePrimitive.js.map +1 -1
  363. package/MultiAutoComplete/primitives/MultiAutoCompletePrimitive.stories.d.ts +1 -1
  364. package/MultiAutoComplete/primitives/MultiAutoCompletePrimitive.stories.js.map +1 -1
  365. package/MultiAutoComplete/primitives/presenters/MultiAutoCompletePresenterWithFreeInput.d.ts +3 -3
  366. package/MultiAutoComplete/primitives/useMultiAutoComplete.d.ts +3 -3
  367. package/MultiFilePicker/MultiFilePicker.d.ts +19 -18
  368. package/MultiFilePicker/MultiFilePicker.stories.d.ts +1 -1
  369. package/MultiFilePicker/MultiFilePicker.stories.js.map +1 -1
  370. package/MultiFilePicker/primitives/MultiFilePickerPrimitive.d.ts +19 -18
  371. package/MultiFilePicker/primitives/MultiFilePickerPrimitive.stories.d.ts +1 -1
  372. package/MultiFilePicker/primitives/MultiFilePickerPrimitive.stories.js.map +1 -1
  373. package/MultiSelect/MultiSelect.d.ts +7 -6
  374. package/MultiSelect/MultiSelect.stories.d.ts +1 -1
  375. package/MultiSelect/MultiSelect.stories.js.map +1 -1
  376. package/MultiSelect/primitives/MultiSelectPrimitive.d.ts +10 -6
  377. package/MultiSelect/primitives/MultiSelectPrimitive.js +12 -5
  378. package/MultiSelect/primitives/MultiSelectPrimitive.js.map +1 -1
  379. package/Popover/Popover.d.ts +7 -6
  380. package/Popover/Popover.stories.d.ts +8 -1
  381. package/Popover/Popover.stories.js +24 -1
  382. package/Popover/Popover.stories.js.map +1 -1
  383. package/Popover/primitives/PopoverPrimitive.d.ts +7 -7
  384. package/Popover/primitives/components/PopoverContent.js +6 -1
  385. package/Popover/primitives/components/PopoverContent.js.map +1 -1
  386. package/ProgressBar/ProgressBar.d.ts +7 -6
  387. package/ProgressBar/ProgressBar.stories.d.ts +1 -1
  388. package/ProgressBar/ProgressBar.stories.js.map +1 -1
  389. package/RadioGroup/RadioGroup.d.ts +7 -6
  390. package/RadioGroup/RadioGroup.stories.d.ts +1 -1
  391. package/RadioGroup/RadioGroup.stories.js.map +1 -1
  392. package/RadioGroup/primitives/Radio.d.ts +7 -6
  393. package/RadioGroup/primitives/RadioGroupPrimitive.d.ts +5 -1
  394. package/RadioGroup/primitives/RadioGroupPrimitive.stories.d.ts +1 -1
  395. package/RadioGroup/primitives/RadioGroupPrimitive.stories.js.map +1 -1
  396. package/RangeSlider/RangeSlider.d.ts +7 -6
  397. package/RangeSlider/RangeSlider.stories.d.ts +1 -1
  398. package/RangeSlider/RangeSlider.stories.js.map +1 -1
  399. package/RangeSlider/primitives/RangeSliderPrimitive.stories.d.ts +1 -1
  400. package/RangeSlider/primitives/RangeSliderPrimitive.stories.js.map +1 -1
  401. package/ScrollArea/ScrollArea.d.ts +16 -2
  402. package/ScrollArea/ScrollArea.js +25 -11
  403. package/ScrollArea/ScrollArea.js.map +1 -1
  404. package/ScrollArea/ScrollArea.stories.d.ts +1 -1
  405. package/ScrollArea/ScrollArea.stories.js.map +1 -1
  406. package/SegmentedControl/SegmentedControl.d.ts +11 -6
  407. package/SegmentedControl/SegmentedControl.js +6 -2
  408. package/SegmentedControl/SegmentedControl.js.map +1 -1
  409. package/SegmentedControl/SegmentedControl.stories.d.ts +5 -1
  410. package/SegmentedControl/SegmentedControl.stories.js +100 -2
  411. package/SegmentedControl/SegmentedControl.stories.js.map +1 -1
  412. package/SegmentedControl/SegmentedControlTab.d.ts +10 -0
  413. package/SegmentedControl/SegmentedControlTab.js +21 -0
  414. package/SegmentedControl/SegmentedControlTab.js.map +1 -0
  415. package/SegmentedControl/SegmentedControlTabs.d.ts +14 -0
  416. package/SegmentedControl/SegmentedControlTabs.js +71 -0
  417. package/SegmentedControl/SegmentedControlTabs.js.map +1 -0
  418. package/SegmentedControl/SegmentedControlTabsContext.d.ts +19 -0
  419. package/SegmentedControl/SegmentedControlTabsContext.js +11 -0
  420. package/SegmentedControl/SegmentedControlTabsContext.js.map +1 -0
  421. package/SegmentedControl/index.d.ts +2 -0
  422. package/SegmentedControl/index.js +2 -0
  423. package/SegmentedControl/primitives/SegmentedControlPrimitive.d.ts +6 -2
  424. package/SegmentedControl/primitives/SegmentedControlPrimitive.js +4 -3
  425. package/SegmentedControl/primitives/SegmentedControlPrimitive.js.map +1 -1
  426. package/SegmentedControl/primitives/SegmentedControlPrimitive.stories.d.ts +2 -1
  427. package/SegmentedControl/primitives/SegmentedControlPrimitive.stories.js +8 -1
  428. package/SegmentedControl/primitives/SegmentedControlPrimitive.stories.js.map +1 -1
  429. package/Select/Select.d.ts +7 -6
  430. package/Select/Select.stories.d.ts +1 -1
  431. package/Select/Select.stories.js.map +1 -1
  432. package/Select/primitives/SelectPrimitive.stories.d.ts +1 -1
  433. package/Select/primitives/SelectPrimitive.stories.js.map +1 -1
  434. package/Select/primitives/components/SelectContent.js +4 -6
  435. package/Select/primitives/components/SelectContent.js.map +1 -1
  436. package/Select/primitives/components/SelectTrigger.d.ts +2 -2
  437. package/Separator/Separator.d.ts +9 -8
  438. package/Separator/Separator.stories.d.ts +1 -1
  439. package/Separator/Separator.stories.js.map +1 -1
  440. package/Sidebar/Sidebar.d.ts +9 -6
  441. package/Sidebar/Sidebar.stories.d.ts +1 -1
  442. package/Sidebar/Sidebar.stories.js.map +1 -1
  443. package/Sidebar/components/SidebarContent.js +1 -1
  444. package/Sidebar/components/SidebarContent.js.map +1 -1
  445. package/Sidebar/components/SidebarIcon.d.ts +7 -6
  446. package/Sidebar/components/SidebarProvider.d.ts +4 -4
  447. package/Sidebar/components/SidebarRoot.js +1 -1
  448. package/Sidebar/components/SidebarRoot.js.map +1 -1
  449. package/Sidebar/components/items/SidebarMenuGroup.d.ts +9 -8
  450. package/Sidebar/components/items/SidebarMenuItem.d.ts +13 -9
  451. package/Sidebar/components/items/SidebarMenuItem.js +3 -1
  452. package/Sidebar/components/items/SidebarMenuItem.js.map +1 -1
  453. package/Sidebar/components/items/SidebarMenuItemBadge.d.ts +6 -0
  454. package/Sidebar/components/items/SidebarMenuItemBadge.js +7 -0
  455. package/Sidebar/components/items/SidebarMenuItemBadge.js.map +1 -0
  456. package/Sidebar/components/items/SidebarMenuItemIcon.d.ts +7 -6
  457. package/Sidebar/components/items/SidebarMenuLink.d.ts +12 -9
  458. package/Sidebar/components/items/SidebarMenuLink.js +3 -1
  459. package/Sidebar/components/items/SidebarMenuLink.js.map +1 -1
  460. package/Sidebar/components/items/SidebarMenuProvider.d.ts +4 -4
  461. package/Sidebar/components/items/SidebarMenuRootButton.d.ts +1 -1
  462. package/Sidebar/components/items/SidebarMenuRootButton.js +8 -3
  463. package/Sidebar/components/items/SidebarMenuRootButton.js.map +1 -1
  464. package/Sidebar/components/items/SidebarMenuRootItem.d.ts +9 -7
  465. package/Sidebar/components/items/SidebarMenuSubButton.d.ts +1 -1
  466. package/Sidebar/components/items/SidebarMenuSubButton.js +14 -6
  467. package/Sidebar/components/items/SidebarMenuSubButton.js.map +1 -1
  468. package/Sidebar/components/items/SidebarMenuSubItem.js +3 -3
  469. package/Sidebar/components/items/SidebarMenuSubItem.js.map +1 -1
  470. package/Sidebar/components/items/SidebarMenuSubItemIndentation.js +2 -1
  471. package/Sidebar/components/items/SidebarMenuSubItemIndentation.js.map +1 -1
  472. package/Skeleton/Skeleton.d.ts +9 -7
  473. package/Skeleton/Skeleton.js +10 -4
  474. package/Skeleton/Skeleton.js.map +1 -1
  475. package/Skeleton/Skeleton.stories.d.ts +3 -1
  476. package/Skeleton/Skeleton.stories.js +28 -2
  477. package/Skeleton/Skeleton.stories.js.map +1 -1
  478. package/Slider/Slider.d.ts +7 -6
  479. package/Slider/Slider.stories.d.ts +1 -1
  480. package/Slider/Slider.stories.js.map +1 -1
  481. package/Slider/primitives/SliderPrimitive.stories.d.ts +1 -1
  482. package/Slider/primitives/SliderPrimitive.stories.js.map +1 -1
  483. package/SteppedProgress/SteppedProgress.d.ts +7 -6
  484. package/SteppedProgress/SteppedProgress.stories.d.ts +1 -1
  485. package/SteppedProgress/SteppedProgress.stories.js.map +1 -1
  486. package/SteppedProgress/SteppedProgressItem.d.ts +7 -6
  487. package/Switch/Switch.d.ts +10 -9
  488. package/Switch/Switch.js +21 -7
  489. package/Switch/Switch.js.map +1 -1
  490. package/Switch/Switch.stories.d.ts +1 -1
  491. package/Switch/Switch.stories.js.map +1 -1
  492. package/Switch/domains/SwitchItemDto.d.ts +1 -1
  493. package/Switch/primitives/SwitchPrimitive.d.ts +10 -6
  494. package/Switch/primitives/SwitchPrimitive.js +4 -3
  495. package/Switch/primitives/SwitchPrimitive.js.map +1 -1
  496. package/Switch/primitives/SwitchPrimitive.stories.d.ts +1 -1
  497. package/Switch/primitives/SwitchPrimitive.stories.js.map +1 -1
  498. package/Table/Table.d.ts +12 -10
  499. package/Table/components/Direction.d.ts +1 -1
  500. package/Tabs/Tabs.d.ts +14 -7
  501. package/Tabs/Tabs.js +32 -11
  502. package/Tabs/Tabs.js.map +1 -1
  503. package/Tabs/Tabs.mdx +27 -0
  504. package/Tabs/Tabs.stories.d.ts +2 -1
  505. package/Tabs/Tabs.stories.js +19 -1
  506. package/Tabs/Tabs.stories.js.map +1 -1
  507. package/Tabs/components/Content.d.ts +1 -1
  508. package/Tabs/components/List.d.ts +2 -2
  509. package/Tabs/components/Tab.d.ts +7 -6
  510. package/Tabs/components/Trigger.d.ts +3 -2
  511. package/Tabs/components/Trigger.js +8 -3
  512. package/Tabs/components/Trigger.js.map +1 -1
  513. package/Tag/Tag.d.ts +8 -7
  514. package/Tag/Tag.stories.d.ts +1 -1
  515. package/Tag/Tag.stories.js.map +1 -1
  516. package/Tags/Tags.d.ts +7 -6
  517. package/Tags/Tags.stories.d.ts +1 -1
  518. package/Tags/Tags.stories.js.map +1 -1
  519. package/Tags/primitives/TagsPrimitive.d.ts +7 -6
  520. package/Tags/primitives/TagsPrimitive.stories.d.ts +1 -1
  521. package/Tags/primitives/TagsPrimitive.stories.js.map +1 -1
  522. package/Text/Text.d.ts +8 -7
  523. package/Text/Text.stories.d.ts +1 -1
  524. package/Text/Text.stories.js.map +1 -1
  525. package/Textarea/Textarea.d.ts +7 -6
  526. package/Textarea/Textarea.stories.d.ts +1 -1
  527. package/Textarea/Textarea.stories.js.map +1 -1
  528. package/Textarea/TextareaPrimitive.d.ts +9 -8
  529. package/Textarea/TextareaPrimitive.stories.d.ts +1 -1
  530. package/Textarea/TextareaPrimitive.stories.js.map +1 -1
  531. package/TimeAgo/TimeAgo.stories.d.ts +1 -1
  532. package/TimeAgo/TimeAgo.stories.js.map +1 -1
  533. package/TimeAgo/getElapsedSeconds.js +3 -3
  534. package/TimeAgo/getElapsedSeconds.js.map +1 -1
  535. package/Toast/Toast.d.ts +7 -6
  536. package/Toast/components/ToastActions.d.ts +7 -6
  537. package/Toast/components/ToastDescription.d.ts +7 -6
  538. package/Toast/components/ToastTitle.d.ts +7 -6
  539. package/Toast/useToast.stories.d.ts +1 -1
  540. package/Toast/useToast.stories.js.map +1 -1
  541. package/Toggle/Toggle.d.ts +7 -6
  542. package/Toggle/Toggle.stories.d.ts +1 -1
  543. package/Toggle/Toggle.stories.js.map +1 -1
  544. package/Toggle/primitives/TogglePrimitive.d.ts +13 -9
  545. package/Toggle/primitives/TogglePrimitive.stories.d.ts +1 -1
  546. package/Toggle/primitives/TogglePrimitive.stories.js.map +1 -1
  547. package/ToggleGroup/ToggleGroup.d.ts +7 -6
  548. package/ToggleGroup/ToggleGroup.stories.d.ts +1 -1
  549. package/ToggleGroup/ToggleGroup.stories.js.map +1 -1
  550. package/ToggleGroup/domains/ToggleGroupItem.d.ts +3 -0
  551. package/ToggleGroup/domains/ToggleGroupItem.js +6 -1
  552. package/ToggleGroup/domains/ToggleGroupItem.js.map +1 -1
  553. package/ToggleGroup/domains/ToggleGroupItemFormatted.d.ts +1 -0
  554. package/ToggleGroup/domains/ToggleGroupItemFormatter.js +2 -1
  555. package/ToggleGroup/domains/ToggleGroupItemFormatter.js.map +1 -1
  556. package/ToggleGroup/domains/ToggleGroupItemParams.d.ts +1 -0
  557. package/ToggleGroup/primitives/ToggleGroupPrimitive.d.ts +13 -9
  558. package/ToggleGroup/primitives/ToggleGroupPrimitive.js +12 -3
  559. package/ToggleGroup/primitives/ToggleGroupPrimitive.js.map +1 -1
  560. package/ToggleGroup/primitives/ToggleGroupPrimitive.stories.d.ts +1 -1
  561. package/ToggleGroup/primitives/ToggleGroupPrimitive.stories.js.map +1 -1
  562. package/Tooltip/Tooltip.d.ts +7 -6
  563. package/Tooltip/Tooltip.stories.d.ts +1 -1
  564. package/Tooltip/Tooltip.stories.js.map +1 -1
  565. package/Tree/Tree.d.ts +7 -6
  566. package/Tree/Tree.stories.d.ts +1 -1
  567. package/Tree/Tree.stories.js.map +1 -1
  568. package/Tree/components/Item.d.ts +7 -6
  569. package/Tree/components/ItemCollapseTrigger.d.ts +7 -6
  570. package/Tree/components/ItemContent.d.ts +8 -6
  571. package/Tree/components/ItemDragHandle.d.ts +7 -6
  572. package/Tree/components/ItemIcon.d.ts +7 -6
  573. package/Tree/components/ItemPlaceholder.d.ts +7 -6
  574. package/Tree/components/ItemSubIndentation.d.ts +7 -6
  575. package/Tree/useTree.js +6 -2
  576. package/Tree/useTree.js.map +1 -1
  577. package/Widget/Widget.d.ts +8 -22
  578. package/Widget/Widget.stories.d.ts +1 -1
  579. package/Widget/Widget.stories.js.map +1 -1
  580. package/Widget/components/Icon.d.ts +7 -6
  581. package/Widget/components/WidgetAction.d.ts +8 -6
  582. package/Widget/components/WidgetContent.d.ts +5 -5
  583. package/exports/admin/ui.d.ts +3 -0
  584. package/exports/admin/ui.js +3 -0
  585. package/hooks/index.d.ts +1 -0
  586. package/hooks/index.js +1 -0
  587. package/hooks/useEscapeScrollLock.d.ts +13 -0
  588. package/hooks/useEscapeScrollLock.js +21 -0
  589. package/hooks/useEscapeScrollLock.js.map +1 -0
  590. package/index.d.ts +8 -0
  591. package/index.js +8 -0
  592. package/package.json +33 -35
  593. package/theme.css +52 -0
  594. package/utils.js +53 -34
  595. package/utils.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"IconPicker/primitives/IconPickerPrimitive.stories.js","sources":["../../../src/IconPicker/primitives/IconPickerPrimitive.stories.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport type { Meta, StoryObj } from \"@storybook/react-webpack5\";\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\nimport { fas } from \"@fortawesome/free-solid-svg-icons\";\nimport { IconPickerPrimitive } from \"./IconPickerPrimitive.js\";\n\nconst meta: Meta<typeof IconPickerPrimitive> = {\n title: \"Components/Form Primitives/IconPicker\",\n component: IconPickerPrimitive,\n argTypes: {\n onChange: { action: \"onChange\" }\n },\n render: args => {\n const [value, setValue] = useState(args.value);\n return (\n <div className={\"w-full\"}>\n <IconPickerPrimitive {...args} value={value} onChange={setValue} />\n <div className={\"mt-4 text-center\"}>\n Current selected value: <pre>{value}</pre>\n </div>\n </div>\n );\n },\n parameters: {\n layout: \"padded\"\n }\n};\n\nlibrary.add(fas);\n\nexport default meta;\ntype Story = StoryObj<typeof IconPickerPrimitive>;\n\nexport const Default: Story = {\n args: {\n icons: [\n { prefix: \"fas\", name: \"trash-restore-alt\" },\n { prefix: \"fas\", name: \"trash-can-arrow-up\" },\n { prefix: \"fas\", name: \"naira-sign\" },\n { prefix: \"fas\", name: \"cart-arrow-down\" },\n { prefix: \"fas\", name: \"walkie-talkie\" },\n { prefix: \"fas\", name: \"file-edit\" },\n { prefix: \"fas\", name: \"file-pen\" },\n { prefix: \"fas\", name: \"receipt\" },\n { prefix: \"fas\", name: \"pen-square\" },\n { prefix: \"fas\", name: \"pencil-square\" },\n { prefix: \"fas\", name: \"square-pen\" },\n { prefix: \"fas\", name: \"suitcase-rolling\" },\n { prefix: \"fas\", name: \"person-circle-exclamation\" },\n { prefix: \"fas\", name: \"chevron-down\" },\n { prefix: \"fas\", name: \"battery\" },\n { prefix: \"fas\", name: \"battery-5\" },\n { prefix: \"fas\", name: \"battery-full\" },\n { prefix: \"fas\", name: \"skull-crossbones\" },\n { prefix: \"fas\", name: \"code-compare\" },\n { prefix: \"fas\", name: \"list-dots\" },\n { prefix: \"fas\", name: \"list-ul\" },\n { prefix: \"fas\", name: \"school-lock\" },\n { prefix: \"fas\", name: \"tower-cell\" },\n { prefix: \"fas\", name: \"long-arrow-alt-down\" },\n { prefix: \"fas\", name: \"down-long\" },\n { prefix: \"fas\", name: \"ranking-star\" },\n { prefix: \"fas\", name: \"chess-king\" },\n { prefix: \"fas\", name: \"person-harassing\" },\n { prefix: \"fas\", name: \"brazilian-real-sign\" },\n { prefix: \"fas\", name: \"landmark-alt\" },\n { prefix: \"fas\", name: \"landmark-dome\" },\n { prefix: \"fas\", name: \"arrow-up\" },\n { prefix: \"fas\", name: \"television\" },\n { prefix: \"fas\", name: \"tv-alt\" },\n { prefix: \"fas\", name: \"tv\" },\n { prefix: \"fas\", name: \"shrimp\" },\n { prefix: \"fas\", name: \"tasks\" },\n { prefix: \"fas\", name: \"list-check\" },\n { prefix: \"fas\", name: \"jug-detergent\" },\n { prefix: \"fas\", name: \"user-circle\" },\n { prefix: \"fas\", name: \"circle-user\" },\n { prefix: \"fas\", name: \"user-shield\" },\n { prefix: \"fas\", name: \"wind\" },\n { prefix: \"fas\", name: \"car-crash\" },\n { prefix: \"fas\", name: \"car-burst\" },\n { prefix: \"fas\", name: \"y\" },\n { prefix: \"fas\", name: \"snowboarding\" },\n { prefix: \"fas\", name: \"person-snowboarding\" },\n { prefix: \"fas\", name: \"shipping-fast\" },\n { prefix: \"fas\", name: \"truck-fast\" }\n ]\n }\n};\n\nexport const WithDefaultValue: Story = {\n args: {\n ...Default.args,\n value: \"fas/panorama\"\n }\n};\n\nexport const MediumSize: Story = {\n args: {\n ...Default.args,\n size: \"md\"\n }\n};\n\nexport const LargeSize: Story = {\n args: {\n ...Default.args,\n size: \"lg\"\n }\n};\n\nexport const ExtraLargeSize: Story = {\n args: {\n ...Default.args,\n size: \"xl\"\n }\n};\n\nexport const PrimaryVariant: Story = {\n args: {\n ...Default.args,\n variant: \"primary\"\n }\n};\n\nexport const PrimaryVariantDisabled: Story = {\n args: {\n ...PrimaryVariant.args,\n disabled: true\n }\n};\n\nexport const PrimaryVariantInvalid: Story = {\n args: {\n ...PrimaryVariant.args,\n invalid: true\n }\n};\n\nexport const SecondaryVariant: Story = {\n args: {\n ...Default.args,\n variant: \"secondary\"\n }\n};\n\nexport const SecondaryVariantDisabled: Story = {\n args: {\n ...SecondaryVariant.args,\n disabled: true\n }\n};\n\nexport const SecondaryVariantInvalid: Story = {\n args: {\n ...SecondaryVariant.args,\n invalid: true\n }\n};\n\nexport const GhostVariant: Story = {\n args: {\n ...Default.args,\n variant: \"ghost\"\n }\n};\n\nexport const GhostVariantDisabled: Story = {\n args: {\n ...GhostVariant.args,\n disabled: true\n }\n};\n\nexport const GhostVariantInvalid: Story = {\n args: {\n ...GhostVariant.args,\n invalid: true\n }\n};\n"],"names":["meta","IconPickerPrimitive","args","value","setValue","useState","library","fas","Default","WithDefaultValue","MediumSize","LargeSize","ExtraLargeSize","PrimaryVariant","PrimaryVariantDisabled","PrimaryVariantInvalid","SecondaryVariant","SecondaryVariantDisabled","SecondaryVariantInvalid","GhostVariant","GhostVariantDisabled","GhostVariantInvalid"],"mappings":"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"}
1
+ {"version":3,"file":"IconPicker/primitives/IconPickerPrimitive.stories.js","sources":["../../../src/IconPicker/primitives/IconPickerPrimitive.stories.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport type { Meta, StoryObj } from \"@storybook/react\";\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\nimport { fas } from \"@fortawesome/free-solid-svg-icons\";\nimport { IconPickerPrimitive } from \"./IconPickerPrimitive.js\";\n\nconst meta: Meta<typeof IconPickerPrimitive> = {\n title: \"Components/Form Primitives/IconPicker\",\n component: IconPickerPrimitive,\n argTypes: {\n onChange: { action: \"onChange\" }\n },\n render: args => {\n const [value, setValue] = useState(args.value);\n return (\n <div className={\"w-full\"}>\n <IconPickerPrimitive {...args} value={value} onChange={setValue} />\n <div className={\"mt-4 text-center\"}>\n Current selected value: <pre>{value}</pre>\n </div>\n </div>\n );\n },\n parameters: {\n layout: \"padded\"\n }\n};\n\nlibrary.add(fas);\n\nexport default meta;\ntype Story = StoryObj<typeof IconPickerPrimitive>;\n\nexport const Default: Story = {\n args: {\n icons: [\n { prefix: \"fas\", name: \"trash-restore-alt\" },\n { prefix: \"fas\", name: \"trash-can-arrow-up\" },\n { prefix: \"fas\", name: \"naira-sign\" },\n { prefix: \"fas\", name: \"cart-arrow-down\" },\n { prefix: \"fas\", name: \"walkie-talkie\" },\n { prefix: \"fas\", name: \"file-edit\" },\n { prefix: \"fas\", name: \"file-pen\" },\n { prefix: \"fas\", name: \"receipt\" },\n { prefix: \"fas\", name: \"pen-square\" },\n { prefix: \"fas\", name: \"pencil-square\" },\n { prefix: \"fas\", name: \"square-pen\" },\n { prefix: \"fas\", name: \"suitcase-rolling\" },\n { prefix: \"fas\", name: \"person-circle-exclamation\" },\n { prefix: \"fas\", name: \"chevron-down\" },\n { prefix: \"fas\", name: \"battery\" },\n { prefix: \"fas\", name: \"battery-5\" },\n { prefix: \"fas\", name: \"battery-full\" },\n { prefix: \"fas\", name: \"skull-crossbones\" },\n { prefix: \"fas\", name: \"code-compare\" },\n { prefix: \"fas\", name: \"list-dots\" },\n { prefix: \"fas\", name: \"list-ul\" },\n { prefix: \"fas\", name: \"school-lock\" },\n { prefix: \"fas\", name: \"tower-cell\" },\n { prefix: \"fas\", name: \"long-arrow-alt-down\" },\n { prefix: \"fas\", name: \"down-long\" },\n { prefix: \"fas\", name: \"ranking-star\" },\n { prefix: \"fas\", name: \"chess-king\" },\n { prefix: \"fas\", name: \"person-harassing\" },\n { prefix: \"fas\", name: \"brazilian-real-sign\" },\n { prefix: \"fas\", name: \"landmark-alt\" },\n { prefix: \"fas\", name: \"landmark-dome\" },\n { prefix: \"fas\", name: \"arrow-up\" },\n { prefix: \"fas\", name: \"television\" },\n { prefix: \"fas\", name: \"tv-alt\" },\n { prefix: \"fas\", name: \"tv\" },\n { prefix: \"fas\", name: \"shrimp\" },\n { prefix: \"fas\", name: \"tasks\" },\n { prefix: \"fas\", name: \"list-check\" },\n { prefix: \"fas\", name: \"jug-detergent\" },\n { prefix: \"fas\", name: \"user-circle\" },\n { prefix: \"fas\", name: \"circle-user\" },\n { prefix: \"fas\", name: \"user-shield\" },\n { prefix: \"fas\", name: \"wind\" },\n { prefix: \"fas\", name: \"car-crash\" },\n { prefix: \"fas\", name: \"car-burst\" },\n { prefix: \"fas\", name: \"y\" },\n { prefix: \"fas\", name: \"snowboarding\" },\n { prefix: \"fas\", name: \"person-snowboarding\" },\n { prefix: \"fas\", name: \"shipping-fast\" },\n { prefix: \"fas\", name: \"truck-fast\" }\n ]\n }\n};\n\nexport const WithDefaultValue: Story = {\n args: {\n ...Default.args,\n value: \"fas/panorama\"\n }\n};\n\nexport const MediumSize: Story = {\n args: {\n ...Default.args,\n size: \"md\"\n }\n};\n\nexport const LargeSize: Story = {\n args: {\n ...Default.args,\n size: \"lg\"\n }\n};\n\nexport const ExtraLargeSize: Story = {\n args: {\n ...Default.args,\n size: \"xl\"\n }\n};\n\nexport const PrimaryVariant: Story = {\n args: {\n ...Default.args,\n variant: \"primary\"\n }\n};\n\nexport const PrimaryVariantDisabled: Story = {\n args: {\n ...PrimaryVariant.args,\n disabled: true\n }\n};\n\nexport const PrimaryVariantInvalid: Story = {\n args: {\n ...PrimaryVariant.args,\n invalid: true\n }\n};\n\nexport const SecondaryVariant: Story = {\n args: {\n ...Default.args,\n variant: \"secondary\"\n }\n};\n\nexport const SecondaryVariantDisabled: Story = {\n args: {\n ...SecondaryVariant.args,\n disabled: true\n }\n};\n\nexport const SecondaryVariantInvalid: Story = {\n args: {\n ...SecondaryVariant.args,\n invalid: true\n }\n};\n\nexport const GhostVariant: Story = {\n args: {\n ...Default.args,\n variant: \"ghost\"\n }\n};\n\nexport const GhostVariantDisabled: Story = {\n args: {\n ...GhostVariant.args,\n disabled: true\n }\n};\n\nexport const GhostVariantInvalid: Story = {\n args: {\n ...GhostVariant.args,\n invalid: true\n }\n};\n"],"names":["meta","IconPickerPrimitive","args","value","setValue","useState","library","fas","Default","WithDefaultValue","MediumSize","LargeSize","ExtraLargeSize","PrimaryVariant","PrimaryVariantDisabled","PrimaryVariantInvalid","SecondaryVariant","SecondaryVariantDisabled","SecondaryVariantInvalid","GhostVariant","GhostVariantDisabled","GhostVariantInvalid"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  import { type VariantProps } from "../../../utils.js";
3
3
  declare const iconPickerTriggerVariants: (props?: ({
4
- size?: "md" | "lg" | "xl" | null | undefined;
4
+ size?: "lg" | "md" | "xl" | null | undefined;
5
5
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
6
  interface IconPickerTriggerProps extends VariantProps<typeof iconPickerTriggerVariants> {
7
7
  value?: string;
@@ -0,0 +1,16 @@
1
+ import React from "react";
2
+ import type { ImageEditorAspectRatio, ImageEditorCrop, ImageEditorHotspot } from "./types.js";
3
+ interface AspectRatioPreviewProps {
4
+ src: string;
5
+ imageWidth: number;
6
+ imageHeight: number;
7
+ crop: ImageEditorCrop | undefined;
8
+ hotspot: ImageEditorHotspot | undefined;
9
+ aspectRatio: ImageEditorAspectRatio;
10
+ }
11
+ /**
12
+ * A single live preview showing how the current crop + hotspot renders at one
13
+ * target aspect ratio. Uses the shared preview geometry so it matches the site.
14
+ */
15
+ export declare const AspectRatioPreview: ({ src, imageWidth, imageHeight, crop, hotspot, aspectRatio }: AspectRatioPreviewProps) => React.JSX.Element;
16
+ export {};
@@ -0,0 +1,26 @@
1
+ import react from "react";
2
+ import { getPreviewStyles } from "./geometry.js";
3
+ const PREVIEW_HEIGHT = 120;
4
+ const AspectRatioPreview = ({ src, imageWidth, imageHeight, crop, hotspot, aspectRatio })=>{
5
+ const styles = getPreviewStyles(imageWidth, imageHeight, crop, hotspot, aspectRatio.ratio);
6
+ const width = Math.round(PREVIEW_HEIGHT * aspectRatio.ratio);
7
+ return /*#__PURE__*/ react.createElement("div", {
8
+ className: "flex flex-col items-center gap-xs"
9
+ }, /*#__PURE__*/ react.createElement("div", {
10
+ className: "relative overflow-hidden rounded-sm border border-neutral-dimmed bg-neutral-light",
11
+ style: {
12
+ width: `${width}px`,
13
+ height: `${PREVIEW_HEIGHT}px`
14
+ }
15
+ }, /*#__PURE__*/ react.createElement("img", {
16
+ src: src,
17
+ alt: "",
18
+ style: styles.image,
19
+ draggable: false
20
+ })), /*#__PURE__*/ react.createElement("span", {
21
+ className: "text-sm text-neutral-strong"
22
+ }, aspectRatio.label));
23
+ };
24
+ export { AspectRatioPreview };
25
+
26
+ //# sourceMappingURL=AspectRatioPreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageEditor/AspectRatioPreview.js","sources":["../../src/ImageEditor/AspectRatioPreview.tsx"],"sourcesContent":["import React from \"react\";\nimport { getPreviewStyles } from \"./geometry.js\";\nimport type { ImageEditorAspectRatio, ImageEditorCrop, ImageEditorHotspot } from \"./types.js\";\n\ninterface AspectRatioPreviewProps {\n src: string;\n imageWidth: number;\n imageHeight: number;\n crop: ImageEditorCrop | undefined;\n hotspot: ImageEditorHotspot | undefined;\n aspectRatio: ImageEditorAspectRatio;\n}\n\n// Fixed preview height (px). Each thumbnail keeps this height regardless of how\n// many are shown; the width is derived from the aspect ratio.\nconst PREVIEW_HEIGHT = 120;\n\n/**\n * A single live preview showing how the current crop + hotspot renders at one\n * target aspect ratio. Uses the shared preview geometry so it matches the site.\n */\nexport const AspectRatioPreview = ({\n src,\n imageWidth,\n imageHeight,\n crop,\n hotspot,\n aspectRatio\n}: AspectRatioPreviewProps) => {\n const styles = getPreviewStyles(imageWidth, imageHeight, crop, hotspot, aspectRatio.ratio);\n const width = Math.round(PREVIEW_HEIGHT * aspectRatio.ratio);\n\n return (\n <div className={\"flex flex-col items-center gap-xs\"}>\n <div\n className={\n \"relative overflow-hidden rounded-sm border border-neutral-dimmed bg-neutral-light\"\n }\n style={{ width: `${width}px`, height: `${PREVIEW_HEIGHT}px` }}\n >\n <img src={src} alt={\"\"} style={styles.image} draggable={false} />\n </div>\n <span className={\"text-sm text-neutral-strong\"}>{aspectRatio.label}</span>\n </div>\n );\n};\n"],"names":["PREVIEW_HEIGHT","AspectRatioPreview","src","imageWidth","imageHeight","crop","hotspot","aspectRatio","styles","getPreviewStyles","width","Math"],"mappings":";;AAeA,MAAMA,iBAAiB;AAMhB,MAAMC,qBAAqB,CAAC,EAC/BC,GAAG,EACHC,UAAU,EACVC,WAAW,EACXC,IAAI,EACJC,OAAO,EACPC,WAAW,EACW;IACtB,MAAMC,SAASC,iBAAiBN,YAAYC,aAAaC,MAAMC,SAASC,YAAY,KAAK;IACzF,MAAMG,QAAQC,KAAK,KAAK,CAACX,iBAAiBO,YAAY,KAAK;IAE3D,OAAO,WAAP,GACI,oBAAC;QAAI,WAAW;qBACZ,oBAAC;QACG,WACI;QAEJ,OAAO;YAAE,OAAO,GAAGG,MAAM,EAAE,CAAC;YAAE,QAAQ,GAAGV,eAAe,EAAE,CAAC;QAAC;qBAE5D,oBAAC;QAAI,KAAKE;QAAK,KAAK;QAAI,OAAOM,OAAO,KAAK;QAAE,WAAW;uBAE5D,oBAAC;QAAK,WAAW;OAAgCD,YAAY,KAAK;AAG9E"}
@@ -0,0 +1,22 @@
1
+ import React from "react";
2
+ import type { ImageEditorCrop, ImageEditorHotspot, ImageEditorImage } from "./types.js";
3
+ interface CropHotspotEditorProps {
4
+ image: ImageEditorImage;
5
+ crop: ImageEditorCrop | undefined;
6
+ hotspot: ImageEditorHotspot | undefined;
7
+ /** Currently selected crop shape id ("free" or a preset id). Controlled by the parent. */
8
+ aspectId: string;
9
+ onChangeAspect: (id: string) => void;
10
+ onChangeCrop: (crop: ImageEditorCrop) => void;
11
+ onChangeHotspot: (hotspot: ImageEditorHotspot) => void;
12
+ }
13
+ export declare const FREE = "free";
14
+ /**
15
+ * Infer which crop-shape preset a saved crop corresponds to, by comparing the
16
+ * crop's on-screen (pixel) aspect ratio against the presets. The crop stores only
17
+ * edge insets — not the shape used to draw it — so on reopen we recover the shape
18
+ * here; a crop drawn with a preset matches it closely, while a free crop won't.
19
+ */
20
+ export declare const inferAspectId: (crop: ImageEditorCrop | undefined, width: number, height: number) => string;
21
+ export declare const CropHotspotEditor: ({ image, crop, hotspot, aspectId, onChangeAspect, onChangeCrop, onChangeHotspot }: CropHotspotEditorProps) => React.JSX.Element;
22
+ export {};
@@ -0,0 +1,402 @@
1
+ import react, { useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
2
+ import { Select } from "../Select/index.js";
3
+ import { Text } from "../Text/index.js";
4
+ import { SectionLabel } from "./SectionLabel.js";
5
+ import { DEFAULT_ASPECT_RATIOS } from "./types.js";
6
+ const MIN = 0.05;
7
+ const FREE = "free";
8
+ const inferAspectId = (crop, width, height)=>{
9
+ if (!crop || !width || !height) return FREE;
10
+ const cropWidth = Math.max(0, 1 - (crop.left ?? 0) - (crop.right ?? 0));
11
+ const cropHeight = Math.max(0, 1 - (crop.top ?? 0) - (crop.bottom ?? 0));
12
+ if (cropWidth <= 0 || cropHeight <= 0) return FREE;
13
+ const displayRatio = cropWidth * width / (cropHeight * height);
14
+ const match = DEFAULT_ASPECT_RATIOS.find((ar)=>Math.abs(ar.ratio - displayRatio) < 0.02);
15
+ return match?.id ?? FREE;
16
+ };
17
+ const MAX_CANVAS_WIDTH = 640;
18
+ const MAX_CANVAS_HEIGHT = 460;
19
+ const clamp01 = (n)=>Math.min(1, Math.max(0, n));
20
+ const cropToEdges = (crop)=>({
21
+ left: clamp01(crop?.left ?? 0),
22
+ top: clamp01(crop?.top ?? 0),
23
+ right: 1 - clamp01(crop?.right ?? 0),
24
+ bottom: 1 - clamp01(crop?.bottom ?? 0)
25
+ });
26
+ const edgesToCrop = (e)=>({
27
+ top: e.top,
28
+ left: e.left,
29
+ bottom: 1 - e.bottom,
30
+ right: 1 - e.right
31
+ });
32
+ const HANDLE_EDGES = {
33
+ nw: [
34
+ "top",
35
+ "left"
36
+ ],
37
+ n: [
38
+ "top"
39
+ ],
40
+ ne: [
41
+ "top",
42
+ "right"
43
+ ],
44
+ e: [
45
+ "right"
46
+ ],
47
+ se: [
48
+ "bottom",
49
+ "right"
50
+ ],
51
+ s: [
52
+ "bottom"
53
+ ],
54
+ sw: [
55
+ "bottom",
56
+ "left"
57
+ ],
58
+ w: [
59
+ "left"
60
+ ]
61
+ };
62
+ const CORNER_HANDLES = [
63
+ "nw",
64
+ "ne",
65
+ "se",
66
+ "sw"
67
+ ];
68
+ const EDGE_HANDLES = [
69
+ "n",
70
+ "e",
71
+ "s",
72
+ "w"
73
+ ];
74
+ const clampHotspot = (h, e)=>({
75
+ x: Math.min(e.right, Math.max(e.left, h?.x ?? (e.left + e.right) / 2)),
76
+ y: Math.min(e.bottom, Math.max(e.top, h?.y ?? (e.top + e.bottom) / 2)),
77
+ width: h?.width ?? 1,
78
+ height: h?.height ?? 1
79
+ });
80
+ const CropHotspotEditor = ({ image, crop, hotspot, aspectId, onChangeAspect, onChangeCrop, onChangeHotspot })=>{
81
+ const surfaceRef = useRef(null);
82
+ const dragRef = useRef(null);
83
+ const wrapperRef = useRef(null);
84
+ const [availWidth, setAvailWidth] = useState(0);
85
+ useLayoutEffect(()=>{
86
+ const el = wrapperRef.current;
87
+ if (!el) return;
88
+ const measure = ()=>setAvailWidth(el.getBoundingClientRect().width);
89
+ measure();
90
+ if ("u" < typeof ResizeObserver) return;
91
+ const ro = new ResizeObserver(measure);
92
+ ro.observe(el);
93
+ return ()=>ro.disconnect();
94
+ }, []);
95
+ const imageRatio = (image.width || 1) / (image.height || 1);
96
+ const surfaceStyle = useMemo(()=>{
97
+ if (availWidth <= 0) return {
98
+ width: "100%",
99
+ aspectRatio: `${image.width || 1} / ${image.height || 1}`,
100
+ maxHeight: `${MAX_CANVAS_HEIGHT}px`
101
+ };
102
+ let width = Math.min(availWidth, MAX_CANVAS_WIDTH);
103
+ let height = width / imageRatio;
104
+ if (height > MAX_CANVAS_HEIGHT) {
105
+ height = MAX_CANVAS_HEIGHT;
106
+ width = height * imageRatio;
107
+ }
108
+ return {
109
+ width: `${width}px`,
110
+ height: `${height}px`
111
+ };
112
+ }, [
113
+ availWidth,
114
+ imageRatio,
115
+ image.width,
116
+ image.height
117
+ ]);
118
+ const edges = useMemo(()=>cropToEdges(crop), [
119
+ crop
120
+ ]);
121
+ const ratio = DEFAULT_ASPECT_RATIOS.find((ar)=>ar.id === aspectId)?.ratio ?? null;
122
+ const aspectOptions = useMemo(()=>[
123
+ {
124
+ label: "Free",
125
+ value: FREE
126
+ },
127
+ ...DEFAULT_ASPECT_RATIOS.map((ar)=>({
128
+ label: ar.label,
129
+ value: ar.id
130
+ }))
131
+ ], []);
132
+ const toNorm = useCallback((clientX, clientY)=>{
133
+ const rect = surfaceRef.current.getBoundingClientRect();
134
+ return {
135
+ x: clamp01((clientX - rect.left) / rect.width),
136
+ y: clamp01((clientY - rect.top) / rect.height)
137
+ };
138
+ }, []);
139
+ const commitEdges = useCallback((next)=>{
140
+ onChangeCrop(edgesToCrop(next));
141
+ onChangeHotspot(clampHotspot(hotspot, next));
142
+ }, [
143
+ onChangeCrop,
144
+ onChangeHotspot,
145
+ hotspot
146
+ ]);
147
+ const resizeFree = (handle, p)=>{
148
+ const moves = HANDLE_EDGES[handle];
149
+ const next = {
150
+ ...edges
151
+ };
152
+ if (moves.includes("left")) next.left = Math.min(p.x, next.right - MIN);
153
+ if (moves.includes("right")) next.right = Math.max(p.x, next.left + MIN);
154
+ if (moves.includes("top")) next.top = Math.min(p.y, next.bottom - MIN);
155
+ if (moves.includes("bottom")) next.bottom = Math.max(p.y, next.top + MIN);
156
+ return next;
157
+ };
158
+ const resizeLocked = (handle, p, r)=>{
159
+ const moves = HANDLE_EDGES[handle];
160
+ const rNorm = r / imageRatio;
161
+ const anchorX = moves.includes("left") ? edges.right : edges.left;
162
+ const anchorY = moves.includes("top") ? edges.bottom : edges.top;
163
+ const dirX = moves.includes("left") ? -1 : 1;
164
+ const dirY = moves.includes("top") ? -1 : 1;
165
+ const maxW = dirX > 0 ? 1 - anchorX : anchorX;
166
+ const maxH = dirY > 0 ? 1 - anchorY : anchorY;
167
+ let w = Math.abs(p.x - anchorX);
168
+ let h = w / rNorm;
169
+ if (h > Math.abs(p.y - anchorY)) {
170
+ h = Math.abs(p.y - anchorY);
171
+ w = h * rNorm;
172
+ }
173
+ w = Math.min(w, maxW);
174
+ h = w / rNorm;
175
+ if (h > maxH) {
176
+ h = maxH;
177
+ w = h * rNorm;
178
+ }
179
+ w = Math.max(w, MIN);
180
+ h = Math.max(h, MIN);
181
+ const next = {
182
+ ...edges
183
+ };
184
+ if (dirX > 0) {
185
+ next.left = anchorX;
186
+ next.right = anchorX + w;
187
+ } else {
188
+ next.right = anchorX;
189
+ next.left = anchorX - w;
190
+ }
191
+ if (dirY > 0) {
192
+ next.top = anchorY;
193
+ next.bottom = anchorY + h;
194
+ } else {
195
+ next.bottom = anchorY;
196
+ next.top = anchorY - h;
197
+ }
198
+ return next;
199
+ };
200
+ const moveCrop = (startEdges, dx, dy)=>{
201
+ const w = startEdges.right - startEdges.left;
202
+ const h = startEdges.bottom - startEdges.top;
203
+ const left = Math.min(Math.max(startEdges.left + dx, 0), 1 - w);
204
+ const top = Math.min(Math.max(startEdges.top + dy, 0), 1 - h);
205
+ return {
206
+ left,
207
+ top,
208
+ right: left + w,
209
+ bottom: top + h
210
+ };
211
+ };
212
+ const onPointerMove = useCallback((e)=>{
213
+ const drag = dragRef.current;
214
+ if (!drag) return;
215
+ const p = toNorm(e.clientX, e.clientY);
216
+ if ("focal" === drag.mode) return void onChangeHotspot(clampHotspot({
217
+ x: p.x,
218
+ y: p.y,
219
+ width: 1,
220
+ height: 1
221
+ }, edges));
222
+ if ("move" === drag.mode) {
223
+ const dx = p.x - drag.startPointer.x;
224
+ const dy = p.y - drag.startPointer.y;
225
+ commitEdges(moveCrop(drag.startEdges, dx, dy));
226
+ return;
227
+ }
228
+ const handle = drag.mode.slice(7);
229
+ commitEdges(null === ratio ? resizeFree(handle, p) : resizeLocked(handle, p, ratio));
230
+ }, [
231
+ toNorm,
232
+ onChangeHotspot,
233
+ edges,
234
+ commitEdges,
235
+ ratio
236
+ ]);
237
+ const startMoveCrop = useCallback((e)=>{
238
+ dragRef.current = {
239
+ mode: "move",
240
+ startPointer: toNorm(e.clientX, e.clientY),
241
+ startEdges: edges
242
+ };
243
+ surfaceRef.current?.setPointerCapture(e.pointerId);
244
+ }, [
245
+ toNorm,
246
+ edges
247
+ ]);
248
+ const startFocal = useCallback((e)=>{
249
+ e.stopPropagation();
250
+ dragRef.current = {
251
+ mode: "focal"
252
+ };
253
+ surfaceRef.current?.setPointerCapture(e.pointerId);
254
+ }, []);
255
+ const startResize = useCallback((handle)=>(e)=>{
256
+ e.stopPropagation();
257
+ dragRef.current = {
258
+ mode: `resize:${handle}`
259
+ };
260
+ surfaceRef.current?.setPointerCapture(e.pointerId);
261
+ }, []);
262
+ const endDrag = useCallback((e)=>{
263
+ dragRef.current = null;
264
+ surfaceRef.current?.releasePointerCapture(e.pointerId);
265
+ }, []);
266
+ const onSelectAspect = useCallback((value)=>{
267
+ onChangeAspect(value);
268
+ const r = DEFAULT_ASPECT_RATIOS.find((ar)=>ar.id === value)?.ratio;
269
+ if (value === FREE || !r) return;
270
+ const rNorm = r / imageRatio;
271
+ const cw = edges.right - edges.left;
272
+ const ch = edges.bottom - edges.top;
273
+ let w = cw;
274
+ let h = w / rNorm;
275
+ if (h > ch) {
276
+ h = ch;
277
+ w = h * rNorm;
278
+ }
279
+ const cx = (edges.left + edges.right) / 2;
280
+ const cy = (edges.top + edges.bottom) / 2;
281
+ commitEdges({
282
+ left: clamp01(cx - w / 2),
283
+ right: clamp01(cx + w / 2),
284
+ top: clamp01(cy - h / 2),
285
+ bottom: clamp01(cy + h / 2)
286
+ });
287
+ }, [
288
+ edges,
289
+ commitEdges,
290
+ imageRatio,
291
+ onChangeAspect
292
+ ]);
293
+ const activeHotspot = clampHotspot(hotspot, edges);
294
+ const handles = null === ratio ? [
295
+ ...CORNER_HANDLES,
296
+ ...EDGE_HANDLES
297
+ ] : CORNER_HANDLES;
298
+ const handlePosition = (handle)=>{
299
+ const cx = (edges.left + edges.right) / 2;
300
+ const cy = (edges.top + edges.bottom) / 2;
301
+ const x = handle.includes("w") ? edges.left : handle.includes("e") ? edges.right : cx;
302
+ const y = handle.includes("n") ? edges.top : handle.includes("s") ? edges.bottom : cy;
303
+ return {
304
+ left: `${100 * x}%`,
305
+ top: `${100 * y}%`
306
+ };
307
+ };
308
+ const cursorFor = (handle)=>{
309
+ const map = {
310
+ nw: "nwse-resize",
311
+ se: "nwse-resize",
312
+ ne: "nesw-resize",
313
+ sw: "nesw-resize",
314
+ n: "ns-resize",
315
+ s: "ns-resize",
316
+ e: "ew-resize",
317
+ w: "ew-resize"
318
+ };
319
+ return map[handle];
320
+ };
321
+ return /*#__PURE__*/ react.createElement("div", {
322
+ className: "flex flex-col gap-sm"
323
+ }, /*#__PURE__*/ react.createElement("div", {
324
+ className: "flex items-end justify-between gap-md"
325
+ }, /*#__PURE__*/ react.createElement(SectionLabel, null, "Crop & focal point"), /*#__PURE__*/ react.createElement("div", {
326
+ className: "w-[200px] shrink-0"
327
+ }, /*#__PURE__*/ react.createElement(Select, {
328
+ label: "Crop shape",
329
+ value: aspectId,
330
+ options: aspectOptions,
331
+ onChange: onSelectAspect,
332
+ displayResetAction: false
333
+ }))), /*#__PURE__*/ react.createElement("div", {
334
+ className: "flex justify-center rounded-md bg-neutral-dark p-lg"
335
+ }, /*#__PURE__*/ react.createElement("div", {
336
+ ref: wrapperRef,
337
+ className: "w-full"
338
+ }, /*#__PURE__*/ react.createElement("div", {
339
+ ref: surfaceRef,
340
+ onPointerMove: onPointerMove,
341
+ onPointerUp: endDrag,
342
+ className: "relative mx-auto touch-none select-none overflow-hidden rounded-sm",
343
+ style: surfaceStyle
344
+ }, /*#__PURE__*/ react.createElement("img", {
345
+ src: image.src,
346
+ alt: "",
347
+ draggable: false,
348
+ className: "pointer-events-none absolute inset-0 h-full w-full object-cover"
349
+ }), /*#__PURE__*/ react.createElement("div", {
350
+ onPointerDown: startMoveCrop,
351
+ className: "absolute cursor-move border border-white/90",
352
+ style: {
353
+ left: `${100 * edges.left}%`,
354
+ top: `${100 * edges.top}%`,
355
+ width: `${(edges.right - edges.left) * 100}%`,
356
+ height: `${(edges.bottom - edges.top) * 100}%`,
357
+ boxShadow: "0 0 0 1px rgba(0, 0, 0, 0.55), 0 0 0 9999px rgba(0, 0, 0, 0.45)"
358
+ }
359
+ }, /*#__PURE__*/ react.createElement("div", {
360
+ className: "pointer-events-none absolute inset-0"
361
+ }, /*#__PURE__*/ react.createElement("div", {
362
+ className: "absolute inset-y-0 left-1/3 w-px bg-white/30"
363
+ }), /*#__PURE__*/ react.createElement("div", {
364
+ className: "absolute inset-y-0 left-2/3 w-px bg-white/30"
365
+ }), /*#__PURE__*/ react.createElement("div", {
366
+ className: "absolute inset-x-0 top-1/3 h-px bg-white/30"
367
+ }), /*#__PURE__*/ react.createElement("div", {
368
+ className: "absolute inset-x-0 top-2/3 h-px bg-white/30"
369
+ })), /*#__PURE__*/ react.createElement("div", {
370
+ onPointerDown: startFocal,
371
+ className: "absolute flex h-8 w-8 -translate-x-1/2 -translate-y-1/2 cursor-grab touch-none items-center justify-center active:cursor-grabbing",
372
+ style: {
373
+ left: `${(activeHotspot.x - edges.left) / Math.max(MIN, edges.right - edges.left) * 100}%`,
374
+ top: `${(activeHotspot.y - edges.top) / Math.max(MIN, edges.bottom - edges.top) * 100}%`
375
+ }
376
+ }, /*#__PURE__*/ react.createElement("div", {
377
+ className: "pointer-events-none relative h-6 w-6 rounded-full border-2 border-white bg-white/25 shadow-lg"
378
+ }, /*#__PURE__*/ react.createElement("div", {
379
+ className: "absolute left-1/2 top-1/2 h-1.5 w-1.5 -translate-x-1/2 -translate-y-1/2 rounded-full bg-white"
380
+ })))), handles.map((handle)=>{
381
+ const pos = handlePosition(handle);
382
+ return /*#__PURE__*/ react.createElement("div", {
383
+ key: handle,
384
+ onPointerDown: startResize(handle),
385
+ className: "absolute flex h-6 w-6 -translate-x-1/2 -translate-y-1/2 touch-none items-center justify-center",
386
+ style: {
387
+ left: pos.left,
388
+ top: pos.top,
389
+ cursor: cursorFor(handle)
390
+ }
391
+ }, /*#__PURE__*/ react.createElement("div", {
392
+ className: "pointer-events-none h-3 w-3 rounded-sm border border-neutral-dark bg-white shadow"
393
+ }));
394
+ })))), /*#__PURE__*/ react.createElement(Text, {
395
+ as: "div",
396
+ size: "sm",
397
+ className: "text-neutral-strong"
398
+ }, "Drag the handles to crop, drag inside to reposition, and drag the circle to set the focal point."));
399
+ };
400
+ export { CropHotspotEditor, FREE, inferAspectId };
401
+
402
+ //# sourceMappingURL=CropHotspotEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageEditor/CropHotspotEditor.js","sources":["../../src/ImageEditor/CropHotspotEditor.tsx"],"sourcesContent":["import React, { useCallback, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { Select } from \"~/Select/index.js\";\nimport { Text } from \"~/Text/index.js\";\nimport { SectionLabel } from \"./SectionLabel.js\";\nimport { DEFAULT_ASPECT_RATIOS } from \"./types.js\";\nimport type { ImageEditorCrop, ImageEditorHotspot, ImageEditorImage } from \"./types.js\";\n\ninterface CropHotspotEditorProps {\n image: ImageEditorImage;\n crop: ImageEditorCrop | undefined;\n hotspot: ImageEditorHotspot | undefined;\n /** Currently selected crop shape id (\"free\" or a preset id). Controlled by the parent. */\n aspectId: string;\n onChangeAspect: (id: string) => void;\n onChangeCrop: (crop: ImageEditorCrop) => void;\n onChangeHotspot: (hotspot: ImageEditorHotspot) => void;\n}\n\n/** Crop rectangle in edge positions (0..1): left/top/right/bottom, left<right, top<bottom. */\ninterface Edges {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\ntype Handle = \"nw\" | \"n\" | \"ne\" | \"e\" | \"se\" | \"s\" | \"sw\" | \"w\";\n\nconst MIN = 0.05;\nexport const FREE = \"free\";\n\n/**\n * Infer which crop-shape preset a saved crop corresponds to, by comparing the\n * crop's on-screen (pixel) aspect ratio against the presets. The crop stores only\n * edge insets — not the shape used to draw it — so on reopen we recover the shape\n * here; a crop drawn with a preset matches it closely, while a free crop won't.\n */\nexport const inferAspectId = (\n crop: ImageEditorCrop | undefined,\n width: number,\n height: number\n): string => {\n if (!crop || !width || !height) {\n return FREE;\n }\n const cropWidth = Math.max(0, 1 - (crop.left ?? 0) - (crop.right ?? 0));\n const cropHeight = Math.max(0, 1 - (crop.top ?? 0) - (crop.bottom ?? 0));\n if (cropWidth <= 0 || cropHeight <= 0) {\n return FREE;\n }\n const displayRatio = (cropWidth * width) / (cropHeight * height);\n const match = DEFAULT_ASPECT_RATIOS.find(ar => Math.abs(ar.ratio - displayRatio) < 0.02);\n return match?.id ?? FREE;\n};\n\n// Canvas fits within this box (px), preserving the image aspect ratio, so tall\n// images don't take up the full screen height.\nconst MAX_CANVAS_WIDTH = 640;\nconst MAX_CANVAS_HEIGHT = 460;\n\nconst clamp01 = (n: number) => Math.min(1, Math.max(0, n));\n\nconst cropToEdges = (crop: ImageEditorCrop | undefined): Edges => ({\n left: clamp01(crop?.left ?? 0),\n top: clamp01(crop?.top ?? 0),\n right: 1 - clamp01(crop?.right ?? 0),\n bottom: 1 - clamp01(crop?.bottom ?? 0)\n});\n\nconst edgesToCrop = (e: Edges): ImageEditorCrop => ({\n top: e.top,\n left: e.left,\n bottom: 1 - e.bottom,\n right: 1 - e.right\n});\n\n// Which edges each handle moves.\nconst HANDLE_EDGES: Record<Handle, Array<keyof Edges>> = {\n nw: [\"top\", \"left\"],\n n: [\"top\"],\n ne: [\"top\", \"right\"],\n e: [\"right\"],\n se: [\"bottom\", \"right\"],\n s: [\"bottom\"],\n sw: [\"bottom\", \"left\"],\n w: [\"left\"]\n};\n\nconst CORNER_HANDLES: Handle[] = [\"nw\", \"ne\", \"se\", \"sw\"];\nconst EDGE_HANDLES: Handle[] = [\"n\", \"e\", \"s\", \"w\"];\n\nconst clampHotspot = (h: ImageEditorHotspot | undefined, e: Edges): ImageEditorHotspot => ({\n x: Math.min(e.right, Math.max(e.left, h?.x ?? (e.left + e.right) / 2)),\n y: Math.min(e.bottom, Math.max(e.top, h?.y ?? (e.top + e.bottom) / 2)),\n width: h?.width ?? 1,\n height: h?.height ?? 1\n});\n\nexport const CropHotspotEditor = ({\n image,\n crop,\n hotspot,\n aspectId,\n onChangeAspect,\n onChangeCrop,\n onChangeHotspot\n}: CropHotspotEditorProps) => {\n const surfaceRef = useRef<HTMLDivElement>(null);\n const dragRef = useRef<\n | { mode: \"focal\" }\n | { mode: `resize:${Handle}` }\n | { mode: \"move\"; startPointer: { x: number; y: number }; startEdges: Edges }\n | null\n >(null);\n\n // Measure the available width so we can fit the canvas into a max box while\n // preserving the image aspect ratio (keeps the box == image aspect, which the\n // pointer coordinate mapping relies on).\n const wrapperRef = useRef<HTMLDivElement>(null);\n const [availWidth, setAvailWidth] = useState(0);\n\n useLayoutEffect(() => {\n const el = wrapperRef.current;\n if (!el) {\n return;\n }\n const measure = () => setAvailWidth(el.getBoundingClientRect().width);\n measure();\n if (typeof ResizeObserver === \"undefined\") {\n return;\n }\n const ro = new ResizeObserver(measure);\n ro.observe(el);\n return () => ro.disconnect();\n }, []);\n\n const imageRatio = (image.width || 1) / (image.height || 1);\n const surfaceStyle = useMemo<React.CSSProperties>(() => {\n if (availWidth <= 0) {\n return {\n width: \"100%\",\n aspectRatio: `${image.width || 1} / ${image.height || 1}`,\n maxHeight: `${MAX_CANVAS_HEIGHT}px`\n };\n }\n let width = Math.min(availWidth, MAX_CANVAS_WIDTH);\n let height = width / imageRatio;\n if (height > MAX_CANVAS_HEIGHT) {\n height = MAX_CANVAS_HEIGHT;\n width = height * imageRatio;\n }\n return { width: `${width}px`, height: `${height}px` };\n }, [availWidth, imageRatio, image.width, image.height]);\n\n const edges = useMemo(() => cropToEdges(crop), [crop]);\n const ratio = DEFAULT_ASPECT_RATIOS.find(ar => ar.id === aspectId)?.ratio ?? null;\n\n const aspectOptions = useMemo(\n () => [\n { label: \"Free\", value: FREE },\n ...DEFAULT_ASPECT_RATIOS.map(ar => ({ label: ar.label, value: ar.id }))\n ],\n []\n );\n\n const toNorm = useCallback((clientX: number, clientY: number) => {\n const rect = surfaceRef.current!.getBoundingClientRect();\n return {\n x: clamp01((clientX - rect.left) / rect.width),\n y: clamp01((clientY - rect.top) / rect.height)\n };\n }, []);\n\n const commitEdges = useCallback(\n (next: Edges) => {\n onChangeCrop(edgesToCrop(next));\n // Keep the focal point inside the (new) crop.\n onChangeHotspot(clampHotspot(hotspot, next));\n },\n [onChangeCrop, onChangeHotspot, hotspot]\n );\n\n const resizeFree = (handle: Handle, p: { x: number; y: number }): Edges => {\n const moves = HANDLE_EDGES[handle];\n const next = { ...edges };\n if (moves.includes(\"left\")) {\n next.left = Math.min(p.x, next.right - MIN);\n }\n if (moves.includes(\"right\")) {\n next.right = Math.max(p.x, next.left + MIN);\n }\n if (moves.includes(\"top\")) {\n next.top = Math.min(p.y, next.bottom - MIN);\n }\n if (moves.includes(\"bottom\")) {\n next.bottom = Math.max(p.y, next.top + MIN);\n }\n return next;\n };\n\n const resizeLocked = (handle: Handle, p: { x: number; y: number }, r: number): Edges => {\n const moves = HANDLE_EDGES[handle];\n // `r` is a display (pixel) aspect ratio, but the crop is stored in normalized\n // image coordinates. Convert so the on-screen crop actually has ratio `r`.\n const rNorm = r / imageRatio;\n // Anchor is the opposite corner (fixed).\n const anchorX = moves.includes(\"left\") ? edges.right : edges.left;\n const anchorY = moves.includes(\"top\") ? edges.bottom : edges.top;\n const dirX = moves.includes(\"left\") ? -1 : 1;\n const dirY = moves.includes(\"top\") ? -1 : 1;\n\n const maxW = dirX > 0 ? 1 - anchorX : anchorX;\n const maxH = dirY > 0 ? 1 - anchorY : anchorY;\n\n let w = Math.abs(p.x - anchorX);\n let h = w / rNorm;\n if (h > Math.abs(p.y - anchorY)) {\n // The vertical drag is the limiting axis.\n h = Math.abs(p.y - anchorY);\n w = h * rNorm;\n }\n // Fit inside the image while keeping the ratio.\n w = Math.min(w, maxW);\n h = w / rNorm;\n if (h > maxH) {\n h = maxH;\n w = h * rNorm;\n }\n w = Math.max(w, MIN);\n h = Math.max(h, MIN);\n\n const next = { ...edges };\n if (dirX > 0) {\n next.left = anchorX;\n next.right = anchorX + w;\n } else {\n next.right = anchorX;\n next.left = anchorX - w;\n }\n if (dirY > 0) {\n next.top = anchorY;\n next.bottom = anchorY + h;\n } else {\n next.bottom = anchorY;\n next.top = anchorY - h;\n }\n return next;\n };\n\n const moveCrop = (startEdges: Edges, dx: number, dy: number): Edges => {\n const w = startEdges.right - startEdges.left;\n const h = startEdges.bottom - startEdges.top;\n const left = Math.min(Math.max(startEdges.left + dx, 0), 1 - w);\n const top = Math.min(Math.max(startEdges.top + dy, 0), 1 - h);\n return { left, top, right: left + w, bottom: top + h };\n };\n\n const onPointerMove = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n const drag = dragRef.current;\n if (!drag) {\n return;\n }\n const p = toNorm(e.clientX, e.clientY);\n if (drag.mode === \"focal\") {\n onChangeHotspot(clampHotspot({ x: p.x, y: p.y, width: 1, height: 1 }, edges));\n return;\n }\n if (drag.mode === \"move\") {\n const dx = p.x - drag.startPointer.x;\n const dy = p.y - drag.startPointer.y;\n commitEdges(moveCrop(drag.startEdges, dx, dy));\n return;\n }\n const handle = drag.mode.slice(\"resize:\".length) as Handle;\n commitEdges(ratio === null ? resizeFree(handle, p) : resizeLocked(handle, p, ratio));\n },\n [toNorm, onChangeHotspot, edges, commitEdges, ratio]\n );\n\n // Drag inside the crop rectangle repositions the whole crop window.\n const startMoveCrop = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n dragRef.current = {\n mode: \"move\",\n startPointer: toNorm(e.clientX, e.clientY),\n startEdges: edges\n };\n surfaceRef.current?.setPointerCapture(e.pointerId);\n },\n [toNorm, edges]\n );\n\n // Dragging the marker itself moves the focal point (and only that).\n const startFocal = useCallback((e: React.PointerEvent<HTMLDivElement>) => {\n e.stopPropagation();\n dragRef.current = { mode: \"focal\" };\n surfaceRef.current?.setPointerCapture(e.pointerId);\n }, []);\n\n const startResize = useCallback(\n (handle: Handle) => (e: React.PointerEvent<HTMLDivElement>) => {\n e.stopPropagation();\n dragRef.current = { mode: `resize:${handle}` };\n surfaceRef.current?.setPointerCapture(e.pointerId);\n },\n []\n );\n\n const endDrag = useCallback((e: React.PointerEvent<HTMLDivElement>) => {\n dragRef.current = null;\n surfaceRef.current?.releasePointerCapture(e.pointerId);\n }, []);\n\n const onSelectAspect = useCallback(\n (value: string) => {\n onChangeAspect(value);\n const r = DEFAULT_ASPECT_RATIOS.find(ar => ar.id === value)?.ratio;\n if (value === FREE || !r) {\n return;\n }\n // `r` is a display (pixel) aspect ratio; convert to a normalized ratio\n // so the crop, stored in normalized image coordinates, renders as `r`.\n const rNorm = r / imageRatio;\n // Re-fit the current crop to the chosen ratio, centered within it.\n const cw = edges.right - edges.left;\n const ch = edges.bottom - edges.top;\n let w = cw;\n let h = w / rNorm;\n if (h > ch) {\n h = ch;\n w = h * rNorm;\n }\n const cx = (edges.left + edges.right) / 2;\n const cy = (edges.top + edges.bottom) / 2;\n commitEdges({\n left: clamp01(cx - w / 2),\n right: clamp01(cx + w / 2),\n top: clamp01(cy - h / 2),\n bottom: clamp01(cy + h / 2)\n });\n },\n [edges, commitEdges, imageRatio, onChangeAspect]\n );\n\n const activeHotspot = clampHotspot(hotspot, edges);\n const handles = ratio === null ? [...CORNER_HANDLES, ...EDGE_HANDLES] : CORNER_HANDLES;\n\n const handlePosition = (handle: Handle): { left: string; top: string } => {\n const cx = (edges.left + edges.right) / 2;\n const cy = (edges.top + edges.bottom) / 2;\n const x = handle.includes(\"w\") ? edges.left : handle.includes(\"e\") ? edges.right : cx;\n const y = handle.includes(\"n\") ? edges.top : handle.includes(\"s\") ? edges.bottom : cy;\n return { left: `${x * 100}%`, top: `${y * 100}%` };\n };\n\n const cursorFor = (handle: Handle): string => {\n const map: Record<Handle, string> = {\n nw: \"nwse-resize\",\n se: \"nwse-resize\",\n ne: \"nesw-resize\",\n sw: \"nesw-resize\",\n n: \"ns-resize\",\n s: \"ns-resize\",\n e: \"ew-resize\",\n w: \"ew-resize\"\n };\n return map[handle];\n };\n\n return (\n <div className={\"flex flex-col gap-sm\"}>\n <div className={\"flex items-end justify-between gap-md\"}>\n <SectionLabel>Crop &amp; focal point</SectionLabel>\n <div className={\"w-[200px] shrink-0\"}>\n <Select\n label={\"Crop shape\"}\n value={aspectId}\n options={aspectOptions}\n onChange={onSelectAspect}\n displayResetAction={false}\n />\n </div>\n </div>\n\n {/* Dark editing stage: the image sits centered on a near-black backdrop\n (like a pro image editor), so letterboxing around portrait images\n reads as intentional and the image stays the focal element. */}\n <div className={\"flex justify-center rounded-md bg-neutral-dark p-lg\"}>\n <div ref={wrapperRef} className={\"w-full\"}>\n <div\n ref={surfaceRef}\n onPointerMove={onPointerMove}\n onPointerUp={endDrag}\n className={\n \"relative mx-auto touch-none select-none overflow-hidden rounded-sm\"\n }\n style={surfaceStyle}\n >\n <img\n src={image.src}\n alt={\"\"}\n draggable={false}\n className={\n \"pointer-events-none absolute inset-0 h-full w-full object-cover\"\n }\n />\n\n {/* Crop rectangle: dims outside via box-shadow; interior drag moves the\n crop. The border is two-tone (white edge + a 1px dark ring) so it stays\n visible over both light and dark image areas. */}\n <div\n onPointerDown={startMoveCrop}\n className={\"absolute cursor-move border border-white/90\"}\n style={{\n left: `${edges.left * 100}%`,\n top: `${edges.top * 100}%`,\n width: `${(edges.right - edges.left) * 100}%`,\n height: `${(edges.bottom - edges.top) * 100}%`,\n boxShadow:\n \"0 0 0 1px rgba(0, 0, 0, 0.55), 0 0 0 9999px rgba(0, 0, 0, 0.45)\"\n }}\n >\n {/* Rule-of-thirds guides — a compositional aid and a cue for placing\n the focal point. */}\n <div className={\"pointer-events-none absolute inset-0\"}>\n <div className={\"absolute inset-y-0 left-1/3 w-px bg-white/30\"} />\n <div className={\"absolute inset-y-0 left-2/3 w-px bg-white/30\"} />\n <div className={\"absolute inset-x-0 top-1/3 h-px bg-white/30\"} />\n <div className={\"absolute inset-x-0 top-2/3 h-px bg-white/30\"} />\n </div>\n\n {/* Focal marker — the visible ring is small, but the draggable hit\n area around it is larger for easier grabbing. */}\n <div\n onPointerDown={startFocal}\n className={\n \"absolute flex h-8 w-8 -translate-x-1/2 -translate-y-1/2 cursor-grab touch-none items-center justify-center active:cursor-grabbing\"\n }\n style={{\n left: `${((activeHotspot.x - edges.left) / Math.max(MIN, edges.right - edges.left)) * 100}%`,\n top: `${((activeHotspot.y - edges.top) / Math.max(MIN, edges.bottom - edges.top)) * 100}%`\n }}\n >\n <div\n className={\n \"pointer-events-none relative h-6 w-6 rounded-full border-2 border-white bg-white/25 shadow-lg\"\n }\n >\n <div\n className={\n \"absolute left-1/2 top-1/2 h-1.5 w-1.5 -translate-x-1/2 -translate-y-1/2 rounded-full bg-white\"\n }\n />\n </div>\n </div>\n </div>\n\n {/* Resize handles — small visible dot inside a larger transparent hit\n area so the corners/edges are easy to grab. */}\n {handles.map(handle => {\n const pos = handlePosition(handle);\n return (\n <div\n key={handle}\n onPointerDown={startResize(handle)}\n className={\n \"absolute flex h-6 w-6 -translate-x-1/2 -translate-y-1/2 touch-none items-center justify-center\"\n }\n style={{\n left: pos.left,\n top: pos.top,\n cursor: cursorFor(handle)\n }}\n >\n <div\n className={\n \"pointer-events-none h-3 w-3 rounded-sm border border-neutral-dark bg-white shadow\"\n }\n />\n </div>\n );\n })}\n </div>\n </div>\n </div>\n\n <Text as={\"div\"} size={\"sm\"} className={\"text-neutral-strong\"}>\n Drag the handles to crop, drag inside to reposition, and drag the circle to set the\n focal point.\n </Text>\n </div>\n );\n};\n"],"names":["MIN","FREE","inferAspectId","crop","width","height","cropWidth","Math","cropHeight","displayRatio","match","DEFAULT_ASPECT_RATIOS","ar","MAX_CANVAS_WIDTH","MAX_CANVAS_HEIGHT","clamp01","n","cropToEdges","edgesToCrop","e","HANDLE_EDGES","CORNER_HANDLES","EDGE_HANDLES","clampHotspot","h","CropHotspotEditor","image","hotspot","aspectId","onChangeAspect","onChangeCrop","onChangeHotspot","surfaceRef","useRef","dragRef","wrapperRef","availWidth","setAvailWidth","useState","useLayoutEffect","el","measure","ResizeObserver","ro","imageRatio","surfaceStyle","useMemo","edges","ratio","aspectOptions","toNorm","useCallback","clientX","clientY","rect","commitEdges","next","resizeFree","handle","p","moves","resizeLocked","r","rNorm","anchorX","anchorY","dirX","dirY","maxW","maxH","w","moveCrop","startEdges","dx","dy","left","top","onPointerMove","drag","startMoveCrop","startFocal","startResize","endDrag","onSelectAspect","value","cw","ch","cx","cy","activeHotspot","handles","handlePosition","x","y","cursorFor","map","SectionLabel","Select","pos","Text"],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import React from "react";
2
+ import { type ImageEditorAspectRatio, type ImageEditorImage, type ImageEditorValue } from "./types.js";
3
+ export interface ImageEditorProps {
4
+ open: boolean;
5
+ onClose: () => void;
6
+ /** The source image to edit. */
7
+ image: ImageEditorImage;
8
+ /** The current edit (crop/hotspot/alt/caption), if any. */
9
+ value?: ImageEditorValue;
10
+ /** Called with the new edit when the user saves. */
11
+ onSave: (value: ImageEditorValue) => void;
12
+ /** Preview ratios shown in the strip. Defaults to square / 4:3 / 16:9. */
13
+ aspectRatios?: ImageEditorAspectRatio[];
14
+ showAlt?: boolean;
15
+ showCaption?: boolean;
16
+ title?: React.ReactNode;
17
+ }
18
+ export declare const ImageEditor: ({ open, onClose, image, value, onSave, aspectRatios, showAlt, showCaption, title }: ImageEditorProps) => React.JSX.Element;