@backstage/ui 0.7.2-next.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/css/styles.css +6411 -8180
  3. package/dist/components/Avatar/Avatar.esm.js +21 -7
  4. package/dist/components/Avatar/Avatar.esm.js.map +1 -1
  5. package/dist/components/Avatar/Avatar.module.css.esm.js +8 -0
  6. package/dist/components/Avatar/Avatar.module.css.esm.js.map +1 -0
  7. package/dist/components/Box/Box.esm.js +20 -23
  8. package/dist/components/Box/Box.esm.js.map +1 -1
  9. package/dist/components/Box/Box.module.css.esm.js +8 -0
  10. package/dist/components/Box/Box.module.css.esm.js.map +1 -0
  11. package/dist/components/Button/Button.esm.js +10 -19
  12. package/dist/components/Button/Button.esm.js.map +1 -1
  13. package/dist/components/Button/Button.module.css.esm.js +8 -0
  14. package/dist/components/Button/Button.module.css.esm.js.map +1 -0
  15. package/dist/components/ButtonIcon/ButtonIcon.esm.js +14 -12
  16. package/dist/components/ButtonIcon/ButtonIcon.esm.js.map +1 -1
  17. package/dist/components/ButtonIcon/ButtonIcon.module.css.esm.js +8 -0
  18. package/dist/components/ButtonIcon/ButtonIcon.module.css.esm.js.map +1 -0
  19. package/dist/components/ButtonLink/ButtonLink.esm.js +43 -17
  20. package/dist/components/ButtonLink/ButtonLink.esm.js.map +1 -1
  21. package/dist/components/Card/Card.esm.js +46 -28
  22. package/dist/components/Card/Card.esm.js.map +1 -1
  23. package/dist/components/Card/Card.module.css.esm.js +8 -0
  24. package/dist/components/Card/Card.module.css.esm.js.map +1 -0
  25. package/dist/components/Checkbox/Checkbox.esm.js +14 -49
  26. package/dist/components/Checkbox/Checkbox.esm.js.map +1 -1
  27. package/dist/components/Checkbox/Checkbox.module.css.esm.js +8 -0
  28. package/dist/components/Checkbox/Checkbox.module.css.esm.js.map +1 -0
  29. package/dist/components/Collapsible/Collapsible.esm.js +14 -9
  30. package/dist/components/Collapsible/Collapsible.esm.js.map +1 -1
  31. package/dist/components/Collapsible/Collapsible.module.css.esm.js +8 -0
  32. package/dist/components/Collapsible/Collapsible.module.css.esm.js.map +1 -0
  33. package/dist/components/Container/Container.esm.js +22 -25
  34. package/dist/components/Container/Container.esm.js.map +1 -1
  35. package/dist/components/Container/Container.module.css.esm.js +8 -0
  36. package/dist/components/Container/Container.module.css.esm.js.map +1 -0
  37. package/dist/components/Dialog/Dialog.esm.js +103 -0
  38. package/dist/components/Dialog/Dialog.esm.js.map +1 -0
  39. package/dist/components/Dialog/Dialog.module.css.esm.js +8 -0
  40. package/dist/components/Dialog/Dialog.module.css.esm.js.map +1 -0
  41. package/dist/components/FieldError/FieldError.esm.js +5 -2
  42. package/dist/components/FieldError/FieldError.esm.js.map +1 -1
  43. package/dist/components/FieldError/FieldError.module.css.esm.js +8 -0
  44. package/dist/components/FieldError/FieldError.module.css.esm.js.map +1 -0
  45. package/dist/components/FieldLabel/FieldLabel.esm.js +50 -13
  46. package/dist/components/FieldLabel/FieldLabel.esm.js.map +1 -1
  47. package/dist/components/FieldLabel/FieldLabel.module.css.esm.js +8 -0
  48. package/dist/components/FieldLabel/FieldLabel.module.css.esm.js.map +1 -0
  49. package/dist/components/Flex/Flex.esm.js +22 -18
  50. package/dist/components/Flex/Flex.esm.js.map +1 -1
  51. package/dist/components/Flex/Flex.module.css.esm.js +8 -0
  52. package/dist/components/Flex/Flex.module.css.esm.js.map +1 -0
  53. package/dist/components/Grid/Grid.esm.js +41 -29
  54. package/dist/components/Grid/Grid.esm.js.map +1 -1
  55. package/dist/components/Grid/Grid.module.css.esm.js +8 -0
  56. package/dist/components/Grid/Grid.module.css.esm.js.map +1 -0
  57. package/dist/components/Header/Header.esm.js +22 -11
  58. package/dist/components/Header/Header.esm.js.map +1 -1
  59. package/dist/components/Header/Header.module.css.esm.js +8 -0
  60. package/dist/components/Header/Header.module.css.esm.js.map +1 -0
  61. package/dist/components/Header/HeaderToolbar.esm.js +71 -7
  62. package/dist/components/Header/HeaderToolbar.esm.js.map +1 -1
  63. package/dist/components/HeaderPage/HeaderPage.esm.js +51 -31
  64. package/dist/components/HeaderPage/HeaderPage.esm.js.map +1 -1
  65. package/dist/components/HeaderPage/HeaderPage.module.css.esm.js +8 -0
  66. package/dist/components/HeaderPage/HeaderPage.module.css.esm.js.map +1 -0
  67. package/dist/components/Link/Link.esm.js +26 -15
  68. package/dist/components/Link/Link.esm.js.map +1 -1
  69. package/dist/components/Link/Link.module.css.esm.js +8 -0
  70. package/dist/components/Link/Link.module.css.esm.js.map +1 -0
  71. package/dist/components/Menu/Menu.esm.js +380 -106
  72. package/dist/components/Menu/Menu.esm.js.map +1 -1
  73. package/dist/components/Menu/Menu.module.css.esm.js +8 -0
  74. package/dist/components/Menu/Menu.module.css.esm.js.map +1 -0
  75. package/dist/components/Popover/Popover.module.css.esm.js +8 -0
  76. package/dist/components/Popover/Popover.module.css.esm.js.map +1 -0
  77. package/dist/components/RadioGroup/RadioGroup.esm.js +6 -5
  78. package/dist/components/RadioGroup/RadioGroup.esm.js.map +1 -1
  79. package/dist/components/RadioGroup/RadioGroup.module.css.esm.js +8 -0
  80. package/dist/components/RadioGroup/RadioGroup.module.css.esm.js.map +1 -0
  81. package/dist/components/SearchField/SearchField.esm.js +44 -23
  82. package/dist/components/SearchField/SearchField.esm.js.map +1 -1
  83. package/dist/components/SearchField/SearchField.module.css.esm.js +8 -0
  84. package/dist/components/SearchField/SearchField.module.css.esm.js.map +1 -0
  85. package/dist/components/Select/Select.esm.js +60 -25
  86. package/dist/components/Select/Select.esm.js.map +1 -1
  87. package/dist/components/Select/Select.module.css.esm.js +8 -0
  88. package/dist/components/Select/Select.module.css.esm.js.map +1 -0
  89. package/dist/components/Skeleton/Skeleton.esm.js +12 -4
  90. package/dist/components/Skeleton/Skeleton.esm.js.map +1 -1
  91. package/dist/components/Skeleton/Skeleton.module.css.esm.js +8 -0
  92. package/dist/components/Skeleton/Skeleton.module.css.esm.js.map +1 -0
  93. package/dist/components/Switch/Switch.esm.js +22 -6
  94. package/dist/components/Switch/Switch.esm.js.map +1 -1
  95. package/dist/components/Switch/Switch.module.css.esm.js +8 -0
  96. package/dist/components/Switch/Switch.module.css.esm.js.map +1 -0
  97. package/dist/components/Table/Table.module.css.esm.js +8 -0
  98. package/dist/components/Table/Table.module.css.esm.js.map +1 -0
  99. package/dist/components/Table/components/Cell.esm.js +44 -17
  100. package/dist/components/Table/components/Cell.esm.js.map +1 -1
  101. package/dist/components/Table/components/CellProfile.esm.js +71 -26
  102. package/dist/components/Table/components/CellProfile.esm.js.map +1 -1
  103. package/dist/components/Table/components/Column.esm.js +39 -9
  104. package/dist/components/Table/components/Column.esm.js.map +1 -1
  105. package/dist/components/Table/components/Row.esm.js +19 -11
  106. package/dist/components/Table/components/Row.esm.js.map +1 -1
  107. package/dist/components/Table/components/Table.esm.js +8 -3
  108. package/dist/components/Table/components/Table.esm.js.map +1 -1
  109. package/dist/components/Table/components/TableBody.esm.js +13 -2
  110. package/dist/components/Table/components/TableBody.esm.js.map +1 -1
  111. package/dist/components/Table/components/TableHeader.esm.js +20 -10
  112. package/dist/components/Table/components/TableHeader.esm.js.map +1 -1
  113. package/dist/components/TablePagination/TablePagination.esm.js +80 -63
  114. package/dist/components/TablePagination/TablePagination.esm.js.map +1 -1
  115. package/dist/components/TablePagination/TablePagination.module.css.esm.js +8 -0
  116. package/dist/components/TablePagination/TablePagination.module.css.esm.js.map +1 -0
  117. package/dist/components/Tabs/Tabs.esm.js +64 -32
  118. package/dist/components/Tabs/Tabs.esm.js.map +1 -1
  119. package/dist/components/Tabs/Tabs.module.css.esm.js +8 -0
  120. package/dist/components/Tabs/Tabs.module.css.esm.js.map +1 -0
  121. package/dist/components/Tabs/TabsIndicators.esm.js +14 -2
  122. package/dist/components/Tabs/TabsIndicators.esm.js.map +1 -1
  123. package/dist/components/TagGroup/TagGroup.esm.js +35 -19
  124. package/dist/components/TagGroup/TagGroup.esm.js.map +1 -1
  125. package/dist/components/TagGroup/TagGroup.module.css.esm.js +8 -0
  126. package/dist/components/TagGroup/TagGroup.module.css.esm.js.map +1 -0
  127. package/dist/components/Text/Text.esm.js +10 -19
  128. package/dist/components/Text/Text.esm.js.map +1 -1
  129. package/dist/components/Text/Text.module.css.esm.js +8 -0
  130. package/dist/components/Text/Text.module.css.esm.js.map +1 -0
  131. package/dist/components/TextField/TextField.esm.js +29 -16
  132. package/dist/components/TextField/TextField.esm.js.map +1 -1
  133. package/dist/components/TextField/TextField.module.css.esm.js +8 -0
  134. package/dist/components/TextField/TextField.module.css.esm.js.map +1 -0
  135. package/dist/components/Tooltip/Tooltip.esm.js +19 -7
  136. package/dist/components/Tooltip/Tooltip.esm.js.map +1 -1
  137. package/dist/components/Tooltip/Tooltip.module.css.esm.js +8 -0
  138. package/dist/components/Tooltip/Tooltip.module.css.esm.js.map +1 -0
  139. package/dist/hooks/useStyles.esm.js +65 -9
  140. package/dist/hooks/useStyles.esm.js.map +1 -1
  141. package/dist/index.d.ts +149 -434
  142. package/dist/index.esm.js +1 -9
  143. package/dist/index.esm.js.map +1 -1
  144. package/dist/node_modules_dist/style-inject/dist/style-inject.es.esm.js +29 -0
  145. package/dist/node_modules_dist/style-inject/dist/style-inject.es.esm.js.map +1 -0
  146. package/dist/utils/componentDefinitions.esm.js +113 -16
  147. package/dist/utils/componentDefinitions.esm.js.map +1 -1
  148. package/dist/utils/utilityClassMap.esm.js +189 -0
  149. package/dist/utils/utilityClassMap.esm.js.map +1 -0
  150. package/package.json +3 -3
  151. package/dist/components/Box/Box.props.esm.js +0 -7
  152. package/dist/components/Box/Box.props.esm.js.map +0 -1
  153. package/dist/components/Flex/Flex.props.esm.js +0 -31
  154. package/dist/components/Flex/Flex.props.esm.js.map +0 -1
  155. package/dist/components/Grid/Grid.props.esm.js +0 -58
  156. package/dist/components/Grid/Grid.props.esm.js.map +0 -1
  157. package/dist/components/Icon/Icon.esm.js +0 -29
  158. package/dist/components/Icon/Icon.esm.js.map +0 -1
  159. package/dist/components/Icon/context.esm.js +0 -10
  160. package/dist/components/Icon/context.esm.js.map +0 -1
  161. package/dist/components/Icon/icons.esm.js +0 -63
  162. package/dist/components/Icon/icons.esm.js.map +0 -1
  163. package/dist/components/Icon/provider.esm.js +0 -12
  164. package/dist/components/Icon/provider.esm.js.map +0 -1
  165. package/dist/components/ScrollArea/ScrollArea.esm.js +0 -63
  166. package/dist/components/ScrollArea/ScrollArea.esm.js.map +0 -1
  167. package/dist/props/display.props.esm.js +0 -12
  168. package/dist/props/display.props.esm.js.map +0 -1
  169. package/dist/props/gap-props.esm.js +0 -15
  170. package/dist/props/gap-props.esm.js.map +0 -1
  171. package/dist/props/height.props.esm.js +0 -23
  172. package/dist/props/height.props.esm.js.map +0 -1
  173. package/dist/props/margin.props.esm.js +0 -54
  174. package/dist/props/margin.props.esm.js.map +0 -1
  175. package/dist/props/padding.props.esm.js +0 -54
  176. package/dist/props/padding.props.esm.js.map +0 -1
  177. package/dist/props/position.props.esm.js +0 -18
  178. package/dist/props/position.props.esm.js.map +0 -1
  179. package/dist/props/prop-def.esm.js +0 -4
  180. package/dist/props/prop-def.esm.js.map +0 -1
  181. package/dist/props/spacing.props.esm.js +0 -28
  182. package/dist/props/spacing.props.esm.js.map +0 -1
  183. package/dist/props/width.props.esm.js +0 -23
  184. package/dist/props/width.props.esm.js.map +0 -1
  185. package/dist/utils/extractProps.esm.js +0 -49
  186. package/dist/utils/extractProps.esm.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Link.esm.js","sources":["../../../src/components/Link/Link.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { forwardRef } from 'react';\nimport { Link as AriaLink, RouterProvider } from 'react-aria-components';\nimport clsx from 'clsx';\nimport { useStyles } from '../../hooks/useStyles';\nimport type { LinkProps } from './types';\nimport { useNavigate, useHref } from 'react-router-dom';\nimport { isExternalLink } from '../../utils/isExternalLink';\n\n/** @public */\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>((props, ref) => {\n const navigate = useNavigate();\n const {\n className,\n variant = 'body',\n weight = 'regular',\n color = 'primary',\n truncate,\n href,\n ...restProps\n } = props;\n\n const { classNames: linkClassNames } = useStyles('Link');\n const { classNames: textClassNames, dataAttributes: textDataAttributes } =\n useStyles('Text', {\n variant,\n weight,\n color,\n });\n\n const isExternal = isExternalLink(href);\n\n // If it's an external link, render AriaLink without RouterProvider\n if (isExternal) {\n return (\n <AriaLink\n ref={ref}\n className={clsx(textClassNames.root, linkClassNames.root, className)}\n data-truncate={truncate}\n href={href}\n {...textDataAttributes}\n {...restProps}\n />\n );\n }\n\n // For internal links, use RouterProvider\n return (\n <RouterProvider navigate={navigate} useHref={useHref}>\n <AriaLink\n ref={ref}\n className={clsx(textClassNames.root, linkClassNames.root, className)}\n data-truncate={truncate}\n {...textDataAttributes}\n href={href}\n {...restProps}\n />\n </RouterProvider>\n );\n});\n\nLink.displayName = 'Link';\n"],"names":["AriaLink"],"mappings":";;;;;;;;AAyBO,MAAM,IAAA,GAAO,UAAA,CAAyC,CAAC,KAAA,EAAO,GAAA,KAAQ;AAC3E,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,OAAA,GAAU,MAAA;AAAA,IACV,MAAA,GAAS,SAAA;AAAA,IACT,KAAA,GAAQ,SAAA;AAAA,IACR,QAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,EAAE,UAAA,EAAY,cAAA,EAAe,GAAI,UAAU,MAAM,CAAA;AACvD,EAAA,MAAM,EAAE,UAAA,EAAY,cAAA,EAAgB,gBAAgB,kBAAA,EAAmB,GACrE,UAAU,MAAA,EAAQ;AAAA,IAChB,OAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACD,CAAA;AAEH,EAAA,MAAM,UAAA,GAAa,eAAe,IAAI,CAAA;AAGtC,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,uBACE,GAAA;AAAA,MAACA,MAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAW,IAAA,CAAK,cAAA,CAAe,IAAA,EAAM,cAAA,CAAe,MAAM,SAAS,CAAA;AAAA,QACnE,eAAA,EAAe,QAAA;AAAA,QACf,IAAA;AAAA,QACC,GAAG,kBAAA;AAAA,QACH,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AAGA,EAAA,uBACE,GAAA,CAAC,cAAA,EAAA,EAAe,QAAA,EAAoB,OAAA,EAClC,QAAA,kBAAA,GAAA;AAAA,IAACA,MAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAW,IAAA,CAAK,cAAA,CAAe,IAAA,EAAM,cAAA,CAAe,MAAM,SAAS,CAAA;AAAA,MACnE,eAAA,EAAe,QAAA;AAAA,MACd,GAAG,kBAAA;AAAA,MACJ,IAAA;AAAA,MACC,GAAG;AAAA;AAAA,GACN,EACF,CAAA;AAEJ,CAAC;AAED,IAAA,CAAK,WAAA,GAAc,MAAA;;;;"}
1
+ {"version":3,"file":"Link.esm.js","sources":["../../../src/components/Link/Link.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { forwardRef } from 'react';\nimport { Link as AriaLink, RouterProvider } from 'react-aria-components';\nimport clsx from 'clsx';\nimport { useStyles } from '../../hooks/useStyles';\nimport type { LinkProps } from './types';\nimport { useNavigate, useHref } from 'react-router-dom';\nimport { isExternalLink } from '../../utils/isExternalLink';\nimport stylesLink from './Link.module.css';\nimport stylesText from '../Text/Text.module.css';\n\n/** @public */\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>((props, ref) => {\n const navigate = useNavigate();\n const { classNames: classNamesLink } = useStyles('Link', props);\n const {\n classNames: classNamesText,\n dataAttributes: textDataAttributes,\n cleanedProps,\n } = useStyles('Text', {\n variant: 'body',\n weight: 'regular',\n color: 'primary',\n ...props,\n });\n const { className, variant, weight, color, truncate, href, ...restProps } =\n cleanedProps;\n\n const isExternal = isExternalLink(href);\n\n // If it's an external link, render AriaLink without RouterProvider\n if (isExternal) {\n return (\n <AriaLink\n ref={ref}\n className={clsx(\n classNamesText.root,\n classNamesLink.root,\n stylesText[classNamesText.root],\n stylesLink[classNamesLink.root],\n className,\n )}\n data-truncate={truncate}\n href={href}\n {...textDataAttributes}\n {...restProps}\n />\n );\n }\n\n // For internal links, use RouterProvider\n return (\n <RouterProvider navigate={navigate} useHref={useHref}>\n <AriaLink\n ref={ref}\n className={clsx(\n classNamesText.root,\n classNamesLink.root,\n stylesText[classNamesText.root],\n stylesLink[classNamesLink.root],\n className,\n )}\n data-truncate={truncate}\n {...textDataAttributes}\n href={href}\n {...restProps}\n />\n </RouterProvider>\n );\n});\n\nLink.displayName = 'Link';\n"],"names":["AriaLink"],"mappings":";;;;;;;;;;AA2BO,MAAM,IAAA,GAAO,UAAA,CAAyC,CAAC,KAAA,EAAO,GAAA,KAAQ;AAC3E,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,EAAE,UAAA,EAAY,cAAA,EAAe,GAAI,SAAA,CAAU,QAAQ,KAAK,CAAA;AAC9D,EAAA,MAAM;AAAA,IACJ,UAAA,EAAY,cAAA;AAAA,IACZ,cAAA,EAAgB,kBAAA;AAAA,IAChB;AAAA,GACF,GAAI,UAAU,MAAA,EAAQ;AAAA,IACpB,OAAA,EAAS,MAAA;AAAA,IACT,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAO,SAAA;AAAA,IACP,GAAG;AAAA,GACJ,CAAA;AACD,EAAA,MAAM,EAAE,WAAW,OAAA,EAAS,MAAA,EAAQ,OAAO,QAAA,EAAU,IAAA,EAAM,GAAG,SAAA,EAAU,GACtE,YAAA;AAEF,EAAA,MAAM,UAAA,GAAa,eAAe,IAAI,CAAA;AAGtC,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,uBACE,GAAA;AAAA,MAACA,MAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,IAAA;AAAA,UACT,cAAA,CAAe,IAAA;AAAA,UACf,cAAA,CAAe,IAAA;AAAA,UACf,UAAA,CAAW,eAAe,IAAI,CAAA;AAAA,UAC9B,UAAA,CAAW,eAAe,IAAI,CAAA;AAAA,UAC9B;AAAA,SACF;AAAA,QACA,eAAA,EAAe,QAAA;AAAA,QACf,IAAA;AAAA,QACC,GAAG,kBAAA;AAAA,QACH,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AAGA,EAAA,uBACE,GAAA,CAAC,cAAA,EAAA,EAAe,QAAA,EAAoB,OAAA,EAClC,QAAA,kBAAA,GAAA;AAAA,IAACA,MAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,IAAA;AAAA,QACT,cAAA,CAAe,IAAA;AAAA,QACf,cAAA,CAAe,IAAA;AAAA,QACf,UAAA,CAAW,eAAe,IAAI,CAAA;AAAA,QAC9B,UAAA,CAAW,eAAe,IAAI,CAAA;AAAA,QAC9B;AAAA,OACF;AAAA,MACA,eAAA,EAAe,QAAA;AAAA,MACd,GAAG,kBAAA;AAAA,MACJ,IAAA;AAAA,MACC,GAAG;AAAA;AAAA,GACN,EACF,CAAA;AAEJ,CAAC;AAED,IAAA,CAAK,WAAA,GAAc,MAAA;;;;"}
@@ -0,0 +1,8 @@
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
+
3
+ var css_248z = "/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@layer components {\n .Link-module_bui-Link__3bbuU {\n font-family: var(--bui-font-regular);\n padding: 0;\n margin: 0;\n cursor: pointer;\n text-decoration-line: none;\n display: inline-block;\n\n &:hover {\n text-decoration-line: underline;\n text-decoration-style: solid;\n text-decoration-thickness: min(2px, max(1px, 0.05em));\n text-underline-offset: calc(0.025em + 2px);\n text-decoration-color: color-mix(in srgb, currentColor 30%, transparent);\n }\n }\n}\n";
4
+ var stylesLink = {"bui-Link":"Link-module_bui-Link__3bbuU"};
5
+ styleInject(css_248z);
6
+
7
+ export { stylesLink as default };
8
+ //# sourceMappingURL=Link.module.css.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Link.module.css.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -1,14 +1,17 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { MenuTrigger as MenuTrigger$1, SubmenuTrigger as SubmenuTrigger$1, Popover, Menu as Menu$1, ListBox, useFilter, Autocomplete, SearchField, Input, Button, MenuItem as MenuItem$1, RouterProvider, ListBoxItem, MenuSection as MenuSection$1, Header, Separator } from 'react-aria-components';
3
- import { ScrollArea } from '../ScrollArea/ScrollArea.esm.js';
2
+ import { MenuTrigger as MenuTrigger$1, SubmenuTrigger as SubmenuTrigger$1, OverlayTriggerStateContext, Menu as Menu$1, Popover, RouterProvider, Virtualizer, ListLayout, ListBox, useFilter, Autocomplete, SearchField, Input, Button, MenuItem as MenuItem$1, ListBoxItem, MenuSection as MenuSection$1, Header, Separator } from 'react-aria-components';
4
3
  import { useStyles } from '../../hooks/useStyles.esm.js';
5
4
  import { RiCloseCircleLine, RiArrowRightSLine, RiCheckLine } from '@remixicon/react';
6
- import { isExternalLink } from '../../utils/isExternalLink.esm.js';
7
5
  import { useNavigate, useHref } from 'react-router-dom';
6
+ import { isExternalLink } from '../../utils/isExternalLink.esm.js';
7
+ import { useRef, useContext, useEffect } from 'react';
8
+ import styles from './Menu.module.css.esm.js';
9
+ import clsx from 'clsx';
8
10
 
11
+ const rowHeight = 32;
9
12
  const MenuEmptyState = () => {
10
13
  const { classNames } = useStyles("Menu");
11
- return /* @__PURE__ */ jsx("div", { className: classNames.emptyState, children: "No results found." });
14
+ return /* @__PURE__ */ jsx("div", { className: clsx(classNames.emptyState, styles[classNames.emptyState]), children: "No results found." });
12
15
  };
13
16
  const MenuTrigger = (props) => {
14
17
  return /* @__PURE__ */ jsx(MenuTrigger$1, { ...props });
@@ -17,149 +20,420 @@ const SubmenuTrigger = (props) => {
17
20
  return /* @__PURE__ */ jsx(SubmenuTrigger$1, { ...props });
18
21
  };
19
22
  const Menu = (props) => {
20
- const { placement = "bottom start", ...rest } = props;
21
- const { classNames } = useStyles("Menu");
22
- return /* @__PURE__ */ jsx(Popover, { className: classNames.popover, placement, children: /* @__PURE__ */ jsxs(ScrollArea.Root, { children: [
23
- /* @__PURE__ */ jsx(ScrollArea.Viewport, { children: /* @__PURE__ */ jsx(Menu$1, { className: classNames.content, ...rest, children: props.children }) }),
24
- /* @__PURE__ */ jsx(ScrollArea.Scrollbar, { orientation: "vertical", style: {}, children: /* @__PURE__ */ jsx(ScrollArea.Thumb, {}) })
25
- ] }) });
23
+ const { classNames, cleanedProps } = useStyles("Menu", props);
24
+ const {
25
+ placement = "bottom start",
26
+ virtualized = false,
27
+ maxWidth,
28
+ maxHeight,
29
+ style,
30
+ ...rest
31
+ } = cleanedProps;
32
+ const navigate = useNavigate();
33
+ let newMaxWidth = maxWidth || (virtualized ? "260px" : "undefined");
34
+ const popoverRef = useRef(null);
35
+ const state = useContext(OverlayTriggerStateContext);
36
+ useEffect(() => {
37
+ if (!state?.isOpen) return;
38
+ const handleClickOutside = (event) => {
39
+ const target = event.target;
40
+ if (popoverRef.current && !popoverRef.current.contains(target)) {
41
+ const isOnTrigger = target.closest("[data-trigger]");
42
+ const isOnSubmenu = target.closest('[role="menu"]');
43
+ if (!isOnTrigger && !isOnSubmenu) {
44
+ state.close();
45
+ }
46
+ }
47
+ };
48
+ document.addEventListener("mousedown", handleClickOutside);
49
+ return () => {
50
+ document.removeEventListener("mousedown", handleClickOutside);
51
+ };
52
+ }, [state]);
53
+ const menuContent = /* @__PURE__ */ jsx(
54
+ Menu$1,
55
+ {
56
+ className: clsx(classNames.content, styles[classNames.content]),
57
+ renderEmptyState: () => /* @__PURE__ */ jsx(MenuEmptyState, {}),
58
+ style: { width: newMaxWidth, maxHeight, ...style },
59
+ ...rest
60
+ }
61
+ );
62
+ return /* @__PURE__ */ jsx(
63
+ Popover,
64
+ {
65
+ ref: popoverRef,
66
+ className: clsx(classNames.popover, styles[classNames.popover]),
67
+ placement,
68
+ isNonModal: true,
69
+ isKeyboardDismissDisabled: false,
70
+ children: /* @__PURE__ */ jsx(RouterProvider, { navigate, useHref, children: virtualized ? /* @__PURE__ */ jsx(
71
+ Virtualizer,
72
+ {
73
+ layout: ListLayout,
74
+ layoutOptions: {
75
+ rowHeight
76
+ },
77
+ children: menuContent
78
+ }
79
+ ) : menuContent })
80
+ }
81
+ );
26
82
  };
27
83
  const MenuListBox = (props) => {
84
+ const { classNames, cleanedProps } = useStyles("Menu", props);
28
85
  const {
29
86
  selectionMode = "single",
30
87
  placement = "bottom start",
88
+ virtualized = false,
89
+ maxWidth,
90
+ maxHeight,
91
+ style,
31
92
  ...rest
32
- } = props;
33
- const { classNames } = useStyles("Menu");
34
- return /* @__PURE__ */ jsx(Popover, { className: classNames.popover, placement, children: /* @__PURE__ */ jsxs(ScrollArea.Root, { children: [
35
- /* @__PURE__ */ jsx(ScrollArea.Viewport, { children: /* @__PURE__ */ jsx(
36
- ListBox,
37
- {
38
- className: classNames.content,
39
- selectionMode,
40
- ...rest
41
- }
42
- ) }),
43
- /* @__PURE__ */ jsx(ScrollArea.Scrollbar, { orientation: "vertical", style: {}, children: /* @__PURE__ */ jsx(ScrollArea.Thumb, {}) })
44
- ] }) });
93
+ } = cleanedProps;
94
+ let newMaxWidth = maxWidth || (virtualized ? "260px" : "undefined");
95
+ const listBoxContent = /* @__PURE__ */ jsx(
96
+ ListBox,
97
+ {
98
+ className: clsx(classNames.content, styles[classNames.content]),
99
+ selectionMode,
100
+ style: { width: newMaxWidth, maxHeight, ...style },
101
+ ...rest
102
+ }
103
+ );
104
+ return /* @__PURE__ */ jsx(
105
+ Popover,
106
+ {
107
+ className: clsx(classNames.popover, styles[classNames.popover]),
108
+ placement,
109
+ children: virtualized ? /* @__PURE__ */ jsx(
110
+ Virtualizer,
111
+ {
112
+ layout: ListLayout,
113
+ layoutOptions: {
114
+ rowHeight
115
+ },
116
+ children: listBoxContent
117
+ }
118
+ ) : listBoxContent
119
+ }
120
+ );
45
121
  };
46
122
  const MenuAutocomplete = (props) => {
47
- const { placement = "bottom start", ...rest } = props;
48
- const { classNames } = useStyles("Menu");
123
+ const { classNames, cleanedProps } = useStyles("Menu", props);
124
+ const {
125
+ placement = "bottom start",
126
+ virtualized = false,
127
+ maxWidth,
128
+ maxHeight,
129
+ style,
130
+ ...rest
131
+ } = cleanedProps;
49
132
  const { contains } = useFilter({ sensitivity: "base" });
50
- return /* @__PURE__ */ jsx(Popover, { className: classNames.popover, placement, children: /* @__PURE__ */ jsxs(Autocomplete, { filter: contains, children: [
51
- /* @__PURE__ */ jsxs(SearchField, { className: classNames.searchField, children: [
52
- /* @__PURE__ */ jsx(
53
- Input,
54
- {
55
- className: classNames.searchFieldInput,
56
- "aria-label": "Search",
57
- placeholder: props.placeholder || "Search..."
58
- }
59
- ),
60
- /* @__PURE__ */ jsx(Button, { className: classNames.searchFieldClear, children: /* @__PURE__ */ jsx(RiCloseCircleLine, {}) })
61
- ] }),
62
- /* @__PURE__ */ jsxs(ScrollArea.Root, { children: [
63
- /* @__PURE__ */ jsx(ScrollArea.Viewport, { children: /* @__PURE__ */ jsx(
64
- Menu$1,
65
- {
66
- className: classNames.content,
67
- renderEmptyState: () => /* @__PURE__ */ jsx(MenuEmptyState, {}),
68
- ...rest
69
- }
70
- ) }),
71
- /* @__PURE__ */ jsx(ScrollArea.Scrollbar, { orientation: "vertical", style: {}, children: /* @__PURE__ */ jsx(ScrollArea.Thumb, {}) })
72
- ] })
73
- ] }) });
133
+ let newMaxWidth = maxWidth || (virtualized ? "260px" : "undefined");
134
+ const navigate = useNavigate();
135
+ const menuContent = /* @__PURE__ */ jsx(
136
+ Menu$1,
137
+ {
138
+ className: clsx(classNames.content, styles[classNames.content]),
139
+ renderEmptyState: () => /* @__PURE__ */ jsx(MenuEmptyState, {}),
140
+ style: { width: newMaxWidth, maxHeight, ...style },
141
+ ...rest
142
+ }
143
+ );
144
+ return /* @__PURE__ */ jsx(
145
+ Popover,
146
+ {
147
+ className: clsx(classNames.popover, styles[classNames.popover]),
148
+ placement,
149
+ children: /* @__PURE__ */ jsx(RouterProvider, { navigate, useHref, children: /* @__PURE__ */ jsxs(Autocomplete, { filter: contains, children: [
150
+ /* @__PURE__ */ jsxs(
151
+ SearchField,
152
+ {
153
+ className: clsx(
154
+ classNames.searchField,
155
+ styles[classNames.searchField]
156
+ ),
157
+ children: [
158
+ /* @__PURE__ */ jsx(
159
+ Input,
160
+ {
161
+ className: clsx(
162
+ classNames.searchFieldInput,
163
+ styles[classNames.searchFieldInput]
164
+ ),
165
+ "aria-label": "Search",
166
+ placeholder: props.placeholder || "Search..."
167
+ }
168
+ ),
169
+ /* @__PURE__ */ jsx(
170
+ Button,
171
+ {
172
+ className: clsx(
173
+ classNames.searchFieldClear,
174
+ styles[classNames.searchFieldClear]
175
+ ),
176
+ children: /* @__PURE__ */ jsx(RiCloseCircleLine, {})
177
+ }
178
+ )
179
+ ]
180
+ }
181
+ ),
182
+ virtualized ? /* @__PURE__ */ jsx(
183
+ Virtualizer,
184
+ {
185
+ layout: ListLayout,
186
+ layoutOptions: {
187
+ rowHeight
188
+ },
189
+ children: menuContent
190
+ }
191
+ ) : menuContent
192
+ ] }) })
193
+ }
194
+ );
74
195
  };
75
196
  const MenuAutocompleteListbox = (props) => {
197
+ const { classNames, cleanedProps } = useStyles("Menu", props);
76
198
  const {
77
199
  selectionMode = "single",
78
200
  placement = "bottom start",
201
+ virtualized = false,
202
+ maxWidth,
203
+ maxHeight,
204
+ style,
79
205
  ...rest
80
- } = props;
81
- const { classNames } = useStyles("Menu");
206
+ } = cleanedProps;
82
207
  const { contains } = useFilter({ sensitivity: "base" });
83
- return /* @__PURE__ */ jsx(Popover, { className: classNames.popover, placement, children: /* @__PURE__ */ jsxs(Autocomplete, { filter: contains, children: [
84
- /* @__PURE__ */ jsxs(SearchField, { className: classNames.searchField, children: [
85
- /* @__PURE__ */ jsx(
86
- Input,
87
- {
88
- className: classNames.searchFieldInput,
89
- "aria-label": "Search",
90
- placeholder: props.placeholder || "Search..."
91
- }
92
- ),
93
- /* @__PURE__ */ jsx(Button, { className: classNames.searchFieldClear, children: /* @__PURE__ */ jsx(RiCloseCircleLine, {}) })
94
- ] }),
95
- /* @__PURE__ */ jsxs(ScrollArea.Root, { children: [
96
- /* @__PURE__ */ jsx(ScrollArea.Viewport, { children: /* @__PURE__ */ jsx(
97
- ListBox,
98
- {
99
- className: classNames.content,
100
- renderEmptyState: () => /* @__PURE__ */ jsx(MenuEmptyState, {}),
101
- selectionMode,
102
- ...rest
103
- }
104
- ) }),
105
- /* @__PURE__ */ jsx(ScrollArea.Scrollbar, { orientation: "vertical", style: {}, children: /* @__PURE__ */ jsx(ScrollArea.Thumb, {}) })
106
- ] })
107
- ] }) });
208
+ let newMaxWidth = maxWidth || (virtualized ? "260px" : "undefined");
209
+ const listBoxContent = /* @__PURE__ */ jsx(
210
+ ListBox,
211
+ {
212
+ className: clsx(classNames.content, styles[classNames.content]),
213
+ renderEmptyState: () => /* @__PURE__ */ jsx(MenuEmptyState, {}),
214
+ selectionMode,
215
+ style: { width: newMaxWidth, maxHeight, ...style },
216
+ ...rest
217
+ }
218
+ );
219
+ return /* @__PURE__ */ jsx(
220
+ Popover,
221
+ {
222
+ className: clsx(classNames.popover, styles[classNames.popover]),
223
+ placement,
224
+ children: /* @__PURE__ */ jsxs(Autocomplete, { filter: contains, children: [
225
+ /* @__PURE__ */ jsxs(
226
+ SearchField,
227
+ {
228
+ className: clsx(
229
+ classNames.searchField,
230
+ styles[classNames.searchField]
231
+ ),
232
+ children: [
233
+ /* @__PURE__ */ jsx(
234
+ Input,
235
+ {
236
+ className: clsx(
237
+ classNames.searchFieldInput,
238
+ styles[classNames.searchFieldInput]
239
+ ),
240
+ "aria-label": "Search",
241
+ placeholder: props.placeholder || "Search..."
242
+ }
243
+ ),
244
+ /* @__PURE__ */ jsx(
245
+ Button,
246
+ {
247
+ className: clsx(
248
+ classNames.searchFieldClear,
249
+ styles[classNames.searchFieldClear]
250
+ ),
251
+ children: /* @__PURE__ */ jsx(RiCloseCircleLine, {})
252
+ }
253
+ )
254
+ ]
255
+ }
256
+ ),
257
+ virtualized ? /* @__PURE__ */ jsx(
258
+ Virtualizer,
259
+ {
260
+ layout: ListLayout,
261
+ layoutOptions: {
262
+ rowHeight
263
+ },
264
+ children: listBoxContent
265
+ }
266
+ ) : listBoxContent
267
+ ] })
268
+ }
269
+ );
108
270
  };
109
271
  const MenuItem = (props) => {
110
- const { iconStart, color = "primary", children, href, ...rest } = props;
111
- const { classNames } = useStyles("Menu");
112
- const navigate = useNavigate();
272
+ const { classNames, cleanedProps } = useStyles("Menu", props);
273
+ const {
274
+ iconStart,
275
+ color = "primary",
276
+ children,
277
+ href,
278
+ ...rest
279
+ } = cleanedProps;
113
280
  const isLink = href !== void 0;
114
281
  const isExternal = isExternalLink(href);
115
- const content = /* @__PURE__ */ jsxs(
282
+ if (isLink && isExternal) {
283
+ return /* @__PURE__ */ jsx(
284
+ MenuItem$1,
285
+ {
286
+ className: clsx(classNames.item, styles[classNames.item]),
287
+ "data-color": color,
288
+ textValue: typeof children === "string" ? children : void 0,
289
+ onAction: () => window.open(href, "_blank", "noopener,noreferrer"),
290
+ ...rest,
291
+ children: /* @__PURE__ */ jsxs(
292
+ "div",
293
+ {
294
+ className: clsx(
295
+ classNames.itemWrapper,
296
+ styles[classNames.itemWrapper]
297
+ ),
298
+ children: [
299
+ /* @__PURE__ */ jsxs(
300
+ "div",
301
+ {
302
+ className: clsx(
303
+ classNames.itemContent,
304
+ styles[classNames.itemContent]
305
+ ),
306
+ children: [
307
+ iconStart,
308
+ children
309
+ ]
310
+ }
311
+ ),
312
+ /* @__PURE__ */ jsx(
313
+ "div",
314
+ {
315
+ className: clsx(classNames.itemArrow, styles[classNames.itemArrow]),
316
+ children: /* @__PURE__ */ jsx(RiArrowRightSLine, {})
317
+ }
318
+ )
319
+ ]
320
+ }
321
+ )
322
+ }
323
+ );
324
+ }
325
+ return /* @__PURE__ */ jsx(
116
326
  MenuItem$1,
117
327
  {
118
- className: classNames.item,
328
+ className: clsx(classNames.item, styles[classNames.item]),
119
329
  "data-color": color,
120
330
  href,
121
331
  textValue: typeof children === "string" ? children : void 0,
122
332
  ...rest,
123
- children: [
124
- /* @__PURE__ */ jsxs("div", { className: classNames.itemContent, children: [
125
- iconStart,
126
- children
127
- ] }),
128
- /* @__PURE__ */ jsx("div", { className: classNames.itemArrow, children: /* @__PURE__ */ jsx(RiArrowRightSLine, {}) })
129
- ]
333
+ children: /* @__PURE__ */ jsxs(
334
+ "div",
335
+ {
336
+ className: clsx(classNames.itemWrapper, styles[classNames.itemWrapper]),
337
+ children: [
338
+ /* @__PURE__ */ jsxs(
339
+ "div",
340
+ {
341
+ className: clsx(
342
+ classNames.itemContent,
343
+ styles[classNames.itemContent]
344
+ ),
345
+ children: [
346
+ iconStart,
347
+ children
348
+ ]
349
+ }
350
+ ),
351
+ /* @__PURE__ */ jsx(
352
+ "div",
353
+ {
354
+ className: clsx(classNames.itemArrow, styles[classNames.itemArrow]),
355
+ children: /* @__PURE__ */ jsx(RiArrowRightSLine, {})
356
+ }
357
+ )
358
+ ]
359
+ }
360
+ )
130
361
  }
131
362
  );
132
- if (isLink && !isExternal) {
133
- return /* @__PURE__ */ jsx(RouterProvider, { navigate, useHref, children: content });
134
- }
135
- return content;
136
363
  };
137
364
  const MenuListBoxItem = (props) => {
138
- const { children, ...rest } = props;
139
- const { classNames } = useStyles("Menu");
365
+ const { classNames, cleanedProps } = useStyles("Menu", props);
366
+ const { children, ...rest } = cleanedProps;
140
367
  return /* @__PURE__ */ jsx(
141
368
  ListBoxItem,
142
369
  {
143
370
  textValue: typeof props.children === "string" ? props.children : void 0,
144
- className: classNames.itemListBox,
371
+ className: clsx(classNames.itemListBox, styles[classNames.itemListBox]),
145
372
  ...rest,
146
- children: /* @__PURE__ */ jsxs("div", { className: classNames.itemContent, children: [
147
- /* @__PURE__ */ jsx("div", { className: classNames.itemListBoxCheck, children: /* @__PURE__ */ jsx(RiCheckLine, {}) }),
148
- children
149
- ] })
373
+ children: /* @__PURE__ */ jsx(
374
+ "div",
375
+ {
376
+ className: clsx(classNames.itemWrapper, styles[classNames.itemWrapper]),
377
+ children: /* @__PURE__ */ jsxs(
378
+ "div",
379
+ {
380
+ className: clsx(
381
+ classNames.itemContent,
382
+ styles[classNames.itemContent]
383
+ ),
384
+ children: [
385
+ /* @__PURE__ */ jsx(
386
+ "div",
387
+ {
388
+ className: clsx(
389
+ classNames.itemListBoxCheck,
390
+ styles[classNames.itemListBoxCheck]
391
+ ),
392
+ children: /* @__PURE__ */ jsx(RiCheckLine, {})
393
+ }
394
+ ),
395
+ children
396
+ ]
397
+ }
398
+ )
399
+ }
400
+ )
150
401
  }
151
402
  );
152
403
  };
153
404
  const MenuSection = (props) => {
154
- const { classNames } = useStyles("Menu");
155
- return /* @__PURE__ */ jsxs(MenuSection$1, { className: classNames.section, ...props, children: [
156
- /* @__PURE__ */ jsx(Header, { className: classNames.sectionHeader, children: props.title }),
157
- props.children
158
- ] });
405
+ const { classNames, cleanedProps } = useStyles("Menu", props);
406
+ const { children, title, ...rest } = cleanedProps;
407
+ return /* @__PURE__ */ jsxs(
408
+ MenuSection$1,
409
+ {
410
+ className: clsx(classNames.section, styles[classNames.section]),
411
+ ...rest,
412
+ children: [
413
+ /* @__PURE__ */ jsx(
414
+ Header,
415
+ {
416
+ className: clsx(
417
+ classNames.sectionHeader,
418
+ styles[classNames.sectionHeader]
419
+ ),
420
+ children: title
421
+ }
422
+ ),
423
+ children
424
+ ]
425
+ }
426
+ );
159
427
  };
160
428
  const MenuSeparator = (props) => {
161
- const { classNames } = useStyles("Menu");
162
- return /* @__PURE__ */ jsx(Separator, { className: classNames.separator, ...props });
429
+ const { classNames, cleanedProps } = useStyles("Menu", props);
430
+ return /* @__PURE__ */ jsx(
431
+ Separator,
432
+ {
433
+ className: clsx(classNames.separator, styles[classNames.separator]),
434
+ ...cleanedProps
435
+ }
436
+ );
163
437
  };
164
438
 
165
439
  export { Menu, MenuAutocomplete, MenuAutocompleteListbox, MenuItem, MenuListBox, MenuListBoxItem, MenuSection, MenuSeparator, MenuTrigger, SubmenuTrigger };