@unoff/ui 1.21.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 (322) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +880 -0
  3. package/dist/assets/Accordion.css +1 -0
  4. package/dist/assets/ActionsItem.css +1 -0
  5. package/dist/assets/ActionsList.css +1 -0
  6. package/dist/assets/Avatar.css +1 -0
  7. package/dist/assets/Bar.css +1 -0
  8. package/dist/assets/Button.css +1 -0
  9. package/dist/assets/Card.css +1 -0
  10. package/dist/assets/Chip.css +1 -0
  11. package/dist/assets/ColorChip.css +1 -0
  12. package/dist/assets/ColorItem.css +1 -0
  13. package/dist/assets/Consent.css +1 -0
  14. package/dist/assets/Dialog.css +1 -0
  15. package/dist/assets/DraggableItem.css +1 -0
  16. package/dist/assets/DraggableWindow.css +1 -0
  17. package/dist/assets/Drawer.css +1 -0
  18. package/dist/assets/Dropdown.css +1 -0
  19. package/dist/assets/Dropzone.css +1 -0
  20. package/dist/assets/FormItem.css +1 -0
  21. package/dist/assets/Icon.css +1 -0
  22. package/dist/assets/IconChip.css +1 -0
  23. package/dist/assets/Input.css +1 -0
  24. package/dist/assets/InputsBar.css +1 -0
  25. package/dist/assets/KeyboardShortcutItem.css +1 -0
  26. package/dist/assets/Knob.css +1 -0
  27. package/dist/assets/Layout.css +1 -0
  28. package/dist/assets/List.css +1 -0
  29. package/dist/assets/MembersList.css +1 -0
  30. package/dist/assets/Menu.css +1 -0
  31. package/dist/assets/Message.css +1 -0
  32. package/dist/assets/MultipleSlider.css +1 -0
  33. package/dist/assets/Notification.css +1 -0
  34. package/dist/assets/Popin.css +1 -0
  35. package/dist/assets/Section.css +1 -0
  36. package/dist/assets/SectionTitle.css +1 -0
  37. package/dist/assets/Select.css +1 -0
  38. package/dist/assets/SemanticMessage.css +1 -0
  39. package/dist/assets/SimpleItem.css +1 -0
  40. package/dist/assets/SimpleSlider.css +1 -0
  41. package/dist/assets/SortableList.css +1 -0
  42. package/dist/assets/Tabs.css +1 -0
  43. package/dist/assets/Text.css +1 -0
  44. package/dist/assets/Thumbnail.css +1 -0
  45. package/dist/assets/Tooltip.css +1 -0
  46. package/dist/assets/styles/icons/icons.css +1 -0
  47. package/dist/assets/styles/icons/styles/figma.css +1 -0
  48. package/dist/assets/styles/icons/styles/framer.css +1 -0
  49. package/dist/assets/styles/icons/styles/penpot.css +1 -0
  50. package/dist/assets/styles/icons/styles/sketch.css +1 -0
  51. package/dist/assets/styles/layouts.css +1 -0
  52. package/dist/assets/styles/texts/styles/figma.css +1 -0
  53. package/dist/assets/styles/texts/styles/framer.css +1 -0
  54. package/dist/assets/styles/texts/styles/penpot.css +1 -0
  55. package/dist/assets/styles/texts/styles/sketch.css +1 -0
  56. package/dist/assets/styles/texts/texts.css +1 -0
  57. package/dist/assets/styles/tokens/figma-types.css +1 -0
  58. package/dist/assets/styles/tokens/framer-types.css +1 -0
  59. package/dist/assets/styles/tokens/modules/figma-colors.css +1 -0
  60. package/dist/assets/styles/tokens/modules/figma-types.css +1 -0
  61. package/dist/assets/styles/tokens/modules/framer-colors.css +1 -0
  62. package/dist/assets/styles/tokens/modules/framer-types.css +1 -0
  63. package/dist/assets/styles/tokens/modules/globals.css +1 -0
  64. package/dist/assets/styles/tokens/modules/penpot-colors.css +1 -0
  65. package/dist/assets/styles/tokens/modules/penpot-types.css +1 -0
  66. package/dist/assets/styles/tokens/modules/sketch-colors.css +1 -0
  67. package/dist/assets/styles/tokens/modules/sketch-types.css +1 -0
  68. package/dist/assets/styles/tokens/penpot-types.css +1 -0
  69. package/dist/assets/styles/tokens/sketch-types.css +1 -0
  70. package/dist/components/actions/accordion/Accordion.d.ts +59 -0
  71. package/dist/components/actions/accordion/Accordion.d.ts.map +1 -0
  72. package/dist/components/actions/accordion/Accordion.js +104 -0
  73. package/dist/components/actions/accordion/Accordion.js.map +1 -0
  74. package/dist/components/actions/button/Button.d.ts +148 -0
  75. package/dist/components/actions/button/Button.d.ts.map +1 -0
  76. package/dist/components/actions/button/Button.figma.d.ts +2 -0
  77. package/dist/components/actions/button/Button.figma.d.ts.map +1 -0
  78. package/dist/components/actions/button/Button.figma.js +43 -0
  79. package/dist/components/actions/button/Button.figma.js.map +1 -0
  80. package/dist/components/actions/button/Button.js +306 -0
  81. package/dist/components/actions/button/Button.js.map +1 -0
  82. package/dist/components/actions/card/Card.d.ts +39 -0
  83. package/dist/components/actions/card/Card.d.ts.map +1 -0
  84. package/dist/components/actions/card/Card.js +99 -0
  85. package/dist/components/actions/card/Card.js.map +1 -0
  86. package/dist/components/actions/knob/Knob.d.ts +93 -0
  87. package/dist/components/actions/knob/Knob.d.ts.map +1 -0
  88. package/dist/components/actions/knob/Knob.js +179 -0
  89. package/dist/components/actions/knob/Knob.js.map +1 -0
  90. package/dist/components/actions/menu/Menu.d.ts +104 -0
  91. package/dist/components/actions/menu/Menu.d.ts.map +1 -0
  92. package/dist/components/actions/menu/Menu.js +200 -0
  93. package/dist/components/actions/menu/Menu.js.map +1 -0
  94. package/dist/components/assets/avatar/Avatar.d.ts +30 -0
  95. package/dist/components/assets/avatar/Avatar.d.ts.map +1 -0
  96. package/dist/components/assets/avatar/Avatar.js +54 -0
  97. package/dist/components/assets/avatar/Avatar.js.map +1 -0
  98. package/dist/components/assets/icon/Icon.d.ts +28 -0
  99. package/dist/components/assets/icon/Icon.d.ts.map +1 -0
  100. package/dist/components/assets/icon/Icon.figma.d.ts +2 -0
  101. package/dist/components/assets/icon/Icon.figma.d.ts.map +1 -0
  102. package/dist/components/assets/icon/Icon.figma.js +27 -0
  103. package/dist/components/assets/icon/Icon.figma.js.map +1 -0
  104. package/dist/components/assets/icon/Icon.js +35 -0
  105. package/dist/components/assets/icon/Icon.js.map +1 -0
  106. package/dist/components/assets/section-title/SectionTitle.d.ts +22 -0
  107. package/dist/components/assets/section-title/SectionTitle.d.ts.map +1 -0
  108. package/dist/components/assets/section-title/SectionTitle.js +42 -0
  109. package/dist/components/assets/section-title/SectionTitle.js.map +1 -0
  110. package/dist/components/assets/text/Text.d.ts +34 -0
  111. package/dist/components/assets/text/Text.d.ts.map +1 -0
  112. package/dist/components/assets/text/Text.js +35 -0
  113. package/dist/components/assets/text/Text.js.map +1 -0
  114. package/dist/components/assets/thumbnail/Thumbnail.d.ts +25 -0
  115. package/dist/components/assets/thumbnail/Thumbnail.d.ts.map +1 -0
  116. package/dist/components/assets/thumbnail/Thumbnail.js +67 -0
  117. package/dist/components/assets/thumbnail/Thumbnail.js.map +1 -0
  118. package/dist/components/dialogs/consent/Consent.d.ts +85 -0
  119. package/dist/components/dialogs/consent/Consent.d.ts.map +1 -0
  120. package/dist/components/dialogs/consent/Consent.js +402 -0
  121. package/dist/components/dialogs/consent/Consent.js.map +1 -0
  122. package/dist/components/dialogs/dialog/Dialog.d.ts +81 -0
  123. package/dist/components/dialogs/dialog/Dialog.d.ts.map +1 -0
  124. package/dist/components/dialogs/dialog/Dialog.js +58 -0
  125. package/dist/components/dialogs/dialog/Dialog.js.map +1 -0
  126. package/dist/components/dialogs/message/Message.d.ts +25 -0
  127. package/dist/components/dialogs/message/Message.d.ts.map +1 -0
  128. package/dist/components/dialogs/message/Message.js +141 -0
  129. package/dist/components/dialogs/message/Message.js.map +1 -0
  130. package/dist/components/dialogs/notification/Notification.d.ts +22 -0
  131. package/dist/components/dialogs/notification/Notification.d.ts.map +1 -0
  132. package/dist/components/dialogs/notification/Notification.js +38 -0
  133. package/dist/components/dialogs/notification/Notification.js.map +1 -0
  134. package/dist/components/dialogs/semantic-message/SemanticMessage.d.ts +40 -0
  135. package/dist/components/dialogs/semantic-message/SemanticMessage.d.ts.map +1 -0
  136. package/dist/components/dialogs/semantic-message/SemanticMessage.js +71 -0
  137. package/dist/components/dialogs/semantic-message/SemanticMessage.js.map +1 -0
  138. package/dist/components/inputs/dropdown/Dropdown.d.ts +123 -0
  139. package/dist/components/inputs/dropdown/Dropdown.d.ts.map +1 -0
  140. package/dist/components/inputs/dropdown/Dropdown.figma.d.ts +2 -0
  141. package/dist/components/inputs/dropdown/Dropdown.figma.d.ts.map +1 -0
  142. package/dist/components/inputs/dropdown/Dropdown.figma.js +28 -0
  143. package/dist/components/inputs/dropdown/Dropdown.figma.js.map +1 -0
  144. package/dist/components/inputs/dropdown/Dropdown.js +307 -0
  145. package/dist/components/inputs/dropdown/Dropdown.js.map +1 -0
  146. package/dist/components/inputs/dropzone/Dropzone.d.ts +78 -0
  147. package/dist/components/inputs/dropzone/Dropzone.d.ts.map +1 -0
  148. package/dist/components/inputs/dropzone/Dropzone.js +222 -0
  149. package/dist/components/inputs/dropzone/Dropzone.js.map +1 -0
  150. package/dist/components/inputs/input/Input.d.ts +203 -0
  151. package/dist/components/inputs/input/Input.d.ts.map +1 -0
  152. package/dist/components/inputs/input/Input.figma.d.ts +2 -0
  153. package/dist/components/inputs/input/Input.figma.d.ts.map +1 -0
  154. package/dist/components/inputs/input/Input.figma.js +35 -0
  155. package/dist/components/inputs/input/Input.figma.js.map +1 -0
  156. package/dist/components/inputs/input/Input.js +713 -0
  157. package/dist/components/inputs/input/Input.js.map +1 -0
  158. package/dist/components/inputs/inputs-bar/InputsBar.d.ts +18 -0
  159. package/dist/components/inputs/inputs-bar/InputsBar.d.ts.map +1 -0
  160. package/dist/components/inputs/inputs-bar/InputsBar.js +15 -0
  161. package/dist/components/inputs/inputs-bar/InputsBar.js.map +1 -0
  162. package/dist/components/inputs/multiple-slider/MultipleSlider.d.ts +125 -0
  163. package/dist/components/inputs/multiple-slider/MultipleSlider.d.ts.map +1 -0
  164. package/dist/components/inputs/multiple-slider/MultipleSlider.js +417 -0
  165. package/dist/components/inputs/multiple-slider/MultipleSlider.js.map +1 -0
  166. package/dist/components/inputs/multiple-slider/actions/addStop.d.ts +8 -0
  167. package/dist/components/inputs/multiple-slider/actions/addStop.d.ts.map +1 -0
  168. package/dist/components/inputs/multiple-slider/actions/deleteStop.d.ts +8 -0
  169. package/dist/components/inputs/multiple-slider/actions/deleteStop.d.ts.map +1 -0
  170. package/dist/components/inputs/multiple-slider/actions/shiftLeftStop.d.ts +5 -0
  171. package/dist/components/inputs/multiple-slider/actions/shiftLeftStop.d.ts.map +1 -0
  172. package/dist/components/inputs/multiple-slider/actions/shiftRightStop.d.ts +5 -0
  173. package/dist/components/inputs/multiple-slider/actions/shiftRightStop.d.ts.map +1 -0
  174. package/dist/components/inputs/select/Select.d.ts +112 -0
  175. package/dist/components/inputs/select/Select.d.ts.map +1 -0
  176. package/dist/components/inputs/select/Select.js +313 -0
  177. package/dist/components/inputs/select/Select.js.map +1 -0
  178. package/dist/components/inputs/simple-slider/SimpleSlider.d.ts +93 -0
  179. package/dist/components/inputs/simple-slider/SimpleSlider.d.ts.map +1 -0
  180. package/dist/components/inputs/simple-slider/SimpleSlider.js +166 -0
  181. package/dist/components/inputs/simple-slider/SimpleSlider.js.map +1 -0
  182. package/dist/components/lists/actions-item/ActionsItem.d.ts +64 -0
  183. package/dist/components/lists/actions-item/ActionsItem.d.ts.map +1 -0
  184. package/dist/components/lists/actions-item/ActionsItem.js +115 -0
  185. package/dist/components/lists/actions-item/ActionsItem.js.map +1 -0
  186. package/dist/components/lists/actions-list/ActionsList.d.ts +79 -0
  187. package/dist/components/lists/actions-list/ActionsList.d.ts.map +1 -0
  188. package/dist/components/lists/actions-list/ActionsList.js +384 -0
  189. package/dist/components/lists/actions-list/ActionsList.js.map +1 -0
  190. package/dist/components/lists/color-item/ColorItem.d.ts +27 -0
  191. package/dist/components/lists/color-item/ColorItem.d.ts.map +1 -0
  192. package/dist/components/lists/color-item/ColorItem.js +70 -0
  193. package/dist/components/lists/color-item/ColorItem.js.map +1 -0
  194. package/dist/components/lists/draggable-item/DraggableItem.d.ts +110 -0
  195. package/dist/components/lists/draggable-item/DraggableItem.d.ts.map +1 -0
  196. package/dist/components/lists/draggable-item/DraggableItem.js +176 -0
  197. package/dist/components/lists/draggable-item/DraggableItem.js.map +1 -0
  198. package/dist/components/lists/keyboard-shortcut-item/KeyboardShortcutItem.d.ts +19 -0
  199. package/dist/components/lists/keyboard-shortcut-item/KeyboardShortcutItem.d.ts.map +1 -0
  200. package/dist/components/lists/keyboard-shortcut-item/KeyboardShortcutItem.js +75 -0
  201. package/dist/components/lists/keyboard-shortcut-item/KeyboardShortcutItem.js.map +1 -0
  202. package/dist/components/lists/members-list/MembersList.d.ts +32 -0
  203. package/dist/components/lists/members-list/MembersList.d.ts.map +1 -0
  204. package/dist/components/lists/members-list/MembersList.js +117 -0
  205. package/dist/components/lists/members-list/MembersList.js.map +1 -0
  206. package/dist/components/lists/sortable-list/SortableList.d.ts +103 -0
  207. package/dist/components/lists/sortable-list/SortableList.d.ts.map +1 -0
  208. package/dist/components/lists/sortable-list/SortableList.js +148 -0
  209. package/dist/components/lists/sortable-list/SortableList.js.map +1 -0
  210. package/dist/components/lists/tabs/Tabs.d.ts +48 -0
  211. package/dist/components/lists/tabs/Tabs.d.ts.map +1 -0
  212. package/dist/components/lists/tabs/Tabs.figma.d.ts +2 -0
  213. package/dist/components/lists/tabs/Tabs.figma.d.ts.map +1 -0
  214. package/dist/components/lists/tabs/Tabs.figma.js +31 -0
  215. package/dist/components/lists/tabs/Tabs.figma.js.map +1 -0
  216. package/dist/components/lists/tabs/Tabs.js +165 -0
  217. package/dist/components/lists/tabs/Tabs.js.map +1 -0
  218. package/dist/components/slots/bar/Bar.d.ts +65 -0
  219. package/dist/components/slots/bar/Bar.d.ts.map +1 -0
  220. package/dist/components/slots/bar/Bar.js +100 -0
  221. package/dist/components/slots/bar/Bar.js.map +1 -0
  222. package/dist/components/slots/draggable-window/DraggableWindow.d.ts +25 -0
  223. package/dist/components/slots/draggable-window/DraggableWindow.d.ts.map +1 -0
  224. package/dist/components/slots/draggable-window/DraggableWindow.js +100 -0
  225. package/dist/components/slots/draggable-window/DraggableWindow.js.map +1 -0
  226. package/dist/components/slots/drawer/Drawer.d.ts +78 -0
  227. package/dist/components/slots/drawer/Drawer.d.ts.map +1 -0
  228. package/dist/components/slots/drawer/Drawer.js +148 -0
  229. package/dist/components/slots/drawer/Drawer.js.map +1 -0
  230. package/dist/components/slots/form-item/FormItem.d.ts +52 -0
  231. package/dist/components/slots/form-item/FormItem.d.ts.map +1 -0
  232. package/dist/components/slots/form-item/FormItem.js +89 -0
  233. package/dist/components/slots/form-item/FormItem.js.map +1 -0
  234. package/dist/components/slots/layout/Layout.d.ts +34 -0
  235. package/dist/components/slots/layout/Layout.d.ts.map +1 -0
  236. package/dist/components/slots/layout/Layout.js +45 -0
  237. package/dist/components/slots/layout/Layout.js.map +1 -0
  238. package/dist/components/slots/list/List.d.ts +49 -0
  239. package/dist/components/slots/list/List.d.ts.map +1 -0
  240. package/dist/components/slots/list/List.js +55 -0
  241. package/dist/components/slots/list/List.js.map +1 -0
  242. package/dist/components/slots/popin/Popin.d.ts +85 -0
  243. package/dist/components/slots/popin/Popin.d.ts.map +1 -0
  244. package/dist/components/slots/popin/Popin.js +182 -0
  245. package/dist/components/slots/popin/Popin.js.map +1 -0
  246. package/dist/components/slots/section/Section.d.ts +32 -0
  247. package/dist/components/slots/section/Section.d.ts.map +1 -0
  248. package/dist/components/slots/section/Section.js +49 -0
  249. package/dist/components/slots/section/Section.js.map +1 -0
  250. package/dist/components/slots/simple-item/SimpleItem.d.ts +45 -0
  251. package/dist/components/slots/simple-item/SimpleItem.d.ts.map +1 -0
  252. package/dist/components/slots/simple-item/SimpleItem.js +100 -0
  253. package/dist/components/slots/simple-item/SimpleItem.js.map +1 -0
  254. package/dist/components/tags/chip/Chip.d.ts +43 -0
  255. package/dist/components/tags/chip/Chip.d.ts.map +1 -0
  256. package/dist/components/tags/chip/Chip.figma.d.ts +2 -0
  257. package/dist/components/tags/chip/Chip.figma.d.ts.map +1 -0
  258. package/dist/components/tags/chip/Chip.figma.js +18 -0
  259. package/dist/components/tags/chip/Chip.figma.js.map +1 -0
  260. package/dist/components/tags/chip/Chip.js +88 -0
  261. package/dist/components/tags/chip/Chip.js.map +1 -0
  262. package/dist/components/tags/color-chip/ColorChip.d.ts +36 -0
  263. package/dist/components/tags/color-chip/ColorChip.d.ts.map +1 -0
  264. package/dist/components/tags/color-chip/ColorChip.js +39 -0
  265. package/dist/components/tags/color-chip/ColorChip.js.map +1 -0
  266. package/dist/components/tags/icon-chip/IconChip.d.ts +42 -0
  267. package/dist/components/tags/icon-chip/IconChip.d.ts.map +1 -0
  268. package/dist/components/tags/icon-chip/IconChip.js +54 -0
  269. package/dist/components/tags/icon-chip/IconChip.js.map +1 -0
  270. package/dist/components/tags/tooltip/Tooltip.d.ts +25 -0
  271. package/dist/components/tags/tooltip/Tooltip.d.ts.map +1 -0
  272. package/dist/components/tags/tooltip/Tooltip.js +72 -0
  273. package/dist/components/tags/tooltip/Tooltip.js.map +1 -0
  274. package/dist/do-classnames-DSDFCvzy.js +5 -0
  275. package/dist/do-classnames-DSDFCvzy.js.map +1 -0
  276. package/dist/do-map-2nhWP1KI.js +8 -0
  277. package/dist/do-map-2nhWP1KI.js.map +1 -0
  278. package/dist/index.d.ts +61 -0
  279. package/dist/index.d.ts.map +1 -0
  280. package/dist/index.js +113 -0
  281. package/dist/index.js.map +1 -0
  282. package/dist/index_react-CmuCVQet.js +13799 -0
  283. package/dist/index_react-CmuCVQet.js.map +1 -0
  284. package/dist/styles/icons/icons.module.js +115 -0
  285. package/dist/styles/icons/icons.module.js.map +1 -0
  286. package/dist/styles/layouts.module.js +37 -0
  287. package/dist/styles/layouts.module.js.map +1 -0
  288. package/dist/styles/texts/texts.module.js +23 -0
  289. package/dist/styles/texts/texts.module.js.map +1 -0
  290. package/dist/styles/tokens/modules/figma-colors.module.js +9 -0
  291. package/dist/styles/tokens/modules/figma-colors.module.js.map +1 -0
  292. package/dist/styles/tokens/modules/figma-types.module.js +9 -0
  293. package/dist/styles/tokens/modules/figma-types.module.js.map +1 -0
  294. package/dist/styles/tokens/modules/framer-colors.module.js +9 -0
  295. package/dist/styles/tokens/modules/framer-colors.module.js.map +1 -0
  296. package/dist/styles/tokens/modules/framer-types.module.js +9 -0
  297. package/dist/styles/tokens/modules/framer-types.module.js.map +1 -0
  298. package/dist/styles/tokens/modules/globals.module.js +9 -0
  299. package/dist/styles/tokens/modules/globals.module.js.map +1 -0
  300. package/dist/styles/tokens/modules/penpot-colors.module.js +9 -0
  301. package/dist/styles/tokens/modules/penpot-colors.module.js.map +1 -0
  302. package/dist/styles/tokens/modules/penpot-types.module.js +9 -0
  303. package/dist/styles/tokens/modules/penpot-types.module.js.map +1 -0
  304. package/dist/styles/tokens/modules/sketch-colors.module.js +9 -0
  305. package/dist/styles/tokens/modules/sketch-colors.module.js.map +1 -0
  306. package/dist/styles/tokens/modules/sketch-types.module.js +9 -0
  307. package/dist/styles/tokens/modules/sketch-types.module.js.map +1 -0
  308. package/dist/tests/setup.d.ts +2 -0
  309. package/dist/tests/setup.d.ts.map +1 -0
  310. package/dist/types/consent.types.d.ts +10 -0
  311. package/dist/types/consent.types.d.ts.map +1 -0
  312. package/dist/types/consent.types.js +2 -0
  313. package/dist/types/consent.types.js.map +1 -0
  314. package/dist/types/icon.types.d.ts +2 -0
  315. package/dist/types/icon.types.d.ts.map +1 -0
  316. package/dist/types/icon.types.js +2 -0
  317. package/dist/types/icon.types.js.map +1 -0
  318. package/dist/types/list.types.d.ts +14 -0
  319. package/dist/types/list.types.d.ts.map +1 -0
  320. package/dist/types/list.types.js +2 -0
  321. package/dist/types/list.types.js.map +1 -0
  322. package/package.json +108 -0
