@protonradio/proton-ui 0.11.16 → 0.11.18-beta.1

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 (230) hide show
  1. package/dist/assets/svg/icons.svg.cjs.js.map +1 -1
  2. package/dist/assets/svg/icons.svg.es.js.map +1 -1
  3. package/dist/components/ActionMenu/ActionMenu.cjs.js.map +1 -1
  4. package/dist/components/ActionMenu/ActionMenu.es.js.map +1 -1
  5. package/dist/components/Badge/Badge.cjs.js.map +1 -1
  6. package/dist/components/Badge/Badge.es.js.map +1 -1
  7. package/dist/components/Banner/Banner.cjs.js.map +1 -1
  8. package/dist/components/Banner/Banner.es.js.map +1 -1
  9. package/dist/components/Button/Button.cjs.js.map +1 -1
  10. package/dist/components/Button/Button.es.js.map +1 -1
  11. package/dist/components/ButtonGroup/ButtonGroup.cjs.js.map +1 -1
  12. package/dist/components/ButtonGroup/ButtonGroup.es.js.map +1 -1
  13. package/dist/components/ButtonWithSelect/ButtonWithSelect.cjs.js +1 -1
  14. package/dist/components/ButtonWithSelect/ButtonWithSelect.cjs.js.map +1 -1
  15. package/dist/components/ButtonWithSelect/ButtonWithSelect.es.js +26 -26
  16. package/dist/components/ButtonWithSelect/ButtonWithSelect.es.js.map +1 -1
  17. package/dist/components/DataTable/DataTable.cjs.js.map +1 -1
  18. package/dist/components/DataTable/DataTable.es.js.map +1 -1
  19. package/dist/components/Dialog/Dialog.cjs.js.map +1 -1
  20. package/dist/components/Dialog/Dialog.es.js.map +1 -1
  21. package/dist/components/Elevation/Elevation.cjs.js.map +1 -1
  22. package/dist/components/Elevation/Elevation.es.js.map +1 -1
  23. package/dist/components/Icon/Icon.cjs.js.map +1 -1
  24. package/dist/components/Icon/Icon.es.js.map +1 -1
  25. package/dist/components/ImageBackground/ImageBackground.cjs.js.map +1 -1
  26. package/dist/components/ImageBackground/ImageBackground.es.js.map +1 -1
  27. package/dist/components/Input/BaseInput/Input.cjs.js.map +1 -1
  28. package/dist/components/Input/BaseInput/Input.es.js.map +1 -1
  29. package/dist/components/Input/CopyInput/CopyInput.cjs.js +1 -1
  30. package/dist/components/Input/CopyInput/CopyInput.cjs.js.map +1 -1
  31. package/dist/components/Input/CopyInput/CopyInput.es.js +9 -9
  32. package/dist/components/Input/CopyInput/CopyInput.es.js.map +1 -1
  33. package/dist/components/Input/SearchInput/SearchInput.cjs.js.map +1 -1
  34. package/dist/components/Input/SearchInput/SearchInput.es.js.map +1 -1
  35. package/dist/components/Menu/MenuTrigger.cjs.js.map +1 -1
  36. package/dist/components/Menu/MenuTrigger.es.js.map +1 -1
  37. package/dist/components/Menu/PopoverMenu.cjs.js +1 -1
  38. package/dist/components/Menu/PopoverMenu.cjs.js.map +1 -1
  39. package/dist/components/Menu/PopoverMenu.es.js +32 -28
  40. package/dist/components/Menu/PopoverMenu.es.js.map +1 -1
  41. package/dist/components/Modal/Modal.cjs.js.map +1 -1
  42. package/dist/components/Modal/Modal.es.js.map +1 -1
  43. package/dist/components/Popover/Popover.cjs.js.map +1 -1
  44. package/dist/components/Popover/Popover.es.js.map +1 -1
  45. package/dist/components/ScreenOverlay/ScreenOverlay.cjs.js.map +1 -1
  46. package/dist/components/ScreenOverlay/ScreenOverlay.es.js.map +1 -1
  47. package/dist/components/Select/Select.cjs.js.map +1 -1
  48. package/dist/components/Select/Select.es.js +3 -3
  49. package/dist/components/Select/Select.es.js.map +1 -1
  50. package/dist/components/Switch/Switch.cjs.js.map +1 -1
  51. package/dist/components/Switch/Switch.es.js.map +1 -1
  52. package/dist/components/Table/Collection/collectionParser.cjs.js.map +1 -1
  53. package/dist/components/Table/Collection/collectionParser.es.js.map +1 -1
  54. package/dist/components/Table/Collection/useTableCollection.cjs.js.map +1 -1
  55. package/dist/components/Table/Collection/useTableCollection.es.js.map +1 -1
  56. package/dist/components/Table/Table.cjs.js.map +1 -1
  57. package/dist/components/Table/Table.es.js +5 -5
  58. package/dist/components/Table/Table.es.js.map +1 -1
  59. package/dist/components/Text/TextEllipsis/TextEllipsis.cjs.js.map +1 -1
  60. package/dist/components/Text/TextEllipsis/TextEllipsis.es.js.map +1 -1
  61. package/dist/components/Text/TextEmphasis/TextEmphasis.cjs.js.map +1 -1
  62. package/dist/components/Text/TextEmphasis/TextEmphasis.es.js.map +1 -1
  63. package/dist/components/ThemeProvider.cjs.js.map +1 -1
  64. package/dist/components/ThemeProvider.es.js +4 -4
  65. package/dist/components/ThemeProvider.es.js.map +1 -1
  66. package/dist/components/Tombstone/Tombstone.cjs.js.map +1 -1
  67. package/dist/components/Tombstone/Tombstone.es.js.map +1 -1
  68. package/dist/components/Tooltip/Tooltip.cjs.js.map +1 -1
  69. package/dist/components/Tooltip/Tooltip.es.js.map +1 -1
  70. package/dist/components/Waveform/Waveform.cjs.js.map +1 -1
  71. package/dist/components/Waveform/Waveform.es.js.map +1 -1
  72. package/dist/components/Waveform/WaveformBar.cjs.js.map +1 -1
  73. package/dist/components/Waveform/WaveformBar.es.js.map +1 -1
  74. package/dist/design/darkTheme/colors.cjs.js.map +1 -1
  75. package/dist/design/darkTheme/colors.es.js +3 -3
  76. package/dist/design/darkTheme/stylesheet.cjs.js.map +1 -1
  77. package/dist/design/darkTheme/stylesheet.es.js +12 -12
  78. package/dist/design/darkTheme/stylesheet.es.js.map +1 -1
  79. package/dist/design/generateStylesheet.cjs.js.map +1 -1
  80. package/dist/design/generateStylesheet.es.js.map +1 -1
  81. package/dist/design/lightTheme/colors.cjs.js.map +1 -1
  82. package/dist/design/lightTheme/colors.es.js +3 -3
  83. package/dist/design/lightTheme/stylesheet.cjs.js.map +1 -1
  84. package/dist/design/lightTheme/stylesheet.es.js +12 -12
  85. package/dist/design/lightTheme/stylesheet.es.js.map +1 -1
  86. package/dist/hooks/useBreakpoint.cjs.js.map +1 -1
  87. package/dist/hooks/useBreakpoint.es.js.map +1 -1
  88. package/dist/hooks/useIsClosing.cjs.js.map +1 -1
  89. package/dist/hooks/useIsClosing.es.js.map +1 -1
  90. package/dist/hooks/useLockBodyScroll.cjs.js.map +1 -1
  91. package/dist/hooks/useLockBodyScroll.es.js.map +1 -1
  92. package/dist/hooks/usePalette.cjs.js.map +1 -1
  93. package/dist/hooks/usePalette.es.js.map +1 -1
  94. package/dist/index.d.ts +38 -38
  95. package/dist/node_modules/@react-aria/button/dist/useButton.cjs.js +1 -1
  96. package/dist/node_modules/@react-aria/button/dist/useButton.cjs.js.map +1 -1
  97. package/dist/node_modules/@react-aria/button/dist/useButton.es.js +12 -13
  98. package/dist/node_modules/@react-aria/button/dist/useButton.es.js.map +1 -1
  99. package/dist/node_modules/@react-aria/dialog/dist/useDialog.cjs.js.map +1 -1
  100. package/dist/node_modules/@react-aria/dialog/dist/useDialog.es.js.map +1 -1
  101. package/dist/node_modules/@react-aria/focus/dist/FocusScope.cjs.js.map +1 -1
  102. package/dist/node_modules/@react-aria/focus/dist/FocusScope.es.js +3 -3
  103. package/dist/node_modules/@react-aria/focus/dist/FocusScope.es.js.map +1 -1
  104. package/dist/node_modules/@react-aria/form/dist/useFormValidation.cjs.js.map +1 -1
  105. package/dist/node_modules/@react-aria/form/dist/useFormValidation.es.js.map +1 -1
  106. package/dist/node_modules/@react-aria/i18n/dist/context.cjs.js.map +1 -1
  107. package/dist/node_modules/@react-aria/i18n/dist/context.es.js.map +1 -1
  108. package/dist/node_modules/@react-aria/i18n/dist/useDefaultLocale.cjs.js.map +1 -1
  109. package/dist/node_modules/@react-aria/i18n/dist/useDefaultLocale.es.js.map +1 -1
  110. package/dist/node_modules/@react-aria/i18n/dist/utils.cjs.js.map +1 -1
  111. package/dist/node_modules/@react-aria/i18n/dist/utils.es.js.map +1 -1
  112. package/dist/node_modules/@react-aria/interactions/dist/context.cjs.js.map +1 -1
  113. package/dist/node_modules/@react-aria/interactions/dist/context.es.js.map +1 -1
  114. package/dist/node_modules/@react-aria/interactions/dist/createEventHandler.cjs.js.map +1 -1
  115. package/dist/node_modules/@react-aria/interactions/dist/createEventHandler.es.js.map +1 -1
  116. package/dist/node_modules/@react-aria/interactions/dist/focusSafely.cjs.js.map +1 -1
  117. package/dist/node_modules/@react-aria/interactions/dist/focusSafely.es.js.map +1 -1
  118. package/dist/node_modules/@react-aria/interactions/dist/textSelection.cjs.js.map +1 -1
  119. package/dist/node_modules/@react-aria/interactions/dist/textSelection.es.js.map +1 -1
  120. package/dist/node_modules/@react-aria/interactions/dist/useFocus.cjs.js.map +1 -1
  121. package/dist/node_modules/@react-aria/interactions/dist/useFocus.es.js.map +1 -1
  122. package/dist/node_modules/@react-aria/interactions/dist/useFocusVisible.cjs.js.map +1 -1
  123. package/dist/node_modules/@react-aria/interactions/dist/useFocusVisible.es.js.map +1 -1
  124. package/dist/node_modules/@react-aria/interactions/dist/useFocusWithin.cjs.js.map +1 -1
  125. package/dist/node_modules/@react-aria/interactions/dist/useFocusWithin.es.js.map +1 -1
  126. package/dist/node_modules/@react-aria/interactions/dist/useFocusable.cjs.js.map +1 -1
  127. package/dist/node_modules/@react-aria/interactions/dist/useFocusable.es.js.map +1 -1
  128. package/dist/node_modules/@react-aria/interactions/dist/useInteractOutside.cjs.js.map +1 -1
  129. package/dist/node_modules/@react-aria/interactions/dist/useInteractOutside.es.js.map +1 -1
  130. package/dist/node_modules/@react-aria/interactions/dist/useKeyboard.cjs.js.map +1 -1
  131. package/dist/node_modules/@react-aria/interactions/dist/useKeyboard.es.js.map +1 -1
  132. package/dist/node_modules/@react-aria/interactions/dist/usePress.cjs.js +2 -2
  133. package/dist/node_modules/@react-aria/interactions/dist/usePress.cjs.js.map +1 -1
  134. package/dist/node_modules/@react-aria/interactions/dist/usePress.es.js +23 -23
  135. package/dist/node_modules/@react-aria/interactions/dist/usePress.es.js.map +1 -1
  136. package/dist/node_modules/@react-aria/interactions/dist/utils.cjs.js.map +1 -1
  137. package/dist/node_modules/@react-aria/interactions/dist/utils.es.js.map +1 -1
  138. package/dist/node_modules/@react-aria/label/dist/useField.cjs.js.map +1 -1
  139. package/dist/node_modules/@react-aria/label/dist/useField.es.js.map +1 -1
  140. package/dist/node_modules/@react-aria/label/dist/useLabel.cjs.js.map +1 -1
  141. package/dist/node_modules/@react-aria/label/dist/useLabel.es.js.map +1 -1
  142. package/dist/node_modules/@react-aria/overlays/dist/Overlay.cjs.js.map +1 -1
  143. package/dist/node_modules/@react-aria/overlays/dist/Overlay.es.js.map +1 -1
  144. package/dist/node_modules/@react-aria/overlays/dist/ariaHideOutside.cjs.js +1 -1
  145. package/dist/node_modules/@react-aria/overlays/dist/ariaHideOutside.cjs.js.map +1 -1
  146. package/dist/node_modules/@react-aria/overlays/dist/ariaHideOutside.es.js +18 -18
  147. package/dist/node_modules/@react-aria/overlays/dist/ariaHideOutside.es.js.map +1 -1
  148. package/dist/node_modules/@react-aria/overlays/dist/useModalOverlay.cjs.js.map +1 -1
  149. package/dist/node_modules/@react-aria/overlays/dist/useModalOverlay.es.js.map +1 -1
  150. package/dist/node_modules/@react-aria/overlays/dist/useOverlay.cjs.js.map +1 -1
  151. package/dist/node_modules/@react-aria/overlays/dist/useOverlay.es.js.map +1 -1
  152. package/dist/node_modules/@react-aria/overlays/dist/usePreventScroll.cjs.js.map +1 -1
  153. package/dist/node_modules/@react-aria/overlays/dist/usePreventScroll.es.js.map +1 -1
  154. package/dist/node_modules/@react-aria/radio/dist/useRadio.cjs.js.map +1 -1
  155. package/dist/node_modules/@react-aria/radio/dist/useRadio.es.js.map +1 -1
  156. package/dist/node_modules/@react-aria/radio/dist/useRadioGroup.cjs.js.map +1 -1
  157. package/dist/node_modules/@react-aria/radio/dist/useRadioGroup.es.js.map +1 -1
  158. package/dist/node_modules/@react-aria/ssr/dist/SSRProvider.cjs.js.map +1 -1
  159. package/dist/node_modules/@react-aria/ssr/dist/SSRProvider.es.js.map +1 -1
  160. package/dist/node_modules/@react-aria/switch/dist/useSwitch.cjs.js.map +1 -1
  161. package/dist/node_modules/@react-aria/switch/dist/useSwitch.es.js.map +1 -1
  162. package/dist/node_modules/@react-aria/toggle/dist/useToggle.cjs.js.map +1 -1
  163. package/dist/node_modules/@react-aria/toggle/dist/useToggle.es.js.map +1 -1
  164. package/dist/node_modules/@react-aria/visually-hidden/dist/VisuallyHidden.cjs.js.map +1 -1
  165. package/dist/node_modules/@react-aria/visually-hidden/dist/VisuallyHidden.es.js.map +1 -1
  166. package/dist/node_modules/@react-stately/form/dist/useFormValidationState.cjs.js.map +1 -1
  167. package/dist/node_modules/@react-stately/form/dist/useFormValidationState.es.js +3 -3
  168. package/dist/node_modules/@react-stately/form/dist/useFormValidationState.es.js.map +1 -1
  169. package/dist/node_modules/@react-stately/overlays/dist/useOverlayTriggerState.cjs.js.map +1 -1
  170. package/dist/node_modules/@react-stately/overlays/dist/useOverlayTriggerState.es.js.map +1 -1
  171. package/dist/node_modules/@react-stately/radio/dist/useRadioGroupState.cjs.js.map +1 -1
  172. package/dist/node_modules/@react-stately/radio/dist/useRadioGroupState.es.js.map +1 -1
  173. package/dist/node_modules/@react-stately/toggle/dist/useToggleState.cjs.js.map +1 -1
  174. package/dist/node_modules/@react-stately/toggle/dist/useToggleState.es.js.map +1 -1
  175. package/dist/node_modules/@react-stately/utils/dist/useControlledState.cjs.js.map +1 -1
  176. package/dist/node_modules/@react-stately/utils/dist/useControlledState.es.js.map +1 -1
  177. package/dist/node_modules/@swc/helpers/esm/_check_private_redeclaration.cjs.js +1 -1
  178. package/dist/node_modules/@swc/helpers/esm/_check_private_redeclaration.cjs.js.map +1 -1
  179. package/dist/node_modules/@swc/helpers/esm/_check_private_redeclaration.es.js +2 -1
  180. package/dist/node_modules/@swc/helpers/esm/_check_private_redeclaration.es.js.map +1 -1
  181. package/dist/node_modules/@swc/helpers/esm/_class_apply_descriptor_get.cjs.js +1 -1
  182. package/dist/node_modules/@swc/helpers/esm/_class_apply_descriptor_get.cjs.js.map +1 -1
  183. package/dist/node_modules/@swc/helpers/esm/_class_apply_descriptor_get.es.js +2 -1
  184. package/dist/node_modules/@swc/helpers/esm/_class_apply_descriptor_get.es.js.map +1 -1
  185. package/dist/node_modules/@swc/helpers/esm/_class_apply_descriptor_set.cjs.js +1 -1
  186. package/dist/node_modules/@swc/helpers/esm/_class_apply_descriptor_set.cjs.js.map +1 -1
  187. package/dist/node_modules/@swc/helpers/esm/_class_apply_descriptor_set.es.js +2 -1
  188. package/dist/node_modules/@swc/helpers/esm/_class_apply_descriptor_set.es.js.map +1 -1
  189. package/dist/node_modules/@swc/helpers/esm/_class_extract_field_descriptor.cjs.js +1 -1
  190. package/dist/node_modules/@swc/helpers/esm/_class_extract_field_descriptor.cjs.js.map +1 -1
  191. package/dist/node_modules/@swc/helpers/esm/_class_extract_field_descriptor.es.js +2 -1
  192. package/dist/node_modules/@swc/helpers/esm/_class_extract_field_descriptor.es.js.map +1 -1
  193. package/dist/node_modules/@swc/helpers/esm/_class_private_field_get.cjs.js +1 -1
  194. package/dist/node_modules/@swc/helpers/esm/_class_private_field_get.cjs.js.map +1 -1
  195. package/dist/node_modules/@swc/helpers/esm/_class_private_field_get.es.js +7 -6
  196. package/dist/node_modules/@swc/helpers/esm/_class_private_field_get.es.js.map +1 -1
  197. package/dist/node_modules/@swc/helpers/esm/_class_private_field_init.cjs.js +1 -1
  198. package/dist/node_modules/@swc/helpers/esm/_class_private_field_init.cjs.js.map +1 -1
  199. package/dist/node_modules/@swc/helpers/esm/_class_private_field_init.es.js +4 -3
  200. package/dist/node_modules/@swc/helpers/esm/_class_private_field_init.es.js.map +1 -1
  201. package/dist/node_modules/@swc/helpers/esm/_class_private_field_set.cjs.js +1 -1
  202. package/dist/node_modules/@swc/helpers/esm/_class_private_field_set.cjs.js.map +1 -1
  203. package/dist/node_modules/@swc/helpers/esm/_class_private_field_set.es.js +7 -6
  204. package/dist/node_modules/@swc/helpers/esm/_class_private_field_set.es.js.map +1 -1
  205. package/dist/node_modules/color2k/dist/index.exports.import.es.cjs.js.map +1 -1
  206. package/dist/node_modules/color2k/dist/index.exports.import.es.es.js.map +1 -1
  207. package/dist/node_modules/react/cjs/react-jsx-runtime.development.cjs.js +7 -7
  208. package/dist/node_modules/react/cjs/react-jsx-runtime.development.cjs.js.map +1 -1
  209. package/dist/node_modules/react/cjs/react-jsx-runtime.development.es.js +174 -167
  210. package/dist/node_modules/react/cjs/react-jsx-runtime.development.es.js.map +1 -1
  211. package/dist/node_modules/react/cjs/react-jsx-runtime.production.min.cjs.js +1 -1
  212. package/dist/node_modules/react/cjs/react-jsx-runtime.production.min.cjs.js.map +1 -1
  213. package/dist/node_modules/react/cjs/react-jsx-runtime.production.min.es.js +3 -3
  214. package/dist/node_modules/react/cjs/react-jsx-runtime.production.min.es.js.map +1 -1
  215. package/dist/node_modules/react/jsx-runtime.cjs.js.map +1 -1
  216. package/dist/node_modules/react/jsx-runtime.es.js.map +1 -1
  217. package/dist/utils/color2k.cjs.js.map +1 -1
  218. package/dist/utils/color2k.es.js.map +1 -1
  219. package/dist/utils/copy.cjs.js +1 -1
  220. package/dist/utils/copy.cjs.js.map +1 -1
  221. package/dist/utils/copy.es.js +20 -19
  222. package/dist/utils/copy.es.js.map +1 -1
  223. package/dist/utils/image.cjs.js.map +1 -1
  224. package/dist/utils/image.es.js.map +1 -1
  225. package/dist/utils/navigation.cjs.js.map +1 -1
  226. package/dist/utils/navigation.es.js.map +1 -1
  227. package/dist/utils/palette.cjs.js.map +1 -1
  228. package/dist/utils/palette.es.js +1 -1
  229. package/dist/utils/palette.es.js.map +1 -1
  230. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"icons.svg.cjs.js","sources":["../../../assets/svg/icons.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3cdefs%3e%3csymbol%20id='external-link'%20viewBox='0%200%20512%20512'%3e%3cpath%20d='M384%20224v184a40%2040%200%2001-40%2040H104a40%2040%200%2001-40-40V168a40%2040%200%200140-40h167.48M336%2064h112v112M224%20288L440%2072'%20fill='none'%20stroke='currentColor'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='32'/%3e%3c/symbol%3e%3csymbol%20id='caret-down'%20viewBox='0%200%20512%20512'%3e%3cpath%20fill='currentColor'%20d='M233.4%20406.6c12.5%2012.5%2032.8%2012.5%2045.3%200l192-192c12.5-12.5%2012.5-32.8%200-45.3s-32.8-12.5-45.3%200L256%20338.7L86.6%20169.4c-12.5-12.5-32.8-12.5-45.3%200s-12.5%2032.8%200%2045.3l192%20192z'/%3e%3c/symbol%3e%3csymbol%20id='caret-right'%20viewBox='0%200%20512%20512'%3e%3cpath%20fill='currentColor'%20d='M216.5%20374.8c-11.3%2011.3-30%2011.3-41.3%200L74.8%20256c-11.3-11.3-11.3-30%200-41.3l128.5-128.5c11.3-11.3%2030-11.3%2041.3%200s11.3%2030%200%2041.3L145.7%20256l119.8%20119.8c11.3%2011.3%2011.3%2030%200%2041.3z'/%3e%3c/symbol%3e%3csymbol%20id='chevron-right'%20viewBox='0%200%2016%2016'%3e%3cpath%20fill='currentColor'%20d='M5.74%203.2a.75.75%200%200%200-.04%201.06L9.227%208L5.7%2011.74a.75.75%200%201%200%201.1%201.02l4-4.25a.75.75%200%200%200%200-1.02l-4-4.25a.75.75%200%200%200-1.06-.04'/%3e%3c/symbol%3e%3csymbol%20id='chevron-left'%20viewBox='0%200%2016%2016'%3e%3cpath%20fill='currentColor'%20d='M10.26%203.2a.75.75%200%200%201%20.04%201.06L6.773%208l3.527%203.74a.75.75%200%201%201-1.1%201.02l-4-4.25a.75.75%200%200%201%200-1.02l4-4.25a.75.75%200%200%201%201.06-.04'/%3e%3c/symbol%3e%3csymbol%20id='chevron-down'%20viewBox='0%200%2016%2016'%3e%3cpath%20fill='currentColor'%20d='M3.2%205.74a.75.75%200%200%201%201.06-.04L8%209.227L11.74%205.7a.75.75%200%201%201%201.02%201.1l-4.25%204a.75.75%200%200%201-1.02%200l-4.25-4a.75.75%200%200%201-.04-1.06'/%3e%3c/symbol%3e%3c/defs%3e%3c/svg%3e\""],"names":["iconURL"],"mappings":"4GAAA,MAAAA,EAAe"}