@@ -0,0 +1,123 @@
1
+ import { default as React } from 'react';
2
+ import { DropdownOption } from '../../../types/list.types';
3
+ import { IconList } from '../../../types/icon.types';
4
+
5
+ export interface DropdownProps {
6
+ /**
7
+ * Unique identifier for the dropdown
8
+ */
9
+ id: string;
10
+ /**
11
+ * List of options to display in the dropdown
12
+ */
13
+ options: Array<DropdownOption>;
14
+ /**
15
+ * ID of the currently selected option
16
+ */
17
+ selected: string;
18
+ /**
19
+ * ID of the container element for portal rendering
20
+ */
21
+ containerId?: string;
22
+ /**
23
+ * Horizontal alignment of the dropdown
24
+ * @default 'LEFT'
25
+ */
26
+ alignment?: 'RIGHT' | 'LEFT' | 'FILL';
27
+ /**
28
+ * Vertical position of helper tooltips
29
+ * @default 'NONE'
30
+ */
31
+ pin?: 'NONE' | 'TOP' | 'BOTTOM';
32
+ /**
33
+ * Helper tooltip configuration
34
+ */
35
+ helper?: {
36
+ /** Tooltip content */
37
+ label: string | React.ReactNode;
38
+ /** Tooltip position */
39
+ pin?: 'TOP' | 'BOTTOM';
40
+ /** Tooltip display type */
41
+ type?: 'MULTI_LINE' | 'SINGLE_LINE';
42
+ };
43
+ /**
44
+ * Preview tooltip configuration with image
45
+ */
46
+ preview?: {
47
+ /** Preview image URL */
48
+ image: string;
49
+ /** Preview text */
50
+ text: string | React.ReactNode;
51
+ /** Preview position */
52
+ pin?: 'TOP' | 'BOTTOM';
53
+ };
54
+ /**
55
+ * Warning tooltip configuration
56
+ */
57
+ warning?: {
58
+ /** Warning message */
59
+ label: string | React.ReactNode;
60
+ /** Warning position */
61
+ pin?: 'TOP' | 'BOTTOM';
62
+ /** Warning display type */
63
+ type?: 'MULTI_LINE' | 'SINGLE_LINE';
64
+ };
65
+ /**
66
+ * Reflow configuration for responsive behavior
67
+ * @default { isEnabled: false, icon: 'adjust' }
68
+ */
69
+ shouldReflow?: {
70
+ /** Whether reflow is enabled */
71
+ isEnabled: boolean;
72
+ /** Icon to show when reflowed */
73
+ icon: IconList;
74
+ };
75
+ /**
76
+ * Whether the dropdown is disabled
77
+ * @default false
78
+ */
79
+ isDisabled?: boolean;
80
+ /**
81
+ * Whether the dropdown is blocked
82
+ * @default false
83
+ */
84
+ isBlocked?: boolean;
85
+ /**
86
+ * Whether to show a "New" badge
87
+ * @default false
88
+ */
89
+ isNew?: boolean;
90
+ /**
91
+ * Handler called when unblock is clicked
92
+ */
93
+ onUnblock?: React.MouseEventHandler & React.KeyboardEventHandler;
94
+ }
95
+ export interface DropdownStates {
96
+ isMenuOpen: boolean;
97
+ isMenuVisible: boolean;
98
+ listShouldScroll: boolean;
99
+ isTooltipVisible: boolean;
100
+ documentWidth: number;
101
+ }
102
+ export default class Dropdown extends React.Component<DropdownProps, DropdownStates> {
103
+ private selectMenuRef;
104
+ private buttonRef;
105
+ private listRef;
106
+ private actionsListRef;
107
+ private menuRef;
108
+ private subMenuRef;
109
+ static defaultProps: Partial<DropdownProps>;
110
+ constructor(props: DropdownProps);
111
+ componentDidMount: () => void;
112
+ componentWillUnmount: () => void;
113
+ handleResize: () => void;
114
+ onOpenMenu: () => void;
115
+ setPosition: () => string;
116
+ handleClickOutside: (e: Event) => void;
117
+ findSelectedOption: (options: Array<DropdownOption>) => string;
118
+ Status: () => import("react/jsx-runtime").JSX.Element | undefined;
119
+ MenuButton: () => import("react/jsx-runtime").JSX.Element;
120
+ DropdownButton: () => import("react/jsx-runtime").JSX.Element;
121
+ render(): import("react/jsx-runtime").JSX.Element;
122
+ }
123
+ //# sourceMappingURL=Dropdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dropdown.d.ts","sourceRoot":"","sources":["../../../../src/components/inputs/dropdown/Dropdown.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Dropdown.figma.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dropdown.figma.d.ts","sourceRoot":"","sources":["../../../../src/components/inputs/dropdown/Dropdown.figma.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import { jsx as t } from "react/jsx-runtime";
2
+ import { i as e } from "../../../index_react-CmuCVQet.js";
3
+ import o from "./Dropdown.js";
4
+ e.figma.connect(
5
+ o,
6
+ "https://www.figma.com/design/QlBdsfEcaUsGBzqA20xbNi/Unoff?node-id=393:795",
7
+ {
8
+ props: {
9
+ alignment: e.figma.enum("Type", {
10
+ HUG: "LEFT",
11
+ STRETCH: "FILL"
12
+ })
13
+ },
14
+ example: (p) => /* @__PURE__ */ t(
15
+ o,
16
+ {
17
+ id: "dropdown-example",
18
+ options: [
19
+ { label: "Option 1", value: "opt1", type: "OPTION" },
20
+ { label: "Option 2", value: "opt2", type: "OPTION" }
21
+ ],
22
+ selected: "opt1",
23
+ alignment: p.alignment
24
+ }
25
+ )
26
+ }
27
+ );
28
+ //# sourceMappingURL=Dropdown.figma.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dropdown.figma.js","sources":["../../../../src/components/inputs/dropdown/Dropdown.figma.tsx"],"sourcesContent":["import { figma } from '@figma/code-connect'\nimport Dropdown from './Dropdown'\n\nfigma.connect(\n Dropdown,\n 'https://www.figma.com/design/QlBdsfEcaUsGBzqA20xbNi/Unoff?node-id=393:795',\n {\n props: {\n alignment: figma.enum('Type', {\n HUG: 'LEFT',\n STRETCH: 'FILL',\n }),\n },\n example: (props) => (\n <Dropdown\n id=\"dropdown-example\"\n options={[\n { label: 'Option 1', value: 'opt1', type: 'OPTION' as const },\n { label: 'Option 2', value: 'opt2', type: 'OPTION' as const },\n ]}\n selected=\"opt1\"\n alignment={props.alignment}\n />\n ),\n }\n)\n"],"names":["figma","Dropdown","props","jsx"],"mappings":";;;AAGAA,EAAAA,MAAM;AAAA,EACJC;AAAA,EACA;AAAA,EACA;AAAA,IACE,OAAO;AAAA,MACL,WAAWD,EAAAA,MAAM,KAAK,QAAQ;AAAA,QAC5B,KAAK;AAAA,QACL,SAAS;AAAA,MAAA,CACV;AAAA,IAAA;AAAA,IAEH,SAAS,CAACE,MACR,gBAAAC;AAAA,MAACF;AAAA,MAAA;AAAA,QACC,IAAG;AAAA,QACH,SAAS;AAAA,UACP,EAAE,OAAO,YAAY,OAAO,QAAQ,MAAM,SAAA;AAAA,UAC1C,EAAE,OAAO,YAAY,OAAO,QAAQ,MAAM,SAAA;AAAA,QAAkB;AAAA,QAE9D,UAAS;AAAA,QACT,WAAWC,EAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EACnB;AAGN;"}
@@ -0,0 +1,307 @@
1
+ import '../../../assets/Dropdown.css';
2
+ import { jsxs as p, jsx as f } from "react/jsx-runtime";
3
+ import h from "react";
4
+ import R from "../../../styles/texts/texts.module.js";
5
+ import T from "../../tags/tooltip/Tooltip.js";
6
+ import v from "../../tags/icon-chip/IconChip.js";
7
+ import w from "../../tags/chip/Chip.js";
8
+ import M from "../../lists/actions-list/ActionsList.js";
9
+ import { Icon as O } from "../../assets/icon/Icon.js";
10
+ import y from "../../actions/menu/Menu.js";
11
+ import { t as m } from "../../../do-classnames-DSDFCvzy.js";
12
+ class _ extends h.Component {
13
+ selectMenuRef;
14
+ buttonRef;
15
+ listRef;
16
+ actionsListRef;
17
+ menuRef;
18
+ subMenuRef;
19
+ static defaultProps = {
20
+ alignment: "LEFT",
21
+ pin: "NONE",
22
+ shouldReflow: { isEnabled: !1, icon: "adjust" },
23
+ isNew: !1,
24
+ isBlocked: !1,
25
+ isDisabled: !1
26
+ };
27
+ constructor(i) {
28
+ super(i), this.state = {
29
+ isMenuOpen: !1,
30
+ isMenuVisible: !1,
31
+ listShouldScroll: !1,
32
+ isTooltipVisible: !1,
33
+ documentWidth: typeof window < "u" ? window.innerWidth : 1024
34
+ }, this.selectMenuRef = h.createRef(), this.buttonRef = h.createRef(), this.listRef = h.createRef(), this.actionsListRef = h.createRef(), this.menuRef = h.createRef(), this.subMenuRef = h.createRef(), this.handleClickOutside = this.handleClickOutside.bind(this);
35
+ }
36
+ componentDidMount = () => {
37
+ document.addEventListener("mousedown", this.handleClickOutside), window.addEventListener("resize", this.handleResize);
38
+ };
39
+ componentWillUnmount = () => {
40
+ document.removeEventListener("mousedown", this.handleClickOutside), window.removeEventListener("resize", this.handleResize);
41
+ };
42
+ // Handlers
43
+ handleResize = () => {
44
+ this.setState({ documentWidth: window.innerWidth });
45
+ };
46
+ // Direct Actions
47
+ onOpenMenu = () => {
48
+ const { containerId: i } = this.props, { isMenuOpen: e } = this.state;
49
+ this.setState({
50
+ isMenuOpen: !e
51
+ }), setTimeout(() => {
52
+ if (this.listRef.current != null) {
53
+ const t = this.listRef.current.getBoundingClientRect(), l = this.buttonRef.current?.getBoundingClientRect();
54
+ let s = 0, o = 0, u = !1, a = !1;
55
+ if (t.bottom > window.innerHeight && (s = window.innerHeight - t.height - 8, u = !0), t.top < 0 && (s = 8, u = !0), t.right > window.innerWidth && (o = window.innerWidth - t.width - 8, a = !0), t.left < 0 && (o = 8, a = !0), u && (l && (this.listRef.current.style.top = `${s - l.top}px`), this.listRef.current.style.transform = a ? `translate(${o - t.left}px, 0)` : "none"), a && !u && (this.listRef.current.style.transform = `translateX(${o - t.left}px)`), i !== void 0) {
56
+ const c = document.getElementById(i);
57
+ if (c) {
58
+ const n = c.getBoundingClientRect(), r = this.buttonRef.current?.getBoundingClientRect(), d = this.listRef.current.getBoundingClientRect().top - n.top, b = this.listRef.current.getBoundingClientRect().bottom - n.bottom;
59
+ d < -16 && r && (this.listRef.current.style.top = `${n.top - r.top + 16}px`, this.setState({
60
+ listShouldScroll: !0
61
+ }), this.listRef.current.getBoundingClientRect().bottom - n.bottom < -16 && (this.listRef.current.style.bottom = `${r.bottom - n.bottom + 16}px`)), b > -16 && r && (this.listRef.current.style.bottom = `${r.bottom - n.bottom + 16}px`, this.setState({
62
+ listShouldScroll: !0
63
+ }), this.listRef.current.getBoundingClientRect().top - n.top > -16 && (this.listRef.current.style.top = `${n.top - r.top + 16}px`)), this.listRef.current.style.visibility = "visible";
64
+ }
65
+ }
66
+ this.setState({ isMenuVisible: !0 });
67
+ }
68
+ }, 1);
69
+ };
70
+ setPosition = () => {
71
+ const { options: i, selected: e } = this.props;
72
+ if (!this.selectMenuRef.current || !this.listRef.current) return "0px";
73
+ const t = getComputedStyle(this.listRef.current), l = parseInt(
74
+ t.getPropertyValue("--actions-list-item-height") || "32",
75
+ 10
76
+ ), s = parseInt(
77
+ t.getPropertyValue("--actions-list-divider-height") || "1",
78
+ 10
79
+ ), o = parseInt(
80
+ t.getPropertyValue("--actions-list-divider-margin-top") || "11",
81
+ 10
82
+ ), u = parseInt(
83
+ t.getPropertyValue(
84
+ "--actions-list-divider-margin-bottom"
85
+ ) || "8",
86
+ 10
87
+ );
88
+ let c = parseInt(
89
+ t.getPropertyValue("--actions-list-padding-top") || "4",
90
+ 10
91
+ );
92
+ for (let n = 0; n < i.length; n++) {
93
+ const r = i[n];
94
+ if (r.value === e || r.children?.find((d) => d.value === e) !== void 0)
95
+ break;
96
+ r.type === "SEPARATOR" ? c += s + o + u : (r.type === "TITLE" || r.type === "OPTION" || r.type === "GROUP") && (c += l);
97
+ }
98
+ return `-${c}px`;
99
+ };
100
+ handleClickOutside = (i) => {
101
+ const e = i.target;
102
+ e === this.buttonRef.current || e === this.menuRef.current || e === this.subMenuRef.current || e.tagName === "HR" && this.menuRef.current?.contains(e) || e.dataset.role === "GROUP" && this.menuRef.current?.contains(e) ? this.setState({
103
+ isMenuOpen: !0
104
+ }) : this.setState({
105
+ isMenuOpen: !1,
106
+ isMenuVisible: !1,
107
+ listShouldScroll: !1
108
+ });
109
+ };
110
+ findSelectedOption = (i) => {
111
+ const { selected: e } = this.props, t = [];
112
+ return e.split(", ").forEach((l) => {
113
+ i.forEach((s) => {
114
+ s.value === l && t.push(s.label ?? ""), s.children?.find((o) => o.value === l) !== void 0 && t.push(
115
+ s.children?.find((o) => o.value === l)?.label ?? ""
116
+ );
117
+ });
118
+ }), t.join(", ");
119
+ };
120
+ // Template
121
+ Status = () => {
122
+ const { warning: i, preview: e, isBlocked: t, isNew: l, onUnblock: s } = this.props;
123
+ if (i || t || l)
124
+ return /* @__PURE__ */ p("div", { className: "select-menu__status", children: [
125
+ i !== void 0 && /* @__PURE__ */ f(
126
+ v,
127
+ {
128
+ iconType: "PICTO",
129
+ iconName: "warning",
130
+ text: i.label,
131
+ pin: i.pin,
132
+ type: i.type
133
+ }
134
+ ),
135
+ (t || l) && /* @__PURE__ */ f(
136
+ w,
137
+ {
138
+ preview: e,
139
+ isSolo: !0,
140
+ action: t ? s : void 0,
141
+ children: l ? "New" : "Pro"
142
+ }
143
+ )
144
+ ] });
145
+ };
146
+ // Templates
147
+ MenuButton = () => {
148
+ const {
149
+ id: i,
150
+ helper: e,
151
+ warning: t,
152
+ options: l,
153
+ selected: s,
154
+ pin: o,
155
+ alignment: u,
156
+ shouldReflow: a,
157
+ isBlocked: c
158
+ } = this.props, n = [];
159
+ return o === "TOP" || o === "NONE" ? n.push("BOTTOM") : n.push("TOP"), u === "LEFT" || u === "FILL" ? n.push("LEFT") : n.push("RIGHT"), /* @__PURE__ */ f(
160
+ y,
161
+ {
162
+ id: i,
163
+ options: l,
164
+ selected: s,
165
+ alignment: `${n.join("_")}`,
166
+ icon: a?.icon,
167
+ helper: e,
168
+ warning: t,
169
+ isBlocked: c
170
+ }
171
+ );
172
+ };
173
+ DropdownButton = () => {
174
+ const {
175
+ id: i,
176
+ alignment: e,
177
+ options: t,
178
+ selected: l,
179
+ helper: s,
180
+ containerId: o,
181
+ isDisabled: u,
182
+ isBlocked: a
183
+ } = this.props, { isMenuOpen: c, listShouldScroll: n, isTooltipVisible: r } = this.state;
184
+ return /* @__PURE__ */ p(
185
+ "div",
186
+ {
187
+ id: i,
188
+ className: m([
189
+ "select-menu",
190
+ e === "LEFT" ? "select-menu--left" : e === "RIGHT" ? "select-menu--right" : "select-menu--fill",
191
+ (u || a) && "select-menu--disabled"
192
+ ]),
193
+ ref: this.selectMenuRef,
194
+ children: [
195
+ /* @__PURE__ */ p(
196
+ "button",
197
+ {
198
+ role: "combobox",
199
+ className: m([
200
+ "select-menu__button",
201
+ c && "select-menu__button--active"
202
+ ]),
203
+ disabled: u || a,
204
+ "aria-expanded": c ? "true" : "false",
205
+ ...c && (o === void 0 ? this.state.isMenuVisible : !0) && {
206
+ "aria-controls": `${i}-menu`
207
+ },
208
+ "aria-label": `Select option: ${this.findSelectedOption(t)}`,
209
+ "aria-haspopup": "menu",
210
+ onKeyDown: (d) => ((d.key === " " || d.key === "Enter" && !(u || a)) && (this.onOpenMenu(), setTimeout(
211
+ () => this.actionsListRef.current?.focusFirstMenuItem(),
212
+ 0
213
+ )), d.key === "Escape" ? d.target.blur() : null),
214
+ onMouseDown: u || a ? void 0 : this.onOpenMenu,
215
+ onMouseEnter: () => {
216
+ s !== void 0 && this.setState({ isTooltipVisible: !0 });
217
+ },
218
+ onMouseLeave: () => {
219
+ s !== void 0 && this.setState({ isTooltipVisible: !1 });
220
+ },
221
+ onFocus: () => {
222
+ s !== void 0 && this.setState({ isTooltipVisible: !0 });
223
+ },
224
+ onBlur: () => {
225
+ s !== void 0 && this.setState({ isTooltipVisible: !1 });
226
+ },
227
+ tabIndex: 0,
228
+ ref: this.buttonRef,
229
+ children: [
230
+ /* @__PURE__ */ f(
231
+ "span",
232
+ {
233
+ className: m([
234
+ R["type--truncated"],
235
+ R.type,
236
+ "select-menu__label"
237
+ ]),
238
+ children: this.findSelectedOption(t)
239
+ }
240
+ ),
241
+ /* @__PURE__ */ f("span", { className: "select-menu__caret", children: /* @__PURE__ */ f(
242
+ O,
243
+ {
244
+ type: "PICTO",
245
+ iconName: "caret-down"
246
+ }
247
+ ) }),
248
+ r && s !== void 0 && /* @__PURE__ */ f(
249
+ T,
250
+ {
251
+ pin: s?.pin || "BOTTOM",
252
+ type: s?.type || "SINGLE_LINE",
253
+ children: s?.label
254
+ }
255
+ )
256
+ ]
257
+ }
258
+ ),
259
+ this.Status(),
260
+ (() => {
261
+ const { pin: d } = this.props;
262
+ return c ? /* @__PURE__ */ f(
263
+ "div",
264
+ {
265
+ className: "floating-menu",
266
+ id: `${i}-menu`,
267
+ style: {
268
+ position: "absolute",
269
+ zIndex: 99,
270
+ top: d === "TOP" ? "-4px" : d === "BOTTOM" ? "auto" : this.setPosition(),
271
+ bottom: d === "BOTTOM" ? "-4px" : "auto",
272
+ right: e === "RIGHT" ? 0 : "auto",
273
+ left: e === "LEFT" ? 0 : "auto",
274
+ visibility: o === void 0 && this.state.isMenuVisible ? "visible" : "hidden"
275
+ },
276
+ ref: this.listRef,
277
+ children: /* @__PURE__ */ f(
278
+ M,
279
+ {
280
+ options: t,
281
+ selected: l,
282
+ direction: e?.includes("LEFT") ? "RIGHT" : "LEFT",
283
+ shouldScroll: n,
284
+ containerId: o,
285
+ onCancellation: () => this.setState({ isMenuOpen: !1 }),
286
+ ref: this.actionsListRef,
287
+ menuRef: this.menuRef,
288
+ subMenuRef: this.subMenuRef
289
+ }
290
+ )
291
+ }
292
+ ) : null;
293
+ })()
294
+ ]
295
+ }
296
+ );
297
+ };
298
+ // Render
299
+ render() {
300
+ const { shouldReflow: i } = this.props, { documentWidth: e } = this.state;
301
+ return i?.isEnabled && e <= 460 ? this.MenuButton() : this.DropdownButton();
302
+ }
303
+ }
304
+ export {
305
+ _ as default
306
+ };
307
+ //# sourceMappingURL=Dropdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dropdown.js","sources":["../../../../src/components/inputs/dropdown/Dropdown.tsx"],"sourcesContent":["import React from 'react'\nimport texts from '@styles/texts/texts.module.scss'\nimport Tooltip from '@components/tags/tooltip/Tooltip'\nimport IconChip from '@components/tags/icon-chip/IconChip'\nimport Chip from '@components/tags/chip/Chip'\nimport ActionsList from '@components/lists/actions-list/ActionsList'\nimport Icon from '@components/assets/icon/Icon'\nimport Menu, { MenuProps } from '@components/actions/menu/Menu'\nimport { doClassnames } from '@a_ng_d/figmug-utils'\nimport type { DropdownOption } from '@tps/list.types'\nimport type { IconList } from '@tps/icon.types'\nimport './dropdown.scss'\n\nexport interface DropdownProps {\n /**\n * Unique identifier for the dropdown\n */\n id: string\n /**\n * List of options to display in the dropdown\n */\n options: Array<DropdownOption>\n /**\n * ID of the currently selected option\n */\n selected: string\n /**\n * ID of the container element for portal rendering\n */\n containerId?: string\n /**\n * Horizontal alignment of the dropdown\n * @default 'LEFT'\n */\n alignment?: 'RIGHT' | 'LEFT' | 'FILL'\n /**\n * Vertical position of helper tooltips\n * @default 'NONE'\n */\n pin?: 'NONE' | 'TOP' | 'BOTTOM'\n /**\n * Helper tooltip configuration\n */\n helper?: {\n /** Tooltip content */\n label: string | React.ReactNode\n /** Tooltip position */\n pin?: 'TOP' | 'BOTTOM'\n /** Tooltip display type */\n type?: 'MULTI_LINE' | 'SINGLE_LINE'\n }\n /**\n * Preview tooltip configuration with image\n */\n preview?: {\n /** Preview image URL */\n image: string\n /** Preview text */\n text: string | React.ReactNode\n /** Preview position */\n pin?: 'TOP' | 'BOTTOM'\n }\n /**\n * Warning tooltip configuration\n */\n warning?: {\n /** Warning message */\n label: string | React.ReactNode\n /** Warning position */\n pin?: 'TOP' | 'BOTTOM'\n /** Warning display type */\n type?: 'MULTI_LINE' | 'SINGLE_LINE'\n }\n /**\n * Reflow configuration for responsive behavior\n * @default { isEnabled: false, icon: 'adjust' }\n */\n shouldReflow?: {\n /** Whether reflow is enabled */\n isEnabled: boolean\n /** Icon to show when reflowed */\n icon: IconList\n }\n /**\n * Whether the dropdown is disabled\n * @default false\n */\n isDisabled?: boolean\n /**\n * Whether the dropdown is blocked\n * @default false\n */\n isBlocked?: boolean\n /**\n * Whether to show a \"New\" badge\n * @default false\n */\n isNew?: boolean\n /**\n * Handler called when unblock is clicked\n */\n onUnblock?: React.MouseEventHandler & React.KeyboardEventHandler\n}\n\nexport interface DropdownStates {\n isMenuOpen: boolean\n isMenuVisible: boolean\n listShouldScroll: boolean\n isTooltipVisible: boolean\n documentWidth: number\n}\n\nexport default class Dropdown extends React.Component<\n DropdownProps,\n DropdownStates\n> {\n private selectMenuRef: React.RefObject<HTMLDivElement>\n private buttonRef: React.RefObject<HTMLButtonElement>\n private listRef: React.RefObject<HTMLDivElement>\n private actionsListRef: React.RefObject<ActionsList>\n private menuRef: React.RefObject<HTMLUListElement>\n private subMenuRef: React.RefObject<HTMLUListElement>\n\n static defaultProps: Partial<DropdownProps> = {\n alignment: 'LEFT',\n pin: 'NONE',\n shouldReflow: { isEnabled: false, icon: 'adjust' },\n isNew: false,\n isBlocked: false,\n isDisabled: false,\n }\n\n constructor(props: DropdownProps) {\n super(props)\n this.state = {\n isMenuOpen: false,\n isMenuVisible: false,\n listShouldScroll: false,\n isTooltipVisible: false,\n documentWidth: typeof window !== 'undefined' ? window.innerWidth : 1024,\n }\n this.selectMenuRef = React.createRef()\n this.buttonRef = React.createRef()\n this.listRef = React.createRef()\n this.actionsListRef = React.createRef()\n this.menuRef = React.createRef()\n this.subMenuRef = React.createRef()\n this.handleClickOutside = this.handleClickOutside.bind(this)\n }\n\n componentDidMount = () => {\n document.addEventListener('mousedown', this.handleClickOutside)\n window.addEventListener('resize', this.handleResize)\n }\n\n componentWillUnmount = () => {\n document.removeEventListener('mousedown', this.handleClickOutside)\n window.removeEventListener('resize', this.handleResize)\n }\n\n // Handlers\n handleResize = () => {\n this.setState({ documentWidth: window.innerWidth })\n }\n\n // Direct Actions\n onOpenMenu = () => {\n const { containerId } = this.props\n const { isMenuOpen } = this.state\n\n this.setState({\n isMenuOpen: !isMenuOpen,\n })\n\n setTimeout(() => {\n if (this.listRef.current != null) {\n const menuRect = this.listRef.current.getBoundingClientRect()\n const buttonRect = this.buttonRef.current?.getBoundingClientRect()\n\n let adjustedTop = 0\n let adjustedLeft = 0\n let shouldTransformY = false\n let shouldTransformX = false\n\n if (menuRect.bottom > window.innerHeight) {\n adjustedTop = window.innerHeight - menuRect.height - 8\n shouldTransformY = true\n }\n if (menuRect.top < 0) {\n adjustedTop = 8\n shouldTransformY = true\n }\n\n if (menuRect.right > window.innerWidth) {\n adjustedLeft = window.innerWidth - menuRect.width - 8\n shouldTransformX = true\n }\n if (menuRect.left < 0) {\n adjustedLeft = 8\n shouldTransformX = true\n }\n\n if (shouldTransformY) {\n if (buttonRect)\n this.listRef.current.style.top = `${adjustedTop - buttonRect.top}px`\n this.listRef.current.style.transform = shouldTransformX\n ? `translate(${adjustedLeft - menuRect.left}px, 0)`\n : 'none'\n }\n\n if (shouldTransformX && !shouldTransformY)\n this.listRef.current.style.transform = `translateX(${adjustedLeft - menuRect.left}px)`\n\n if (containerId !== undefined) {\n const containerElement = document.getElementById(containerId)\n if (containerElement) {\n const container = containerElement.getBoundingClientRect()\n const button = this.buttonRef.current?.getBoundingClientRect()\n\n const diffTop =\n this.listRef.current.getBoundingClientRect().top - container.top\n const diffBottom =\n this.listRef.current.getBoundingClientRect().bottom -\n container.bottom\n\n if (diffTop < -16 && button) {\n this.listRef.current.style.top = `${container.top - button.top + 16}px`\n this.setState({\n listShouldScroll: true,\n })\n\n const diffBottomV2 =\n this.listRef.current.getBoundingClientRect().bottom -\n container.bottom\n\n if (diffBottomV2 < -16)\n this.listRef.current.style.bottom = `${\n button.bottom - container.bottom + 16\n }px`\n }\n\n if (diffBottom > -16 && button) {\n this.listRef.current.style.bottom = `${\n button.bottom - container.bottom + 16\n }px`\n this.setState({\n listShouldScroll: true,\n })\n\n const diffTopV2 =\n this.listRef.current.getBoundingClientRect().top - container.top\n\n if (diffTopV2 > -16)\n this.listRef.current.style.top = `${container.top - button.top + 16}px`\n }\n\n this.listRef.current.style.visibility = 'visible'\n }\n }\n\n // Rendre le menu visible après positionnement\n this.setState({ isMenuVisible: true })\n }\n }, 1)\n }\n\n setPosition = () => {\n const { options, selected } = this.props\n if (!this.selectMenuRef.current || !this.listRef.current) return '0px'\n\n const listComputedStyle = getComputedStyle(this.listRef.current)\n const itemHeight = parseInt(\n listComputedStyle.getPropertyValue('--actions-list-item-height') || '32',\n 10\n )\n const dividerHeight = parseInt(\n listComputedStyle.getPropertyValue('--actions-list-divider-height') ||\n '1',\n 10\n )\n const dividerMarginTop = parseInt(\n listComputedStyle.getPropertyValue('--actions-list-divider-margin-top') ||\n '11',\n 10\n )\n const dividerMarginBottom = parseInt(\n listComputedStyle.getPropertyValue(\n '--actions-list-divider-margin-bottom'\n ) || '8',\n 10\n )\n\n const menuPaddingTop = parseInt(\n listComputedStyle.getPropertyValue('--actions-list-padding-top') || '4',\n 10\n )\n\n let totalHeight = menuPaddingTop\n\n for (let i = 0; i < options.length; i++) {\n const option = options[i]\n\n if (\n option.value === selected ||\n option.children?.find((child) => child.value === selected) !== undefined\n )\n break\n\n if (option.type === 'SEPARATOR')\n totalHeight += dividerHeight + dividerMarginTop + dividerMarginBottom\n else if (\n option.type === 'TITLE' ||\n option.type === 'OPTION' ||\n option.type === 'GROUP'\n )\n totalHeight += itemHeight\n }\n\n return `-${totalHeight}px`\n }\n\n handleClickOutside = (e: Event) => {\n const target = e.target as HTMLElement\n if (\n target === this.buttonRef.current ||\n target === this.menuRef.current ||\n target === this.subMenuRef.current ||\n (target.tagName === 'HR' && this.menuRef.current?.contains(target)) ||\n (target.dataset.role === 'GROUP' &&\n this.menuRef.current?.contains(target))\n )\n this.setState({\n isMenuOpen: true,\n })\n else\n this.setState({\n isMenuOpen: false,\n isMenuVisible: false,\n listShouldScroll: false,\n })\n }\n\n findSelectedOption = (options: Array<DropdownOption>): string => {\n const { selected } = this.props\n const label: Array<string> = []\n\n selected.split(', ').forEach((value) => {\n options.forEach((option) => {\n if (option.value === value) label.push(option.label ?? '')\n if (\n option.children?.find((child) => child.value === value) !== undefined\n )\n label.push(\n option.children?.find((child) => child.value === value)?.label ?? ''\n )\n })\n })\n return label.join(', ')\n }\n\n // Template\n Status = () => {\n const { warning, preview, isBlocked, isNew, onUnblock } = this.props\n\n if (warning || isBlocked || isNew)\n return (\n <div className=\"select-menu__status\">\n {warning !== undefined && (\n <IconChip\n iconType=\"PICTO\"\n iconName=\"warning\"\n text={warning.label}\n pin={warning.pin}\n type={warning.type}\n />\n )}\n {(isBlocked || isNew) && (\n <Chip\n preview={preview}\n isSolo\n action={isBlocked ? onUnblock : undefined}\n >\n {isNew ? 'New' : 'Pro'}\n </Chip>\n )}\n </div>\n )\n }\n\n // Templates\n MenuButton = () => {\n const {\n id,\n helper,\n warning,\n options,\n selected,\n pin,\n alignment,\n shouldReflow,\n isBlocked,\n } = this.props\n\n const newAlignment = []\n\n if (pin === 'TOP' || pin === 'NONE') newAlignment.push('BOTTOM')\n else newAlignment.push('TOP')\n\n if (alignment === 'LEFT' || alignment === 'FILL') newAlignment.push('LEFT')\n else newAlignment.push('RIGHT')\n\n return (\n <Menu\n id={id}\n options={options}\n selected={selected}\n alignment={`${newAlignment.join('_')}` as MenuProps['alignment']}\n icon={shouldReflow?.icon}\n helper={helper}\n warning={warning}\n isBlocked={isBlocked}\n />\n )\n }\n\n DropdownButton = () => {\n const {\n id,\n alignment,\n options,\n selected,\n helper,\n containerId,\n isDisabled,\n isBlocked,\n } = this.props\n const { isMenuOpen, listShouldScroll, isTooltipVisible } = this.state\n\n return (\n <div\n id={id}\n className={doClassnames([\n 'select-menu',\n (() => {\n if (alignment === 'LEFT') return 'select-menu--left'\n if (alignment === 'RIGHT') return 'select-menu--right'\n return 'select-menu--fill'\n })(),\n (isDisabled || isBlocked) && 'select-menu--disabled',\n ])}\n ref={this.selectMenuRef}\n >\n <button\n role=\"combobox\"\n className={doClassnames([\n 'select-menu__button',\n isMenuOpen && 'select-menu__button--active',\n ])}\n disabled={isDisabled || isBlocked}\n aria-expanded={isMenuOpen ? 'true' : 'false'}\n {...(isMenuOpen &&\n (containerId === undefined ? this.state.isMenuVisible : true) && {\n 'aria-controls': `${id}-menu`,\n })}\n aria-label={`Select option: ${this.findSelectedOption(options)}`}\n aria-haspopup=\"menu\"\n onKeyDown={(e) => {\n if (\n e.key === ' ' ||\n (e.key === 'Enter' && !(isDisabled || isBlocked))\n ) {\n this.onOpenMenu()\n setTimeout(\n () => this.actionsListRef.current?.focusFirstMenuItem(),\n 0\n )\n }\n if (e.key === 'Escape') return (e.target as HTMLElement).blur()\n return null\n }}\n onMouseDown={!(isDisabled || isBlocked) ? this.onOpenMenu : undefined}\n onMouseEnter={() => {\n if (helper !== undefined) this.setState({ isTooltipVisible: true })\n }}\n onMouseLeave={() => {\n if (helper !== undefined) this.setState({ isTooltipVisible: false })\n }}\n onFocus={() => {\n if (helper !== undefined) this.setState({ isTooltipVisible: true })\n }}\n onBlur={() => {\n if (helper !== undefined) this.setState({ isTooltipVisible: false })\n }}\n tabIndex={0}\n ref={this.buttonRef}\n >\n <span\n className={doClassnames([\n texts['type--truncated'],\n texts.type,\n 'select-menu__label',\n ])}\n >\n {this.findSelectedOption(options)}\n </span>\n <span className=\"select-menu__caret\">\n <Icon\n type=\"PICTO\"\n iconName=\"caret-down\"\n />\n </span>\n {isTooltipVisible && helper !== undefined && (\n <Tooltip\n pin={helper?.pin || 'BOTTOM'}\n type={helper?.type || 'SINGLE_LINE'}\n >\n {helper?.label}\n </Tooltip>\n )}\n </button>\n {this.Status()}\n {(() => {\n const { pin } = this.props\n\n if (isMenuOpen)\n return (\n <div\n className=\"floating-menu\"\n id={`${id}-menu`}\n style={{\n position: 'absolute',\n zIndex: 99,\n top:\n pin === 'TOP'\n ? '-4px'\n : pin === 'BOTTOM'\n ? 'auto'\n : this.setPosition(),\n bottom: pin === 'BOTTOM' ? '-4px' : 'auto',\n right: alignment === 'RIGHT' ? 0 : 'auto',\n left: alignment === 'LEFT' ? 0 : 'auto',\n visibility:\n containerId === undefined && this.state.isMenuVisible\n ? 'visible'\n : 'hidden',\n }}\n ref={this.listRef}\n >\n <ActionsList\n options={options}\n selected={selected}\n direction={alignment?.includes('LEFT') ? 'RIGHT' : 'LEFT'}\n shouldScroll={listShouldScroll}\n containerId={containerId}\n onCancellation={() => this.setState({ isMenuOpen: false })}\n ref={this.actionsListRef}\n menuRef={this.menuRef}\n subMenuRef={this.subMenuRef}\n />\n </div>\n )\n return null\n })()}\n </div>\n )\n }\n\n // Render\n render() {\n const { shouldReflow } = this.props\n const { documentWidth } = this.state\n\n const isReflowActive = shouldReflow?.isEnabled && documentWidth <= 460\n\n if (isReflowActive) return this.MenuButton()\n return this.DropdownButton()\n }\n}\n"],"names":["Dropdown","React","props","containerId","isMenuOpen","menuRect","buttonRect","adjustedTop","adjustedLeft","shouldTransformY","shouldTransformX","containerElement","container","button","diffTop","diffBottom","options","selected","listComputedStyle","itemHeight","dividerHeight","dividerMarginTop","dividerMarginBottom","totalHeight","i","option","child","e","target","label","value","warning","preview","isBlocked","isNew","onUnblock","jsxs","jsx","IconChip","Chip","id","helper","pin","alignment","shouldReflow","newAlignment","Menu","isDisabled","listShouldScroll","isTooltipVisible","doClassnames","texts","Icon","Tooltip","ActionsList","documentWidth"],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import { default as React } from 'react';
2
+
3
+ interface FileContent {
4
+ name: string;
5
+ content: string | ArrayBuffer | null | undefined;
6
+ }
7
+ export interface DropzoneProps {
8
+ /**
9
+ * Message to display in the dropzone
10
+ */
11
+ message: string;
12
+ /**
13
+ * Warning message to show on invalid file type
14
+ */
15
+ warningMessage: string;
16
+ /**
17
+ * Error message to show on upload failure
18
+ */
19
+ errorMessage: string;
20
+ /**
21
+ * Call-to-action text for the upload button
22
+ */
23
+ cta: string;
24
+ /**
25
+ * Array of accepted MIME types
26
+ * @default ['image/jpeg', 'image/png', 'application/pdf']
27
+ */
28
+ acceptedMimeTypes: Array<string>;
29
+ /**
30
+ * Whether multiple files can be uploaded
31
+ */
32
+ isMultiple: boolean;
33
+ /**
34
+ * Whether the dropzone is in loading state
35
+ * @default false
36
+ */
37
+ isLoading?: boolean;
38
+ /**
39
+ * Whether the dropzone is disabled
40
+ * @default false
41
+ */
42
+ isDisabled?: boolean;
43
+ /**
44
+ * Whether the dropzone is blocked
45
+ * @default false
46
+ */
47
+ isBlocked?: boolean;
48
+ /**
49
+ * Whether to show a "New" badge
50
+ * @default false
51
+ */
52
+ isNew?: boolean;
53
+ /**
54
+ * Callback when files are successfully imported
55
+ */
56
+ onImportFiles: (files: Array<FileContent>) => void;
57
+ }
58
+ export interface DropzoneStates {
59
+ status: 'READY' | 'WAITING' | 'WARNING' | 'ERROR';
60
+ isLoading: boolean;
61
+ isDraggedOver: boolean;
62
+ blackList: Array<string>;
63
+ }
64
+ export default class Dropzone extends React.Component<DropzoneProps, DropzoneStates> {
65
+ stopLoading: NodeJS.Timeout | undefined;
66
+ static defaultProps: Partial<DropzoneProps>;
67
+ constructor(props: DropzoneProps);
68
+ componentDidUpdate: (prevProps: Readonly<DropzoneProps>) => void;
69
+ onImport: (validFiles: Array<File>, unValidFiles: Array<File>) => void;
70
+ onValidFilesViaButton: () => void;
71
+ onValidFilesViaDrop: (event: React.DragEvent) => void;
72
+ onDragOver: (event: React.DragEvent) => void;
73
+ onDragEnter: (event: React.DragEvent) => void;
74
+ onDragLeave: (event: React.DragEvent) => void;
75
+ render(): import("react/jsx-runtime").JSX.Element;
76
+ }
77
+ export {};
78
+ //# sourceMappingURL=Dropzone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dropzone.d.ts","sourceRoot":"","sources":["../../../../src/components/inputs/dropzone/Dropzone.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,OAAO,iBAAiB,CAAA;AAExB,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,CAAA;CACjD;AAED,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;OAEG;IACH,cAAc,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IACX;;;OAGG;IACH,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IAChC;;OAEG;IACH,UAAU,EAAE,OAAO,CAAA;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;OAEG;IACH,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;CACnD;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;IACjD,SAAS,EAAE,OAAO,CAAA;IAClB,aAAa,EAAE,OAAO,CAAA;IACtB,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;CACzB;AAED,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,KAAK,CAAC,SAAS,CACnD,aAAa,EACb,cAAc,CACf;IACC,WAAW,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAA;IAEvC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC,CAM1C;gBAEW,KAAK,EAAE,aAAa;IAYhC,kBAAkB,cAAe,SAAS,aAAa,CAAC,UAqBvD;IAGD,QAAQ,eAAgB,MAAM,IAAI,CAAC,gBAAgB,MAAM,IAAI,CAAC,UAmC7D;IAED,qBAAqB,aAsBpB;IAED,mBAAmB,UAAW,eAAe,UAiC5C;IAED,UAAU,UAAW,eAAe,UAKnC;IAED,WAAW,UAAW,eAAe,UAKpC;IAED,WAAW,UAAW,eAAe,UAKpC;IAED,MAAM;CAiHP"}