1
+ {"version":3,"file":"icons.svg.cjs.js","sources":["../../../assets/svg/icons.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3cdefs%3e%3csymbol%20id='external-link'%20viewBox='0%200%20512%20512'%3e%3cpath%20d='M384%20224v184a40%2040%200%2001-40%2040H104a40%2040%200%2001-40-40V168a40%2040%200%200140-40h167.48M336%2064h112v112M224%20288L440%2072'%20fill='none'%20stroke='currentColor'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='32'/%3e%3c/symbol%3e%3csymbol%20id='caret-down'%20viewBox='0%200%20512%20512'%3e%3cpath%20fill='currentColor'%20d='M233.4%20406.6c12.5%2012.5%2032.8%2012.5%2045.3%200l192-192c12.5-12.5%2012.5-32.8%200-45.3s-32.8-12.5-45.3%200L256%20338.7L86.6%20169.4c-12.5-12.5-32.8-12.5-45.3%200s-12.5%2032.8%200%2045.3l192%20192z'/%3e%3c/symbol%3e%3csymbol%20id='caret-right'%20viewBox='0%200%20512%20512'%3e%3cpath%20fill='currentColor'%20d='M216.5%20374.8c-11.3%2011.3-30%2011.3-41.3%200L74.8%20256c-11.3-11.3-11.3-30%200-41.3l128.5-128.5c11.3-11.3%2030-11.3%2041.3%200s11.3%2030%200%2041.3L145.7%20256l119.8%20119.8c11.3%2011.3%2011.3%2030%200%2041.3z'/%3e%3c/symbol%3e%3csymbol%20id='chevron-right'%20viewBox='0%200%2016%2016'%3e%3cpath%20fill='currentColor'%20d='M5.74%203.2a.75.75%200%200%200-.04%201.06L9.227%208L5.7%2011.74a.75.75%200%201%200%201.1%201.02l4-4.25a.75.75%200%200%200%200-1.02l-4-4.25a.75.75%200%200%200-1.06-.04'/%3e%3c/symbol%3e%3csymbol%20id='chevron-left'%20viewBox='0%200%2016%2016'%3e%3cpath%20fill='currentColor'%20d='M10.26%203.2a.75.75%200%200%201%20.04%201.06L6.773%208l3.527%203.74a.75.75%200%201%201-1.1%201.02l-4-4.25a.75.75%200%200%201%200-1.02l4-4.25a.75.75%200%200%201%201.06-.04'/%3e%3c/symbol%3e%3csymbol%20id='chevron-down'%20viewBox='0%200%2016%2016'%3e%3cpath%20fill='currentColor'%20d='M3.2%205.74a.75.75%200%200%201%201.06-.04L8%209.227L11.74%205.7a.75.75%200%201%201%201.02%201.1l-4.25%204a.75.75%200%200%201-1.02%200l-4.25-4a.75.75%200%200%201-.04-1.06'/%3e%3c/symbol%3e%3c/defs%3e%3c/svg%3e\""],"names":["iconURL"],"mappings":"4GAAA,MAAeA,EAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"icons.svg.es.js","sources":["../../../assets/svg/icons.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3cdefs%3e%3csymbol%20id='external-link'%20viewBox='0%200%20512%20512'%3e%3cpath%20d='M384%20224v184a40%2040%200%2001-40%2040H104a40%2040%200%2001-40-40V168a40%2040%200%200140-40h167.48M336%2064h112v112M224%20288L440%2072'%20fill='none'%20stroke='currentColor'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='32'/%3e%3c/symbol%3e%3csymbol%20id='caret-down'%20viewBox='0%200%20512%20512'%3e%3cpath%20fill='currentColor'%20d='M233.4%20406.6c12.5%2012.5%2032.8%2012.5%2045.3%200l192-192c12.5-12.5%2012.5-32.8%200-45.3s-32.8-12.5-45.3%200L256%20338.7L86.6%20169.4c-12.5-12.5-32.8-12.5-45.3%200s-12.5%2032.8%200%2045.3l192%20192z'/%3e%3c/symbol%3e%3csymbol%20id='caret-right'%20viewBox='0%200%20512%20512'%3e%3cpath%20fill='currentColor'%20d='M216.5%20374.8c-11.3%2011.3-30%2011.3-41.3%200L74.8%20256c-11.3-11.3-11.3-30%200-41.3l128.5-128.5c11.3-11.3%2030-11.3%2041.3%200s11.3%2030%200%2041.3L145.7%20256l119.8%20119.8c11.3%2011.3%2011.3%2030%200%2041.3z'/%3e%3c/symbol%3e%3csymbol%20id='chevron-right'%20viewBox='0%200%2016%2016'%3e%3cpath%20fill='currentColor'%20d='M5.74%203.2a.75.75%200%200%200-.04%201.06L9.227%208L5.7%2011.74a.75.75%200%201%200%201.1%201.02l4-4.25a.75.75%200%200%200%200-1.02l-4-4.25a.75.75%200%200%200-1.06-.04'/%3e%3c/symbol%3e%3csymbol%20id='chevron-left'%20viewBox='0%200%2016%2016'%3e%3cpath%20fill='currentColor'%20d='M10.26%203.2a.75.75%200%200%201%20.04%201.06L6.773%208l3.527%203.74a.75.75%200%201%201-1.1%201.02l-4-4.25a.75.75%200%200%201%200-1.02l4-4.25a.75.75%200%200%201%201.06-.04'/%3e%3c/symbol%3e%3csymbol%20id='chevron-down'%20viewBox='0%200%2016%2016'%3e%3cpath%20fill='currentColor'%20d='M3.2%205.74a.75.75%200%200%201%201.06-.04L8%209.227L11.74%205.7a.75.75%200%201%201%201.02%201.1l-4.25%204a.75.75%200%200%201-1.02%200l-4.25-4a.75.75%200%200%201-.04-1.06'/%3e%3c/symbol%3e%3c/defs%3e%3c/svg%3e\""],"names":["iconURL"],"mappings":"AAAA,MAAAA,IAAe;"}
1
+ {"version":3,"file":"icons.svg.es.js","sources":["../../../assets/svg/icons.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3cdefs%3e%3csymbol%20id='external-link'%20viewBox='0%200%20512%20512'%3e%3cpath%20d='M384%20224v184a40%2040%200%2001-40%2040H104a40%2040%200%2001-40-40V168a40%2040%200%200140-40h167.48M336%2064h112v112M224%20288L440%2072'%20fill='none'%20stroke='currentColor'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='32'/%3e%3c/symbol%3e%3csymbol%20id='caret-down'%20viewBox='0%200%20512%20512'%3e%3cpath%20fill='currentColor'%20d='M233.4%20406.6c12.5%2012.5%2032.8%2012.5%2045.3%200l192-192c12.5-12.5%2012.5-32.8%200-45.3s-32.8-12.5-45.3%200L256%20338.7L86.6%20169.4c-12.5-12.5-32.8-12.5-45.3%200s-12.5%2032.8%200%2045.3l192%20192z'/%3e%3c/symbol%3e%3csymbol%20id='caret-right'%20viewBox='0%200%20512%20512'%3e%3cpath%20fill='currentColor'%20d='M216.5%20374.8c-11.3%2011.3-30%2011.3-41.3%200L74.8%20256c-11.3-11.3-11.3-30%200-41.3l128.5-128.5c11.3-11.3%2030-11.3%2041.3%200s11.3%2030%200%2041.3L145.7%20256l119.8%20119.8c11.3%2011.3%2011.3%2030%200%2041.3z'/%3e%3c/symbol%3e%3csymbol%20id='chevron-right'%20viewBox='0%200%2016%2016'%3e%3cpath%20fill='currentColor'%20d='M5.74%203.2a.75.75%200%200%200-.04%201.06L9.227%208L5.7%2011.74a.75.75%200%201%200%201.1%201.02l4-4.25a.75.75%200%200%200%200-1.02l-4-4.25a.75.75%200%200%200-1.06-.04'/%3e%3c/symbol%3e%3csymbol%20id='chevron-left'%20viewBox='0%200%2016%2016'%3e%3cpath%20fill='currentColor'%20d='M10.26%203.2a.75.75%200%200%201%20.04%201.06L6.773%208l3.527%203.74a.75.75%200%201%201-1.1%201.02l-4-4.25a.75.75%200%200%201%200-1.02l4-4.25a.75.75%200%200%201%201.06-.04'/%3e%3c/symbol%3e%3csymbol%20id='chevron-down'%20viewBox='0%200%2016%2016'%3e%3cpath%20fill='currentColor'%20d='M3.2%205.74a.75.75%200%200%201%201.06-.04L8%209.227L11.74%205.7a.75.75%200%201%201%201.02%201.1l-4.25%204a.75.75%200%200%201-1.02%200l-4.25-4a.75.75%200%200%201-.04-1.06'/%3e%3c/symbol%3e%3c/defs%3e%3c/svg%3e\""],"names":["iconURL"],"mappings":"AAAA,MAAeA,IAAA;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ActionMenu.cjs.js","sources":["../../../src/components/ActionMenu/ActionMenu.tsx"],"sourcesContent":["\"use client\";\n\nimport { ReactNode, useEffect, useRef, useState } from \"react\";\nimport type { Selection } from \"@react-types/shared\";\n\nimport { useIsClosing } from \"../../hooks/useIsClosing\";\nimport { useLockBodyScroll } from \"../../hooks/useLockBodyScroll\";\nimport { handleInternalNavigation, isUrlExternal } from \"../../utils\";\n\nimport { Button } from \"../Button/Button\";\nimport { ScreenOverlay } from \"../ScreenOverlay/ScreenOverlay\";\nimport { DropdownMenu } from \"radix-ui\";\nimport { Icon } from \"../Icon/Icon\";\n\nimport \"./ActionMenu.css\";\n\nexport interface ActionMenuAction {\n key: string;\n label?: ReactNode;\n description?: ReactNode;\n to?: string;\n onAction?: (key: string) => void;\n children?: ActionMenuAction[];\n}\n\nexport type ActionMenuSelectionMode = \"single\" | \"multiple\" | \"none\";\n\nexport interface ActionMenuProps {\n /** The actions of the menu\n * - type {@link ActionMenuAction}[]\n */\n actions?: ActionMenuAction[];\n\n /** The text of the cancel button */\n cancelButtonText?: string;\n\n /** The children of the menu */\n children?: ReactNode | ((props: { close: () => void }) => ReactNode);\n\n /** The test id of the menu */\n \"data-testid\"?: string;\n\n /** The keys of the disabled items\n * @default []\n */\n disabledKeys?: string[];\n\n /** Whether the menu is open\n * @default false\n */\n isOpen: boolean;\n\n /** The callback function to close the menu */\n onClose?: () => void;\n\n /** The callback function to change the selection\n * - type {@link Selection}\n */\n onSelectionChange?: (keys: Selection) => void;\n\n /** The selection mode of the menu\n * @default \"single\"\n */\n selectionMode?: ActionMenuSelectionMode;\n\n /** The keys of the selected items */\n selectedKeys?: string[];\n\n /** Whether to show the cancel button */\n showCancel?: boolean;\n\n /** The title of the menu */\n title?: string;\n}\n\ntype ActionStack = {\n title: ReactNode | null;\n actions: ActionMenuAction[];\n key: string | null;\n previousKey: string | null;\n};\n\n/**\n * A controlled ActionMenu to display a menu of actions.\n * Renders a list of actions as a focusable menu, or non-focusable children.\n *\n * API:\n * - {@link ActionMenuProps}\n */\nexport const ActionMenu = ({\n isOpen,\n actions = [],\n children,\n showCancel = true,\n cancelButtonText = \"Cancel\",\n selectionMode = \"single\",\n selectedKeys,\n disabledKeys = [],\n onSelectionChange,\n onClose,\n title,\n \"data-testid\": testId,\n}: ActionMenuProps) => {\n useLockBodyScroll(isOpen);\n const [contentHeight, setContentHeight] = useState<number>(0);\n const [stackHistory, setStackHistory] = useState<ActionStack[]>([]);\n const [currentActionStack, setCurrentActionStack] = useState<ActionStack>({\n title,\n actions,\n key: null,\n previousKey: null,\n });\n const contentRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n const { isClosing, handleClose } = useIsClosing({ onClose, overlayRef });\n\n const currentActions = currentActionStack.actions || [];\n const hasActions = currentActions && currentActions.length > 0;\n const hasContent = children || hasActions || showCancel;\n const isInSubmenu = stackHistory.length > 0;\n\n function handleSubmenuOpen(key: string) {\n const action = currentActions.find((action) => action.key === key);\n if (!action) {\n console.error(`Action with key ${key} not found`);\n return;\n }\n\n setStackHistory((prevStackHistory) => [\n ...prevStackHistory,\n currentActionStack,\n ]);\n setCurrentActionStack((prevStack) => ({\n title: action.label,\n actions: action.children,\n key: action.key,\n previousKey: prevStack.key,\n }));\n }\n\n function handleBack() {\n if (stackHistory.length > 0) {\n const previousStack = stackHistory[stackHistory.length - 1];\n setCurrentActionStack(previousStack);\n setStackHistory(stackHistory.slice(0, -1));\n }\n }\n\n // Re-measure the open menu's content height when stack history changes\n useEffect(() => {\n if (!isOpen) return;\n\n requestAnimationFrame(() => {\n if (contentRef.current) {\n setContentHeight(contentRef.current.scrollHeight + 12);\n }\n });\n }, [isOpen, stackHistory, hasContent]);\n\n // Reset content height when menu closes or is closing\n useEffect(() => {\n if (!isOpen || isClosing) {\n setContentHeight(0);\n }\n }, [isOpen, isClosing]);\n\n if (!isOpen && !isClosing) return null;\n\n return (\n <ScreenOverlay fadeIn ref={overlayRef}>\n <DropdownMenu.Root\n modal\n open={isOpen}\n onOpenChange={(open) => {\n if (!open) handleClose();\n }}\n >\n <DropdownMenu.Trigger asChild>\n {/* No visible trigger, menu is controlled by isOpen */}\n <div>{\"\"}</div>\n </DropdownMenu.Trigger>\n\n <div\n className=\"proton-ActionMenu__background-wrapper\"\n style={{ opacity: isClosing ? 0 : 1 }}\n >\n <div\n data-testid={testId || \"ActionMenu-wrapper\"}\n className=\"proton-ActionMenu__wrapper\"\n >\n <div\n className=\"proton-ActionMenu__card\"\n data-testid=\"ActionMenu-content\"\n style={{ height: `${contentHeight}px` }}\n >\n <div ref={menuRef} className=\"proton-ActionMenu__menu\">\n <DropdownMenu.Content loop sideOffset={8} ref={contentRef}>\n {hasContent && (\n <>\n {children && (\n <div className=\"proton-ActionMenu__content\">\n {typeof children === \"function\"\n ? children({ close: handleClose })\n : children}\n </div>\n )}\n\n {hasActions && (\n <ActionMenuList\n actions={currentActions}\n selectionMode={selectionMode}\n selectedKeys={selectedKeys}\n onSelectionChange={onSelectionChange}\n disabledKeys={disabledKeys}\n handleSubmenuOpen={handleSubmenuOpen}\n title={currentActionStack.title}\n isInSubmenu={isInSubmenu}\n handleBack={handleBack}\n previousMenuTitle={\n stackHistory[stackHistory.length - 1]?.title\n }\n />\n )}\n\n {showCancel && (\n <>\n <DropdownMenu.Separator />\n <DropdownMenu.Item className=\"proton-ActionMenu__cancel-button\">\n <Button\n data-testid=\"ActionMenuItem-cancel\"\n onPress={handleClose}\n fullWidth\n variant=\"secondary\"\n >\n {cancelButtonText}\n </Button>\n </DropdownMenu.Item>\n </>\n )}\n </>\n )}\n </DropdownMenu.Content>\n </div>\n </div>\n </div>\n </div>\n </DropdownMenu.Root>\n </ScreenOverlay>\n );\n};\n\ninterface ActionMenuListProps {\n actions: ActionMenuAction[];\n selectionMode: ActionMenuSelectionMode;\n selectedKeys?: string[];\n onSelectionChange?: (keys: Selection) => void;\n disabledKeys?: string[];\n handleSubmenuOpen: (key: string) => void;\n title?: ReactNode;\n isInSubmenu?: boolean;\n handleBack?: () => void;\n previousMenuTitle?: ReactNode;\n}\n\nconst ActionMenuList = ({\n actions,\n selectionMode,\n selectedKeys = [],\n onSelectionChange,\n disabledKeys = [],\n handleSubmenuOpen,\n title,\n isInSubmenu = false,\n handleBack,\n previousMenuTitle,\n}: ActionMenuListProps) => {\n const ActionMenuItemMap = () => (\n <>\n {isInSubmenu && handleBack && (\n <div className=\"proton-ActionMenu__back-button-container\">\n <DropdownMenu.Item\n className=\"proton-ActionMenu__back-button\"\n onSelect={(event) => {\n event.preventDefault();\n handleBack();\n }}\n aria-label={`Go back to ${previousMenuTitle || \"previous menu\"}`}\n >\n <Icon id=\"chevron-left\" size={16} aria-hidden=\"true\" />\n </DropdownMenu.Item>\n <div\n className=\"proton-ActionMenu__title\"\n role=\"banner\"\n aria-label={isInSubmenu ? `Submenu: ${title}` : `Menu: ${title}`}\n >\n <span>{title}</span>\n </div>\n <DropdownMenu.Separator />\n </div>\n )}\n\n {actions.map((action, i) => {\n const itemProps = actions[i];\n return (\n <ActionMenuItem\n key={action.key}\n item={action}\n isSubmenu={Boolean(itemProps.children?.length)}\n selectionMode={selectionMode}\n onSelectionChange={onSelectionChange}\n selectedKeys={selectedKeys}\n disabledKeys={disabledKeys}\n handleSubmenuOpen={handleSubmenuOpen}\n />\n );\n })}\n </>\n );\n\n return (\n <div\n aria-disabled={selectionMode === \"none\"}\n className=\"proton-ActionMenu__list\"\n role=\"menu\"\n aria-label={\n title ? `${isInSubmenu ? \"Submenu\" : \"Menu\"}: ${title}` : \"Action menu\"\n }\n aria-orientation=\"vertical\"\n >\n {selectionMode === \"single\" ? (\n <DropdownMenu.RadioGroup\n value={selectedKeys?.[0] || \"\"}\n onValueChange={(value) => {\n // Check if this is a submenu item - if so, don't trigger selection change\n const action = actions.find((action) => action.key === value);\n if (action?.children?.length) {\n return;\n }\n\n if (onSelectionChange) {\n onSelectionChange(new Set([value]));\n }\n }}\n >\n <ActionMenuItemMap />\n </DropdownMenu.RadioGroup>\n ) : (\n <DropdownMenu.Group>\n <ActionMenuItemMap />\n </DropdownMenu.Group>\n )}\n </div>\n );\n};\n\ninterface ActionMenuItemProps {\n to?: string;\n item: ActionMenuAction;\n isSubmenu?: boolean;\n selectionMode: ActionMenuSelectionMode;\n onSelectionChange?: (keys: Selection) => void;\n selectedKeys?: string[];\n disabledKeys?: string[];\n handleSubmenuOpen: (key: string) => void;\n}\n\nconst ActionMenuItem = ({\n item,\n isSubmenu,\n selectionMode,\n onSelectionChange,\n selectedKeys = [],\n disabledKeys = [],\n handleSubmenuOpen,\n}: ActionMenuItemProps) => {\n const ref = useRef(null);\n const isExternal = item.to && isUrlExternal(item.to);\n const isDisabled = disabledKeys.includes(item.key);\n const isSelected = selectedKeys.includes(item.key);\n\n const radixItemProps = {\n className: \"proton-ActionMenu__item\",\n \"aria-label\": item.label\n ? `${item.label}${item.description ? `, ${item.description}` : \"\"}`\n : `ActionMenu-Item-${item.key}`,\n role: \"menuitem\",\n disabled: isDisabled,\n ref,\n };\n\n const onSelect = (event: Event) => {\n if (item?.children?.length) {\n event.preventDefault();\n handleSubmenuOpen(item.key);\n return;\n }\n if (item.onAction) {\n item.onAction(item.key);\n }\n };\n\n const content = (\n <>\n <div className=\"proton-ActionMenu__item-content\">\n <div className=\"proton-ActionMenu__item-label\">{item.label}</div>\n {item.description && (\n <div className=\"proton-ActionMenu__description\">\n {item.description}\n </div>\n )}\n </div>\n {isSubmenu && <Icon id=\"chevron-right\" size={16} aria-hidden=\"true\" />}\n </>\n );\n\n if (item.to) {\n return (\n <DropdownMenu.Item {...radixItemProps} key={item.key} asChild>\n <a\n aria-label={\n item.label\n ? `${item.label}${item.description ? `, ${item.description}` : \"\"}`\n : `ActionMenu-Item-${item.key}`\n }\n aria-disabled={isDisabled}\n aria-checked={isSelected}\n aria-expanded={isSubmenu ? false : undefined}\n href={item.to}\n target={isExternal ? \"_blank\" : undefined}\n rel={isExternal ? \"noopener noreferrer\" : undefined}\n onClick={(e: React.MouseEvent<HTMLAnchorElement>) => {\n if (isExternal || !item.to) {\n return;\n }\n handleInternalNavigation(e, item.to);\n }}\n >\n {content}\n </a>\n </DropdownMenu.Item>\n );\n }\n\n if (selectionMode === \"multiple\") {\n return (\n <DropdownMenu.CheckboxItem\n {...radixItemProps}\n key={item.key}\n checked={isSelected}\n onSelect={onSelect}\n onCheckedChange={(checked: boolean) => {\n if (!onSelectionChange) return;\n\n const currentKeys = new Set(selectedKeys);\n if (checked) {\n currentKeys.add(item.key);\n } else {\n currentKeys.delete(item.key);\n }\n onSelectionChange(currentKeys);\n }}\n >\n {content}\n </DropdownMenu.CheckboxItem>\n );\n }\n\n return (\n <DropdownMenu.RadioItem\n {...radixItemProps}\n value={item.key}\n key={item.key}\n aria-checked={isSelected}\n aria-expanded={isSubmenu ? false : undefined}\n onSelect={onSelect}\n >\n {content}\n </DropdownMenu.RadioItem>\n );\n};\n"],"names":["ActionMenu","isOpen","actions","children","showCancel","cancelButtonText","selectionMode","selectedKeys","disabledKeys","onSelectionChange","onClose","title","testId","useLockBodyScroll","contentHeight","setContentHeight","useState","stackHistory","setStackHistory","currentActionStack","setCurrentActionStack","contentRef","useRef","menuRef","overlayRef","isClosing","handleClose","useIsClosing","currentActions","hasActions","hasContent","isInSubmenu","handleSubmenuOpen","key","action","prevStackHistory","prevStack","handleBack","previousStack","useEffect","jsx","ScreenOverlay","jsxs","DropdownMenu","open","Fragment","ActionMenuList","_a","Button","previousMenuTitle","ActionMenuItemMap","event","Icon","i","itemProps","ActionMenuItem","value","item","isSubmenu","ref","isExternal","isUrlExternal","isDisabled","isSelected","radixItemProps","onSelect","content","createElement","e","handleInternalNavigation","checked","currentKeys"],"mappings":"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"}
1
+ {"version":3,"file":"ActionMenu.cjs.js","sources":["../../../src/components/ActionMenu/ActionMenu.tsx"],"sourcesContent":["\"use client\";\n\nimport { ReactNode, useEffect, useRef, useState } from \"react\";\nimport type { Selection } from \"@react-types/shared\";\n\nimport { useIsClosing } from \"../../hooks/useIsClosing\";\nimport { useLockBodyScroll } from \"../../hooks/useLockBodyScroll\";\nimport { handleInternalNavigation, isUrlExternal } from \"../../utils\";\n\nimport { Button } from \"../Button/Button\";\nimport { ScreenOverlay } from \"../ScreenOverlay/ScreenOverlay\";\nimport { DropdownMenu } from \"radix-ui\";\nimport { Icon } from \"../Icon/Icon\";\n\nimport \"./ActionMenu.css\";\n\nexport interface ActionMenuAction {\n key: string;\n label?: ReactNode;\n description?: ReactNode;\n to?: string;\n onAction?: (key: string) => void;\n children?: ActionMenuAction[];\n}\n\nexport type ActionMenuSelectionMode = \"single\" | \"multiple\" | \"none\";\n\nexport interface ActionMenuProps {\n /** The actions of the menu\n * - type {@link ActionMenuAction}[]\n */\n actions?: ActionMenuAction[];\n\n /** The text of the cancel button */\n cancelButtonText?: string;\n\n /** The children of the menu */\n children?: ReactNode | ((props: { close: () => void }) => ReactNode);\n\n /** The test id of the menu */\n \"data-testid\"?: string;\n\n /** The keys of the disabled items\n * @default []\n */\n disabledKeys?: string[];\n\n /** Whether the menu is open\n * @default false\n */\n isOpen: boolean;\n\n /** The callback function to close the menu */\n onClose?: () => void;\n\n /** The callback function to change the selection\n * - type {@link Selection}\n */\n onSelectionChange?: (keys: Selection) => void;\n\n /** The selection mode of the menu\n * @default \"single\"\n */\n selectionMode?: ActionMenuSelectionMode;\n\n /** The keys of the selected items */\n selectedKeys?: string[];\n\n /** Whether to show the cancel button */\n showCancel?: boolean;\n\n /** The title of the menu */\n title?: string;\n}\n\ntype ActionStack = {\n title: ReactNode | null;\n actions: ActionMenuAction[];\n key: string | null;\n previousKey: string | null;\n};\n\n/**\n * A controlled ActionMenu to display a menu of actions.\n * Renders a list of actions as a focusable menu, or non-focusable children.\n *\n * API:\n * - {@link ActionMenuProps}\n */\nexport const ActionMenu = ({\n isOpen,\n actions = [],\n children,\n showCancel = true,\n cancelButtonText = \"Cancel\",\n selectionMode = \"single\",\n selectedKeys,\n disabledKeys = [],\n onSelectionChange,\n onClose,\n title,\n \"data-testid\": testId,\n}: ActionMenuProps) => {\n useLockBodyScroll(isOpen);\n const [contentHeight, setContentHeight] = useState<number>(0);\n const [stackHistory, setStackHistory] = useState<ActionStack[]>([]);\n const [currentActionStack, setCurrentActionStack] = useState<ActionStack>({\n title,\n actions,\n key: null,\n previousKey: null,\n });\n const contentRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n const { isClosing, handleClose } = useIsClosing({ onClose, overlayRef });\n\n const currentActions = currentActionStack.actions || [];\n const hasActions = currentActions && currentActions.length > 0;\n const hasContent = children || hasActions || showCancel;\n const isInSubmenu = stackHistory.length > 0;\n\n function handleSubmenuOpen(key: string) {\n const action = currentActions.find((action) => action.key === key);\n if (!action) {\n console.error(`Action with key ${key} not found`);\n return;\n }\n\n setStackHistory((prevStackHistory) => [\n ...prevStackHistory,\n currentActionStack,\n ]);\n setCurrentActionStack((prevStack) => ({\n title: action.label,\n actions: action.children,\n key: action.key,\n previousKey: prevStack.key,\n }));\n }\n\n function handleBack() {\n if (stackHistory.length > 0) {\n const previousStack = stackHistory[stackHistory.length - 1];\n setCurrentActionStack(previousStack);\n setStackHistory(stackHistory.slice(0, -1));\n }\n }\n\n // Re-measure the open menu's content height when stack history changes\n useEffect(() => {\n if (!isOpen) return;\n\n requestAnimationFrame(() => {\n if (contentRef.current) {\n setContentHeight(contentRef.current.scrollHeight + 12);\n }\n });\n }, [isOpen, stackHistory, hasContent]);\n\n // Reset content height when menu closes or is closing\n useEffect(() => {\n if (!isOpen || isClosing) {\n setContentHeight(0);\n }\n }, [isOpen, isClosing]);\n\n if (!isOpen && !isClosing) return null;\n\n return (\n <ScreenOverlay fadeIn ref={overlayRef}>\n <DropdownMenu.Root\n modal\n open={isOpen}\n onOpenChange={(open) => {\n if (!open) handleClose();\n }}\n >\n <DropdownMenu.Trigger asChild>\n {/* No visible trigger, menu is controlled by isOpen */}\n <div>{\"\"}</div>\n </DropdownMenu.Trigger>\n\n <div\n className=\"proton-ActionMenu__background-wrapper\"\n style={{ opacity: isClosing ? 0 : 1 }}\n >\n <div\n data-testid={testId || \"ActionMenu-wrapper\"}\n className=\"proton-ActionMenu__wrapper\"\n >\n <div\n className=\"proton-ActionMenu__card\"\n data-testid=\"ActionMenu-content\"\n style={{ height: `${contentHeight}px` }}\n >\n <div ref={menuRef} className=\"proton-ActionMenu__menu\">\n <DropdownMenu.Content loop sideOffset={8} ref={contentRef}>\n {hasContent && (\n <>\n {children && (\n <div className=\"proton-ActionMenu__content\">\n {typeof children === \"function\"\n ? children({ close: handleClose })\n : children}\n </div>\n )}\n\n {hasActions && (\n <ActionMenuList\n actions={currentActions}\n selectionMode={selectionMode}\n selectedKeys={selectedKeys}\n onSelectionChange={onSelectionChange}\n disabledKeys={disabledKeys}\n handleSubmenuOpen={handleSubmenuOpen}\n title={currentActionStack.title}\n isInSubmenu={isInSubmenu}\n handleBack={handleBack}\n previousMenuTitle={\n stackHistory[stackHistory.length - 1]?.title\n }\n />\n )}\n\n {showCancel && (\n <>\n <DropdownMenu.Separator />\n <DropdownMenu.Item className=\"proton-ActionMenu__cancel-button\">\n <Button\n data-testid=\"ActionMenuItem-cancel\"\n onPress={handleClose}\n fullWidth\n variant=\"secondary\"\n >\n {cancelButtonText}\n </Button>\n </DropdownMenu.Item>\n </>\n )}\n </>\n )}\n </DropdownMenu.Content>\n </div>\n </div>\n </div>\n </div>\n </DropdownMenu.Root>\n </ScreenOverlay>\n );\n};\n\ninterface ActionMenuListProps {\n actions: ActionMenuAction[];\n selectionMode: ActionMenuSelectionMode;\n selectedKeys?: string[];\n onSelectionChange?: (keys: Selection) => void;\n disabledKeys?: string[];\n handleSubmenuOpen: (key: string) => void;\n title?: ReactNode;\n isInSubmenu?: boolean;\n handleBack?: () => void;\n previousMenuTitle?: ReactNode;\n}\n\nconst ActionMenuList = ({\n actions,\n selectionMode,\n selectedKeys = [],\n onSelectionChange,\n disabledKeys = [],\n handleSubmenuOpen,\n title,\n isInSubmenu = false,\n handleBack,\n previousMenuTitle,\n}: ActionMenuListProps) => {\n const ActionMenuItemMap = () => (\n <>\n {isInSubmenu && handleBack && (\n <div className=\"proton-ActionMenu__back-button-container\">\n <DropdownMenu.Item\n className=\"proton-ActionMenu__back-button\"\n onSelect={(event) => {\n event.preventDefault();\n handleBack();\n }}\n aria-label={`Go back to ${previousMenuTitle || \"previous menu\"}`}\n >\n <Icon id=\"chevron-left\" size={16} aria-hidden=\"true\" />\n </DropdownMenu.Item>\n <div\n className=\"proton-ActionMenu__title\"\n role=\"banner\"\n aria-label={isInSubmenu ? `Submenu: ${title}` : `Menu: ${title}`}\n >\n <span>{title}</span>\n </div>\n <DropdownMenu.Separator />\n </div>\n )}\n\n {actions.map((action, i) => {\n const itemProps = actions[i];\n return (\n <ActionMenuItem\n key={action.key}\n item={action}\n isSubmenu={Boolean(itemProps.children?.length)}\n selectionMode={selectionMode}\n onSelectionChange={onSelectionChange}\n selectedKeys={selectedKeys}\n disabledKeys={disabledKeys}\n handleSubmenuOpen={handleSubmenuOpen}\n />\n );\n })}\n </>\n );\n\n return (\n <div\n aria-disabled={selectionMode === \"none\"}\n className=\"proton-ActionMenu__list\"\n role=\"menu\"\n aria-label={\n title ? `${isInSubmenu ? \"Submenu\" : \"Menu\"}: ${title}` : \"Action menu\"\n }\n aria-orientation=\"vertical\"\n >\n {selectionMode === \"single\" ? (\n <DropdownMenu.RadioGroup\n value={selectedKeys?.[0] || \"\"}\n onValueChange={(value) => {\n // Check if this is a submenu item - if so, don't trigger selection change\n const action = actions.find((action) => action.key === value);\n if (action?.children?.length) {\n return;\n }\n\n if (onSelectionChange) {\n onSelectionChange(new Set([value]));\n }\n }}\n >\n <ActionMenuItemMap />\n </DropdownMenu.RadioGroup>\n ) : (\n <DropdownMenu.Group>\n <ActionMenuItemMap />\n </DropdownMenu.Group>\n )}\n </div>\n );\n};\n\ninterface ActionMenuItemProps {\n to?: string;\n item: ActionMenuAction;\n isSubmenu?: boolean;\n selectionMode: ActionMenuSelectionMode;\n onSelectionChange?: (keys: Selection) => void;\n selectedKeys?: string[];\n disabledKeys?: string[];\n handleSubmenuOpen: (key: string) => void;\n}\n\nconst ActionMenuItem = ({\n item,\n isSubmenu,\n selectionMode,\n onSelectionChange,\n selectedKeys = [],\n disabledKeys = [],\n handleSubmenuOpen,\n}: ActionMenuItemProps) => {\n const ref = useRef(null);\n const isExternal = item.to && isUrlExternal(item.to);\n const isDisabled = disabledKeys.includes(item.key);\n const isSelected = selectedKeys.includes(item.key);\n\n const radixItemProps = {\n className: \"proton-ActionMenu__item\",\n \"aria-label\": item.label\n ? `${item.label}${item.description ? `, ${item.description}` : \"\"}`\n : `ActionMenu-Item-${item.key}`,\n role: \"menuitem\",\n disabled: isDisabled,\n ref,\n };\n\n const onSelect = (event: Event) => {\n if (item?.children?.length) {\n event.preventDefault();\n handleSubmenuOpen(item.key);\n return;\n }\n if (item.onAction) {\n item.onAction(item.key);\n }\n };\n\n const content = (\n <>\n <div className=\"proton-ActionMenu__item-content\">\n <div className=\"proton-ActionMenu__item-label\">{item.label}</div>\n {item.description && (\n <div className=\"proton-ActionMenu__description\">\n {item.description}\n </div>\n )}\n </div>\n {isSubmenu && <Icon id=\"chevron-right\" size={16} aria-hidden=\"true\" />}\n </>\n );\n\n if (item.to) {\n return (\n <DropdownMenu.Item {...radixItemProps} key={item.key} asChild>\n <a\n aria-label={\n item.label\n ? `${item.label}${item.description ? `, ${item.description}` : \"\"}`\n : `ActionMenu-Item-${item.key}`\n }\n aria-disabled={isDisabled}\n aria-checked={isSelected}\n aria-expanded={isSubmenu ? false : undefined}\n href={item.to}\n target={isExternal ? \"_blank\" : undefined}\n rel={isExternal ? \"noopener noreferrer\" : undefined}\n onClick={(e: React.MouseEvent<HTMLAnchorElement>) => {\n if (isExternal || !item.to) {\n return;\n }\n handleInternalNavigation(e, item.to);\n }}\n >\n {content}\n </a>\n </DropdownMenu.Item>\n );\n }\n\n if (selectionMode === \"multiple\") {\n return (\n <DropdownMenu.CheckboxItem\n {...radixItemProps}\n key={item.key}\n checked={isSelected}\n onSelect={onSelect}\n onCheckedChange={(checked: boolean) => {\n if (!onSelectionChange) return;\n\n const currentKeys = new Set(selectedKeys);\n if (checked) {\n currentKeys.add(item.key);\n } else {\n currentKeys.delete(item.key);\n }\n onSelectionChange(currentKeys);\n }}\n >\n {content}\n </DropdownMenu.CheckboxItem>\n );\n }\n\n return (\n <DropdownMenu.RadioItem\n {...radixItemProps}\n value={item.key}\n key={item.key}\n aria-checked={isSelected}\n aria-expanded={isSubmenu ? false : undefined}\n onSelect={onSelect}\n >\n {content}\n </DropdownMenu.RadioItem>\n );\n};\n"],"names":["ActionMenu","isOpen","actions","children","showCancel","cancelButtonText","selectionMode","selectedKeys","disabledKeys","onSelectionChange","onClose","title","testId","useLockBodyScroll","contentHeight","setContentHeight","useState","stackHistory","setStackHistory","currentActionStack","setCurrentActionStack","contentRef","useRef","menuRef","overlayRef","isClosing","handleClose","useIsClosing","currentActions","hasActions","hasContent","isInSubmenu","handleSubmenuOpen","key","action","prevStackHistory","prevStack","handleBack","previousStack","useEffect","jsx","ScreenOverlay","jsxs","DropdownMenu","open","Fragment","ActionMenuList","_a","Button","previousMenuTitle","ActionMenuItemMap","event","Icon","i","itemProps","ActionMenuItem","value","item","isSubmenu","ref","isExternal","isUrlExternal","isDisabled","isSelected","radixItemProps","onSelect","content","createElement","e","handleInternalNavigation","checked","currentKeys"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ActionMenu.es.js","sources":["../../../src/components/ActionMenu/ActionMenu.tsx"],"sourcesContent":["\"use client\";\n\nimport { ReactNode, useEffect, useRef, useState } from \"react\";\nimport type { Selection } from \"@react-types/shared\";\n\nimport { useIsClosing } from \"../../hooks/useIsClosing\";\nimport { useLockBodyScroll } from \"../../hooks/useLockBodyScroll\";\nimport { handleInternalNavigation, isUrlExternal } from \"../../utils\";\n\nimport { Button } from \"../Button/Button\";\nimport { ScreenOverlay } from \"../ScreenOverlay/ScreenOverlay\";\nimport { DropdownMenu } from \"radix-ui\";\nimport { Icon } from \"../Icon/Icon\";\n\nimport \"./ActionMenu.css\";\n\nexport interface ActionMenuAction {\n key: string;\n label?: ReactNode;\n description?: ReactNode;\n to?: string;\n onAction?: (key: string) => void;\n children?: ActionMenuAction[];\n}\n\nexport type ActionMenuSelectionMode = \"single\" | \"multiple\" | \"none\";\n\nexport interface ActionMenuProps {\n /** The actions of the menu\n * - type {@link ActionMenuAction}[]\n */\n actions?: ActionMenuAction[];\n\n /** The text of the cancel button */\n cancelButtonText?: string;\n\n /** The children of the menu */\n children?: ReactNode | ((props: { close: () => void }) => ReactNode);\n\n /** The test id of the menu */\n \"data-testid\"?: string;\n\n /** The keys of the disabled items\n * @default []\n */\n disabledKeys?: string[];\n\n /** Whether the menu is open\n * @default false\n */\n isOpen: boolean;\n\n /** The callback function to close the menu */\n onClose?: () => void;\n\n /** The callback function to change the selection\n * - type {@link Selection}\n */\n onSelectionChange?: (keys: Selection) => void;\n\n /** The selection mode of the menu\n * @default \"single\"\n */\n selectionMode?: ActionMenuSelectionMode;\n\n /** The keys of the selected items */\n selectedKeys?: string[];\n\n /** Whether to show the cancel button */\n showCancel?: boolean;\n\n /** The title of the menu */\n title?: string;\n}\n\ntype ActionStack = {\n title: ReactNode | null;\n actions: ActionMenuAction[];\n key: string | null;\n previousKey: string | null;\n};\n\n/**\n * A controlled ActionMenu to display a menu of actions.\n * Renders a list of actions as a focusable menu, or non-focusable children.\n *\n * API:\n * - {@link ActionMenuProps}\n */\nexport const ActionMenu = ({\n isOpen,\n actions = [],\n children,\n showCancel = true,\n cancelButtonText = \"Cancel\",\n selectionMode = \"single\",\n selectedKeys,\n disabledKeys = [],\n onSelectionChange,\n onClose,\n title,\n \"data-testid\": testId,\n}: ActionMenuProps) => {\n useLockBodyScroll(isOpen);\n const [contentHeight, setContentHeight] = useState<number>(0);\n const [stackHistory, setStackHistory] = useState<ActionStack[]>([]);\n const [currentActionStack, setCurrentActionStack] = useState<ActionStack>({\n title,\n actions,\n key: null,\n previousKey: null,\n });\n const contentRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n const { isClosing, handleClose } = useIsClosing({ onClose, overlayRef });\n\n const currentActions = currentActionStack.actions || [];\n const hasActions = currentActions && currentActions.length > 0;\n const hasContent = children || hasActions || showCancel;\n const isInSubmenu = stackHistory.length > 0;\n\n function handleSubmenuOpen(key: string) {\n const action = currentActions.find((action) => action.key === key);\n if (!action) {\n console.error(`Action with key ${key} not found`);\n return;\n }\n\n setStackHistory((prevStackHistory) => [\n ...prevStackHistory,\n currentActionStack,\n ]);\n setCurrentActionStack((prevStack) => ({\n title: action.label,\n actions: action.children,\n key: action.key,\n previousKey: prevStack.key,\n }));\n }\n\n function handleBack() {\n if (stackHistory.length > 0) {\n const previousStack = stackHistory[stackHistory.length - 1];\n setCurrentActionStack(previousStack);\n setStackHistory(stackHistory.slice(0, -1));\n }\n }\n\n // Re-measure the open menu's content height when stack history changes\n useEffect(() => {\n if (!isOpen) return;\n\n requestAnimationFrame(() => {\n if (contentRef.current) {\n setContentHeight(contentRef.current.scrollHeight + 12);\n }\n });\n }, [isOpen, stackHistory, hasContent]);\n\n // Reset content height when menu closes or is closing\n useEffect(() => {\n if (!isOpen || isClosing) {\n setContentHeight(0);\n }\n }, [isOpen, isClosing]);\n\n if (!isOpen && !isClosing) return null;\n\n return (\n <ScreenOverlay fadeIn ref={overlayRef}>\n <DropdownMenu.Root\n modal\n open={isOpen}\n onOpenChange={(open) => {\n if (!open) handleClose();\n }}\n >\n <DropdownMenu.Trigger asChild>\n {/* No visible trigger, menu is controlled by isOpen */}\n <div>{\"\"}</div>\n </DropdownMenu.Trigger>\n\n <div\n className=\"proton-ActionMenu__background-wrapper\"\n style={{ opacity: isClosing ? 0 : 1 }}\n >\n <div\n data-testid={testId || \"ActionMenu-wrapper\"}\n className=\"proton-ActionMenu__wrapper\"\n >\n <div\n className=\"proton-ActionMenu__card\"\n data-testid=\"ActionMenu-content\"\n style={{ height: `${contentHeight}px` }}\n >\n <div ref={menuRef} className=\"proton-ActionMenu__menu\">\n <DropdownMenu.Content loop sideOffset={8} ref={contentRef}>\n {hasContent && (\n <>\n {children && (\n <div className=\"proton-ActionMenu__content\">\n {typeof children === \"function\"\n ? children({ close: handleClose })\n : children}\n </div>\n )}\n\n {hasActions && (\n <ActionMenuList\n actions={currentActions}\n selectionMode={selectionMode}\n selectedKeys={selectedKeys}\n onSelectionChange={onSelectionChange}\n disabledKeys={disabledKeys}\n handleSubmenuOpen={handleSubmenuOpen}\n title={currentActionStack.title}\n isInSubmenu={isInSubmenu}\n handleBack={handleBack}\n previousMenuTitle={\n stackHistory[stackHistory.length - 1]?.title\n }\n />\n )}\n\n {showCancel && (\n <>\n <DropdownMenu.Separator />\n <DropdownMenu.Item className=\"proton-ActionMenu__cancel-button\">\n <Button\n data-testid=\"ActionMenuItem-cancel\"\n onPress={handleClose}\n fullWidth\n variant=\"secondary\"\n >\n {cancelButtonText}\n </Button>\n </DropdownMenu.Item>\n </>\n )}\n </>\n )}\n </DropdownMenu.Content>\n </div>\n </div>\n </div>\n </div>\n </DropdownMenu.Root>\n </ScreenOverlay>\n );\n};\n\ninterface ActionMenuListProps {\n actions: ActionMenuAction[];\n selectionMode: ActionMenuSelectionMode;\n selectedKeys?: string[];\n onSelectionChange?: (keys: Selection) => void;\n disabledKeys?: string[];\n handleSubmenuOpen: (key: string) => void;\n title?: ReactNode;\n isInSubmenu?: boolean;\n handleBack?: () => void;\n previousMenuTitle?: ReactNode;\n}\n\nconst ActionMenuList = ({\n actions,\n selectionMode,\n selectedKeys = [],\n onSelectionChange,\n disabledKeys = [],\n handleSubmenuOpen,\n title,\n isInSubmenu = false,\n handleBack,\n previousMenuTitle,\n}: ActionMenuListProps) => {\n const ActionMenuItemMap = () => (\n <>\n {isInSubmenu && handleBack && (\n <div className=\"proton-ActionMenu__back-button-container\">\n <DropdownMenu.Item\n className=\"proton-ActionMenu__back-button\"\n onSelect={(event) => {\n event.preventDefault();\n handleBack();\n }}\n aria-label={`Go back to ${previousMenuTitle || \"previous menu\"}`}\n >\n <Icon id=\"chevron-left\" size={16} aria-hidden=\"true\" />\n </DropdownMenu.Item>\n <div\n className=\"proton-ActionMenu__title\"\n role=\"banner\"\n aria-label={isInSubmenu ? `Submenu: ${title}` : `Menu: ${title}`}\n >\n <span>{title}</span>\n </div>\n <DropdownMenu.Separator />\n </div>\n )}\n\n {actions.map((action, i) => {\n const itemProps = actions[i];\n return (\n <ActionMenuItem\n key={action.key}\n item={action}\n isSubmenu={Boolean(itemProps.children?.length)}\n selectionMode={selectionMode}\n onSelectionChange={onSelectionChange}\n selectedKeys={selectedKeys}\n disabledKeys={disabledKeys}\n handleSubmenuOpen={handleSubmenuOpen}\n />\n );\n })}\n </>\n );\n\n return (\n <div\n aria-disabled={selectionMode === \"none\"}\n className=\"proton-ActionMenu__list\"\n role=\"menu\"\n aria-label={\n title ? `${isInSubmenu ? \"Submenu\" : \"Menu\"}: ${title}` : \"Action menu\"\n }\n aria-orientation=\"vertical\"\n >\n {selectionMode === \"single\" ? (\n <DropdownMenu.RadioGroup\n value={selectedKeys?.[0] || \"\"}\n onValueChange={(value) => {\n // Check if this is a submenu item - if so, don't trigger selection change\n const action = actions.find((action) => action.key === value);\n if (action?.children?.length) {\n return;\n }\n\n if (onSelectionChange) {\n onSelectionChange(new Set([value]));\n }\n }}\n >\n <ActionMenuItemMap />\n </DropdownMenu.RadioGroup>\n ) : (\n <DropdownMenu.Group>\n <ActionMenuItemMap />\n </DropdownMenu.Group>\n )}\n </div>\n );\n};\n\ninterface ActionMenuItemProps {\n to?: string;\n item: ActionMenuAction;\n isSubmenu?: boolean;\n selectionMode: ActionMenuSelectionMode;\n onSelectionChange?: (keys: Selection) => void;\n selectedKeys?: string[];\n disabledKeys?: string[];\n handleSubmenuOpen: (key: string) => void;\n}\n\nconst ActionMenuItem = ({\n item,\n isSubmenu,\n selectionMode,\n onSelectionChange,\n selectedKeys = [],\n disabledKeys = [],\n handleSubmenuOpen,\n}: ActionMenuItemProps) => {\n const ref = useRef(null);\n const isExternal = item.to && isUrlExternal(item.to);\n const isDisabled = disabledKeys.includes(item.key);\n const isSelected = selectedKeys.includes(item.key);\n\n const radixItemProps = {\n className: \"proton-ActionMenu__item\",\n \"aria-label\": item.label\n ? `${item.label}${item.description ? `, ${item.description}` : \"\"}`\n : `ActionMenu-Item-${item.key}`,\n role: \"menuitem\",\n disabled: isDisabled,\n ref,\n };\n\n const onSelect = (event: Event) => {\n if (item?.children?.length) {\n event.preventDefault();\n handleSubmenuOpen(item.key);\n return;\n }\n if (item.onAction) {\n item.onAction(item.key);\n }\n };\n\n const content = (\n <>\n <div className=\"proton-ActionMenu__item-content\">\n <div className=\"proton-ActionMenu__item-label\">{item.label}</div>\n {item.description && (\n <div className=\"proton-ActionMenu__description\">\n {item.description}\n </div>\n )}\n </div>\n {isSubmenu && <Icon id=\"chevron-right\" size={16} aria-hidden=\"true\" />}\n </>\n );\n\n if (item.to) {\n return (\n <DropdownMenu.Item {...radixItemProps} key={item.key} asChild>\n <a\n aria-label={\n item.label\n ? `${item.label}${item.description ? `, ${item.description}` : \"\"}`\n : `ActionMenu-Item-${item.key}`\n }\n aria-disabled={isDisabled}\n aria-checked={isSelected}\n aria-expanded={isSubmenu ? false : undefined}\n href={item.to}\n target={isExternal ? \"_blank\" : undefined}\n rel={isExternal ? \"noopener noreferrer\" : undefined}\n onClick={(e: React.MouseEvent<HTMLAnchorElement>) => {\n if (isExternal || !item.to) {\n return;\n }\n handleInternalNavigation(e, item.to);\n }}\n >\n {content}\n </a>\n </DropdownMenu.Item>\n );\n }\n\n if (selectionMode === \"multiple\") {\n return (\n <DropdownMenu.CheckboxItem\n {...radixItemProps}\n key={item.key}\n checked={isSelected}\n onSelect={onSelect}\n onCheckedChange={(checked: boolean) => {\n if (!onSelectionChange) return;\n\n const currentKeys = new Set(selectedKeys);\n if (checked) {\n currentKeys.add(item.key);\n } else {\n currentKeys.delete(item.key);\n }\n onSelectionChange(currentKeys);\n }}\n >\n {content}\n </DropdownMenu.CheckboxItem>\n );\n }\n\n return (\n <DropdownMenu.RadioItem\n {...radixItemProps}\n value={item.key}\n key={item.key}\n aria-checked={isSelected}\n aria-expanded={isSubmenu ? false : undefined}\n onSelect={onSelect}\n >\n {content}\n </DropdownMenu.RadioItem>\n );\n};\n"],"names":["ActionMenu","isOpen","actions","children","showCancel","cancelButtonText","selectionMode","selectedKeys","disabledKeys","onSelectionChange","onClose","title","testId","useLockBodyScroll","contentHeight","setContentHeight","useState","stackHistory","setStackHistory","currentActionStack","setCurrentActionStack","contentRef","useRef","menuRef","overlayRef","isClosing","handleClose","useIsClosing","currentActions","hasActions","hasContent","isInSubmenu","handleSubmenuOpen","key","action","prevStackHistory","prevStack","handleBack","previousStack","useEffect","jsx","ScreenOverlay","jsxs","DropdownMenu","open","Fragment","ActionMenuList","_a","Button","previousMenuTitle","ActionMenuItemMap","event","Icon","i","itemProps","ActionMenuItem","value","item","isSubmenu","ref","isExternal","isUrlExternal","isDisabled","isSelected","radixItemProps","onSelect","content","createElement","e","handleInternalNavigation","checked","currentKeys"],"mappings":"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"}
1
+ {"version":3,"file":"ActionMenu.es.js","sources":["../../../src/components/ActionMenu/ActionMenu.tsx"],"sourcesContent":["\"use client\";\n\nimport { ReactNode, useEffect, useRef, useState } from \"react\";\nimport type { Selection } from \"@react-types/shared\";\n\nimport { useIsClosing } from \"../../hooks/useIsClosing\";\nimport { useLockBodyScroll } from \"../../hooks/useLockBodyScroll\";\nimport { handleInternalNavigation, isUrlExternal } from \"../../utils\";\n\nimport { Button } from \"../Button/Button\";\nimport { ScreenOverlay } from \"../ScreenOverlay/ScreenOverlay\";\nimport { DropdownMenu } from \"radix-ui\";\nimport { Icon } from \"../Icon/Icon\";\n\nimport \"./ActionMenu.css\";\n\nexport interface ActionMenuAction {\n key: string;\n label?: ReactNode;\n description?: ReactNode;\n to?: string;\n onAction?: (key: string) => void;\n children?: ActionMenuAction[];\n}\n\nexport type ActionMenuSelectionMode = \"single\" | \"multiple\" | \"none\";\n\nexport interface ActionMenuProps {\n /** The actions of the menu\n * - type {@link ActionMenuAction}[]\n */\n actions?: ActionMenuAction[];\n\n /** The text of the cancel button */\n cancelButtonText?: string;\n\n /** The children of the menu */\n children?: ReactNode | ((props: { close: () => void }) => ReactNode);\n\n /** The test id of the menu */\n \"data-testid\"?: string;\n\n /** The keys of the disabled items\n * @default []\n */\n disabledKeys?: string[];\n\n /** Whether the menu is open\n * @default false\n */\n isOpen: boolean;\n\n /** The callback function to close the menu */\n onClose?: () => void;\n\n /** The callback function to change the selection\n * - type {@link Selection}\n */\n onSelectionChange?: (keys: Selection) => void;\n\n /** The selection mode of the menu\n * @default \"single\"\n */\n selectionMode?: ActionMenuSelectionMode;\n\n /** The keys of the selected items */\n selectedKeys?: string[];\n\n /** Whether to show the cancel button */\n showCancel?: boolean;\n\n /** The title of the menu */\n title?: string;\n}\n\ntype ActionStack = {\n title: ReactNode | null;\n actions: ActionMenuAction[];\n key: string | null;\n previousKey: string | null;\n};\n\n/**\n * A controlled ActionMenu to display a menu of actions.\n * Renders a list of actions as a focusable menu, or non-focusable children.\n *\n * API:\n * - {@link ActionMenuProps}\n */\nexport const ActionMenu = ({\n isOpen,\n actions = [],\n children,\n showCancel = true,\n cancelButtonText = \"Cancel\",\n selectionMode = \"single\",\n selectedKeys,\n disabledKeys = [],\n onSelectionChange,\n onClose,\n title,\n \"data-testid\": testId,\n}: ActionMenuProps) => {\n useLockBodyScroll(isOpen);\n const [contentHeight, setContentHeight] = useState<number>(0);\n const [stackHistory, setStackHistory] = useState<ActionStack[]>([]);\n const [currentActionStack, setCurrentActionStack] = useState<ActionStack>({\n title,\n actions,\n key: null,\n previousKey: null,\n });\n const contentRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n const { isClosing, handleClose } = useIsClosing({ onClose, overlayRef });\n\n const currentActions = currentActionStack.actions || [];\n const hasActions = currentActions && currentActions.length > 0;\n const hasContent = children || hasActions || showCancel;\n const isInSubmenu = stackHistory.length > 0;\n\n function handleSubmenuOpen(key: string) {\n const action = currentActions.find((action) => action.key === key);\n if (!action) {\n console.error(`Action with key ${key} not found`);\n return;\n }\n\n setStackHistory((prevStackHistory) => [\n ...prevStackHistory,\n currentActionStack,\n ]);\n setCurrentActionStack((prevStack) => ({\n title: action.label,\n actions: action.children,\n key: action.key,\n previousKey: prevStack.key,\n }));\n }\n\n function handleBack() {\n if (stackHistory.length > 0) {\n const previousStack = stackHistory[stackHistory.length - 1];\n setCurrentActionStack(previousStack);\n setStackHistory(stackHistory.slice(0, -1));\n }\n }\n\n // Re-measure the open menu's content height when stack history changes\n useEffect(() => {\n if (!isOpen) return;\n\n requestAnimationFrame(() => {\n if (contentRef.current) {\n setContentHeight(contentRef.current.scrollHeight + 12);\n }\n });\n }, [isOpen, stackHistory, hasContent]);\n\n // Reset content height when menu closes or is closing\n useEffect(() => {\n if (!isOpen || isClosing) {\n setContentHeight(0);\n }\n }, [isOpen, isClosing]);\n\n if (!isOpen && !isClosing) return null;\n\n return (\n <ScreenOverlay fadeIn ref={overlayRef}>\n <DropdownMenu.Root\n modal\n open={isOpen}\n onOpenChange={(open) => {\n if (!open) handleClose();\n }}\n >\n <DropdownMenu.Trigger asChild>\n {/* No visible trigger, menu is controlled by isOpen */}\n <div>{\"\"}</div>\n </DropdownMenu.Trigger>\n\n <div\n className=\"proton-ActionMenu__background-wrapper\"\n style={{ opacity: isClosing ? 0 : 1 }}\n >\n <div\n data-testid={testId || \"ActionMenu-wrapper\"}\n className=\"proton-ActionMenu__wrapper\"\n >\n <div\n className=\"proton-ActionMenu__card\"\n data-testid=\"ActionMenu-content\"\n style={{ height: `${contentHeight}px` }}\n >\n <div ref={menuRef} className=\"proton-ActionMenu__menu\">\n <DropdownMenu.Content loop sideOffset={8} ref={contentRef}>\n {hasContent && (\n <>\n {children && (\n <div className=\"proton-ActionMenu__content\">\n {typeof children === \"function\"\n ? children({ close: handleClose })\n : children}\n </div>\n )}\n\n {hasActions && (\n <ActionMenuList\n actions={currentActions}\n selectionMode={selectionMode}\n selectedKeys={selectedKeys}\n onSelectionChange={onSelectionChange}\n disabledKeys={disabledKeys}\n handleSubmenuOpen={handleSubmenuOpen}\n title={currentActionStack.title}\n isInSubmenu={isInSubmenu}\n handleBack={handleBack}\n previousMenuTitle={\n stackHistory[stackHistory.length - 1]?.title\n }\n />\n )}\n\n {showCancel && (\n <>\n <DropdownMenu.Separator />\n <DropdownMenu.Item className=\"proton-ActionMenu__cancel-button\">\n <Button\n data-testid=\"ActionMenuItem-cancel\"\n onPress={handleClose}\n fullWidth\n variant=\"secondary\"\n >\n {cancelButtonText}\n </Button>\n </DropdownMenu.Item>\n </>\n )}\n </>\n )}\n </DropdownMenu.Content>\n </div>\n </div>\n </div>\n </div>\n </DropdownMenu.Root>\n </ScreenOverlay>\n );\n};\n\ninterface ActionMenuListProps {\n actions: ActionMenuAction[];\n selectionMode: ActionMenuSelectionMode;\n selectedKeys?: string[];\n onSelectionChange?: (keys: Selection) => void;\n disabledKeys?: string[];\n handleSubmenuOpen: (key: string) => void;\n title?: ReactNode;\n isInSubmenu?: boolean;\n handleBack?: () => void;\n previousMenuTitle?: ReactNode;\n}\n\nconst ActionMenuList = ({\n actions,\n selectionMode,\n selectedKeys = [],\n onSelectionChange,\n disabledKeys = [],\n handleSubmenuOpen,\n title,\n isInSubmenu = false,\n handleBack,\n previousMenuTitle,\n}: ActionMenuListProps) => {\n const ActionMenuItemMap = () => (\n <>\n {isInSubmenu && handleBack && (\n <div className=\"proton-ActionMenu__back-button-container\">\n <DropdownMenu.Item\n className=\"proton-ActionMenu__back-button\"\n onSelect={(event) => {\n event.preventDefault();\n handleBack();\n }}\n aria-label={`Go back to ${previousMenuTitle || \"previous menu\"}`}\n >\n <Icon id=\"chevron-left\" size={16} aria-hidden=\"true\" />\n </DropdownMenu.Item>\n <div\n className=\"proton-ActionMenu__title\"\n role=\"banner\"\n aria-label={isInSubmenu ? `Submenu: ${title}` : `Menu: ${title}`}\n >\n <span>{title}</span>\n </div>\n <DropdownMenu.Separator />\n </div>\n )}\n\n {actions.map((action, i) => {\n const itemProps = actions[i];\n return (\n <ActionMenuItem\n key={action.key}\n item={action}\n isSubmenu={Boolean(itemProps.children?.length)}\n selectionMode={selectionMode}\n onSelectionChange={onSelectionChange}\n selectedKeys={selectedKeys}\n disabledKeys={disabledKeys}\n handleSubmenuOpen={handleSubmenuOpen}\n />\n );\n })}\n </>\n );\n\n return (\n <div\n aria-disabled={selectionMode === \"none\"}\n className=\"proton-ActionMenu__list\"\n role=\"menu\"\n aria-label={\n title ? `${isInSubmenu ? \"Submenu\" : \"Menu\"}: ${title}` : \"Action menu\"\n }\n aria-orientation=\"vertical\"\n >\n {selectionMode === \"single\" ? (\n <DropdownMenu.RadioGroup\n value={selectedKeys?.[0] || \"\"}\n onValueChange={(value) => {\n // Check if this is a submenu item - if so, don't trigger selection change\n const action = actions.find((action) => action.key === value);\n if (action?.children?.length) {\n return;\n }\n\n if (onSelectionChange) {\n onSelectionChange(new Set([value]));\n }\n }}\n >\n <ActionMenuItemMap />\n </DropdownMenu.RadioGroup>\n ) : (\n <DropdownMenu.Group>\n <ActionMenuItemMap />\n </DropdownMenu.Group>\n )}\n </div>\n );\n};\n\ninterface ActionMenuItemProps {\n to?: string;\n item: ActionMenuAction;\n isSubmenu?: boolean;\n selectionMode: ActionMenuSelectionMode;\n onSelectionChange?: (keys: Selection) => void;\n selectedKeys?: string[];\n disabledKeys?: string[];\n handleSubmenuOpen: (key: string) => void;\n}\n\nconst ActionMenuItem = ({\n item,\n isSubmenu,\n selectionMode,\n onSelectionChange,\n selectedKeys = [],\n disabledKeys = [],\n handleSubmenuOpen,\n}: ActionMenuItemProps) => {\n const ref = useRef(null);\n const isExternal = item.to && isUrlExternal(item.to);\n const isDisabled = disabledKeys.includes(item.key);\n const isSelected = selectedKeys.includes(item.key);\n\n const radixItemProps = {\n className: \"proton-ActionMenu__item\",\n \"aria-label\": item.label\n ? `${item.label}${item.description ? `, ${item.description}` : \"\"}`\n : `ActionMenu-Item-${item.key}`,\n role: \"menuitem\",\n disabled: isDisabled,\n ref,\n };\n\n const onSelect = (event: Event) => {\n if (item?.children?.length) {\n event.preventDefault();\n handleSubmenuOpen(item.key);\n return;\n }\n if (item.onAction) {\n item.onAction(item.key);\n }\n };\n\n const content = (\n <>\n <div className=\"proton-ActionMenu__item-content\">\n <div className=\"proton-ActionMenu__item-label\">{item.label}</div>\n {item.description && (\n <div className=\"proton-ActionMenu__description\">\n {item.description}\n </div>\n )}\n </div>\n {isSubmenu && <Icon id=\"chevron-right\" size={16} aria-hidden=\"true\" />}\n </>\n );\n\n if (item.to) {\n return (\n <DropdownMenu.Item {...radixItemProps} key={item.key} asChild>\n <a\n aria-label={\n item.label\n ? `${item.label}${item.description ? `, ${item.description}` : \"\"}`\n : `ActionMenu-Item-${item.key}`\n }\n aria-disabled={isDisabled}\n aria-checked={isSelected}\n aria-expanded={isSubmenu ? false : undefined}\n href={item.to}\n target={isExternal ? \"_blank\" : undefined}\n rel={isExternal ? \"noopener noreferrer\" : undefined}\n onClick={(e: React.MouseEvent<HTMLAnchorElement>) => {\n if (isExternal || !item.to) {\n return;\n }\n handleInternalNavigation(e, item.to);\n }}\n >\n {content}\n </a>\n </DropdownMenu.Item>\n );\n }\n\n if (selectionMode === \"multiple\") {\n return (\n <DropdownMenu.CheckboxItem\n {...radixItemProps}\n key={item.key}\n checked={isSelected}\n onSelect={onSelect}\n onCheckedChange={(checked: boolean) => {\n if (!onSelectionChange) return;\n\n const currentKeys = new Set(selectedKeys);\n if (checked) {\n currentKeys.add(item.key);\n } else {\n currentKeys.delete(item.key);\n }\n onSelectionChange(currentKeys);\n }}\n >\n {content}\n </DropdownMenu.CheckboxItem>\n );\n }\n\n return (\n <DropdownMenu.RadioItem\n {...radixItemProps}\n value={item.key}\n key={item.key}\n aria-checked={isSelected}\n aria-expanded={isSubmenu ? false : undefined}\n onSelect={onSelect}\n >\n {content}\n </DropdownMenu.RadioItem>\n );\n};\n"],"names":["ActionMenu","isOpen","actions","children","showCancel","cancelButtonText","selectionMode","selectedKeys","disabledKeys","onSelectionChange","onClose","title","testId","useLockBodyScroll","contentHeight","setContentHeight","useState","stackHistory","setStackHistory","currentActionStack","setCurrentActionStack","contentRef","useRef","menuRef","overlayRef","isClosing","handleClose","useIsClosing","currentActions","hasActions","hasContent","isInSubmenu","handleSubmenuOpen","key","action","prevStackHistory","prevStack","handleBack","previousStack","useEffect","jsx","ScreenOverlay","jsxs","DropdownMenu","open","Fragment","ActionMenuList","_a","Button","previousMenuTitle","ActionMenuItemMap","event","Icon","i","itemProps","ActionMenuItem","value","item","isSubmenu","ref","isExternal","isUrlExternal","isDisabled","isSelected","radixItemProps","onSelect","content","createElement","e","handleInternalNavigation","checked","currentKeys"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.cjs.js","sources":["../../../src/components/Badge/Badge.tsx"],"sourcesContent":["\"use client\";\n\nimport { ReactNode } from \"react\";\nimport { csx } from \"../../utils\";\n\nimport \"./Badge.css\";\n\nexport type BadgeVariant =\n | \"primary\"\n | \"secondary\"\n | \"transparent\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nexport const BadgeVariants: Record<BadgeVariant, BadgeVariant> = {\n primary: \"primary\",\n secondary: \"secondary\",\n transparent: \"transparent\",\n success: \"success\",\n warning: \"warning\",\n danger: \"danger\",\n};\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * The content to display within the badge.\n */\n children: ReactNode;\n /**\n * The badge's visual aesthetic.\n * - type {@link BadgeVariant}\n */\n variant?: BadgeVariant;\n}\n\n/**\n * A badge component for displaying status, categories, or counts with various visual styles.\n *\n * API:\n * - {@link BadgeProps}\n * - extends {@link React.HTMLAttributes}\n */\nexport const Badge = ({ variant, children, ...props }: BadgeProps) => {\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n data-testid={props[\"data-testid\"]}\n className={csx(\"proton-Badge\", variant && `proton-Badge--${variant}`)}\n >\n {children}\n </div>\n );\n};\n"],"names":["BadgeVariants","Badge","variant","children","props","jsx","csx"],"mappings":"0NAeaA,EAAoD,CAC/D,QAAS,UACT,UAAW,YACX,YAAa,cACb,QAAS,UACT,QAAS,UACT,OAAQ,QACV,EAqBaC,EAAQ,CAAC,CAAE,QAAAC,EAAS,SAAAC,EAAU,GAAGC,KAE1CC,EAAAA,kBAAAA,IAAC,MAAA,CACC,KAAK,SACL,YAAU,SACV,cAAaD,EAAM,aAAa,EAChC,UAAWE,EAAAA,IAAI,eAAgBJ,GAAW,iBAAiBA,CAAO,EAAE,EAEnE,SAAAC,CAAA,CAAA"}
1
+ {"version":3,"file":"Badge.cjs.js","sources":["../../../src/components/Badge/Badge.tsx"],"sourcesContent":["\"use client\";\n\nimport { ReactNode } from \"react\";\nimport { csx } from \"../../utils\";\n\nimport \"./Badge.css\";\n\nexport type BadgeVariant =\n | \"primary\"\n | \"secondary\"\n | \"transparent\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nexport const BadgeVariants: Record<BadgeVariant, BadgeVariant> = {\n primary: \"primary\",\n secondary: \"secondary\",\n transparent: \"transparent\",\n success: \"success\",\n warning: \"warning\",\n danger: \"danger\",\n};\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * The content to display within the badge.\n */\n children: ReactNode;\n /**\n * The badge's visual aesthetic.\n * - type {@link BadgeVariant}\n */\n variant?: BadgeVariant;\n}\n\n/**\n * A badge component for displaying status, categories, or counts with various visual styles.\n *\n * API:\n * - {@link BadgeProps}\n * - extends {@link React.HTMLAttributes}\n */\nexport const Badge = ({ variant, children, ...props }: BadgeProps) => {\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n data-testid={props[\"data-testid\"]}\n className={csx(\"proton-Badge\", variant && `proton-Badge--${variant}`)}\n >\n {children}\n </div>\n );\n};\n"],"names":["BadgeVariants","Badge","variant","children","props","jsx","csx"],"mappings":"0NAeaA,EAAoD,CAC/D,QAAS,UACT,UAAW,YACX,YAAa,cACb,QAAS,UACT,QAAS,UACT,OAAQ,QACV,EAqBaC,EAAQ,CAAC,CAAE,QAAAC,EAAS,SAAAC,EAAU,GAAGC,KAE1CC,EAAA,kBAAA,IAAC,MAAA,CACC,KAAK,SACL,YAAU,SACV,cAAaD,EAAM,aAAa,EAChC,UAAWE,EAAI,IAAA,eAAgBJ,GAAW,iBAAiBA,CAAO,EAAE,EAEnE,SAAAC,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.es.js","sources":["../../../src/components/Badge/Badge.tsx"],"sourcesContent":["\"use client\";\n\nimport { ReactNode } from \"react\";\nimport { csx } from \"../../utils\";\n\nimport \"./Badge.css\";\n\nexport type BadgeVariant =\n | \"primary\"\n | \"secondary\"\n | \"transparent\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nexport const BadgeVariants: Record<BadgeVariant, BadgeVariant> = {\n primary: \"primary\",\n secondary: \"secondary\",\n transparent: \"transparent\",\n success: \"success\",\n warning: \"warning\",\n danger: \"danger\",\n};\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * The content to display within the badge.\n */\n children: ReactNode;\n /**\n * The badge's visual aesthetic.\n * - type {@link BadgeVariant}\n */\n variant?: BadgeVariant;\n}\n\n/**\n * A badge component for displaying status, categories, or counts with various visual styles.\n *\n * API:\n * - {@link BadgeProps}\n * - extends {@link React.HTMLAttributes}\n */\nexport const Badge = ({ variant, children, ...props }: BadgeProps) => {\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n data-testid={props[\"data-testid\"]}\n className={csx(\"proton-Badge\", variant && `proton-Badge--${variant}`)}\n >\n {children}\n </div>\n );\n};\n"],"names":["BadgeVariants","Badge","variant","children","props","jsx","csx"],"mappings":";;;AAeO,MAAMA,IAAoD;AAAA,EAC/D,SAAS;AAAA,EACT,WAAW;AAAA,EACX,aAAa;AAAA,EACb,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AACV,GAqBaC,IAAQ,CAAC,EAAE,SAAAC,GAAS,UAAAC,GAAU,GAAGC,QAE1CC,gBAAAA,EAAAA;AAAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,aAAU;AAAA,IACV,eAAaD,EAAM,aAAa;AAAA,IAChC,WAAWE,EAAI,gBAAgBJ,KAAW,iBAAiBA,CAAO,EAAE;AAAA,IAEnE,UAAAC;AAAA,EAAA;AAAA;"}
1
+ {"version":3,"file":"Badge.es.js","sources":["../../../src/components/Badge/Badge.tsx"],"sourcesContent":["\"use client\";\n\nimport { ReactNode } from \"react\";\nimport { csx } from \"../../utils\";\n\nimport \"./Badge.css\";\n\nexport type BadgeVariant =\n | \"primary\"\n | \"secondary\"\n | \"transparent\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nexport const BadgeVariants: Record<BadgeVariant, BadgeVariant> = {\n primary: \"primary\",\n secondary: \"secondary\",\n transparent: \"transparent\",\n success: \"success\",\n warning: \"warning\",\n danger: \"danger\",\n};\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * The content to display within the badge.\n */\n children: ReactNode;\n /**\n * The badge's visual aesthetic.\n * - type {@link BadgeVariant}\n */\n variant?: BadgeVariant;\n}\n\n/**\n * A badge component for displaying status, categories, or counts with various visual styles.\n *\n * API:\n * - {@link BadgeProps}\n * - extends {@link React.HTMLAttributes}\n */\nexport const Badge = ({ variant, children, ...props }: BadgeProps) => {\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n data-testid={props[\"data-testid\"]}\n className={csx(\"proton-Badge\", variant && `proton-Badge--${variant}`)}\n >\n {children}\n </div>\n );\n};\n"],"names":["BadgeVariants","Badge","variant","children","props","jsx","csx"],"mappings":";;;AAeO,MAAMA,IAAoD;AAAA,EAC/D,SAAS;AAAA,EACT,WAAW;AAAA,EACX,aAAa;AAAA,EACb,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AACV,GAqBaC,IAAQ,CAAC,EAAE,SAAAC,GAAS,UAAAC,GAAU,GAAGC,QAE1CC,gBAAAA,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,aAAU;AAAA,IACV,eAAaD,EAAM,aAAa;AAAA,IAChC,WAAWE,EAAI,gBAAgBJ,KAAW,iBAAiBA,CAAO,EAAE;AAAA,IAEnE,UAAAC;AAAA,EAAA;AAAA;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Banner.cjs.js","sources":["../../../src/components/Banner/Banner.tsx"],"sourcesContent":["\"use client\";\n\nimport { ReactNode, createContext, isValidElement, useContext } from \"react\";\nimport { csx } from \"../../utils\";\nimport { Button, type ButtonProps } from \"../Button/Button\";\n\nimport \"./Banner.css\";\n\n//TODO: move svgs to lib and use Icon component\nexport const BANNER_ICONS = {\n success: (\n <svg viewBox=\"0 0 20 20\" height=\"18\" width=\"18\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n ></path>\n </svg>\n ),\n warning: (\n <svg viewBox=\"0 0 56 56\" height=\"17\" width=\"17\">\n <path d=\"M9.59 50.207h36.82c3.516 0 5.719-2.531 5.719-5.719a5.56 5.56 0 0 0-.75-2.812l-18.445-33c-1.055-1.899-2.977-2.883-4.922-2.883c-1.922 0-3.89.984-4.946 2.883L4.645 41.699c-.516.89-.774 1.828-.774 2.79c0 3.187 2.227 5.718 5.719 5.718m18.422-16.055c-1.242 0-1.922-.703-1.969-1.968l-.328-11.578c-.047-1.266.937-2.204 2.273-2.204c1.313 0 2.344.961 2.297 2.227l-.351 11.555c-.047 1.289-.727 1.968-1.922 1.968m0 8.649c-1.36 0-2.625-1.078-2.625-2.532s1.242-2.53 2.625-2.53s2.625 1.054 2.625 2.53c0 1.477-1.266 2.532-2.625 2.532\" />\n </svg>\n ),\n danger: (\n <svg viewBox=\"0 0 20 20\" height=\"18\" width=\"18\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z\"\n ></path>\n </svg>\n ),\n};\n\nexport const BANNER_VARIANTS = {\n default: \"default\",\n success: \"success\",\n warning: \"warning\",\n danger: \"danger\",\n} as const;\nexport type BannerVariant = \"default\" | \"success\" | \"warning\" | \"danger\";\n\nconst BannerContext = createContext<BannerVariant | undefined>(undefined);\n\ninterface BannerIconProps {\n /**\n * Optional custom icon or children for the icon area.\n */\n children?: ReactNode;\n /**\n * The icon to display in the banner.\n * Can be a boolean to conditionally show or hide, or a ReactNode to provide a custom icon.\n */\n icon?: boolean | ReactNode;\n /**\n * The data-testid to display within the banner.\n */\n \"data-testid\"?: string;\n}\n\ninterface BannerProps extends BannerIconProps {\n /**\n * Compact padding around the content of the banner.\n * @default true\n */\n compact?: boolean;\n /**\n * The content to display within the banner.\n */\n children: ReactNode;\n /**\n * The data-testid to display within the banner.\n */\n \"data-testid\"?: string;\n /**\n * Round the corners of the banner.\n * @default true\n */\n rounded?: boolean;\n /**\n * The banner's visual aesthetic.\n * - type {@link BannerVariant}\n */\n variant?: BannerVariant;\n}\n\n/**\n * A banner used to display a success, warning, or error message.\n *\n * API:\n * - {@link BannerProps}\n * - extends {@link BannerIconProps}\n */\nconst Banner = ({\n variant = \"default\",\n rounded = true,\n icon = false,\n compact = true,\n children,\n \"data-testid\": dataTestId,\n}: BannerProps) => {\n return (\n <BannerContext.Provider value={variant}>\n <div\n role=\"status\"\n aria-live=\"polite\"\n className={csx(\n \"proton-Banner\",\n `proton-Banner--${variant}`,\n rounded && \"proton-Banner--rounded\"\n )}\n data-testid={dataTestId}\n >\n <div\n className={csx(\n \"proton-Banner__wrapper\",\n compact && \"proton-Banner__wrapper--compact\"\n )}\n >\n <Banner.Icon icon={icon} />\n <div className=\"proton-Banner__content-wrapper\">\n <div className=\"proton-Banner__container\">{children}</div>\n </div>\n </div>\n </div>\n </BannerContext.Provider>\n );\n};\n\nBanner.displayName = \"Banner\";\n\nconst BannerTitle = ({\n children,\n \"data-testid\": dataTestId,\n}: {\n children: ReactNode;\n \"data-testid\"?: string;\n}) => {\n const variant = useContext(BannerContext);\n if (!variant) throw new Error(\"BannerTitle must be used within a Banner\");\n\n return (\n <h3\n className={csx(\n \"proton-Banner__title\",\n `proton-Banner--${variant}__title`\n )}\n data-testid={dataTestId}\n >\n {children}\n </h3>\n );\n};\n\nBannerTitle.displayName = \"Banner.Title\";\n\nconst BannerContent = ({\n children,\n \"data-testid\": dataTestId,\n}: {\n children: ReactNode;\n \"data-testid\"?: string;\n}) => {\n const variant = useContext(BannerContext);\n if (!variant) throw new Error(\"BannerContent must be used within a Banner\");\n\n return (\n <p\n className={csx(\n \"proton-Banner__content\",\n `proton-Banner--${variant}__content`\n )}\n data-testid={dataTestId}\n >\n {children}\n </p>\n );\n};\n\nBannerContent.displayName = \"Banner.Content\";\n\nfunction getIconContent(icon: ReactNode, variant: BannerVariant) {\n if (isValidElement(icon)) return icon;\n if (icon) return BANNER_ICONS[variant];\n return null;\n}\n\nconst BannerIcon = ({ icon, \"data-testid\": dataTestId }: BannerIconProps) => {\n const variant = useContext(BannerContext);\n if (!variant) throw new Error(\"BannerIcon must be used within a Banner\");\n\n const iconContent = getIconContent(icon, variant);\n if (!iconContent) return null;\n\n return (\n <div\n aria-hidden=\"true\"\n data-testid={dataTestId}\n className={csx(\"proton-Banner__icon\", `proton-Banner--${variant}__icon`)}\n >\n {iconContent}\n </div>\n );\n};\n\nBannerIcon.displayName = \"Banner.Icon\";\n\nconst BannerAction = ({ children, ...buttonProps }: ButtonProps) => {\n return <Button {...buttonProps}>{children}</Button>;\n};\n\nBannerAction.displayName = \"Banner.Action\";\n\nconst BannerActions = ({ children }: { children: ReactNode }) => {\n return <div className=\"proton-Banner__actions\">{children}</div>;\n};\n\nBannerActions.displayName = \"Banner.Actions\";\n\n/**\n * Renders an h3 styled banner.\n */\nBanner.Title = BannerTitle;\n\n/**\n * Renders a p styled banner.\n */\nBanner.Content = BannerContent;\n\n/**\n * Renders an icon inline with the banner title.\n *\n * API:\n * - {@link BannerIconProps}\n */\nBanner.Icon = BannerIcon;\n\n/**\n * Renders a Proton Button.\n * - @prop buttonProps {@link ButtonProps}\n */\nBanner.Action = BannerAction;\n\n/**\n * Renders Proton Buttons in a responsive actions grid.\n */\nBanner.Actions = BannerActions;\n\nexport { Banner };\n"],"names":["BANNER_ICONS","jsx","BANNER_VARIANTS","BannerContext","createContext","Banner","variant","rounded","icon","compact","children","dataTestId","csx","jsxs","BannerTitle","useContext","BannerContent","getIconContent","isValidElement","BannerIcon","iconContent","BannerAction","buttonProps","Button","BannerActions"],"mappings":"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"}
1
+ {"version":3,"file":"Banner.cjs.js","sources":["../../../src/components/Banner/Banner.tsx"],"sourcesContent":["\"use client\";\n\nimport { ReactNode, createContext, isValidElement, useContext } from \"react\";\nimport { csx } from \"../../utils\";\nimport { Button, type ButtonProps } from \"../Button/Button\";\n\nimport \"./Banner.css\";\n\n//TODO: move svgs to lib and use Icon component\nexport const BANNER_ICONS = {\n success: (\n <svg viewBox=\"0 0 20 20\" height=\"18\" width=\"18\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n ></path>\n </svg>\n ),\n warning: (\n <svg viewBox=\"0 0 56 56\" height=\"17\" width=\"17\">\n <path d=\"M9.59 50.207h36.82c3.516 0 5.719-2.531 5.719-5.719a5.56 5.56 0 0 0-.75-2.812l-18.445-33c-1.055-1.899-2.977-2.883-4.922-2.883c-1.922 0-3.89.984-4.946 2.883L4.645 41.699c-.516.89-.774 1.828-.774 2.79c0 3.187 2.227 5.718 5.719 5.718m18.422-16.055c-1.242 0-1.922-.703-1.969-1.968l-.328-11.578c-.047-1.266.937-2.204 2.273-2.204c1.313 0 2.344.961 2.297 2.227l-.351 11.555c-.047 1.289-.727 1.968-1.922 1.968m0 8.649c-1.36 0-2.625-1.078-2.625-2.532s1.242-2.53 2.625-2.53s2.625 1.054 2.625 2.53c0 1.477-1.266 2.532-2.625 2.532\" />\n </svg>\n ),\n danger: (\n <svg viewBox=\"0 0 20 20\" height=\"18\" width=\"18\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z\"\n ></path>\n </svg>\n ),\n};\n\nexport const BANNER_VARIANTS = {\n default: \"default\",\n success: \"success\",\n warning: \"warning\",\n danger: \"danger\",\n} as const;\nexport type BannerVariant = \"default\" | \"success\" | \"warning\" | \"danger\";\n\nconst BannerContext = createContext<BannerVariant | undefined>(undefined);\n\ninterface BannerIconProps {\n /**\n * Optional custom icon or children for the icon area.\n */\n children?: ReactNode;\n /**\n * The icon to display in the banner.\n * Can be a boolean to conditionally show or hide, or a ReactNode to provide a custom icon.\n */\n icon?: boolean | ReactNode;\n /**\n * The data-testid to display within the banner.\n */\n \"data-testid\"?: string;\n}\n\ninterface BannerProps extends BannerIconProps {\n /**\n * Compact padding around the content of the banner.\n * @default true\n */\n compact?: boolean;\n /**\n * The content to display within the banner.\n */\n children: ReactNode;\n /**\n * The data-testid to display within the banner.\n */\n \"data-testid\"?: string;\n /**\n * Round the corners of the banner.\n * @default true\n */\n rounded?: boolean;\n /**\n * The banner's visual aesthetic.\n * - type {@link BannerVariant}\n */\n variant?: BannerVariant;\n}\n\n/**\n * A banner used to display a success, warning, or error message.\n *\n * API:\n * - {@link BannerProps}\n * - extends {@link BannerIconProps}\n */\nconst Banner = ({\n variant = \"default\",\n rounded = true,\n icon = false,\n compact = true,\n children,\n \"data-testid\": dataTestId,\n}: BannerProps) => {\n return (\n <BannerContext.Provider value={variant}>\n <div\n role=\"status\"\n aria-live=\"polite\"\n className={csx(\n \"proton-Banner\",\n `proton-Banner--${variant}`,\n rounded && \"proton-Banner--rounded\"\n )}\n data-testid={dataTestId}\n >\n <div\n className={csx(\n \"proton-Banner__wrapper\",\n compact && \"proton-Banner__wrapper--compact\"\n )}\n >\n <Banner.Icon icon={icon} />\n <div className=\"proton-Banner__content-wrapper\">\n <div className=\"proton-Banner__container\">{children}</div>\n </div>\n </div>\n </div>\n </BannerContext.Provider>\n );\n};\n\nBanner.displayName = \"Banner\";\n\nconst BannerTitle = ({\n children,\n \"data-testid\": dataTestId,\n}: {\n children: ReactNode;\n \"data-testid\"?: string;\n}) => {\n const variant = useContext(BannerContext);\n if (!variant) throw new Error(\"BannerTitle must be used within a Banner\");\n\n return (\n <h3\n className={csx(\n \"proton-Banner__title\",\n `proton-Banner--${variant}__title`\n )}\n data-testid={dataTestId}\n >\n {children}\n </h3>\n );\n};\n\nBannerTitle.displayName = \"Banner.Title\";\n\nconst BannerContent = ({\n children,\n \"data-testid\": dataTestId,\n}: {\n children: ReactNode;\n \"data-testid\"?: string;\n}) => {\n const variant = useContext(BannerContext);\n if (!variant) throw new Error(\"BannerContent must be used within a Banner\");\n\n return (\n <p\n className={csx(\n \"proton-Banner__content\",\n `proton-Banner--${variant}__content`\n )}\n data-testid={dataTestId}\n >\n {children}\n </p>\n );\n};\n\nBannerContent.displayName = \"Banner.Content\";\n\nfunction getIconContent(icon: ReactNode, variant: BannerVariant) {\n if (isValidElement(icon)) return icon;\n if (icon) return BANNER_ICONS[variant];\n return null;\n}\n\nconst BannerIcon = ({ icon, \"data-testid\": dataTestId }: BannerIconProps) => {\n const variant = useContext(BannerContext);\n if (!variant) throw new Error(\"BannerIcon must be used within a Banner\");\n\n const iconContent = getIconContent(icon, variant);\n if (!iconContent) return null;\n\n return (\n <div\n aria-hidden=\"true\"\n data-testid={dataTestId}\n className={csx(\"proton-Banner__icon\", `proton-Banner--${variant}__icon`)}\n >\n {iconContent}\n </div>\n );\n};\n\nBannerIcon.displayName = \"Banner.Icon\";\n\nconst BannerAction = ({ children, ...buttonProps }: ButtonProps) => {\n return <Button {...buttonProps}>{children}</Button>;\n};\n\nBannerAction.displayName = \"Banner.Action\";\n\nconst BannerActions = ({ children }: { children: ReactNode }) => {\n return <div className=\"proton-Banner__actions\">{children}</div>;\n};\n\nBannerActions.displayName = \"Banner.Actions\";\n\n/**\n * Renders an h3 styled banner.\n */\nBanner.Title = BannerTitle;\n\n/**\n * Renders a p styled banner.\n */\nBanner.Content = BannerContent;\n\n/**\n * Renders an icon inline with the banner title.\n *\n * API:\n * - {@link BannerIconProps}\n */\nBanner.Icon = BannerIcon;\n\n/**\n * Renders a Proton Button.\n * - @prop buttonProps {@link ButtonProps}\n */\nBanner.Action = BannerAction;\n\n/**\n * Renders Proton Buttons in a responsive actions grid.\n */\nBanner.Actions = BannerActions;\n\nexport { Banner };\n"],"names":["BANNER_ICONS","jsx","BANNER_VARIANTS","BannerContext","createContext","Banner","variant","rounded","icon","compact","children","dataTestId","csx","jsxs","BannerTitle","useContext","BannerContent","getIconContent","isValidElement","BannerIcon","iconContent","BannerAction","buttonProps","Button","BannerActions"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Banner.es.js","sources":["../../../src/components/Banner/Banner.tsx"],"sourcesContent":["\"use client\";\n\nimport { ReactNode, createContext, isValidElement, useContext } from \"react\";\nimport { csx } from \"../../utils\";\nimport { Button, type ButtonProps } from \"../Button/Button\";\n\nimport \"./Banner.css\";\n\n//TODO: move svgs to lib and use Icon component\nexport const BANNER_ICONS = {\n success: (\n <svg viewBox=\"0 0 20 20\" height=\"18\" width=\"18\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n ></path>\n </svg>\n ),\n warning: (\n <svg viewBox=\"0 0 56 56\" height=\"17\" width=\"17\">\n <path d=\"M9.59 50.207h36.82c3.516 0 5.719-2.531 5.719-5.719a5.56 5.56 0 0 0-.75-2.812l-18.445-33c-1.055-1.899-2.977-2.883-4.922-2.883c-1.922 0-3.89.984-4.946 2.883L4.645 41.699c-.516.89-.774 1.828-.774 2.79c0 3.187 2.227 5.718 5.719 5.718m18.422-16.055c-1.242 0-1.922-.703-1.969-1.968l-.328-11.578c-.047-1.266.937-2.204 2.273-2.204c1.313 0 2.344.961 2.297 2.227l-.351 11.555c-.047 1.289-.727 1.968-1.922 1.968m0 8.649c-1.36 0-2.625-1.078-2.625-2.532s1.242-2.53 2.625-2.53s2.625 1.054 2.625 2.53c0 1.477-1.266 2.532-2.625 2.532\" />\n </svg>\n ),\n danger: (\n <svg viewBox=\"0 0 20 20\" height=\"18\" width=\"18\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z\"\n ></path>\n </svg>\n ),\n};\n\nexport const BANNER_VARIANTS = {\n default: \"default\",\n success: \"success\",\n warning: \"warning\",\n danger: \"danger\",\n} as const;\nexport type BannerVariant = \"default\" | \"success\" | \"warning\" | \"danger\";\n\nconst BannerContext = createContext<BannerVariant | undefined>(undefined);\n\ninterface BannerIconProps {\n /**\n * Optional custom icon or children for the icon area.\n */\n children?: ReactNode;\n /**\n * The icon to display in the banner.\n * Can be a boolean to conditionally show or hide, or a ReactNode to provide a custom icon.\n */\n icon?: boolean | ReactNode;\n /**\n * The data-testid to display within the banner.\n */\n \"data-testid\"?: string;\n}\n\ninterface BannerProps extends BannerIconProps {\n /**\n * Compact padding around the content of the banner.\n * @default true\n */\n compact?: boolean;\n /**\n * The content to display within the banner.\n */\n children: ReactNode;\n /**\n * The data-testid to display within the banner.\n */\n \"data-testid\"?: string;\n /**\n * Round the corners of the banner.\n * @default true\n */\n rounded?: boolean;\n /**\n * The banner's visual aesthetic.\n * - type {@link BannerVariant}\n */\n variant?: BannerVariant;\n}\n\n/**\n * A banner used to display a success, warning, or error message.\n *\n * API:\n * - {@link BannerProps}\n * - extends {@link BannerIconProps}\n */\nconst Banner = ({\n variant = \"default\",\n rounded = true,\n icon = false,\n compact = true,\n children,\n \"data-testid\": dataTestId,\n}: BannerProps) => {\n return (\n <BannerContext.Provider value={variant}>\n <div\n role=\"status\"\n aria-live=\"polite\"\n className={csx(\n \"proton-Banner\",\n `proton-Banner--${variant}`,\n rounded && \"proton-Banner--rounded\"\n )}\n data-testid={dataTestId}\n >\n <div\n className={csx(\n \"proton-Banner__wrapper\",\n compact && \"proton-Banner__wrapper--compact\"\n )}\n >\n <Banner.Icon icon={icon} />\n <div className=\"proton-Banner__content-wrapper\">\n <div className=\"proton-Banner__container\">{children}</div>\n </div>\n </div>\n </div>\n </BannerContext.Provider>\n );\n};\n\nBanner.displayName = \"Banner\";\n\nconst BannerTitle = ({\n children,\n \"data-testid\": dataTestId,\n}: {\n children: ReactNode;\n \"data-testid\"?: string;\n}) => {\n const variant = useContext(BannerContext);\n if (!variant) throw new Error(\"BannerTitle must be used within a Banner\");\n\n return (\n <h3\n className={csx(\n \"proton-Banner__title\",\n `proton-Banner--${variant}__title`\n )}\n data-testid={dataTestId}\n >\n {children}\n </h3>\n );\n};\n\nBannerTitle.displayName = \"Banner.Title\";\n\nconst BannerContent = ({\n children,\n \"data-testid\": dataTestId,\n}: {\n children: ReactNode;\n \"data-testid\"?: string;\n}) => {\n const variant = useContext(BannerContext);\n if (!variant) throw new Error(\"BannerContent must be used within a Banner\");\n\n return (\n <p\n className={csx(\n \"proton-Banner__content\",\n `proton-Banner--${variant}__content`\n )}\n data-testid={dataTestId}\n >\n {children}\n </p>\n );\n};\n\nBannerContent.displayName = \"Banner.Content\";\n\nfunction getIconContent(icon: ReactNode, variant: BannerVariant) {\n if (isValidElement(icon)) return icon;\n if (icon) return BANNER_ICONS[variant];\n return null;\n}\n\nconst BannerIcon = ({ icon, \"data-testid\": dataTestId }: BannerIconProps) => {\n const variant = useContext(BannerContext);\n if (!variant) throw new Error(\"BannerIcon must be used within a Banner\");\n\n const iconContent = getIconContent(icon, variant);\n if (!iconContent) return null;\n\n return (\n <div\n aria-hidden=\"true\"\n data-testid={dataTestId}\n className={csx(\"proton-Banner__icon\", `proton-Banner--${variant}__icon`)}\n >\n {iconContent}\n </div>\n );\n};\n\nBannerIcon.displayName = \"Banner.Icon\";\n\nconst BannerAction = ({ children, ...buttonProps }: ButtonProps) => {\n return <Button {...buttonProps}>{children}</Button>;\n};\n\nBannerAction.displayName = \"Banner.Action\";\n\nconst BannerActions = ({ children }: { children: ReactNode }) => {\n return <div className=\"proton-Banner__actions\">{children}</div>;\n};\n\nBannerActions.displayName = \"Banner.Actions\";\n\n/**\n * Renders an h3 styled banner.\n */\nBanner.Title = BannerTitle;\n\n/**\n * Renders a p styled banner.\n */\nBanner.Content = BannerContent;\n\n/**\n * Renders an icon inline with the banner title.\n *\n * API:\n * - {@link BannerIconProps}\n */\nBanner.Icon = BannerIcon;\n\n/**\n * Renders a Proton Button.\n * - @prop buttonProps {@link ButtonProps}\n */\nBanner.Action = BannerAction;\n\n/**\n * Renders Proton Buttons in a responsive actions grid.\n */\nBanner.Actions = BannerActions;\n\nexport { Banner };\n"],"names":["BANNER_ICONS","jsx","BANNER_VARIANTS","BannerContext","createContext","Banner","variant","rounded","icon","compact","children","dataTestId","csx","jsxs","BannerTitle","useContext","BannerContent","getIconContent","isValidElement","BannerIcon","iconContent","BannerAction","buttonProps","Button","BannerActions"],"mappings":"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"}
1
+ {"version":3,"file":"Banner.es.js","sources":["../../../src/components/Banner/Banner.tsx"],"sourcesContent":["\"use client\";\n\nimport { ReactNode, createContext, isValidElement, useContext } from \"react\";\nimport { csx } from \"../../utils\";\nimport { Button, type ButtonProps } from \"../Button/Button\";\n\nimport \"./Banner.css\";\n\n//TODO: move svgs to lib and use Icon component\nexport const BANNER_ICONS = {\n success: (\n <svg viewBox=\"0 0 20 20\" height=\"18\" width=\"18\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n ></path>\n </svg>\n ),\n warning: (\n <svg viewBox=\"0 0 56 56\" height=\"17\" width=\"17\">\n <path d=\"M9.59 50.207h36.82c3.516 0 5.719-2.531 5.719-5.719a5.56 5.56 0 0 0-.75-2.812l-18.445-33c-1.055-1.899-2.977-2.883-4.922-2.883c-1.922 0-3.89.984-4.946 2.883L4.645 41.699c-.516.89-.774 1.828-.774 2.79c0 3.187 2.227 5.718 5.719 5.718m18.422-16.055c-1.242 0-1.922-.703-1.969-1.968l-.328-11.578c-.047-1.266.937-2.204 2.273-2.204c1.313 0 2.344.961 2.297 2.227l-.351 11.555c-.047 1.289-.727 1.968-1.922 1.968m0 8.649c-1.36 0-2.625-1.078-2.625-2.532s1.242-2.53 2.625-2.53s2.625 1.054 2.625 2.53c0 1.477-1.266 2.532-2.625 2.532\" />\n </svg>\n ),\n danger: (\n <svg viewBox=\"0 0 20 20\" height=\"18\" width=\"18\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z\"\n ></path>\n </svg>\n ),\n};\n\nexport const BANNER_VARIANTS = {\n default: \"default\",\n success: \"success\",\n warning: \"warning\",\n danger: \"danger\",\n} as const;\nexport type BannerVariant = \"default\" | \"success\" | \"warning\" | \"danger\";\n\nconst BannerContext = createContext<BannerVariant | undefined>(undefined);\n\ninterface BannerIconProps {\n /**\n * Optional custom icon or children for the icon area.\n */\n children?: ReactNode;\n /**\n * The icon to display in the banner.\n * Can be a boolean to conditionally show or hide, or a ReactNode to provide a custom icon.\n */\n icon?: boolean | ReactNode;\n /**\n * The data-testid to display within the banner.\n */\n \"data-testid\"?: string;\n}\n\ninterface BannerProps extends BannerIconProps {\n /**\n * Compact padding around the content of the banner.\n * @default true\n */\n compact?: boolean;\n /**\n * The content to display within the banner.\n */\n children: ReactNode;\n /**\n * The data-testid to display within the banner.\n */\n \"data-testid\"?: string;\n /**\n * Round the corners of the banner.\n * @default true\n */\n rounded?: boolean;\n /**\n * The banner's visual aesthetic.\n * - type {@link BannerVariant}\n */\n variant?: BannerVariant;\n}\n\n/**\n * A banner used to display a success, warning, or error message.\n *\n * API:\n * - {@link BannerProps}\n * - extends {@link BannerIconProps}\n */\nconst Banner = ({\n variant = \"default\",\n rounded = true,\n icon = false,\n compact = true,\n children,\n \"data-testid\": dataTestId,\n}: BannerProps) => {\n return (\n <BannerContext.Provider value={variant}>\n <div\n role=\"status\"\n aria-live=\"polite\"\n className={csx(\n \"proton-Banner\",\n `proton-Banner--${variant}`,\n rounded && \"proton-Banner--rounded\"\n )}\n data-testid={dataTestId}\n >\n <div\n className={csx(\n \"proton-Banner__wrapper\",\n compact && \"proton-Banner__wrapper--compact\"\n )}\n >\n <Banner.Icon icon={icon} />\n <div className=\"proton-Banner__content-wrapper\">\n <div className=\"proton-Banner__container\">{children}</div>\n </div>\n </div>\n </div>\n </BannerContext.Provider>\n );\n};\n\nBanner.displayName = \"Banner\";\n\nconst BannerTitle = ({\n children,\n \"data-testid\": dataTestId,\n}: {\n children: ReactNode;\n \"data-testid\"?: string;\n}) => {\n const variant = useContext(BannerContext);\n if (!variant) throw new Error(\"BannerTitle must be used within a Banner\");\n\n return (\n <h3\n className={csx(\n \"proton-Banner__title\",\n `proton-Banner--${variant}__title`\n )}\n data-testid={dataTestId}\n >\n {children}\n </h3>\n );\n};\n\nBannerTitle.displayName = \"Banner.Title\";\n\nconst BannerContent = ({\n children,\n \"data-testid\": dataTestId,\n}: {\n children: ReactNode;\n \"data-testid\"?: string;\n}) => {\n const variant = useContext(BannerContext);\n if (!variant) throw new Error(\"BannerContent must be used within a Banner\");\n\n return (\n <p\n className={csx(\n \"proton-Banner__content\",\n `proton-Banner--${variant}__content`\n )}\n data-testid={dataTestId}\n >\n {children}\n </p>\n );\n};\n\nBannerContent.displayName = \"Banner.Content\";\n\nfunction getIconContent(icon: ReactNode, variant: BannerVariant) {\n if (isValidElement(icon)) return icon;\n if (icon) return BANNER_ICONS[variant];\n return null;\n}\n\nconst BannerIcon = ({ icon, \"data-testid\": dataTestId }: BannerIconProps) => {\n const variant = useContext(BannerContext);\n if (!variant) throw new Error(\"BannerIcon must be used within a Banner\");\n\n const iconContent = getIconContent(icon, variant);\n if (!iconContent) return null;\n\n return (\n <div\n aria-hidden=\"true\"\n data-testid={dataTestId}\n className={csx(\"proton-Banner__icon\", `proton-Banner--${variant}__icon`)}\n >\n {iconContent}\n </div>\n );\n};\n\nBannerIcon.displayName = \"Banner.Icon\";\n\nconst BannerAction = ({ children, ...buttonProps }: ButtonProps) => {\n return <Button {...buttonProps}>{children}</Button>;\n};\n\nBannerAction.displayName = \"Banner.Action\";\n\nconst BannerActions = ({ children }: { children: ReactNode }) => {\n return <div className=\"proton-Banner__actions\">{children}</div>;\n};\n\nBannerActions.displayName = \"Banner.Actions\";\n\n/**\n * Renders an h3 styled banner.\n */\nBanner.Title = BannerTitle;\n\n/**\n * Renders a p styled banner.\n */\nBanner.Content = BannerContent;\n\n/**\n * Renders an icon inline with the banner title.\n *\n * API:\n * - {@link BannerIconProps}\n */\nBanner.Icon = BannerIcon;\n\n/**\n * Renders a Proton Button.\n * - @prop buttonProps {@link ButtonProps}\n */\nBanner.Action = BannerAction;\n\n/**\n * Renders Proton Buttons in a responsive actions grid.\n */\nBanner.Actions = BannerActions;\n\nexport { Banner };\n"],"names":["BANNER_ICONS","jsx","BANNER_VARIANTS","BannerContext","createContext","Banner","variant","rounded","icon","compact","children","dataTestId","csx","jsxs","BannerTitle","useContext","BannerContent","getIconContent","isValidElement","BannerIcon","iconContent","BannerAction","buttonProps","Button","BannerActions"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Button.cjs.js","sources":["../../../src/components/Button/Button.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, MouseEvent } from \"react\";\n\nimport { csx } from \"../../utils/string\";\nimport {\n isUrlExternal,\n handleInternalNavigation,\n} from \"../../utils/navigation\";\nimport \"./Button.css\";\n\nexport type ButtonVariant =\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"danger\"\n | \"translucent\";\n\nexport const ButtonVariants: Record<ButtonVariant, ButtonVariant> = {\n primary: \"primary\",\n secondary: \"secondary\",\n success: \"success\",\n danger: \"danger\",\n translucent: \"translucent\",\n};\n\nexport type ButtonSize = \"small\" | \"medium\" | \"large\" | \"xlarge\" | \"2xlarge\";\n\nexport const ButtonSizes: Record<ButtonSize, ButtonSize> = {\n small: \"small\",\n medium: \"medium\",\n large: \"large\",\n xlarge: \"xlarge\",\n \"2xlarge\": \"2xlarge\",\n};\n\nexport interface ButtonProps {\n /** The button's visual aesthetic\n * - type {@link ButtonVariant}\n */\n variant?: ButtonVariant;\n\n /** The size of the button\n * - type {@link ButtonSize}\n * @default \"medium\"\n */\n size?: ButtonSize;\n\n /** Should the button be full width?\n * @default false\n */\n fullWidth?: boolean;\n\n /** The prefix to display within the button */\n icon?: React.ReactNode;\n\n /** Should the button be non-interactive? */\n isDisabled?: boolean;\n\n /** The URL that the button should link to. Turns the element into an `a` tag. If the URL is external, you should pass the entire URL to the `to` prop (e.g. `https://example.com`). */\n to?: string;\n\n /** The target attribute for the link. Defaults to `_blank` if the URL is external. */\n target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\" | string;\n\n /** Called when the button is pressed (on release, not keydown) */\n onPress?: (e: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => void;\n\n /** The type of button */\n type?: \"button\" | \"submit\" | \"reset\";\n\n /** The test ID for the button */\n \"data-testid\"?: string;\n\n /** The content to display within the button */\n children?: React.ReactNode;\n}\n\n/**\n * A customizable button component that can render as either a button or anchor element.\n *\n * API:\n * - {@link ButtonProps}\n */\nexport const Button = forwardRef<\n HTMLButtonElement | HTMLAnchorElement,\n ButtonProps\n>(\n (\n {\n variant = \"primary\",\n size = \"medium\",\n fullWidth = false,\n icon,\n to,\n target,\n onPress,\n type = \"button\",\n isDisabled,\n \"data-testid\": testId,\n children,\n }: ButtonProps,\n ref\n ) => {\n const isExternal = to && isUrlExternal(to);\n\n const commonProps = {\n className: csx(\n \"proton-Button\",\n `proton-Button--${variant}`,\n fullWidth && \"proton-Button--fullWidth\",\n isDisabled && \"proton-Button--disabled\",\n size && `proton-Button--${size}`\n ),\n \"data-testid\": testId,\n ...(to && { \"aria-disabled\": isDisabled }),\n ...(isDisabled && { tabIndex: -1 }),\n };\n\n const content = (\n <>\n {icon && (\n <div\n className={csx(\n \"proton-Button__icon-decorator\",\n fullWidth && \"proton-Button__icon-decorator--fullWidth\"\n )}\n >\n {icon}\n </div>\n )}\n {children && <div className=\"proton-Button__text\">{children}</div>}\n </>\n );\n\n if (to) {\n return (\n <a\n {...commonProps}\n href={to}\n target={target || (isExternal ? \"_blank\" : undefined)}\n rel={\n isExternal || target === \"_blank\"\n ? \"noopener noreferrer\"\n : undefined\n }\n ref={ref as React.RefObject<HTMLAnchorElement>}\n onClick={(e) => {\n if (isDisabled) {\n e.preventDefault();\n return;\n }\n\n if (!isExternal && !target) {\n handleInternalNavigation(e, to);\n }\n\n onPress?.(e);\n }}\n role=\"button\"\n >\n {content}\n </a>\n );\n }\n\n return (\n <button\n {...commonProps}\n type={type}\n disabled={isDisabled}\n ref={ref as React.RefObject<HTMLButtonElement>}\n onClick={(e) => {\n if (!isDisabled && onPress) {\n onPress(e);\n }\n }}\n >\n {content}\n </button>\n );\n }\n);\n\nButton.displayName = \"ProtonUIButton\";\n"],"names":["ButtonVariants","ButtonSizes","Button","forwardRef","variant","size","fullWidth","icon","to","target","onPress","type","isDisabled","testId","children","ref","isExternal","isUrlExternal","commonProps","csx","content","jsxs","Fragment","jsx","handleInternalNavigation"],"mappings":"mRAkBO,MAAMA,EAAuD,CAClE,QAAS,UACT,UAAW,YACX,QAAS,UACT,OAAQ,SACR,YAAa,aACf,EAIaC,EAA8C,CACzD,MAAO,QACP,OAAQ,SACR,MAAO,QACP,OAAQ,SACR,UAAW,SACb,EAkDaC,EAASC,EAAAA,WAIpB,CACE,CACE,QAAAC,EAAU,UACV,KAAAC,EAAO,SACP,UAAAC,EAAY,GACZ,KAAAC,EACA,GAAAC,EACA,OAAAC,EACA,QAAAC,EACA,KAAAC,EAAO,SACP,WAAAC,EACA,cAAeC,EACf,SAAAC,CAAA,EAEFC,IACG,CACH,MAAMC,EAAaR,GAAMS,EAAAA,cAAcT,CAAE,EAEnCU,EAAc,CAClB,UAAWC,EAAAA,IACT,gBACA,kBAAkBf,CAAO,GACzBE,GAAa,2BACbM,GAAc,0BACdP,GAAQ,kBAAkBA,CAAI,EAAA,EAEhC,cAAeQ,EACf,GAAIL,GAAM,CAAE,gBAAiBI,CAAA,EAC7B,GAAIA,GAAc,CAAE,SAAU,EAAA,CAAG,EAG7BQ,EACJC,EAAAA,kBAAAA,KAAAC,EAAAA,kBAAAA,SAAA,CACG,SAAA,CAAAf,GACCgB,EAAAA,kBAAAA,IAAC,MAAA,CACC,UAAWJ,EAAAA,IACT,gCACAb,GAAa,0CAAA,EAGd,SAAAC,CAAA,CAAA,EAGJO,GAAYS,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,sBAAuB,SAAAT,CAAA,CAAS,CAAA,EAC9D,EAGF,OAAIN,EAEAe,EAAAA,kBAAAA,IAAC,IAAA,CACE,GAAGL,EACJ,KAAMV,EACN,OAAQC,IAAWO,EAAa,SAAW,QAC3C,IACEA,GAAcP,IAAW,SACrB,sBACA,OAEN,IAAAM,EACA,QAAU,GAAM,CACd,GAAIH,EAAY,CACd,EAAE,eAAA,EACF,MACF,CAEI,CAACI,GAAc,CAACP,GAClBe,EAAAA,yBAAyB,EAAGhB,CAAE,EAGhCE,GAAA,MAAAA,EAAU,EACZ,EACA,KAAK,SAEJ,SAAAU,CAAA,CAAA,EAMLG,EAAAA,kBAAAA,IAAC,SAAA,CACE,GAAGL,EACJ,KAAAP,EACA,SAAUC,EACV,IAAAG,EACA,QAAU,GAAM,CACV,CAACH,GAAcF,GACjBA,EAAQ,CAAC,CAEb,EAEC,SAAAU,CAAA,CAAA,CAGP,CACF,EAEAlB,EAAO,YAAc"}
1
+ {"version":3,"file":"Button.cjs.js","sources":["../../../src/components/Button/Button.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, MouseEvent } from \"react\";\n\nimport { csx } from \"../../utils/string\";\nimport {\n isUrlExternal,\n handleInternalNavigation,\n} from \"../../utils/navigation\";\nimport \"./Button.css\";\n\nexport type ButtonVariant =\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"danger\"\n | \"translucent\";\n\nexport const ButtonVariants: Record<ButtonVariant, ButtonVariant> = {\n primary: \"primary\",\n secondary: \"secondary\",\n success: \"success\",\n danger: \"danger\",\n translucent: \"translucent\",\n};\n\nexport type ButtonSize = \"small\" | \"medium\" | \"large\" | \"xlarge\" | \"2xlarge\";\n\nexport const ButtonSizes: Record<ButtonSize, ButtonSize> = {\n small: \"small\",\n medium: \"medium\",\n large: \"large\",\n xlarge: \"xlarge\",\n \"2xlarge\": \"2xlarge\",\n};\n\nexport interface ButtonProps {\n /** The button's visual aesthetic\n * - type {@link ButtonVariant}\n */\n variant?: ButtonVariant;\n\n /** The size of the button\n * - type {@link ButtonSize}\n * @default \"medium\"\n */\n size?: ButtonSize;\n\n /** Should the button be full width?\n * @default false\n */\n fullWidth?: boolean;\n\n /** The prefix to display within the button */\n icon?: React.ReactNode;\n\n /** Should the button be non-interactive? */\n isDisabled?: boolean;\n\n /** The URL that the button should link to. Turns the element into an `a` tag. If the URL is external, you should pass the entire URL to the `to` prop (e.g. `https://example.com`). */\n to?: string;\n\n /** The target attribute for the link. Defaults to `_blank` if the URL is external. */\n target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\" | string;\n\n /** Called when the button is pressed (on release, not keydown) */\n onPress?: (e: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => void;\n\n /** The type of button */\n type?: \"button\" | \"submit\" | \"reset\";\n\n /** The test ID for the button */\n \"data-testid\"?: string;\n\n /** The content to display within the button */\n children?: React.ReactNode;\n}\n\n/**\n * A customizable button component that can render as either a button or anchor element.\n *\n * API:\n * - {@link ButtonProps}\n */\nexport const Button = forwardRef<\n HTMLButtonElement | HTMLAnchorElement,\n ButtonProps\n>(\n (\n {\n variant = \"primary\",\n size = \"medium\",\n fullWidth = false,\n icon,\n to,\n target,\n onPress,\n type = \"button\",\n isDisabled,\n \"data-testid\": testId,\n children,\n }: ButtonProps,\n ref\n ) => {\n const isExternal = to && isUrlExternal(to);\n\n const commonProps = {\n className: csx(\n \"proton-Button\",\n `proton-Button--${variant}`,\n fullWidth && \"proton-Button--fullWidth\",\n isDisabled && \"proton-Button--disabled\",\n size && `proton-Button--${size}`\n ),\n \"data-testid\": testId,\n ...(to && { \"aria-disabled\": isDisabled }),\n ...(isDisabled && { tabIndex: -1 }),\n };\n\n const content = (\n <>\n {icon && (\n <div\n className={csx(\n \"proton-Button__icon-decorator\",\n fullWidth && \"proton-Button__icon-decorator--fullWidth\"\n )}\n >\n {icon}\n </div>\n )}\n {children && <div className=\"proton-Button__text\">{children}</div>}\n </>\n );\n\n if (to) {\n return (\n <a\n {...commonProps}\n href={to}\n target={target || (isExternal ? \"_blank\" : undefined)}\n rel={\n isExternal || target === \"_blank\"\n ? \"noopener noreferrer\"\n : undefined\n }\n ref={ref as React.RefObject<HTMLAnchorElement>}\n onClick={(e) => {\n if (isDisabled) {\n e.preventDefault();\n return;\n }\n\n if (!isExternal && !target) {\n handleInternalNavigation(e, to);\n }\n\n onPress?.(e);\n }}\n role=\"button\"\n >\n {content}\n </a>\n );\n }\n\n return (\n <button\n {...commonProps}\n type={type}\n disabled={isDisabled}\n ref={ref as React.RefObject<HTMLButtonElement>}\n onClick={(e) => {\n if (!isDisabled && onPress) {\n onPress(e);\n }\n }}\n >\n {content}\n </button>\n );\n }\n);\n\nButton.displayName = \"ProtonUIButton\";\n"],"names":["ButtonVariants","ButtonSizes","Button","forwardRef","variant","size","fullWidth","icon","to","target","onPress","type","isDisabled","testId","children","ref","isExternal","isUrlExternal","commonProps","csx","content","jsxs","Fragment","jsx","handleInternalNavigation"],"mappings":"mRAkBO,MAAMA,EAAuD,CAClE,QAAS,UACT,UAAW,YACX,QAAS,UACT,OAAQ,SACR,YAAa,aACf,EAIaC,EAA8C,CACzD,MAAO,QACP,OAAQ,SACR,MAAO,QACP,OAAQ,SACR,UAAW,SACb,EAkDaC,EAASC,EAAA,WAIpB,CACE,CACE,QAAAC,EAAU,UACV,KAAAC,EAAO,SACP,UAAAC,EAAY,GACZ,KAAAC,EACA,GAAAC,EACA,OAAAC,EACA,QAAAC,EACA,KAAAC,EAAO,SACP,WAAAC,EACA,cAAeC,EACf,SAAAC,GAEFC,IACG,CACG,MAAAC,EAAaR,GAAMS,EAAA,cAAcT,CAAE,EAEnCU,EAAc,CAClB,UAAWC,EAAA,IACT,gBACA,kBAAkBf,CAAO,GACzBE,GAAa,2BACbM,GAAc,0BACdP,GAAQ,kBAAkBA,CAAI,EAChC,EACA,cAAeQ,EACf,GAAIL,GAAM,CAAE,gBAAiBI,CAAW,EACxC,GAAIA,GAAc,CAAE,SAAU,EAAG,CAAA,EAG7BQ,EAEDC,EAAAA,kBAAAA,KAAAC,EAAA,kBAAA,SAAA,CAAA,SAAA,CACCf,GAAAgB,EAAA,kBAAA,IAAC,MAAA,CACC,UAAWJ,EAAA,IACT,gCACAb,GAAa,0CACf,EAEC,SAAAC,CAAA,CACH,EAEDO,GAAYS,EAAA,kBAAA,IAAC,MAAI,CAAA,UAAU,sBAAuB,SAAAT,EAAS,CAC9D,CAAA,CAAA,EAGF,OAAIN,EAEAe,EAAA,kBAAA,IAAC,IAAA,CACE,GAAGL,EACJ,KAAMV,EACN,OAAQC,IAAWO,EAAa,SAAW,QAC3C,IACEA,GAAcP,IAAW,SACrB,sBACA,OAEN,IAAAM,EACA,QAAU,GAAM,CACd,GAAIH,EAAY,CACd,EAAE,eAAe,EACjB,MACF,CAEI,CAACI,GAAc,CAACP,GAClBe,2BAAyB,EAAGhB,CAAE,EAGhCE,GAAA,MAAAA,EAAU,EACZ,EACA,KAAK,SAEJ,SAAAU,CAAA,CAAA,EAMLG,EAAA,kBAAA,IAAC,SAAA,CACE,GAAGL,EACJ,KAAAP,EACA,SAAUC,EACV,IAAAG,EACA,QAAU,GAAM,CACV,CAACH,GAAcF,GACjBA,EAAQ,CAAC,CAEb,EAEC,SAAAU,CAAA,CAAA,CAGP,CACF,EAEAlB,EAAO,YAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"Button.es.js","sources":["../../../src/components/Button/Button.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, MouseEvent } from \"react\";\n\nimport { csx } from \"../../utils/string\";\nimport {\n isUrlExternal,\n handleInternalNavigation,\n} from \"../../utils/navigation\";\nimport \"./Button.css\";\n\nexport type ButtonVariant =\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"danger\"\n | \"translucent\";\n\nexport const ButtonVariants: Record<ButtonVariant, ButtonVariant> = {\n primary: \"primary\",\n secondary: \"secondary\",\n success: \"success\",\n danger: \"danger\",\n translucent: \"translucent\",\n};\n\nexport type ButtonSize = \"small\" | \"medium\" | \"large\" | \"xlarge\" | \"2xlarge\";\n\nexport const ButtonSizes: Record<ButtonSize, ButtonSize> = {\n small: \"small\",\n medium: \"medium\",\n large: \"large\",\n xlarge: \"xlarge\",\n \"2xlarge\": \"2xlarge\",\n};\n\nexport interface ButtonProps {\n /** The button's visual aesthetic\n * - type {@link ButtonVariant}\n */\n variant?: ButtonVariant;\n\n /** The size of the button\n * - type {@link ButtonSize}\n * @default \"medium\"\n */\n size?: ButtonSize;\n\n /** Should the button be full width?\n * @default false\n */\n fullWidth?: boolean;\n\n /** The prefix to display within the button */\n icon?: React.ReactNode;\n\n /** Should the button be non-interactive? */\n isDisabled?: boolean;\n\n /** The URL that the button should link to. Turns the element into an `a` tag. If the URL is external, you should pass the entire URL to the `to` prop (e.g. `https://example.com`). */\n to?: string;\n\n /** The target attribute for the link. Defaults to `_blank` if the URL is external. */\n target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\" | string;\n\n /** Called when the button is pressed (on release, not keydown) */\n onPress?: (e: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => void;\n\n /** The type of button */\n type?: \"button\" | \"submit\" | \"reset\";\n\n /** The test ID for the button */\n \"data-testid\"?: string;\n\n /** The content to display within the button */\n children?: React.ReactNode;\n}\n\n/**\n * A customizable button component that can render as either a button or anchor element.\n *\n * API:\n * - {@link ButtonProps}\n */\nexport const Button = forwardRef<\n HTMLButtonElement | HTMLAnchorElement,\n ButtonProps\n>(\n (\n {\n variant = \"primary\",\n size = \"medium\",\n fullWidth = false,\n icon,\n to,\n target,\n onPress,\n type = \"button\",\n isDisabled,\n \"data-testid\": testId,\n children,\n }: ButtonProps,\n ref\n ) => {\n const isExternal = to && isUrlExternal(to);\n\n const commonProps = {\n className: csx(\n \"proton-Button\",\n `proton-Button--${variant}`,\n fullWidth && \"proton-Button--fullWidth\",\n isDisabled && \"proton-Button--disabled\",\n size && `proton-Button--${size}`\n ),\n \"data-testid\": testId,\n ...(to && { \"aria-disabled\": isDisabled }),\n ...(isDisabled && { tabIndex: -1 }),\n };\n\n const content = (\n <>\n {icon && (\n <div\n className={csx(\n \"proton-Button__icon-decorator\",\n fullWidth && \"proton-Button__icon-decorator--fullWidth\"\n )}\n >\n {icon}\n </div>\n )}\n {children && <div className=\"proton-Button__text\">{children}</div>}\n </>\n );\n\n if (to) {\n return (\n <a\n {...commonProps}\n href={to}\n target={target || (isExternal ? \"_blank\" : undefined)}\n rel={\n isExternal || target === \"_blank\"\n ? \"noopener noreferrer\"\n : undefined\n }\n ref={ref as React.RefObject<HTMLAnchorElement>}\n onClick={(e) => {\n if (isDisabled) {\n e.preventDefault();\n return;\n }\n\n if (!isExternal && !target) {\n handleInternalNavigation(e, to);\n }\n\n onPress?.(e);\n }}\n role=\"button\"\n >\n {content}\n </a>\n );\n }\n\n return (\n <button\n {...commonProps}\n type={type}\n disabled={isDisabled}\n ref={ref as React.RefObject<HTMLButtonElement>}\n onClick={(e) => {\n if (!isDisabled && onPress) {\n onPress(e);\n }\n }}\n >\n {content}\n </button>\n );\n }\n);\n\nButton.displayName = \"ProtonUIButton\";\n"],"names":["ButtonVariants","ButtonSizes","Button","forwardRef","variant","size","fullWidth","icon","to","target","onPress","type","isDisabled","testId","children","ref","isExternal","isUrlExternal","commonProps","csx","content","jsxs","Fragment","jsx","e","handleInternalNavigation"],"mappings":";;;;;AAkBO,MAAMA,IAAuD;AAAA,EAClE,SAAS;AAAA,EACT,WAAW;AAAA,EACX,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,aAAa;AACf,GAIaC,IAA8C;AAAA,EACzD,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,WAAW;AACb,GAkDaC,IAASC;AAAA,EAIpB,CACE;AAAA,IACE,SAAAC,IAAU;AAAA,IACV,MAAAC,IAAO;AAAA,IACP,WAAAC,IAAY;AAAA,IACZ,MAAAC;AAAA,IACA,IAAAC;AAAA,IACA,QAAAC;AAAA,IACA,SAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,YAAAC;AAAA,IACA,eAAeC;AAAA,IACf,UAAAC;AAAA,EAAA,GAEFC,MACG;AACH,UAAMC,IAAaR,KAAMS,EAAcT,CAAE,GAEnCU,IAAc;AAAA,MAClB,WAAWC;AAAA,QACT;AAAA,QACA,kBAAkBf,CAAO;AAAA,QACzBE,KAAa;AAAA,QACbM,KAAc;AAAA,QACdP,KAAQ,kBAAkBA,CAAI;AAAA,MAAA;AAAA,MAEhC,eAAeQ;AAAA,MACf,GAAIL,KAAM,EAAE,iBAAiBI,EAAA;AAAA,MAC7B,GAAIA,KAAc,EAAE,UAAU,GAAA;AAAA,IAAG,GAG7BQ,IACJC,gBAAAA,EAAAA,KAAAC,EAAAA,UAAA,EACG,UAAA;AAAA,MAAAf,KACCgB,gBAAAA,EAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWJ;AAAA,YACT;AAAA,YACAb,KAAa;AAAA,UAAA;AAAA,UAGd,UAAAC;AAAA,QAAA;AAAA,MAAA;AAAA,MAGJO,KAAYS,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,uBAAuB,UAAAT,EAAA,CAAS;AAAA,IAAA,GAC9D;AAGF,WAAIN,IAEAe,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAGL;AAAA,QACJ,MAAMV;AAAA,QACN,QAAQC,MAAWO,IAAa,WAAW;AAAA,QAC3C,KACEA,KAAcP,MAAW,WACrB,wBACA;AAAA,QAEN,KAAAM;AAAA,QACA,SAAS,CAACS,MAAM;AACd,cAAIZ,GAAY;AACd,YAAAY,EAAE,eAAA;AACF;AAAA,UACF;AAEA,UAAI,CAACR,KAAc,CAACP,KAClBgB,EAAyBD,GAAGhB,CAAE,GAGhCE,KAAA,QAAAA,EAAUc;AAAA,QACZ;AAAA,QACA,MAAK;AAAA,QAEJ,UAAAJ;AAAA,MAAA;AAAA,IAAA,IAMLG,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAGL;AAAA,QACJ,MAAAP;AAAA,QACA,UAAUC;AAAA,QACV,KAAAG;AAAA,QACA,SAAS,CAACS,MAAM;AACd,UAAI,CAACZ,KAAcF,KACjBA,EAAQc,CAAC;AAAA,QAEb;AAAA,QAEC,UAAAJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AAEAlB,EAAO,cAAc;"}
1
+ {"version":3,"file":"Button.es.js","sources":["../../../src/components/Button/Button.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, MouseEvent } from \"react\";\n\nimport { csx } from \"../../utils/string\";\nimport {\n isUrlExternal,\n handleInternalNavigation,\n} from \"../../utils/navigation\";\nimport \"./Button.css\";\n\nexport type ButtonVariant =\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"danger\"\n | \"translucent\";\n\nexport const ButtonVariants: Record<ButtonVariant, ButtonVariant> = {\n primary: \"primary\",\n secondary: \"secondary\",\n success: \"success\",\n danger: \"danger\",\n translucent: \"translucent\",\n};\n\nexport type ButtonSize = \"small\" | \"medium\" | \"large\" | \"xlarge\" | \"2xlarge\";\n\nexport const ButtonSizes: Record<ButtonSize, ButtonSize> = {\n small: \"small\",\n medium: \"medium\",\n large: \"large\",\n xlarge: \"xlarge\",\n \"2xlarge\": \"2xlarge\",\n};\n\nexport interface ButtonProps {\n /** The button's visual aesthetic\n * - type {@link ButtonVariant}\n */\n variant?: ButtonVariant;\n\n /** The size of the button\n * - type {@link ButtonSize}\n * @default \"medium\"\n */\n size?: ButtonSize;\n\n /** Should the button be full width?\n * @default false\n */\n fullWidth?: boolean;\n\n /** The prefix to display within the button */\n icon?: React.ReactNode;\n\n /** Should the button be non-interactive? */\n isDisabled?: boolean;\n\n /** The URL that the button should link to. Turns the element into an `a` tag. If the URL is external, you should pass the entire URL to the `to` prop (e.g. `https://example.com`). */\n to?: string;\n\n /** The target attribute for the link. Defaults to `_blank` if the URL is external. */\n target?: \"_blank\" | \"_self\" | \"_parent\" | \"_top\" | string;\n\n /** Called when the button is pressed (on release, not keydown) */\n onPress?: (e: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => void;\n\n /** The type of button */\n type?: \"button\" | \"submit\" | \"reset\";\n\n /** The test ID for the button */\n \"data-testid\"?: string;\n\n /** The content to display within the button */\n children?: React.ReactNode;\n}\n\n/**\n * A customizable button component that can render as either a button or anchor element.\n *\n * API:\n * - {@link ButtonProps}\n */\nexport const Button = forwardRef<\n HTMLButtonElement | HTMLAnchorElement,\n ButtonProps\n>(\n (\n {\n variant = \"primary\",\n size = \"medium\",\n fullWidth = false,\n icon,\n to,\n target,\n onPress,\n type = \"button\",\n isDisabled,\n \"data-testid\": testId,\n children,\n }: ButtonProps,\n ref\n ) => {\n const isExternal = to && isUrlExternal(to);\n\n const commonProps = {\n className: csx(\n \"proton-Button\",\n `proton-Button--${variant}`,\n fullWidth && \"proton-Button--fullWidth\",\n isDisabled && \"proton-Button--disabled\",\n size && `proton-Button--${size}`\n ),\n \"data-testid\": testId,\n ...(to && { \"aria-disabled\": isDisabled }),\n ...(isDisabled && { tabIndex: -1 }),\n };\n\n const content = (\n <>\n {icon && (\n <div\n className={csx(\n \"proton-Button__icon-decorator\",\n fullWidth && \"proton-Button__icon-decorator--fullWidth\"\n )}\n >\n {icon}\n </div>\n )}\n {children && <div className=\"proton-Button__text\">{children}</div>}\n </>\n );\n\n if (to) {\n return (\n <a\n {...commonProps}\n href={to}\n target={target || (isExternal ? \"_blank\" : undefined)}\n rel={\n isExternal || target === \"_blank\"\n ? \"noopener noreferrer\"\n : undefined\n }\n ref={ref as React.RefObject<HTMLAnchorElement>}\n onClick={(e) => {\n if (isDisabled) {\n e.preventDefault();\n return;\n }\n\n if (!isExternal && !target) {\n handleInternalNavigation(e, to);\n }\n\n onPress?.(e);\n }}\n role=\"button\"\n >\n {content}\n </a>\n );\n }\n\n return (\n <button\n {...commonProps}\n type={type}\n disabled={isDisabled}\n ref={ref as React.RefObject<HTMLButtonElement>}\n onClick={(e) => {\n if (!isDisabled && onPress) {\n onPress(e);\n }\n }}\n >\n {content}\n </button>\n );\n }\n);\n\nButton.displayName = \"ProtonUIButton\";\n"],"names":["ButtonVariants","ButtonSizes","Button","forwardRef","variant","size","fullWidth","icon","to","target","onPress","type","isDisabled","testId","children","ref","isExternal","isUrlExternal","commonProps","csx","content","jsxs","Fragment","jsx","e","handleInternalNavigation"],"mappings":";;;;;AAkBO,MAAMA,IAAuD;AAAA,EAClE,SAAS;AAAA,EACT,WAAW;AAAA,EACX,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,aAAa;AACf,GAIaC,IAA8C;AAAA,EACzD,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,WAAW;AACb,GAkDaC,IAASC;AAAA,EAIpB,CACE;AAAA,IACE,SAAAC,IAAU;AAAA,IACV,MAAAC,IAAO;AAAA,IACP,WAAAC,IAAY;AAAA,IACZ,MAAAC;AAAA,IACA,IAAAC;AAAA,IACA,QAAAC;AAAA,IACA,SAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,YAAAC;AAAA,IACA,eAAeC;AAAA,IACf,UAAAC;AAAA,KAEFC,MACG;AACG,UAAAC,IAAaR,KAAMS,EAAcT,CAAE,GAEnCU,IAAc;AAAA,MAClB,WAAWC;AAAA,QACT;AAAA,QACA,kBAAkBf,CAAO;AAAA,QACzBE,KAAa;AAAA,QACbM,KAAc;AAAA,QACdP,KAAQ,kBAAkBA,CAAI;AAAA,MAChC;AAAA,MACA,eAAeQ;AAAA,MACf,GAAIL,KAAM,EAAE,iBAAiBI,EAAW;AAAA,MACxC,GAAIA,KAAc,EAAE,UAAU,GAAG;AAAA,IAAA,GAG7BQ,IAEDC,gBAAAA,EAAAA,KAAAC,EAAA,UAAA,EAAA,UAAA;AAAA,MACCf,KAAAgB,gBAAAA,EAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWJ;AAAA,YACT;AAAA,YACAb,KAAa;AAAA,UACf;AAAA,UAEC,UAAAC;AAAA,QAAA;AAAA,MACH;AAAA,MAEDO,KAAYS,gBAAAA,EAAA,IAAC,OAAI,EAAA,WAAU,uBAAuB,UAAAT,GAAS;AAAA,IAC9D,EAAA,CAAA;AAGF,WAAIN,IAEAe,gBAAAA,EAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAGL;AAAA,QACJ,MAAMV;AAAA,QACN,QAAQC,MAAWO,IAAa,WAAW;AAAA,QAC3C,KACEA,KAAcP,MAAW,WACrB,wBACA;AAAA,QAEN,KAAAM;AAAA,QACA,SAAS,CAACS,MAAM;AACd,cAAIZ,GAAY;AACd,YAAAY,EAAE,eAAe;AACjB;AAAA,UACF;AAEI,UAAA,CAACR,KAAc,CAACP,KAClBgB,EAAyBD,GAAGhB,CAAE,GAGhCE,KAAA,QAAAA,EAAUc;AAAA,QACZ;AAAA,QACA,MAAK;AAAA,QAEJ,UAAAJ;AAAA,MAAA;AAAA,IAAA,IAMLG,gBAAAA,EAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAGL;AAAA,QACJ,MAAAP;AAAA,QACA,UAAUC;AAAA,QACV,KAAAG;AAAA,QACA,SAAS,CAACS,MAAM;AACV,UAAA,CAACZ,KAAcF,KACjBA,EAAQc,CAAC;AAAA,QAEb;AAAA,QAEC,UAAAJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AAEAlB,EAAO,cAAc;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ButtonGroup.cjs.js","sources":["../../../src/components/ButtonGroup/ButtonGroup.tsx"],"sourcesContent":["\"use client\";\n\nimport { createContext, useContext, useRef } from \"react\";\nimport { useRadio, useRadioGroup } from \"@react-aria/radio\";\nimport { VisuallyHidden } from \"@react-aria/visually-hidden\";\nimport { useRadioGroupState } from \"@react-stately/radio\";\nimport { csx } from \"../../utils\";\n\nimport \"./ButtonGroup.css\";\n\nexport interface ButtonGroupProps {\n /**\n * The value of the currently selected option in the ButtonGroup. Providing\n * this prop causes the component to become controlled.\n */\n value?: string;\n\n /**\n * The initially selected value of the ButtonGroup.\n */\n defaultValue?: string;\n\n /**\n * Called when the ButtonGroup's selected value changes.\n */\n onChange?: (value: string) => void;\n\n /**\n * The ButtonGroup.Option elements to be rendered as the selectable values.\n */\n children?: React.ReactNode;\n}\n\nlet ButtonGroupContext = createContext(null);\n\n/**\n * A radio button group component that allows selection of a single option from multiple choices.\n *\n * API:\n * - {@link ButtonGroupProps}\n */\nexport function ButtonGroup(props: ButtonGroupProps) {\n let sanitizedProps = {\n ...props,\n \"data-testid\": undefined,\n };\n\n let state = useRadioGroupState(sanitizedProps);\n let { radioGroupProps } = useRadioGroup(sanitizedProps, state);\n\n return (\n <div\n {...radioGroupProps}\n className=\"proton-ButtonGroup\"\n data-value={state.selectedValue}\n data-testid={props[\"data-testid\"] || undefined}\n >\n <ButtonGroupContext.Provider value={state}>\n {props.children}\n </ButtonGroupContext.Provider>\n </div>\n );\n}\n\nButtonGroup.displayName = \"ProtonUIButtonGroup\";\n\nexport interface ButtonGroupOptionProps {\n /**\n * The value of this option. When this option is selected, this value will\n * become the ButtonGroup's new `selectedValue`.\n */\n value: string;\n\n /**\n * The text or component to be rendered as this option's content.\n */\n children: React.ReactNode;\n}\n\nButtonGroup.Option = function ButtonGroupOption(props: ButtonGroupOptionProps) {\n let sanitizedProps = {\n ...props,\n \"data-testid\": undefined,\n };\n\n let state = useContext(ButtonGroupContext);\n let ref = useRef(null);\n let { inputProps, isSelected } = useRadio(sanitizedProps, state, ref);\n\n return (\n <label\n className={csx(\n \"proton-ButtonGroup__option\",\n isSelected && \"proton-ButtonGroup__option--selected\"\n )}\n data-selected={isSelected || undefined}\n data-testid={props[\"data-testid\"] || undefined}\n >\n <VisuallyHidden>\n <input {...inputProps} ref={ref} />\n </VisuallyHidden>\n {props.children}\n </label>\n );\n};\n"],"names":["ButtonGroupContext","createContext","ButtonGroup","props","sanitizedProps","state","useRadioGroupState","radioGroupProps","useRadioGroup","jsx","useContext","ref","useRef","inputProps","isSelected","useRadio","jsxs","csx","VisuallyHidden"],"mappings":"ijBAiCA,IAAIA,EAAqBC,EAAAA,cAAc,IAAI,EAQpC,SAASC,EAAYC,EAAyB,CACnD,IAAIC,EAAiB,CACnB,GAAGD,EACH,cAAe,MAAA,EAGbE,EAAQC,EAAAA,mBAAmBF,CAAc,EACzC,CAAE,gBAAAG,CAAA,EAAoBC,gBAAcJ,EAAgBC,CAAK,EAE7D,OACEI,EAAAA,kBAAAA,IAAC,MAAA,CACE,GAAGF,EACJ,UAAU,qBACV,aAAYF,EAAM,cAClB,cAAaF,EAAM,aAAa,GAAK,OAErC,iCAACH,EAAmB,SAAnB,CAA4B,MAAOK,EACjC,WAAM,QAAA,CACT,CAAA,CAAA,CAGN,CAEAH,EAAY,YAAc,sBAe1BA,EAAY,OAAS,SAA2BC,EAA+B,CAC7E,IAAIC,EAAiB,CACnB,GAAGD,EACH,cAAe,MAAA,EAGbE,EAAQK,EAAAA,WAAWV,CAAkB,EACrCW,EAAMC,EAAAA,OAAO,IAAI,EACjB,CAAE,WAAAC,EAAY,WAAAC,CAAA,EAAeC,EAAAA,SAASX,EAAgBC,EAAOM,CAAG,EAEpE,OACEK,EAAAA,kBAAAA,KAAC,QAAA,CACC,UAAWC,EAAAA,IACT,6BACAH,GAAc,sCAAA,EAEhB,gBAAeA,GAAc,OAC7B,cAAaX,EAAM,aAAa,GAAK,OAErC,SAAA,CAAAM,wBAACS,EAAAA,gBACC,SAAAT,EAAAA,kBAAAA,IAAC,QAAA,CAAO,GAAGI,EAAY,IAAAF,EAAU,EACnC,EACCR,EAAM,QAAA,CAAA,CAAA,CAGb"}
1
+ {"version":3,"file":"ButtonGroup.cjs.js","sources":["../../../src/components/ButtonGroup/ButtonGroup.tsx"],"sourcesContent":["\"use client\";\n\nimport { createContext, useContext, useRef } from \"react\";\nimport { useRadio, useRadioGroup } from \"@react-aria/radio\";\nimport { VisuallyHidden } from \"@react-aria/visually-hidden\";\nimport { useRadioGroupState } from \"@react-stately/radio\";\nimport { csx } from \"../../utils\";\n\nimport \"./ButtonGroup.css\";\n\nexport interface ButtonGroupProps {\n /**\n * The value of the currently selected option in the ButtonGroup. Providing\n * this prop causes the component to become controlled.\n */\n value?: string;\n\n /**\n * The initially selected value of the ButtonGroup.\n */\n defaultValue?: string;\n\n /**\n * Called when the ButtonGroup's selected value changes.\n */\n onChange?: (value: string) => void;\n\n /**\n * The ButtonGroup.Option elements to be rendered as the selectable values.\n */\n children?: React.ReactNode;\n}\n\nlet ButtonGroupContext = createContext(null);\n\n/**\n * A radio button group component that allows selection of a single option from multiple choices.\n *\n * API:\n * - {@link ButtonGroupProps}\n */\nexport function ButtonGroup(props: ButtonGroupProps) {\n let sanitizedProps = {\n ...props,\n \"data-testid\": undefined,\n };\n\n let state = useRadioGroupState(sanitizedProps);\n let { radioGroupProps } = useRadioGroup(sanitizedProps, state);\n\n return (\n <div\n {...radioGroupProps}\n className=\"proton-ButtonGroup\"\n data-value={state.selectedValue}\n data-testid={props[\"data-testid\"] || undefined}\n >\n <ButtonGroupContext.Provider value={state}>\n {props.children}\n </ButtonGroupContext.Provider>\n </div>\n );\n}\n\nButtonGroup.displayName = \"ProtonUIButtonGroup\";\n\nexport interface ButtonGroupOptionProps {\n /**\n * The value of this option. When this option is selected, this value will\n * become the ButtonGroup's new `selectedValue`.\n */\n value: string;\n\n /**\n * The text or component to be rendered as this option's content.\n */\n children: React.ReactNode;\n}\n\nButtonGroup.Option = function ButtonGroupOption(props: ButtonGroupOptionProps) {\n let sanitizedProps = {\n ...props,\n \"data-testid\": undefined,\n };\n\n let state = useContext(ButtonGroupContext);\n let ref = useRef(null);\n let { inputProps, isSelected } = useRadio(sanitizedProps, state, ref);\n\n return (\n <label\n className={csx(\n \"proton-ButtonGroup__option\",\n isSelected && \"proton-ButtonGroup__option--selected\"\n )}\n data-selected={isSelected || undefined}\n data-testid={props[\"data-testid\"] || undefined}\n >\n <VisuallyHidden>\n <input {...inputProps} ref={ref} />\n </VisuallyHidden>\n {props.children}\n </label>\n );\n};\n"],"names":["ButtonGroupContext","createContext","ButtonGroup","props","sanitizedProps","state","useRadioGroupState","radioGroupProps","useRadioGroup","jsx","useContext","ref","useRef","inputProps","isSelected","useRadio","jsxs","csx","VisuallyHidden"],"mappings":"ijBAiCA,IAAIA,EAAqBC,EAAAA,cAAc,IAAI,EAQpC,SAASC,EAAYC,EAAyB,CACnD,IAAIC,EAAiB,CACnB,GAAGD,EACH,cAAe,MAAA,EAGbE,EAAQC,qBAAmBF,CAAc,EACzC,CAAE,gBAAAG,CAAoB,EAAAC,EAAA,cAAcJ,EAAgBC,CAAK,EAG3D,OAAAI,EAAA,kBAAA,IAAC,MAAA,CACE,GAAGF,EACJ,UAAU,qBACV,aAAYF,EAAM,cAClB,cAAaF,EAAM,aAAa,GAAK,OAErC,iCAACH,EAAmB,SAAnB,CAA4B,MAAOK,EACjC,WAAM,SACT,CAAA,CAAA,CAGN,CAEAH,EAAY,YAAc,sBAe1BA,EAAY,OAAS,SAA2BC,EAA+B,CAC7E,IAAIC,EAAiB,CACnB,GAAGD,EACH,cAAe,MAAA,EAGbE,EAAQK,aAAWV,CAAkB,EACrCW,EAAMC,SAAO,IAAI,EACjB,CAAE,WAAAC,EAAY,WAAAC,GAAeC,EAAS,SAAAX,EAAgBC,EAAOM,CAAG,EAGlE,OAAAK,EAAA,kBAAA,KAAC,QAAA,CACC,UAAWC,EAAA,IACT,6BACAH,GAAc,sCAChB,EACA,gBAAeA,GAAc,OAC7B,cAAaX,EAAM,aAAa,GAAK,OAErC,SAAA,CAAAM,wBAACS,EAAAA,gBACC,SAACT,EAAA,kBAAA,IAAA,QAAA,CAAO,GAAGI,EAAY,IAAAF,CAAU,CAAA,EACnC,EACCR,EAAM,QAAA,CAAA,CAAA,CAGb"}
@@ -1 +1 @@
1
- {"version":3,"file":"ButtonGroup.es.js","sources":["../../../src/components/ButtonGroup/ButtonGroup.tsx"],"sourcesContent":["\"use client\";\n\nimport { createContext, useContext, useRef } from \"react\";\nimport { useRadio, useRadioGroup } from \"@react-aria/radio\";\nimport { VisuallyHidden } from \"@react-aria/visually-hidden\";\nimport { useRadioGroupState } from \"@react-stately/radio\";\nimport { csx } from \"../../utils\";\n\nimport \"./ButtonGroup.css\";\n\nexport interface ButtonGroupProps {\n /**\n * The value of the currently selected option in the ButtonGroup. Providing\n * this prop causes the component to become controlled.\n */\n value?: string;\n\n /**\n * The initially selected value of the ButtonGroup.\n */\n defaultValue?: string;\n\n /**\n * Called when the ButtonGroup's selected value changes.\n */\n onChange?: (value: string) => void;\n\n /**\n * The ButtonGroup.Option elements to be rendered as the selectable values.\n */\n children?: React.ReactNode;\n}\n\nlet ButtonGroupContext = createContext(null);\n\n/**\n * A radio button group component that allows selection of a single option from multiple choices.\n *\n * API:\n * - {@link ButtonGroupProps}\n */\nexport function ButtonGroup(props: ButtonGroupProps) {\n let sanitizedProps = {\n ...props,\n \"data-testid\": undefined,\n };\n\n let state = useRadioGroupState(sanitizedProps);\n let { radioGroupProps } = useRadioGroup(sanitizedProps, state);\n\n return (\n <div\n {...radioGroupProps}\n className=\"proton-ButtonGroup\"\n data-value={state.selectedValue}\n data-testid={props[\"data-testid\"] || undefined}\n >\n <ButtonGroupContext.Provider value={state}>\n {props.children}\n </ButtonGroupContext.Provider>\n </div>\n );\n}\n\nButtonGroup.displayName = \"ProtonUIButtonGroup\";\n\nexport interface ButtonGroupOptionProps {\n /**\n * The value of this option. When this option is selected, this value will\n * become the ButtonGroup's new `selectedValue`.\n */\n value: string;\n\n /**\n * The text or component to be rendered as this option's content.\n */\n children: React.ReactNode;\n}\n\nButtonGroup.Option = function ButtonGroupOption(props: ButtonGroupOptionProps) {\n let sanitizedProps = {\n ...props,\n \"data-testid\": undefined,\n };\n\n let state = useContext(ButtonGroupContext);\n let ref = useRef(null);\n let { inputProps, isSelected } = useRadio(sanitizedProps, state, ref);\n\n return (\n <label\n className={csx(\n \"proton-ButtonGroup__option\",\n isSelected && \"proton-ButtonGroup__option--selected\"\n )}\n data-selected={isSelected || undefined}\n data-testid={props[\"data-testid\"] || undefined}\n >\n <VisuallyHidden>\n <input {...inputProps} ref={ref} />\n </VisuallyHidden>\n {props.children}\n </label>\n );\n};\n"],"names":["ButtonGroupContext","createContext","ButtonGroup","props","sanitizedProps","state","useRadioGroupState","radioGroupProps","useRadioGroup","jsx","useContext","ref","useRef","inputProps","isSelected","useRadio","jsxs","csx","VisuallyHidden"],"mappings":";;;;;;;;AAiCA,IAAIA,IAAqBC,EAAc,IAAI;AAQpC,SAASC,EAAYC,GAAyB;AACnD,MAAIC,IAAiB;AAAA,IACnB,GAAGD;AAAA,IACH,eAAe;AAAA,EAAA,GAGbE,IAAQC,EAAmBF,CAAc,GACzC,EAAE,iBAAAG,EAAA,IAAoBC,EAAcJ,GAAgBC,CAAK;AAE7D,SACEI,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGF;AAAA,MACJ,WAAU;AAAA,MACV,cAAYF,EAAM;AAAA,MAClB,eAAaF,EAAM,aAAa,KAAK;AAAA,MAErC,gCAACH,EAAmB,UAAnB,EAA4B,OAAOK,GACjC,YAAM,SAAA,CACT;AAAA,IAAA;AAAA,EAAA;AAGN;AAEAH,EAAY,cAAc;AAe1BA,EAAY,SAAS,SAA2BC,GAA+B;AAC7E,MAAIC,IAAiB;AAAA,IACnB,GAAGD;AAAA,IACH,eAAe;AAAA,EAAA,GAGbE,IAAQK,EAAWV,CAAkB,GACrCW,IAAMC,EAAO,IAAI,GACjB,EAAE,YAAAC,GAAY,YAAAC,EAAA,IAAeC,EAASX,GAAgBC,GAAOM,CAAG;AAEpE,SACEK,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAH,KAAc;AAAA,MAAA;AAAA,MAEhB,iBAAeA,KAAc;AAAA,MAC7B,eAAaX,EAAM,aAAa,KAAK;AAAA,MAErC,UAAA;AAAA,QAAAM,gBAAAA,MAACS,KACC,UAAAT,gBAAAA,EAAAA,IAAC,SAAA,EAAO,GAAGI,GAAY,KAAAF,GAAU,GACnC;AAAA,QACCR,EAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGb;"}
1
+ {"version":3,"file":"ButtonGroup.es.js","sources":["../../../src/components/ButtonGroup/ButtonGroup.tsx"],"sourcesContent":["\"use client\";\n\nimport { createContext, useContext, useRef } from \"react\";\nimport { useRadio, useRadioGroup } from \"@react-aria/radio\";\nimport { VisuallyHidden } from \"@react-aria/visually-hidden\";\nimport { useRadioGroupState } from \"@react-stately/radio\";\nimport { csx } from \"../../utils\";\n\nimport \"./ButtonGroup.css\";\n\nexport interface ButtonGroupProps {\n /**\n * The value of the currently selected option in the ButtonGroup. Providing\n * this prop causes the component to become controlled.\n */\n value?: string;\n\n /**\n * The initially selected value of the ButtonGroup.\n */\n defaultValue?: string;\n\n /**\n * Called when the ButtonGroup's selected value changes.\n */\n onChange?: (value: string) => void;\n\n /**\n * The ButtonGroup.Option elements to be rendered as the selectable values.\n */\n children?: React.ReactNode;\n}\n\nlet ButtonGroupContext = createContext(null);\n\n/**\n * A radio button group component that allows selection of a single option from multiple choices.\n *\n * API:\n * - {@link ButtonGroupProps}\n */\nexport function ButtonGroup(props: ButtonGroupProps) {\n let sanitizedProps = {\n ...props,\n \"data-testid\": undefined,\n };\n\n let state = useRadioGroupState(sanitizedProps);\n let { radioGroupProps } = useRadioGroup(sanitizedProps, state);\n\n return (\n <div\n {...radioGroupProps}\n className=\"proton-ButtonGroup\"\n data-value={state.selectedValue}\n data-testid={props[\"data-testid\"] || undefined}\n >\n <ButtonGroupContext.Provider value={state}>\n {props.children}\n </ButtonGroupContext.Provider>\n </div>\n );\n}\n\nButtonGroup.displayName = \"ProtonUIButtonGroup\";\n\nexport interface ButtonGroupOptionProps {\n /**\n * The value of this option. When this option is selected, this value will\n * become the ButtonGroup's new `selectedValue`.\n */\n value: string;\n\n /**\n * The text or component to be rendered as this option's content.\n */\n children: React.ReactNode;\n}\n\nButtonGroup.Option = function ButtonGroupOption(props: ButtonGroupOptionProps) {\n let sanitizedProps = {\n ...props,\n \"data-testid\": undefined,\n };\n\n let state = useContext(ButtonGroupContext);\n let ref = useRef(null);\n let { inputProps, isSelected } = useRadio(sanitizedProps, state, ref);\n\n return (\n <label\n className={csx(\n \"proton-ButtonGroup__option\",\n isSelected && \"proton-ButtonGroup__option--selected\"\n )}\n data-selected={isSelected || undefined}\n data-testid={props[\"data-testid\"] || undefined}\n >\n <VisuallyHidden>\n <input {...inputProps} ref={ref} />\n </VisuallyHidden>\n {props.children}\n </label>\n );\n};\n"],"names":["ButtonGroupContext","createContext","ButtonGroup","props","sanitizedProps","state","useRadioGroupState","radioGroupProps","useRadioGroup","jsx","useContext","ref","useRef","inputProps","isSelected","useRadio","jsxs","csx","VisuallyHidden"],"mappings":";;;;;;;;AAiCA,IAAIA,IAAqBC,EAAc,IAAI;AAQpC,SAASC,EAAYC,GAAyB;AACnD,MAAIC,IAAiB;AAAA,IACnB,GAAGD;AAAA,IACH,eAAe;AAAA,EAAA,GAGbE,IAAQC,EAAmBF,CAAc,GACzC,EAAE,iBAAAG,EAAoB,IAAAC,EAAcJ,GAAgBC,CAAK;AAG3D,SAAAI,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGF;AAAA,MACJ,WAAU;AAAA,MACV,cAAYF,EAAM;AAAA,MAClB,eAAaF,EAAM,aAAa,KAAK;AAAA,MAErC,gCAACH,EAAmB,UAAnB,EAA4B,OAAOK,GACjC,YAAM,UACT;AAAA,IAAA;AAAA,EAAA;AAGN;AAEAH,EAAY,cAAc;AAe1BA,EAAY,SAAS,SAA2BC,GAA+B;AAC7E,MAAIC,IAAiB;AAAA,IACnB,GAAGD;AAAA,IACH,eAAe;AAAA,EAAA,GAGbE,IAAQK,EAAWV,CAAkB,GACrCW,IAAMC,EAAO,IAAI,GACjB,EAAE,YAAAC,GAAY,YAAAC,MAAeC,EAASX,GAAgBC,GAAOM,CAAG;AAGlE,SAAAK,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAH,KAAc;AAAA,MAChB;AAAA,MACA,iBAAeA,KAAc;AAAA,MAC7B,eAAaX,EAAM,aAAa,KAAK;AAAA,MAErC,UAAA;AAAA,QAAAM,gBAAAA,MAACS,KACC,UAACT,gBAAAA,EAAA,IAAA,SAAA,EAAO,GAAGI,GAAY,KAAAF,EAAU,CAAA,GACnC;AAAA,QACCR,EAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGb;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("../../node_modules/react/jsx-runtime.cjs.js"),S=require("react"),i=require("../Button/Button.cjs.js"),E=require("../Icon/Icon.cjs.js"),T=require("../Menu/MenuTrigger.cjs.js");;/* empty css */const u=44;function c({items:e,defaultValue:o,children:l,onSelectionChange:a,disabledKeys:d,selectedKey:g,icon:j,variant:s,fullWidth:r,onPress:p,...n}){const h=r?u/2:0;return t.jsxRuntimeExports.jsxs("div",{className:"proton-ButtonWithSelect",children:[t.jsxRuntimeExports.jsx("div",{className:"proton-ButtonWithSelect__button",style:{"--proton-button-text-shift":`${h}px`,"--flex":r?1:0},children:t.jsxRuntimeExports.jsx(i.Button,{...n,onPress:p,icon:j,fullWidth:r,variant:s,"data-testid":"ButtonWithSelect-Button",children:l})}),t.jsxRuntimeExports.jsx(T.MenuTrigger,{items:e,disabled:n.isDisabled,disabledKeys:d,onSelectionChange:a,selectedKey:g,renderTrigger:({isOpen:m,setIsOpen:B})=>t.jsxRuntimeExports.jsx(x,{...n,variant:s,onPress:R=>{R.stopPropagation(),B(!m)}})})]})}c.displayName="ProtonUIButtonWithSelect";const x=S.forwardRef((e,o)=>t.jsxRuntimeExports.jsx("div",{className:"proton-ButtonWithSelect__trigger",style:{"--trigger-width":`${u}px`},children:t.jsxRuntimeExports.jsx(i.Button,{...e,"data-testid":"ButtonWithSelect-Trigger",ref:o,children:t.jsxRuntimeExports.jsx("div",{className:"proton-ButtonWithSelect__trigger-content",children:t.jsxRuntimeExports.jsx(E.Icon,{id:"chevron-down",size:16})})})}));x.displayName="ProtonUIButtonWithSelectTrigger";exports.ButtonWithSelect=c;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("../../node_modules/react/jsx-runtime.cjs.js"),R=require("react"),s=require("../Button/Button.cjs.js"),S=require("../Icon/Icon.cjs.js"),E=require("../Menu/MenuTrigger.cjs.js");;/* empty css */const u=44;function c({items:e,defaultValue:i,children:l,onSelectionChange:d,disabledKeys:a,selectedKey:g,icon:j,variant:o,fullWidth:r,onPress:h,...n}){const m=r?u/2:0;return t.jsxRuntimeExports.jsxs("div",{className:"proton-ButtonWithSelect",children:[t.jsxRuntimeExports.jsx("div",{className:"proton-ButtonWithSelect__button",style:{"--proton-button-text-shift":`${m}px`,"--flex":r?1:0},children:t.jsxRuntimeExports.jsx(s.Button,{...n,onPress:h,icon:j,fullWidth:r,variant:o,"data-testid":"ButtonWithSelect-Button",children:l})}),t.jsxRuntimeExports.jsx(E.MenuTrigger,{items:e,disabled:n.isDisabled,disabledKeys:a,onSelectionChange:d,selectedKey:g,renderTrigger:({isOpen:p,setIsOpen:B})=>t.jsxRuntimeExports.jsx(x,{...n,variant:o,onPress:()=>{B(!p)}})})]})}c.displayName="ProtonUIButtonWithSelect";const x=R.forwardRef((e,i)=>t.jsxRuntimeExports.jsx("div",{className:"proton-ButtonWithSelect__trigger",style:{"--trigger-width":`${u}px`},children:t.jsxRuntimeExports.jsx(s.Button,{...e,to:void 0,"data-testid":"ButtonWithSelect-Trigger",ref:i,children:t.jsxRuntimeExports.jsx("div",{className:"proton-ButtonWithSelect__trigger-content",children:t.jsxRuntimeExports.jsx(S.Icon,{id:"chevron-down",size:16})})})}));x.displayName="ProtonUIButtonWithSelectTrigger";exports.ButtonWithSelect=c;
2
2
  //# sourceMappingURL=ButtonWithSelect.cjs.js.map