@backstage/ui 0.11.0-next.1 → 0.11.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 (71) hide show
  1. package/CHANGELOG.md +100 -0
  2. package/css/styles.css +2 -0
  3. package/dist/components/Accordion/Accordion.module.css.esm.js +2 -2
  4. package/dist/components/Avatar/Avatar.module.css.esm.js +2 -2
  5. package/dist/components/Box/Box.module.css.esm.js +2 -2
  6. package/dist/components/Button/Button.module.css.esm.js +2 -2
  7. package/dist/components/ButtonIcon/ButtonIcon.module.css.esm.js +2 -2
  8. package/dist/components/Card/Card.module.css.esm.js +2 -2
  9. package/dist/components/Checkbox/Checkbox.esm.js +10 -7
  10. package/dist/components/Checkbox/Checkbox.esm.js.map +1 -1
  11. package/dist/components/Checkbox/Checkbox.module.css.esm.js +2 -2
  12. package/dist/components/Checkbox/definition.esm.js +2 -1
  13. package/dist/components/Checkbox/definition.esm.js.map +1 -1
  14. package/dist/components/Container/Container.module.css.esm.js +2 -2
  15. package/dist/components/Dialog/Dialog.module.css.esm.js +2 -2
  16. package/dist/components/FieldError/FieldError.module.css.esm.js +2 -2
  17. package/dist/components/FieldLabel/FieldLabel.module.css.esm.js +2 -2
  18. package/dist/components/Flex/Flex.module.css.esm.js +2 -2
  19. package/dist/components/Grid/Grid.module.css.esm.js +2 -2
  20. package/dist/components/Header/Header.module.css.esm.js +2 -2
  21. package/dist/components/HeaderPage/HeaderPage.module.css.esm.js +2 -2
  22. package/dist/components/Link/Link.module.css.esm.js +2 -2
  23. package/dist/components/Menu/Menu.esm.js +3 -26
  24. package/dist/components/Menu/Menu.esm.js.map +1 -1
  25. package/dist/components/Menu/Menu.module.css.esm.js +2 -2
  26. package/dist/components/Popover/Popover.esm.js +45 -0
  27. package/dist/components/Popover/Popover.esm.js.map +1 -0
  28. package/dist/components/Popover/Popover.module.css.esm.js +3 -3
  29. package/dist/components/Popover/definition.esm.js +3 -1
  30. package/dist/components/Popover/definition.esm.js.map +1 -1
  31. package/dist/components/RadioGroup/RadioGroup.module.css.esm.js +2 -2
  32. package/dist/components/SearchField/SearchField.module.css.esm.js +2 -2
  33. package/dist/components/Select/Select.esm.js +5 -5
  34. package/dist/components/Select/Select.esm.js.map +1 -1
  35. package/dist/components/Select/Select.module.css.esm.js +2 -2
  36. package/dist/components/Select/SelectContent.esm.js +1 -0
  37. package/dist/components/Select/SelectContent.esm.js.map +1 -1
  38. package/dist/components/Skeleton/Skeleton.module.css.esm.js +2 -2
  39. package/dist/components/Switch/Switch.module.css.esm.js +2 -2
  40. package/dist/components/Table/Table.module.css.esm.js +2 -2
  41. package/dist/components/Table/components/Column.esm.js +3 -3
  42. package/dist/components/Table/components/Column.esm.js.map +1 -1
  43. package/dist/components/Table/components/Row.esm.js +1 -0
  44. package/dist/components/Table/components/Row.esm.js.map +1 -1
  45. package/dist/components/Table/components/Table.esm.js +14 -6
  46. package/dist/components/Table/components/Table.esm.js.map +1 -1
  47. package/dist/components/Table/hooks/getEffectivePageSize.esm.js +25 -0
  48. package/dist/components/Table/hooks/getEffectivePageSize.esm.js.map +1 -0
  49. package/dist/components/Table/hooks/useCompletePagination.esm.js +3 -1
  50. package/dist/components/Table/hooks/useCompletePagination.esm.js.map +1 -1
  51. package/dist/components/Table/hooks/useCursorPagination.esm.js +2 -1
  52. package/dist/components/Table/hooks/useCursorPagination.esm.js.map +1 -1
  53. package/dist/components/Table/hooks/useOffsetPagination.esm.js +3 -1
  54. package/dist/components/Table/hooks/useOffsetPagination.esm.js.map +1 -1
  55. package/dist/components/Table/hooks/useTable.esm.js +26 -5
  56. package/dist/components/Table/hooks/useTable.esm.js.map +1 -1
  57. package/dist/components/TablePagination/TablePagination.esm.js +52 -16
  58. package/dist/components/TablePagination/TablePagination.esm.js.map +1 -1
  59. package/dist/components/TablePagination/TablePagination.module.css.esm.js +2 -2
  60. package/dist/components/Tabs/Tabs.module.css.esm.js +2 -2
  61. package/dist/components/TagGroup/TagGroup.module.css.esm.js +2 -2
  62. package/dist/components/Text/Text.module.css.esm.js +2 -2
  63. package/dist/components/TextField/TextField.module.css.esm.js +2 -2
  64. package/dist/components/ToggleButton/ToggleButton.module.css.esm.js +2 -2
  65. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.module.css.esm.js +2 -2
  66. package/dist/components/Tooltip/Tooltip.module.css.esm.js +2 -2
  67. package/dist/components/VisuallyHidden/VisuallyHidden.module.css.esm.js +2 -2
  68. package/dist/index.d.ts +93 -14
  69. package/dist/index.esm.js +2 -0
  70. package/dist/index.esm.js.map +1 -1
  71. package/package.json +3 -3
@@ -1,16 +1,40 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import clsx from 'clsx';
3
+ import { Text } from '../Text/Text.esm.js';
4
+ import { ButtonIcon } from '../ButtonIcon/ButtonIcon.esm.js';
5
+ import { Select } from '../Select/Select.esm.js';
3
6
  import { useStyles } from '../../hooks/useStyles.esm.js';
4
7
  import { TablePaginationDefinition } from './definition.esm.js';
5
8
  import styles from './TablePagination.module.css.esm.js';
6
9
  import { RiArrowLeftSLine, RiArrowRightSLine } from '@remixicon/react';
7
- import { useId } from 'react';
8
- import { Select } from '../Select/Select.esm.js';
9
- import { ButtonIcon } from '../ButtonIcon/ButtonIcon.esm.js';
10
- import { Text } from '../Text/Text.esm.js';
10
+ import { useId, useMemo } from 'react';
11
11
 
12
+ const DEFAULT_PAGE_SIZE_OPTIONS = [
13
+ { label: "Show 5 results", value: 5 },
14
+ { label: "Show 10 results", value: 10 },
15
+ { label: "Show 20 results", value: 20 },
16
+ { label: "Show 30 results", value: 30 },
17
+ { label: "Show 40 results", value: 40 },
18
+ { label: "Show 50 results", value: 50 }
19
+ ];
20
+ function getOptionValue(option) {
21
+ return typeof option === "number" ? option : option.value;
22
+ }
23
+ function isNumberArray(options) {
24
+ return options.length > 0 && typeof options[0] === "number";
25
+ }
26
+ function normalizePageSizeOptions(options) {
27
+ if (isNumberArray(options)) {
28
+ return options.map((value) => ({
29
+ label: `Show ${value} results`,
30
+ value
31
+ }));
32
+ }
33
+ return options;
34
+ }
12
35
  function TablePagination({
13
36
  pageSize,
37
+ pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,
14
38
  offset,
15
39
  totalCount,
16
40
  hasNextPage,
@@ -23,13 +47,30 @@ function TablePagination({
23
47
  }) {
24
48
  const { classNames } = useStyles(TablePaginationDefinition, {});
25
49
  const labelId = useId();
50
+ const normalizedOptions = useMemo(
51
+ () => normalizePageSizeOptions(pageSizeOptions),
52
+ [pageSizeOptions]
53
+ );
54
+ const effectivePageSize = useMemo(() => {
55
+ const isValid = pageSizeOptions.some(
56
+ (opt) => getOptionValue(opt) === pageSize
57
+ );
58
+ if (isValid) {
59
+ return pageSize;
60
+ }
61
+ const firstValue = getOptionValue(pageSizeOptions[0]);
62
+ console.warn(
63
+ `TablePagination: pageSize ${pageSize} is not in pageSizeOptions, using ${firstValue} instead`
64
+ );
65
+ return firstValue;
66
+ }, [pageSize, pageSizeOptions]);
26
67
  const hasItems = totalCount !== void 0 && totalCount !== 0;
27
68
  let label = `${totalCount} items`;
28
69
  if (getLabel) {
29
- label = getLabel({ pageSize, offset, totalCount });
70
+ label = getLabel({ pageSize: effectivePageSize, offset, totalCount });
30
71
  } else if (offset !== void 0) {
31
72
  const fromCount = offset + 1;
32
- const toCount = Math.min(offset + pageSize, totalCount ?? 0);
73
+ const toCount = Math.min(offset + effectivePageSize, totalCount ?? 0);
33
74
  label = `${fromCount} - ${toCount} of ${totalCount}`;
34
75
  }
35
76
  return /* @__PURE__ */ jsxs("div", { className: clsx(classNames.root, styles[classNames.root]), children: [
@@ -39,16 +80,11 @@ function TablePagination({
39
80
  name: "pageSize",
40
81
  size: "small",
41
82
  "aria-label": "Select table page size",
42
- placeholder: "Show 10 results",
43
- options: [
44
- { label: "Show 5 results", value: "5" },
45
- { label: "Show 10 results", value: "10" },
46
- { label: "Show 20 results", value: "20" },
47
- { label: "Show 30 results", value: "30" },
48
- { label: "Show 40 results", value: "40" },
49
- { label: "Show 50 results", value: "50" }
50
- ],
51
- defaultValue: pageSize.toString(),
83
+ options: normalizedOptions.map((opt) => ({
84
+ label: opt.label,
85
+ value: String(opt.value)
86
+ })),
87
+ defaultValue: effectivePageSize.toString(),
52
88
  onChange: (value) => {
53
89
  const newPageSize = Number(value);
54
90
  onPageSizeChange?.(newPageSize);
@@ -1 +1 @@
1
- {"version":3,"file":"TablePagination.esm.js","sources":["../../../src/components/TablePagination/TablePagination.tsx"],"sourcesContent":["/*\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\nimport clsx from 'clsx';\nimport { Text, ButtonIcon, Select } from '../..';\nimport type { TablePaginationProps } from './types';\nimport { useStyles } from '../../hooks/useStyles';\nimport { TablePaginationDefinition } from './definition';\nimport styles from './TablePagination.module.css';\nimport { RiArrowLeftSLine, RiArrowRightSLine } from '@remixicon/react';\nimport { useId } from 'react';\n\n/**\n * Pagination controls for Table components with page navigation and size selection.\n *\n * @public\n */\nexport function TablePagination({\n pageSize,\n offset,\n totalCount,\n hasNextPage,\n hasPreviousPage,\n onNextPage,\n onPreviousPage,\n onPageSizeChange,\n showPageSizeOptions = true,\n getLabel,\n}: TablePaginationProps) {\n const { classNames } = useStyles(TablePaginationDefinition, {});\n const labelId = useId();\n\n const hasItems = totalCount !== undefined && totalCount !== 0;\n\n let label = `${totalCount} items`;\n if (getLabel) {\n label = getLabel({ pageSize, offset, totalCount });\n } else if (offset !== undefined) {\n const fromCount = offset + 1;\n const toCount = Math.min(offset + pageSize, totalCount ?? 0);\n label = `${fromCount} - ${toCount} of ${totalCount}`;\n }\n\n return (\n <div className={clsx(classNames.root, styles[classNames.root])}>\n <div className={clsx(classNames.left, styles[classNames.left])}>\n {showPageSizeOptions && (\n <Select\n name=\"pageSize\"\n size=\"small\"\n aria-label=\"Select table page size\"\n placeholder=\"Show 10 results\"\n options={[\n { label: 'Show 5 results', value: '5' },\n { label: 'Show 10 results', value: '10' },\n { label: 'Show 20 results', value: '20' },\n { label: 'Show 30 results', value: '30' },\n { label: 'Show 40 results', value: '40' },\n { label: 'Show 50 results', value: '50' },\n ]}\n defaultValue={pageSize.toString()}\n onChange={value => {\n const newPageSize = Number(value);\n onPageSizeChange?.(newPageSize);\n }}\n className={clsx(classNames.select, styles[classNames.select])}\n />\n )}\n </div>\n <div className={clsx(classNames.right, styles[classNames.right])}>\n {hasItems && (\n <Text as=\"p\" variant=\"body-medium\" id={labelId}>\n {label}\n </Text>\n )}\n <ButtonIcon\n variant=\"secondary\"\n size=\"small\"\n onClick={onPreviousPage}\n isDisabled={!hasPreviousPage}\n icon={<RiArrowLeftSLine />}\n aria-label=\"Previous table page\"\n aria-describedby={hasItems ? labelId : undefined}\n />\n <ButtonIcon\n variant=\"secondary\"\n size=\"small\"\n onClick={onNextPage}\n isDisabled={!hasNextPage}\n icon={<RiArrowRightSLine />}\n aria-label=\"Next table page\"\n aria-describedby={hasItems ? labelId : undefined}\n />\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TablePagination.esm.js","sources":["../../../src/components/TablePagination/TablePagination.tsx"],"sourcesContent":["/*\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\nimport clsx from 'clsx';\nimport { Text } from '../Text';\nimport { ButtonIcon } from '../ButtonIcon';\nimport { Select } from '../Select';\nimport type { TablePaginationProps, PageSizeOption } from './types';\nimport { useStyles } from '../../hooks/useStyles';\nimport { TablePaginationDefinition } from './definition';\nimport styles from './TablePagination.module.css';\nimport { RiArrowLeftSLine, RiArrowRightSLine } from '@remixicon/react';\nimport { useId, useMemo } from 'react';\n\nconst DEFAULT_PAGE_SIZE_OPTIONS: PageSizeOption[] = [\n { label: 'Show 5 results', value: 5 },\n { label: 'Show 10 results', value: 10 },\n { label: 'Show 20 results', value: 20 },\n { label: 'Show 30 results', value: 30 },\n { label: 'Show 40 results', value: 40 },\n { label: 'Show 50 results', value: 50 },\n];\n\nfunction getOptionValue(option: number | PageSizeOption): number {\n return typeof option === 'number' ? option : option.value;\n}\n\nfunction isNumberArray(\n options: number[] | PageSizeOption[],\n): options is number[] {\n return options.length > 0 && typeof options[0] === 'number';\n}\n\nfunction normalizePageSizeOptions(\n options: number[] | PageSizeOption[],\n): PageSizeOption[] {\n if (isNumberArray(options)) {\n return options.map(value => ({\n label: `Show ${value} results`,\n value,\n }));\n }\n return options;\n}\n\n/**\n * Pagination controls for Table components with page navigation and size selection.\n *\n * @public\n */\nexport function TablePagination({\n pageSize,\n pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,\n offset,\n totalCount,\n hasNextPage,\n hasPreviousPage,\n onNextPage,\n onPreviousPage,\n onPageSizeChange,\n showPageSizeOptions = true,\n getLabel,\n}: TablePaginationProps) {\n const { classNames } = useStyles(TablePaginationDefinition, {});\n const labelId = useId();\n const normalizedOptions = useMemo(\n () => normalizePageSizeOptions(pageSizeOptions),\n [pageSizeOptions],\n );\n\n const effectivePageSize = useMemo(() => {\n const isValid = pageSizeOptions.some(\n opt => getOptionValue(opt) === pageSize,\n );\n if (isValid) {\n return pageSize;\n }\n const firstValue = getOptionValue(pageSizeOptions[0]);\n console.warn(\n `TablePagination: pageSize ${pageSize} is not in pageSizeOptions, using ${firstValue} instead`,\n );\n return firstValue;\n }, [pageSize, pageSizeOptions]);\n\n const hasItems = totalCount !== undefined && totalCount !== 0;\n\n let label = `${totalCount} items`;\n if (getLabel) {\n label = getLabel({ pageSize: effectivePageSize, offset, totalCount });\n } else if (offset !== undefined) {\n const fromCount = offset + 1;\n const toCount = Math.min(offset + effectivePageSize, totalCount ?? 0);\n label = `${fromCount} - ${toCount} of ${totalCount}`;\n }\n\n return (\n <div className={clsx(classNames.root, styles[classNames.root])}>\n <div className={clsx(classNames.left, styles[classNames.left])}>\n {showPageSizeOptions && (\n <Select\n name=\"pageSize\"\n size=\"small\"\n aria-label=\"Select table page size\"\n options={normalizedOptions.map(opt => ({\n label: opt.label,\n value: String(opt.value),\n }))}\n defaultValue={effectivePageSize.toString()}\n onChange={value => {\n const newPageSize = Number(value);\n onPageSizeChange?.(newPageSize);\n }}\n className={clsx(classNames.select, styles[classNames.select])}\n />\n )}\n </div>\n <div className={clsx(classNames.right, styles[classNames.right])}>\n {hasItems && (\n <Text as=\"p\" variant=\"body-medium\" id={labelId}>\n {label}\n </Text>\n )}\n <ButtonIcon\n variant=\"secondary\"\n size=\"small\"\n onClick={onPreviousPage}\n isDisabled={!hasPreviousPage}\n icon={<RiArrowLeftSLine />}\n aria-label=\"Previous table page\"\n aria-describedby={hasItems ? labelId : undefined}\n />\n <ButtonIcon\n variant=\"secondary\"\n size=\"small\"\n onClick={onNextPage}\n isDisabled={!hasNextPage}\n icon={<RiArrowRightSLine />}\n aria-label=\"Next table page\"\n aria-describedby={hasItems ? labelId : undefined}\n />\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
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 tokens, base, components, utilities;\n\n@layer components {\n .TablePagination-module_bui-TablePagination__2nXRB {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-top: var(--bui-space-5);\n }\n\n .TablePagination-module_bui-TablePaginationLeft__2_xhH {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .TablePagination-module_bui-TablePaginationRight__1YoYl {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--bui-space-2);\n }\n\n .TablePagination-module_bui-TablePaginationSelect__1PBCZ {\n min-width: 10.5rem;\n }\n}\n";
4
- var styles = {"bui-TablePagination":"TablePagination-module_bui-TablePagination__2nXRB","bui-TablePaginationLeft":"TablePagination-module_bui-TablePaginationLeft__2_xhH","bui-TablePaginationRight":"TablePagination-module_bui-TablePaginationRight__1YoYl","bui-TablePaginationSelect":"TablePagination-module_bui-TablePaginationSelect__1PBCZ"};
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 tokens, base, components, utilities;\n\n@layer components {\n .TablePagination_bui-TablePagination__60cf6cf213 {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-top: var(--bui-space-5);\n }\n\n .TablePagination_bui-TablePaginationLeft__60cf6cf213 {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .TablePagination_bui-TablePaginationRight__60cf6cf213 {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--bui-space-2);\n }\n\n .TablePagination_bui-TablePaginationSelect__60cf6cf213 {\n min-width: 10.5rem;\n }\n}\n";
4
+ var styles = {"bui-TablePagination":"TablePagination_bui-TablePagination__60cf6cf213","bui-TablePaginationLeft":"TablePagination_bui-TablePaginationLeft__60cf6cf213","bui-TablePaginationRight":"TablePagination_bui-TablePaginationRight__60cf6cf213","bui-TablePaginationSelect":"TablePagination_bui-TablePaginationSelect__60cf6cf213"};
5
5
  styleInject(css_248z);
6
6
 
7
7
  export { styles as default };
@@ -1,7 +1,7 @@
1
1
  import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
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 tokens, base, components, utilities;\n\n@layer components {\n .Tabs-module_bui-Tabs__2lvvh {\n /* Initialize CSS variables */\n --active-tab-left: 0px;\n --active-tab-right: 0px;\n --active-tab-top: 0px;\n --active-tab-bottom: 0px;\n --active-tab-width: 0px;\n --active-tab-height: 0px;\n --active-transition-duration: 0s;\n\n --hovered-tab-left: 0px;\n --hovered-tab-right: 0px;\n --hovered-tab-top: 0px;\n --hovered-tab-bottom: 0px;\n --hovered-tab-width: 0px;\n --hovered-tab-height: 0px;\n --hovered-tab-opacity: 0;\n --hovered-transition-duration: 0s;\n }\n\n .Tabs-module_bui-TabList__1TlFu {\n display: flex;\n flex-direction: row;\n }\n\n .Tabs-module_bui-TabListWrapper__UJVoz {\n position: relative;\n }\n\n .Tabs-module_bui-Tab__WKK2Q {\n font-size: var(--bui-font-size-3);\n font-family: var(--bui-font-regular);\n font-weight: var(--bui-font-weight-regular);\n color: var(--bui-fg-secondary);\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n position: relative;\n z-index: 2;\n padding-inline: var(--bui-space-2);\n\n &[data-selected='true'] {\n color: var(--bui-fg-primary);\n }\n }\n\n .Tabs-module_bui-TabActive__2Awkk {\n content: '';\n position: absolute;\n left: calc(var(--active-tab-left) + var(--bui-space-2));\n bottom: -1px;\n width: calc(var(--active-tab-width) - var(--bui-space-4));\n height: 1px;\n background-color: var(--bui-fg-primary);\n border-radius: 4px;\n transition: left var(--active-transition-duration) ease-out,\n opacity 0.15s ease-out, width var(--active-transition-duration) ease-out;\n opacity: 1;\n }\n\n .Tabs-module_bui-TabHovered__1wlrg {\n content: '';\n position: absolute;\n left: var(--hovered-tab-left);\n top: calc(var(--hovered-tab-top) + 4px);\n width: var(--hovered-tab-width);\n height: calc(var(--hovered-tab-height) - 8px);\n background-color: var(--bui-gray-2);\n border-radius: 4px;\n opacity: var(--hovered-tab-opacity);\n transition: left var(--hovered-transition-duration) ease-out,\n top var(--hovered-transition-duration) ease-out,\n width var(--hovered-transition-duration) ease-out,\n height var(--hovered-transition-duration) ease-out, opacity 0.15s ease-out;\n }\n\n .Tabs-module_bui-TabPanel__2_e5K {\n padding-inline: var(--bui-space-2);\n padding-top: var(--bui-space-4);\n }\n}\n";
4
- var styles = {"bui-Tabs":"Tabs-module_bui-Tabs__2lvvh","bui-TabList":"Tabs-module_bui-TabList__1TlFu","bui-TabListWrapper":"Tabs-module_bui-TabListWrapper__UJVoz","bui-Tab":"Tabs-module_bui-Tab__WKK2Q","bui-TabActive":"Tabs-module_bui-TabActive__2Awkk","bui-TabHovered":"Tabs-module_bui-TabHovered__1wlrg","bui-TabPanel":"Tabs-module_bui-TabPanel__2_e5K"};
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 tokens, base, components, utilities;\n\n@layer components {\n .Tabs_bui-Tabs__6200292476 {\n /* Initialize CSS variables */\n --active-tab-left: 0px;\n --active-tab-right: 0px;\n --active-tab-top: 0px;\n --active-tab-bottom: 0px;\n --active-tab-width: 0px;\n --active-tab-height: 0px;\n --active-transition-duration: 0s;\n\n --hovered-tab-left: 0px;\n --hovered-tab-right: 0px;\n --hovered-tab-top: 0px;\n --hovered-tab-bottom: 0px;\n --hovered-tab-width: 0px;\n --hovered-tab-height: 0px;\n --hovered-tab-opacity: 0;\n --hovered-transition-duration: 0s;\n }\n\n .Tabs_bui-TabList__6200292476 {\n display: flex;\n flex-direction: row;\n }\n\n .Tabs_bui-TabListWrapper__6200292476 {\n position: relative;\n }\n\n .Tabs_bui-Tab__6200292476 {\n font-size: var(--bui-font-size-3);\n font-family: var(--bui-font-regular);\n font-weight: var(--bui-font-weight-regular);\n color: var(--bui-fg-secondary);\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n position: relative;\n z-index: 2;\n padding-inline: var(--bui-space-2);\n\n &[data-selected='true'] {\n color: var(--bui-fg-primary);\n }\n }\n\n .Tabs_bui-TabActive__6200292476 {\n content: '';\n position: absolute;\n left: calc(var(--active-tab-left) + var(--bui-space-2));\n bottom: -1px;\n width: calc(var(--active-tab-width) - var(--bui-space-4));\n height: 1px;\n background-color: var(--bui-fg-primary);\n border-radius: 4px;\n transition: left var(--active-transition-duration) ease-out,\n opacity 0.15s ease-out, width var(--active-transition-duration) ease-out;\n opacity: 1;\n }\n\n .Tabs_bui-TabHovered__6200292476 {\n content: '';\n position: absolute;\n left: var(--hovered-tab-left);\n top: calc(var(--hovered-tab-top) + 4px);\n width: var(--hovered-tab-width);\n height: calc(var(--hovered-tab-height) - 8px);\n background-color: var(--bui-gray-2);\n border-radius: 4px;\n opacity: var(--hovered-tab-opacity);\n transition: left var(--hovered-transition-duration) ease-out,\n top var(--hovered-transition-duration) ease-out,\n width var(--hovered-transition-duration) ease-out,\n height var(--hovered-transition-duration) ease-out, opacity 0.15s ease-out;\n }\n\n .Tabs_bui-TabPanel__6200292476 {\n padding-inline: var(--bui-space-2);\n padding-top: var(--bui-space-4);\n }\n}\n";
4
+ var styles = {"bui-Tabs":"Tabs_bui-Tabs__6200292476","bui-TabList":"Tabs_bui-TabList__6200292476","bui-TabListWrapper":"Tabs_bui-TabListWrapper__6200292476","bui-Tab":"Tabs_bui-Tab__6200292476","bui-TabActive":"Tabs_bui-TabActive__6200292476","bui-TabHovered":"Tabs_bui-TabHovered__6200292476","bui-TabPanel":"Tabs_bui-TabPanel__6200292476"};
5
5
  styleInject(css_248z);
6
6
 
7
7
  export { styles as default };
@@ -1,7 +1,7 @@
1
1
  import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
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 tokens, base, components, utilities;\n\n@layer components {\n .TagGroup-module_bui-TagList__3GmM2 {\n display: flex;\n flex-wrap: wrap;\n gap: var(--bui-space-2);\n }\n\n .TagGroup-module_bui-Tag__29R-y {\n color: var(--bui-fg-primary);\n background-color: var(--bui-gray-2);\n border-radius: var(--bui-radius-2);\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: var(--bui-font-weight-regular);\n gap: var(--bui-space-1);\n transition-property: background-color, box-shadow, color;\n transition-duration: 0.2s;\n transition-timing-function: ease-in-out;\n box-sizing: border-box;\n }\n\n .TagGroup-module_bui-Tag__29R-y[data-size='small'] {\n height: 26px;\n padding: 0 var(--bui-space-2);\n font-size: var(--bui-font-size-1);\n }\n\n .TagGroup-module_bui-Tag__29R-y[data-size='medium'] {\n height: 32px;\n padding: 0 var(--bui-space-2);\n font-size: var(--bui-font-size-2);\n }\n\n .TagGroup-module_bui-Tag__29R-y[data-hovered] {\n background-color: var(--bui-gray-3);\n cursor: pointer;\n }\n\n .TagGroup-module_bui-Tag__29R-y[data-focus-visible] {\n outline: 2px solid var(--bui-ring);\n outline-offset: 1px;\n }\n\n .TagGroup-module_bui-Tag__29R-y[data-selected] {\n box-shadow: inset 0 0 0 1px var(--bui-gray-8);\n }\n\n .TagGroup-module_bui-Tag__29R-y[data-disabled] {\n color: var(--bui-fg-disabled);\n cursor: not-allowed;\n }\n\n .TagGroup-module_bui-TagRemoveButton__2uLh- {\n background-color: transparent;\n border: none;\n cursor: pointer;\n color: var(--bui-fg-primary);\n padding: 0;\n margin: 0;\n width: 1rem;\n height: 1rem;\n }\n\n .TagGroup-module_bui-TagIcon__3Hl1U {\n display: flex;\n align-items: center;\n justify-content: center;\n transition: color 0.2s ease-in-out;\n\n svg {\n width: 1rem;\n height: 1rem;\n }\n }\n}\n";
4
- var styles = {"bui-TagList":"TagGroup-module_bui-TagList__3GmM2","bui-Tag":"TagGroup-module_bui-Tag__29R-y","bui-TagRemoveButton":"TagGroup-module_bui-TagRemoveButton__2uLh-","bui-TagIcon":"TagGroup-module_bui-TagIcon__3Hl1U"};
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 tokens, base, components, utilities;\n\n@layer components {\n .TagGroup_bui-TagList__d4eb8d9a34 {\n display: flex;\n flex-wrap: wrap;\n gap: var(--bui-space-2);\n }\n\n .TagGroup_bui-Tag__d4eb8d9a34 {\n color: var(--bui-fg-primary);\n background-color: var(--bui-gray-2);\n border-radius: var(--bui-radius-2);\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: var(--bui-font-weight-regular);\n gap: var(--bui-space-1);\n transition-property: background-color, box-shadow, color;\n transition-duration: 0.2s;\n transition-timing-function: ease-in-out;\n box-sizing: border-box;\n }\n\n .TagGroup_bui-Tag__d4eb8d9a34[data-size='small'] {\n height: 26px;\n padding: 0 var(--bui-space-2);\n font-size: var(--bui-font-size-1);\n }\n\n .TagGroup_bui-Tag__d4eb8d9a34[data-size='medium'] {\n height: 32px;\n padding: 0 var(--bui-space-2);\n font-size: var(--bui-font-size-2);\n }\n\n .TagGroup_bui-Tag__d4eb8d9a34[data-hovered] {\n background-color: var(--bui-gray-3);\n cursor: pointer;\n }\n\n .TagGroup_bui-Tag__d4eb8d9a34[data-focus-visible] {\n outline: 2px solid var(--bui-ring);\n outline-offset: 1px;\n }\n\n .TagGroup_bui-Tag__d4eb8d9a34[data-selected] {\n box-shadow: inset 0 0 0 1px var(--bui-gray-8);\n }\n\n .TagGroup_bui-Tag__d4eb8d9a34[data-disabled] {\n color: var(--bui-fg-disabled);\n cursor: not-allowed;\n }\n\n .TagGroup_bui-TagRemoveButton__d4eb8d9a34 {\n background-color: transparent;\n border: none;\n cursor: pointer;\n color: var(--bui-fg-primary);\n padding: 0;\n margin: 0;\n width: 1rem;\n height: 1rem;\n }\n\n .TagGroup_bui-TagIcon__d4eb8d9a34 {\n display: flex;\n align-items: center;\n justify-content: center;\n transition: color 0.2s ease-in-out;\n\n svg {\n width: 1rem;\n height: 1rem;\n }\n }\n}\n";
4
+ var styles = {"bui-TagList":"TagGroup_bui-TagList__d4eb8d9a34","bui-Tag":"TagGroup_bui-Tag__d4eb8d9a34","bui-TagRemoveButton":"TagGroup_bui-TagRemoveButton__d4eb8d9a34","bui-TagIcon":"TagGroup_bui-TagIcon__d4eb8d9a34"};
5
5
  styleInject(css_248z);
6
6
 
7
7
  export { styles as default };
@@ -1,7 +1,7 @@
1
1
  import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
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 tokens, base, components, utilities;\n\n@layer components {\n .Text-module_bui-Text__7NvCl {\n font-family: var(--bui-font-regular);\n padding: 0;\n margin: 0;\n }\n\n .Text-module_bui-Text__7NvCl[data-variant='title-large'] {\n font-size: var(--bui-font-size-8);\n line-height: 140%;\n }\n\n .Text-module_bui-Text__7NvCl[data-variant='title-medium'] {\n font-size: var(--bui-font-size-7);\n line-height: 140%;\n }\n\n .Text-module_bui-Text__7NvCl[data-variant='title-small'] {\n font-size: var(--bui-font-size-6);\n line-height: 140%;\n }\n\n .Text-module_bui-Text__7NvCl[data-variant='title-x-small'] {\n font-size: var(--bui-font-size-5);\n line-height: 140%;\n }\n\n .Text-module_bui-Text__7NvCl[data-variant='body-large'] {\n font-size: var(--bui-font-size-4);\n line-height: 140%;\n }\n\n .Text-module_bui-Text__7NvCl[data-variant='body-medium'] {\n font-size: var(--bui-font-size-3);\n line-height: 140%;\n }\n\n .Text-module_bui-Text__7NvCl[data-variant='body-small'] {\n font-size: var(--bui-font-size-2);\n line-height: 140%;\n }\n\n .Text-module_bui-Text__7NvCl[data-variant='body-x-small'] {\n font-size: var(--bui-font-size-1);\n line-height: 140%;\n }\n\n .Text-module_bui-Text__7NvCl[data-weight='regular'] {\n font-weight: var(--bui-font-weight-regular);\n }\n\n .Text-module_bui-Text__7NvCl[data-weight='bold'] {\n font-weight: var(--bui-font-weight-bold);\n }\n\n .Text-module_bui-Text__7NvCl[data-color='primary'] {\n color: var(--bui-fg-primary);\n }\n\n .Text-module_bui-Text__7NvCl[data-color='secondary'] {\n color: var(--bui-fg-secondary);\n }\n\n .Text-module_bui-Text__7NvCl[data-color='danger'] {\n color: var(--bui-fg-danger);\n }\n\n .Text-module_bui-Text__7NvCl[data-color='warning'] {\n color: var(--bui-fg-warning);\n }\n\n .Text-module_bui-Text__7NvCl[data-color='success'] {\n color: var(--bui-fg-success);\n }\n\n .Text-module_bui-Text__7NvCl[data-truncate] {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .Text-module_bui-Text__7NvCl[data-as='span'],\n .Text-module_bui-Text__7NvCl[data-as='label'],\n .Text-module_bui-Text__7NvCl[data-as='strong'],\n .Text-module_bui-Text__7NvCl[data-as='em'],\n .Text-module_bui-Text__7NvCl[data-as='small'] {\n display: inline-block;\n }\n}\n";
4
- var styles = {"bui-Text":"Text-module_bui-Text__7NvCl"};
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 tokens, base, components, utilities;\n\n@layer components {\n .Text_bui-Text__8605f2b3b5 {\n font-family: var(--bui-font-regular);\n padding: 0;\n margin: 0;\n }\n\n .Text_bui-Text__8605f2b3b5[data-variant='title-large'] {\n font-size: var(--bui-font-size-8);\n line-height: 140%;\n }\n\n .Text_bui-Text__8605f2b3b5[data-variant='title-medium'] {\n font-size: var(--bui-font-size-7);\n line-height: 140%;\n }\n\n .Text_bui-Text__8605f2b3b5[data-variant='title-small'] {\n font-size: var(--bui-font-size-6);\n line-height: 140%;\n }\n\n .Text_bui-Text__8605f2b3b5[data-variant='title-x-small'] {\n font-size: var(--bui-font-size-5);\n line-height: 140%;\n }\n\n .Text_bui-Text__8605f2b3b5[data-variant='body-large'] {\n font-size: var(--bui-font-size-4);\n line-height: 140%;\n }\n\n .Text_bui-Text__8605f2b3b5[data-variant='body-medium'] {\n font-size: var(--bui-font-size-3);\n line-height: 140%;\n }\n\n .Text_bui-Text__8605f2b3b5[data-variant='body-small'] {\n font-size: var(--bui-font-size-2);\n line-height: 140%;\n }\n\n .Text_bui-Text__8605f2b3b5[data-variant='body-x-small'] {\n font-size: var(--bui-font-size-1);\n line-height: 140%;\n }\n\n .Text_bui-Text__8605f2b3b5[data-weight='regular'] {\n font-weight: var(--bui-font-weight-regular);\n }\n\n .Text_bui-Text__8605f2b3b5[data-weight='bold'] {\n font-weight: var(--bui-font-weight-bold);\n }\n\n .Text_bui-Text__8605f2b3b5[data-color='primary'] {\n color: var(--bui-fg-primary);\n }\n\n .Text_bui-Text__8605f2b3b5[data-color='secondary'] {\n color: var(--bui-fg-secondary);\n }\n\n .Text_bui-Text__8605f2b3b5[data-color='danger'] {\n color: var(--bui-fg-danger);\n }\n\n .Text_bui-Text__8605f2b3b5[data-color='warning'] {\n color: var(--bui-fg-warning);\n }\n\n .Text_bui-Text__8605f2b3b5[data-color='success'] {\n color: var(--bui-fg-success);\n }\n\n .Text_bui-Text__8605f2b3b5[data-truncate] {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .Text_bui-Text__8605f2b3b5[data-as='span'],\n .Text_bui-Text__8605f2b3b5[data-as='label'],\n .Text_bui-Text__8605f2b3b5[data-as='strong'],\n .Text_bui-Text__8605f2b3b5[data-as='em'],\n .Text_bui-Text__8605f2b3b5[data-as='small'] {\n display: inline-block;\n }\n}\n";
4
+ var styles = {"bui-Text":"Text_bui-Text__8605f2b3b5"};
5
5
  styleInject(css_248z);
6
6
 
7
7
  export { styles as default };
@@ -1,7 +1,7 @@
1
1
  import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
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 tokens, base, components, utilities;\n\n@layer components {\n .TextField-module_bui-TextField__1KBy4 {\n display: flex;\n flex-direction: column;\n font-family: var(--bui-font-regular);\n width: 100%;\n flex-shrink: 0;\n }\n\n .TextField-module_bui-InputWrapper__25yD_ {\n position: relative;\n\n &[data-size='small'] .TextField-module_bui-Input__1Uojs {\n height: 2rem;\n }\n\n &[data-size='medium'] .TextField-module_bui-Input__1Uojs {\n height: 2.5rem;\n }\n\n &[data-size='small'] .TextField-module_bui-Input__1Uojs[data-icon] {\n padding-left: var(--bui-space-8);\n }\n\n &[data-size='medium'] .TextField-module_bui-Input__1Uojs[data-icon] {\n padding-left: var(--bui-space-9);\n }\n }\n\n .TextField-module_bui-InputIcon__2KDAe {\n position: absolute;\n left: var(--bui-space-3);\n top: 50%;\n transform: translateY(-50%);\n margin-right: var(--bui-space-1);\n color: var(--bui-fg-primary);\n flex-shrink: 0;\n pointer-events: none;\n /* To animate the icon when the input is collapsed */\n transition: left 0.2s ease-in-out;\n\n &[data-size='small'],\n &[data-size='small'] svg {\n width: 1rem;\n height: 1rem;\n }\n\n &[data-size='medium'],\n &[data-size='medium'] svg {\n width: 1.25rem;\n height: 1.25rem;\n }\n }\n\n .TextField-module_bui-Input__1Uojs {\n display: flex;\n align-items: center;\n padding: 0 var(--bui-space-3);\n border-radius: var(--bui-radius-2);\n border: 1px solid var(--bui-border);\n background-color: var(--bui-bg-surface-1);\n font-size: var(--bui-font-size-3);\n font-family: var(--bui-font-regular);\n font-weight: var(--bui-font-weight-regular);\n color: var(--bui-fg-primary);\n transition: border-color 0.2s ease-in-out, outline-color 0.2s ease-in-out;\n width: 100%;\n height: 100%;\n cursor: inherit;\n\n &::-webkit-search-cancel-button,\n &::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n\n &::placeholder {\n color: var(--bui-fg-secondary);\n }\n\n &[data-focused] {\n outline-color: var(--bui-border-pressed);\n outline-width: 0px;\n }\n\n &[data-hovered] {\n border-color: var(--bui-border-hover);\n }\n\n &[data-focused] {\n border-color: var(--bui-border-pressed);\n outline-width: 0px;\n }\n\n &[data-invalid] {\n border-color: var(--bui-fg-danger);\n }\n\n &[data-disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n border: 1px solid var(--bui-border-disabled);\n }\n }\n}\n";
4
- var styles = {"bui-TextField":"TextField-module_bui-TextField__1KBy4","bui-InputWrapper":"TextField-module_bui-InputWrapper__25yD_","bui-Input":"TextField-module_bui-Input__1Uojs","bui-InputIcon":"TextField-module_bui-InputIcon__2KDAe"};
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 tokens, base, components, utilities;\n\n@layer components {\n .TextField_bui-TextField__ff62eb028a {\n display: flex;\n flex-direction: column;\n font-family: var(--bui-font-regular);\n width: 100%;\n flex-shrink: 0;\n }\n\n .TextField_bui-InputWrapper__ff62eb028a {\n position: relative;\n\n &[data-size='small'] .TextField_bui-Input__ff62eb028a {\n height: 2rem;\n }\n\n &[data-size='medium'] .TextField_bui-Input__ff62eb028a {\n height: 2.5rem;\n }\n\n &[data-size='small'] .TextField_bui-Input__ff62eb028a[data-icon] {\n padding-left: var(--bui-space-8);\n }\n\n &[data-size='medium'] .TextField_bui-Input__ff62eb028a[data-icon] {\n padding-left: var(--bui-space-9);\n }\n }\n\n .TextField_bui-InputIcon__ff62eb028a {\n position: absolute;\n left: var(--bui-space-3);\n top: 50%;\n transform: translateY(-50%);\n margin-right: var(--bui-space-1);\n color: var(--bui-fg-primary);\n flex-shrink: 0;\n pointer-events: none;\n /* To animate the icon when the input is collapsed */\n transition: left 0.2s ease-in-out;\n\n &[data-size='small'],\n &[data-size='small'] svg {\n width: 1rem;\n height: 1rem;\n }\n\n &[data-size='medium'],\n &[data-size='medium'] svg {\n width: 1.25rem;\n height: 1.25rem;\n }\n }\n\n .TextField_bui-Input__ff62eb028a {\n display: flex;\n align-items: center;\n padding: 0 var(--bui-space-3);\n border-radius: var(--bui-radius-2);\n border: 1px solid var(--bui-border);\n background-color: var(--bui-bg-surface-1);\n font-size: var(--bui-font-size-3);\n font-family: var(--bui-font-regular);\n font-weight: var(--bui-font-weight-regular);\n color: var(--bui-fg-primary);\n transition: border-color 0.2s ease-in-out, outline-color 0.2s ease-in-out;\n width: 100%;\n height: 100%;\n cursor: inherit;\n\n &::-webkit-search-cancel-button,\n &::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n\n &::placeholder {\n color: var(--bui-fg-secondary);\n }\n\n &[data-focused] {\n outline-color: var(--bui-border-pressed);\n outline-width: 0px;\n }\n\n &[data-hovered] {\n border-color: var(--bui-border-hover);\n }\n\n &[data-focused] {\n border-color: var(--bui-border-pressed);\n outline-width: 0px;\n }\n\n &[data-invalid] {\n border-color: var(--bui-fg-danger);\n }\n\n &[data-disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n border: 1px solid var(--bui-border-disabled);\n }\n }\n}\n";
4
+ var styles = {"bui-TextField":"TextField_bui-TextField__ff62eb028a","bui-InputWrapper":"TextField_bui-InputWrapper__ff62eb028a","bui-Input":"TextField_bui-Input__ff62eb028a","bui-InputIcon":"TextField_bui-InputIcon__ff62eb028a"};
5
5
  styleInject(css_248z);
6
6
 
7
7
  export { styles as default };
@@ -1,7 +1,7 @@
1
1
  import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
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 tokens, base, components, utilities;\n\n@layer components {\n .ToggleButton-module_bui-ToggleButton__1CL1A {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--bui-space-1_5);\n border: none;\n border-radius: var(--bui-radius-2);\n background: var(--bui-bg-surface-1);\n color: var(--bui-fg-primary);\n font-family: var(--bui-font-regular);\n font-weight: var(--bui-font-weight-bold);\n padding: 0 var(--bui-space-2);\n cursor: pointer;\n transition: background-color 150ms ease, box-shadow 150ms ease,\n color 150ms ease, transform 100ms ease;\n\n &[data-selected],\n &[data-pressed] {\n background: var(--bui-bg-solid);\n color: var(--bui-fg-solid);\n }\n\n &:not([data-selected])[data-hovered] {\n background: var(--bui-bg-surface-2);\n }\n\n &[data-disabled] {\n background: var(--bui-bg-neutral-on-surface-0-disabled);\n color: var(--bui-fg-disabled);\n }\n\n &[data-disabled][data-hovered] {\n background: var(--bui-bg-neutral-on-surface-0-disabled);\n }\n\n &[data-disabled][data-selected] {\n background: var(--bui-bg-solid-disabled);\n color: var(--bui-fg-disabled);\n }\n }\n\n .ToggleButton-module_bui-ToggleButton__1CL1A[data-focus-visible] {\n outline: none;\n box-shadow: inset 0 0 0 2px var(--bui-ring);\n }\n\n .ToggleButton-module_bui-ToggleButton__1CL1A[data-disabled] {\n cursor: not-allowed;\n }\n\n .ToggleButton-module_bui-ToggleButton__1CL1A[data-pressed] {\n transform: scale(0.98);\n }\n\n .ToggleButton-module_bui-ToggleButton__1CL1A[data-disabled][data-pressed] {\n transform: none;\n }\n\n .ToggleButton-module_bui-ToggleButton__1CL1A[data-size='small'] {\n height: 2rem;\n font-size: var(--bui-font-size-3);\n padding: 0 var(--bui-space-2);\n\n svg {\n width: 1rem;\n height: 1rem;\n }\n }\n\n .ToggleButton-module_bui-ToggleButton__1CL1A[data-size='medium'] {\n height: 2.5rem;\n font-size: var(--bui-font-size-4);\n padding: 0 var(--bui-space-3);\n\n svg {\n width: 1.25rem;\n height: 1.25rem;\n }\n }\n\n .ToggleButton-module_bui-ToggleButtonContent__1Pq3O {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--bui-space-1_5);\n height: 100%;\n width: 100%;\n }\n}\n";
4
- var styles = {"bui-ToggleButton":"ToggleButton-module_bui-ToggleButton__1CL1A","bui-ToggleButtonContent":"ToggleButton-module_bui-ToggleButtonContent__1Pq3O"};
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 tokens, base, components, utilities;\n\n@layer components {\n .ToggleButton_bui-ToggleButton__bf99926b51 {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--bui-space-1_5);\n border: none;\n border-radius: var(--bui-radius-2);\n background: var(--bui-bg-surface-1);\n color: var(--bui-fg-primary);\n font-family: var(--bui-font-regular);\n font-weight: var(--bui-font-weight-bold);\n padding: 0 var(--bui-space-2);\n cursor: pointer;\n transition: background-color 150ms ease, box-shadow 150ms ease,\n color 150ms ease, transform 100ms ease;\n\n &[data-selected],\n &[data-pressed] {\n background: var(--bui-bg-solid);\n color: var(--bui-fg-solid);\n }\n\n &:not([data-selected])[data-hovered] {\n background: var(--bui-bg-surface-2);\n }\n\n &[data-disabled] {\n background: var(--bui-bg-neutral-on-surface-0-disabled);\n color: var(--bui-fg-disabled);\n }\n\n &[data-disabled][data-hovered] {\n background: var(--bui-bg-neutral-on-surface-0-disabled);\n }\n\n &[data-disabled][data-selected] {\n background: var(--bui-bg-solid-disabled);\n color: var(--bui-fg-disabled);\n }\n }\n\n .ToggleButton_bui-ToggleButton__bf99926b51[data-focus-visible] {\n outline: none;\n box-shadow: inset 0 0 0 2px var(--bui-ring);\n }\n\n .ToggleButton_bui-ToggleButton__bf99926b51[data-disabled] {\n cursor: not-allowed;\n }\n\n .ToggleButton_bui-ToggleButton__bf99926b51[data-pressed] {\n transform: scale(0.98);\n }\n\n .ToggleButton_bui-ToggleButton__bf99926b51[data-disabled][data-pressed] {\n transform: none;\n }\n\n .ToggleButton_bui-ToggleButton__bf99926b51[data-size='small'] {\n height: 2rem;\n font-size: var(--bui-font-size-3);\n padding: 0 var(--bui-space-2);\n\n svg {\n width: 1rem;\n height: 1rem;\n }\n }\n\n .ToggleButton_bui-ToggleButton__bf99926b51[data-size='medium'] {\n height: 2.5rem;\n font-size: var(--bui-font-size-4);\n padding: 0 var(--bui-space-3);\n\n svg {\n width: 1.25rem;\n height: 1.25rem;\n }\n }\n\n .ToggleButton_bui-ToggleButtonContent__bf99926b51 {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--bui-space-1_5);\n height: 100%;\n width: 100%;\n }\n}\n";
4
+ var styles = {"bui-ToggleButton":"ToggleButton_bui-ToggleButton__bf99926b51","bui-ToggleButtonContent":"ToggleButton_bui-ToggleButtonContent__bf99926b51"};
5
5
  styleInject(css_248z);
6
6
 
7
7
  export { styles as default };
@@ -1,7 +1,7 @@
1
1
  import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
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 tokens, base, components, utilities;\n\n@layer components {\n .ToggleButtonGroup-module_bui-ToggleButtonGroup__2tWrx {\n display: inline-flex;\n align-items: center;\n flex-wrap: nowrap;\n border-radius: var(--bui-radius-2);\n overflow: hidden;\n box-shadow: inset 0 0 0 1px var(--bui-border);\n width: fit-content;\n }\n\n .ToggleButtonGroup-module_bui-ToggleButtonGroup__2tWrx[data-orientation='vertical'] {\n flex-direction: column;\n align-items: stretch;\n width: fit-content;\n }\n\n .ToggleButtonGroup-module_bui-ToggleButtonGroup__2tWrx > .bui-ToggleButton {\n border-radius: 0;\n margin: 0;\n box-shadow: none;\n border: 0;\n }\n\n /* Horizontal radius rules (default orientation) */\n .ToggleButtonGroup-module_bui-ToggleButtonGroup__2tWrx:not([data-orientation='vertical'])\n > .bui-ToggleButton {\n border-radius: 0;\n }\n\n .ToggleButtonGroup-module_bui-ToggleButtonGroup__2tWrx:not([data-orientation='vertical'])\n > .bui-ToggleButton:first-child {\n border-radius: var(--bui-radius-2) 0 0 var(--bui-radius-2);\n }\n\n .ToggleButtonGroup-module_bui-ToggleButtonGroup__2tWrx:not([data-orientation='vertical'])\n > .bui-ToggleButton:last-child {\n border-radius: 0 var(--bui-radius-2) var(--bui-radius-2) 0;\n }\n\n .ToggleButtonGroup-module_bui-ToggleButtonGroup__2tWrx:not([data-orientation='vertical'])\n > .bui-ToggleButton:only-child {\n border-radius: var(--bui-radius-2);\n }\n\n /* Horizontal dividers */\n .ToggleButtonGroup-module_bui-ToggleButtonGroup__2tWrx:not([data-orientation='vertical'])\n .bui-ToggleButton\n + .bui-ToggleButton {\n border-left: 1px solid var(--bui-border);\n }\n\n /* Vertical dividers */\n .ToggleButtonGroup-module_bui-ToggleButtonGroup__2tWrx[data-orientation='vertical']\n .bui-ToggleButton {\n width: 100%;\n }\n\n .ToggleButtonGroup-module_bui-ToggleButtonGroup__2tWrx[data-orientation='vertical']\n .bui-ToggleButton\n + .bui-ToggleButton {\n border-top: 1px solid var(--bui-border);\n }\n\n /* Vertical radius rules */\n .ToggleButtonGroup-module_bui-ToggleButtonGroup__2tWrx[data-orientation='vertical']\n > .bui-ToggleButton {\n border-radius: 0;\n }\n\n .ToggleButtonGroup-module_bui-ToggleButtonGroup__2tWrx[data-orientation='vertical']\n > .bui-ToggleButton:first-child {\n border-radius: var(--bui-radius-2) var(--bui-radius-2) 0 0;\n }\n\n .ToggleButtonGroup-module_bui-ToggleButtonGroup__2tWrx[data-orientation='vertical']\n > .bui-ToggleButton:last-child {\n border-radius: 0 0 var(--bui-radius-2) var(--bui-radius-2);\n }\n\n .ToggleButtonGroup-module_bui-ToggleButtonGroup__2tWrx[data-orientation='vertical']\n > .bui-ToggleButton:only-child {\n border-radius: var(--bui-radius-2);\n }\n\n /* Focus ring on group surface */\n .ToggleButtonGroup-module_bui-ToggleButtonGroup__2tWrx:focus-visible {\n outline: 2px solid var(--bui-ring);\n outline-offset: 2px;\n }\n}\n";
4
- var styles = {"bui-ToggleButtonGroup":"ToggleButtonGroup-module_bui-ToggleButtonGroup__2tWrx"};
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 tokens, base, components, utilities;\n\n@layer components {\n .ToggleButtonGroup_bui-ToggleButtonGroup__ac6b6d15f0 {\n display: inline-flex;\n align-items: center;\n flex-wrap: nowrap;\n border-radius: var(--bui-radius-2);\n overflow: hidden;\n box-shadow: inset 0 0 0 1px var(--bui-border);\n width: fit-content;\n }\n\n .ToggleButtonGroup_bui-ToggleButtonGroup__ac6b6d15f0[data-orientation='vertical'] {\n flex-direction: column;\n align-items: stretch;\n width: fit-content;\n }\n\n .ToggleButtonGroup_bui-ToggleButtonGroup__ac6b6d15f0 > .bui-ToggleButton {\n border-radius: 0;\n margin: 0;\n box-shadow: none;\n border: 0;\n }\n\n /* Horizontal radius rules (default orientation) */\n .ToggleButtonGroup_bui-ToggleButtonGroup__ac6b6d15f0:not([data-orientation='vertical'])\n > .bui-ToggleButton {\n border-radius: 0;\n }\n\n .ToggleButtonGroup_bui-ToggleButtonGroup__ac6b6d15f0:not([data-orientation='vertical'])\n > .bui-ToggleButton:first-child {\n border-radius: var(--bui-radius-2) 0 0 var(--bui-radius-2);\n }\n\n .ToggleButtonGroup_bui-ToggleButtonGroup__ac6b6d15f0:not([data-orientation='vertical'])\n > .bui-ToggleButton:last-child {\n border-radius: 0 var(--bui-radius-2) var(--bui-radius-2) 0;\n }\n\n .ToggleButtonGroup_bui-ToggleButtonGroup__ac6b6d15f0:not([data-orientation='vertical'])\n > .bui-ToggleButton:only-child {\n border-radius: var(--bui-radius-2);\n }\n\n /* Horizontal dividers */\n .ToggleButtonGroup_bui-ToggleButtonGroup__ac6b6d15f0:not([data-orientation='vertical'])\n .bui-ToggleButton\n + .bui-ToggleButton {\n border-left: 1px solid var(--bui-border);\n }\n\n /* Vertical dividers */\n .ToggleButtonGroup_bui-ToggleButtonGroup__ac6b6d15f0[data-orientation='vertical']\n .bui-ToggleButton {\n width: 100%;\n }\n\n .ToggleButtonGroup_bui-ToggleButtonGroup__ac6b6d15f0[data-orientation='vertical']\n .bui-ToggleButton\n + .bui-ToggleButton {\n border-top: 1px solid var(--bui-border);\n }\n\n /* Vertical radius rules */\n .ToggleButtonGroup_bui-ToggleButtonGroup__ac6b6d15f0[data-orientation='vertical']\n > .bui-ToggleButton {\n border-radius: 0;\n }\n\n .ToggleButtonGroup_bui-ToggleButtonGroup__ac6b6d15f0[data-orientation='vertical']\n > .bui-ToggleButton:first-child {\n border-radius: var(--bui-radius-2) var(--bui-radius-2) 0 0;\n }\n\n .ToggleButtonGroup_bui-ToggleButtonGroup__ac6b6d15f0[data-orientation='vertical']\n > .bui-ToggleButton:last-child {\n border-radius: 0 0 var(--bui-radius-2) var(--bui-radius-2);\n }\n\n .ToggleButtonGroup_bui-ToggleButtonGroup__ac6b6d15f0[data-orientation='vertical']\n > .bui-ToggleButton:only-child {\n border-radius: var(--bui-radius-2);\n }\n\n /* Focus ring on group surface */\n .ToggleButtonGroup_bui-ToggleButtonGroup__ac6b6d15f0:focus-visible {\n outline: 2px solid var(--bui-ring);\n outline-offset: 2px;\n }\n}\n";
4
+ var styles = {"bui-ToggleButtonGroup":"ToggleButtonGroup_bui-ToggleButtonGroup__ac6b6d15f0"};
5
5
  styleInject(css_248z);
6
6
 
7
7
  export { styles as default };
@@ -1,7 +1,7 @@
1
1
  import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
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 tokens, base, components, utilities;\n\n@layer components {\n .Tooltip-module_bui-Tooltip__1xkDA {\n box-shadow: 0 10px 15px -3px rgba(0 0 0 / 0.1),\n 0 4px 6px -4px rgba(0 0 0 / 0.1);\n border-radius: 4px;\n background: var(--bui-bg-surface-1);\n border: 1px solid var(--bui-gray-3);\n forced-color-adjust: none;\n outline: none;\n padding: var(--bui-space-2) var(--bui-space-3);\n max-width: 240px;\n /* fixes FF gap */\n transform: translate3d(0, 0, 0);\n transition: transform 200ms, opacity 200ms;\n font-size: var(--bui-font-size-3);\n font-family: var(--bui-font-regular);\n color: var(--bui-fg-primary);\n\n &[data-entering],\n &[data-exiting] {\n transform: var(--origin);\n opacity: 0;\n }\n\n --tooltip-offset: var(--bui-space-3);\n\n &[data-placement='top'] {\n margin-bottom: var(--tooltip-offset);\n --origin: translateY(4px);\n }\n\n &[data-placement='right'] {\n margin-left: var(--tooltip-offset);\n --origin: translateX(-4px);\n }\n\n &[data-placement='bottom'] {\n margin-top: var(--tooltip-offset);\n --origin: translateY(-4px);\n }\n\n &[data-placement='left'] {\n margin-right: var(--tooltip-offset);\n --origin: translateX(4px);\n }\n }\n\n .Tooltip-module_bui-TooltipArrow__3lFI0 {\n & svg {\n display: block;\n\n /* The tooltip is rendered overlaying the main\n tooltip element by 1px. This causes the borders\n to overlap, which causes minor visual artifacts\n with transparent border colors. To mitigate this,\n we split the stroke and fill across separate\n elements in order to guarantee that the stroke is\n always overlaying a consistent color. */\n path:nth-child(1) {\n fill: var(--bui-bg-surface-1);\n }\n\n path:nth-child(2) {\n fill: var(--bui-gray-3);\n }\n\n /* The arrow svg overlaps the tooltip by 2px, so we\n need to adjust the margins accordingly. */\n --tooltip-arrow-overlap: -2px;\n }\n\n &[data-placement='top'] svg {\n margin-top: var(--tooltip-arrow-overlap);\n }\n\n &[data-placement='bottom'] svg {\n margin-bottom: var(--tooltip-arrow-overlap);\n transform: rotate(180deg);\n }\n\n &[data-placement='right'] svg {\n margin-right: var(--tooltip-arrow-overlap);\n transform: rotate(90deg);\n }\n\n &[data-placement='left'] svg {\n margin-left: var(--tooltip-arrow-overlap);\n transform: rotate(-90deg);\n }\n }\n\n [data-theme='dark'] {\n .Tooltip-module_bui-Tooltip__1xkDA {\n background: var(--bui-bg-surface-2);\n box-shadow: none;\n border: 1px solid var(--bui-gray-4);\n }\n\n .Tooltip-module_bui-TooltipArrow__3lFI0 {\n svg path:nth-child(1) {\n fill: var(--bui-bg-surface-2);\n }\n\n svg path:nth-child(2) {\n fill: var(--bui-gray-4);\n }\n }\n }\n}\n";
4
- var styles = {"bui-Tooltip":"Tooltip-module_bui-Tooltip__1xkDA","bui-TooltipArrow":"Tooltip-module_bui-TooltipArrow__3lFI0"};
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 tokens, base, components, utilities;\n\n@layer components {\n .Tooltip_bui-Tooltip__5c27c14a83 {\n box-shadow: var(--bui-shadow);\n border-radius: 4px;\n background: var(--bui-bg-surface-1);\n border: 1px solid var(--bui-gray-3);\n forced-color-adjust: none;\n outline: none;\n padding: var(--bui-space-2) var(--bui-space-3);\n max-width: 240px;\n /* fixes FF gap */\n transform: translate3d(0, 0, 0);\n transition: transform 200ms, opacity 200ms;\n font-size: var(--bui-font-size-3);\n font-family: var(--bui-font-regular);\n color: var(--bui-fg-primary);\n\n &[data-entering],\n &[data-exiting] {\n transform: var(--origin);\n opacity: 0;\n }\n\n --tooltip-offset: var(--bui-space-3);\n\n &[data-placement='top'] {\n margin-bottom: var(--tooltip-offset);\n --origin: translateY(4px);\n }\n\n &[data-placement='right'] {\n margin-left: var(--tooltip-offset);\n --origin: translateX(-4px);\n }\n\n &[data-placement='bottom'] {\n margin-top: var(--tooltip-offset);\n --origin: translateY(-4px);\n }\n\n &[data-placement='left'] {\n margin-right: var(--tooltip-offset);\n --origin: translateX(4px);\n }\n }\n\n .Tooltip_bui-TooltipArrow__5c27c14a83 {\n & svg {\n display: block;\n\n /* The tooltip is rendered overlaying the main\n tooltip element by 1px. This causes the borders\n to overlap, which causes minor visual artifacts\n with transparent border colors. To mitigate this,\n we split the stroke and fill across separate\n elements in order to guarantee that the stroke is\n always overlaying a consistent color. */\n path:nth-child(1) {\n fill: var(--bui-bg-surface-1);\n }\n\n path:nth-child(2) {\n fill: var(--bui-gray-3);\n }\n\n /* The arrow svg overlaps the tooltip by 2px, so we\n need to adjust the margins accordingly. */\n --tooltip-arrow-overlap: -2px;\n }\n\n &[data-placement='top'] svg {\n margin-top: var(--tooltip-arrow-overlap);\n }\n\n &[data-placement='bottom'] svg {\n margin-bottom: var(--tooltip-arrow-overlap);\n transform: rotate(180deg);\n }\n\n &[data-placement='right'] svg {\n margin-right: var(--tooltip-arrow-overlap);\n transform: rotate(90deg);\n }\n\n &[data-placement='left'] svg {\n margin-left: var(--tooltip-arrow-overlap);\n transform: rotate(-90deg);\n }\n }\n\n [data-theme='dark'] {\n .Tooltip_bui-Tooltip__5c27c14a83 {\n background: var(--bui-bg-surface-2);\n box-shadow: none;\n border: 1px solid var(--bui-gray-4);\n }\n\n .Tooltip_bui-TooltipArrow__5c27c14a83 {\n svg path:nth-child(1) {\n fill: var(--bui-bg-surface-2);\n }\n\n svg path:nth-child(2) {\n fill: var(--bui-gray-4);\n }\n }\n }\n}\n";
4
+ var styles = {"bui-Tooltip":"Tooltip_bui-Tooltip__5c27c14a83","bui-TooltipArrow":"Tooltip_bui-TooltipArrow__5c27c14a83"};
5
5
  styleInject(css_248z);
6
6
 
7
7
  export { styles as default };
@@ -1,7 +1,7 @@
1
1
  import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
2
 
3
- var css_248z = "/*\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\n@layer tokens, base, components, utilities;\n\n@layer components {\n .VisuallyHidden-module_bui-VisuallyHidden__22L23 {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n clip-path: inset(100%);\n white-space: nowrap;\n border: 0;\n }\n}\n";
4
- var styles = {"bui-VisuallyHidden":"VisuallyHidden-module_bui-VisuallyHidden__22L23"};
3
+ var css_248z = "/*\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\n@layer tokens, base, components, utilities;\n\n@layer components {\n .VisuallyHidden_bui-VisuallyHidden__d7c24c3780 {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n clip-path: inset(100%);\n white-space: nowrap;\n border: 0;\n }\n}\n";
4
+ var styles = {"bui-VisuallyHidden":"VisuallyHidden_bui-VisuallyHidden__d7c24c3780"};
5
5
  styleInject(css_248z);
6
6
 
7
7
  export { styles as default };
package/dist/index.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import * as react from 'react';
2
2
  import { ReactElement, ReactNode, ElementType, ComponentPropsWithRef, ComponentProps } from 'react';
3
- import { ButtonProps as ButtonProps$1, DisclosureProps, HeadingProps, DisclosurePanelProps, DisclosureGroupProps, DialogTriggerProps as DialogTriggerProps$1, ModalOverlayProps, TabsProps as TabsProps$1, TabListProps as TabListProps$1, TabProps as TabProps$1, TabPanelProps as TabPanelProps$1, LinkProps as LinkProps$1, CheckboxProps as CheckboxProps$1, RadioGroupProps as RadioGroupProps$1, RadioProps as RadioProps$1, TableProps as TableProps$1, ColumnProps as ColumnProps$1, CellProps as CellProps$1, TableHeaderProps, TableBodyProps, RowProps, TagGroupProps as TagGroupProps$1, TagListProps, TagProps as TagProps$1, TextFieldProps as TextFieldProps$1, TooltipProps as TooltipProps$1, TooltipTriggerComponentProps, MenuTriggerProps as MenuTriggerProps$1, SubmenuTriggerProps as SubmenuTriggerProps$1, MenuProps as MenuProps$1, PopoverProps, ListBoxProps, MenuItemProps as MenuItemProps$1, ListBoxItemProps, MenuSectionProps as MenuSectionProps$1, SeparatorProps, SearchFieldProps as SearchFieldProps$1, SelectProps as SelectProps$1, SwitchProps as SwitchProps$1, ToggleButtonProps as ToggleButtonProps$1, ToggleButtonGroupProps as ToggleButtonGroupProps$1 } from 'react-aria-components';
3
+ import { ButtonProps as ButtonProps$1, DisclosureProps, HeadingProps, DisclosurePanelProps, DisclosureGroupProps, DialogTriggerProps as DialogTriggerProps$1, ModalOverlayProps, TabsProps as TabsProps$1, TabListProps as TabListProps$1, TabProps as TabProps$1, TabPanelProps as TabPanelProps$1, LinkProps as LinkProps$1, CheckboxProps as CheckboxProps$1, RadioGroupProps as RadioGroupProps$1, RadioProps as RadioProps$1, TableProps as TableProps$1, ColumnProps as ColumnProps$1, CellProps as CellProps$1, TableHeaderProps, TableBodyProps, RowProps, TagGroupProps as TagGroupProps$1, TagListProps, TagProps as TagProps$1, TextFieldProps as TextFieldProps$1, TooltipProps as TooltipProps$1, TooltipTriggerComponentProps, MenuTriggerProps as MenuTriggerProps$1, SubmenuTriggerProps as SubmenuTriggerProps$1, MenuProps as MenuProps$1, PopoverProps as PopoverProps$1, ListBoxProps, MenuItemProps as MenuItemProps$1, ListBoxItemProps, MenuSectionProps as MenuSectionProps$1, SeparatorProps, SearchFieldProps as SearchFieldProps$1, SelectProps as SelectProps$1, SwitchProps as SwitchProps$1, ToggleButtonProps as ToggleButtonProps$1, ToggleButtonGroupProps as ToggleButtonGroupProps$1 } from 'react-aria-components';
4
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
5
  import { NavigateOptions } from 'react-router-dom';
6
6
  import { SortDescriptor as SortDescriptor$1 } from 'react-stately';
7
+ import { ColumnSize, ColumnStaticSize } from '@react-types/table';
7
8
 
8
9
  /** @public */
9
10
  type Breakpoint = 'initial' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
@@ -842,6 +843,7 @@ declare const CheckboxDefinition: {
842
843
  };
843
844
  readonly dataAttributes: {
844
845
  readonly selected: readonly [true, false];
846
+ readonly indeterminate: readonly [true, false];
845
847
  };
846
848
  };
847
849
 
@@ -870,9 +872,15 @@ declare const RadioGroupDefinition: {
870
872
  };
871
873
  };
872
874
 
875
+ /** @public */
876
+ interface PageSizeOption {
877
+ label: string;
878
+ value: number;
879
+ }
873
880
  /** @public */
874
881
  interface TablePaginationProps {
875
882
  pageSize: number;
883
+ pageSizeOptions?: number[] | PageSizeOption[];
876
884
  offset?: number;
877
885
  totalCount?: number;
878
886
  hasNextPage: boolean;
@@ -893,7 +901,7 @@ interface TablePaginationProps {
893
901
  *
894
902
  * @public
895
903
  */
896
- declare function TablePagination({ pageSize, offset, totalCount, hasNextPage, hasPreviousPage, onNextPage, onPreviousPage, onPageSizeChange, showPageSizeOptions, getLabel, }: TablePaginationProps): react_jsx_runtime.JSX.Element;
904
+ declare function TablePagination({ pageSize, pageSizeOptions, offset, totalCount, hasNextPage, hasPreviousPage, onNextPage, onPreviousPage, onPageSizeChange, showPageSizeOptions, getLabel, }: TablePaginationProps): react_jsx_runtime.JSX.Element;
897
905
 
898
906
  /**
899
907
  * Component definition for TablePagination
@@ -966,7 +974,10 @@ interface ColumnConfig<T extends TableItem> {
966
974
  header?: () => ReactNode;
967
975
  isSortable?: boolean;
968
976
  isHidden?: boolean;
969
- width?: number | string;
977
+ width?: ColumnSize | null;
978
+ defaultWidth?: ColumnSize | null;
979
+ minWidth?: ColumnStaticSize | null;
980
+ maxWidth?: ColumnStaticSize | null;
970
981
  isRowHeader?: boolean;
971
982
  }
972
983
  /** @public */
@@ -999,10 +1010,12 @@ interface TableProps<T extends TableItem> {
999
1010
  rowConfig?: RowConfig<T> | RowRenderFn<T>;
1000
1011
  selection?: TableSelection;
1001
1012
  emptyState?: ReactNode;
1013
+ className?: string;
1014
+ style?: React.CSSProperties;
1002
1015
  }
1003
1016
 
1004
1017
  /** @public */
1005
- declare function Table<T extends TableItem>({ columnConfig, data, loading, isStale, error, pagination, sort, rowConfig, selection, emptyState, }: TableProps<T>): react_jsx_runtime.JSX.Element;
1018
+ declare function Table<T extends TableItem>({ columnConfig, data, loading, isStale, error, pagination, sort, rowConfig, selection, emptyState, className, style, }: TableProps<T>): react_jsx_runtime.JSX.Element;
1006
1019
 
1007
1020
  /** @public */
1008
1021
  declare const TableRoot: (props: TableRootProps) => react_jsx_runtime.JSX.Element;
@@ -1057,11 +1070,8 @@ interface QueryOptions<TFilter> {
1057
1070
  onSearchChange?: (search: string) => void;
1058
1071
  }
1059
1072
  /** @public */
1060
- interface PaginationOptions {
1061
- pageSize?: number;
1073
+ interface PaginationOptions extends Partial<Pick<TablePaginationProps, 'pageSize' | 'pageSizeOptions' | 'onPageSizeChange' | 'onNextPage' | 'onPreviousPage' | 'showPageSizeOptions' | 'getLabel'>> {
1062
1074
  initialOffset?: number;
1063
- showPageSizeOptions?: boolean;
1064
- getLabel?: TablePaginationProps['getLabel'];
1065
1075
  }
1066
1076
  /** @public */
1067
1077
  interface OffsetParams<TFilter> {
@@ -1319,14 +1329,14 @@ interface SubmenuTriggerProps extends SubmenuTriggerProps$1 {
1319
1329
  }
1320
1330
  /** @public */
1321
1331
  interface MenuProps<T> extends MenuProps$1<T>, Omit<MenuProps$1<T>, 'children'> {
1322
- placement?: PopoverProps['placement'];
1332
+ placement?: PopoverProps$1['placement'];
1323
1333
  virtualized?: boolean;
1324
1334
  maxWidth?: string;
1325
1335
  maxHeight?: string;
1326
1336
  }
1327
1337
  /** @public */
1328
1338
  interface MenuListBoxProps<T> extends ListBoxProps<T>, Omit<ListBoxProps<T>, 'children'> {
1329
- placement?: PopoverProps['placement'];
1339
+ placement?: PopoverProps$1['placement'];
1330
1340
  virtualized?: boolean;
1331
1341
  maxWidth?: string;
1332
1342
  maxHeight?: string;
@@ -1334,7 +1344,7 @@ interface MenuListBoxProps<T> extends ListBoxProps<T>, Omit<ListBoxProps<T>, 'ch
1334
1344
  /** @public */
1335
1345
  interface MenuAutocompleteProps<T> extends MenuProps$1<T>, Omit<MenuProps$1<T>, 'children'> {
1336
1346
  placeholder?: string;
1337
- placement?: PopoverProps['placement'];
1347
+ placement?: PopoverProps$1['placement'];
1338
1348
  virtualized?: boolean;
1339
1349
  maxWidth?: string;
1340
1350
  maxHeight?: string;
@@ -1342,7 +1352,7 @@ interface MenuAutocompleteProps<T> extends MenuProps$1<T>, Omit<MenuProps$1<T>,
1342
1352
  /** @public */
1343
1353
  interface MenuAutocompleteListBoxProps<T> extends ListBoxProps<T>, Omit<ListBoxProps<T>, 'children'> {
1344
1354
  placeholder?: string;
1345
- placement?: PopoverProps['placement'];
1355
+ placement?: PopoverProps$1['placement'];
1346
1356
  virtualized?: boolean;
1347
1357
  maxWidth?: string;
1348
1358
  maxHeight?: string;
@@ -1412,6 +1422,75 @@ declare const MenuDefinition: {
1412
1422
  };
1413
1423
  };
1414
1424
 
1425
+ /**
1426
+ * Properties for {@link Popover}
1427
+ *
1428
+ * @public
1429
+ */
1430
+ interface PopoverProps extends Omit<PopoverProps$1, 'children'> {
1431
+ /**
1432
+ * The content to display inside the popover.
1433
+ * Content is automatically wrapped with padding and scroll behavior.
1434
+ */
1435
+ children: React.ReactNode;
1436
+ /**
1437
+ * Whether to hide the arrow pointing to the trigger element.
1438
+ * Arrow is also automatically hidden for MenuTrigger and SubmenuTrigger contexts.
1439
+ *
1440
+ * @defaultValue false
1441
+ */
1442
+ hideArrow?: boolean;
1443
+ }
1444
+
1445
+ /**
1446
+ * A popover component built on React Aria Components that displays floating
1447
+ * content anchored to a trigger element.
1448
+ *
1449
+ * @remarks
1450
+ * The Popover component supports multiple placements (top, right, bottom, left),
1451
+ * automatic viewport-constrained scrolling, and conditional arrow rendering. It
1452
+ * automatically handles positioning, collision detection, and ARIA attributes for
1453
+ * accessibility. Content is automatically padded and scrollable when it exceeds
1454
+ * available space.
1455
+ *
1456
+ * @example
1457
+ * Basic usage with DialogTrigger:
1458
+ * ```tsx
1459
+ * <DialogTrigger>
1460
+ * <Button>Open Popover</Button>
1461
+ * <Popover>
1462
+ * <Text>Popover content</Text>
1463
+ * </Popover>
1464
+ * </DialogTrigger>
1465
+ * ```
1466
+ *
1467
+ * @example
1468
+ * With custom placement and no arrow:
1469
+ * ```tsx
1470
+ * <DialogTrigger>
1471
+ * <Button>Open</Button>
1472
+ * <Popover placement="right" hideArrow>
1473
+ * <Text>Content without arrow</Text>
1474
+ * </Popover>
1475
+ * </DialogTrigger>
1476
+ * ```
1477
+ *
1478
+ * @public
1479
+ */
1480
+ declare const Popover: react.ForwardRefExoticComponent<PopoverProps & react.RefAttributes<HTMLDivElement>>;
1481
+
1482
+ /**
1483
+ * Component definition for Popover
1484
+ * @public
1485
+ */
1486
+ declare const PopoverDefinition: {
1487
+ readonly classNames: {
1488
+ readonly root: "bui-Popover";
1489
+ readonly arrow: "bui-PopoverArrow";
1490
+ readonly content: "bui-PopoverContent";
1491
+ };
1492
+ };
1493
+
1415
1494
  /** @public */
1416
1495
  interface SearchFieldProps extends SearchFieldProps$1, Omit<FieldLabelProps, 'htmlFor' | 'id' | 'className'> {
1417
1496
  /**
@@ -1680,5 +1759,5 @@ declare const useBreakpoint: () => {
1680
1759
  down: (key: Breakpoint) => boolean;
1681
1760
  };
1682
1761
 
1683
- export { Accordion, AccordionDefinition, AccordionGroup, AccordionPanel, AccordionTrigger, Avatar, AvatarDefinition, Box, BoxDefinition, Button, ButtonDefinition, ButtonIcon, ButtonIconDefinition, ButtonLink, ButtonLinkDefinition, Card, CardBody, CardDefinition, CardFooter, CardHeader, Cell, CellProfile, CellText, Checkbox, CheckboxDefinition, Column, Container, ContainerDefinition, Dialog, DialogBody, DialogDefinition, DialogFooter, DialogHeader, DialogTrigger, FieldLabel, FieldLabelDefinition, Flex, FlexDefinition, Grid, GridDefinition, GridItemDefinition, Header, HeaderDefinition, HeaderPage, HeaderPageDefinition, Link, LinkDefinition, Menu, MenuAutocomplete, MenuAutocompleteListbox, MenuDefinition, MenuItem, MenuListBox, MenuListBoxItem, MenuSection, MenuSeparator, MenuTrigger, Radio, RadioGroup, RadioGroupDefinition, Row, SearchField, SearchFieldDefinition, Select, SelectDefinition, Skeleton, SkeletonDefinition, SubmenuTrigger, Switch, SwitchDefinition, Tab, TabList, TabPanel, Table, TableBody, TableDefinition, TableHeader, TablePagination, TablePaginationDefinition, TableRoot, Tabs, TabsDefinition, Tag, TagGroup, TagGroupDefinition, Text, TextDefinition, TextField, TextFieldDefinition, ToggleButton, ToggleButtonDefinition, ToggleButtonGroup, ToggleButtonGroupDefinition, Tooltip, TooltipDefinition, TooltipTrigger, VisuallyHidden, VisuallyHiddenDefinition, useBreakpoint, useTable };
1684
- export type { AccordionGroupProps, AccordionPanelProps, AccordionProps, AccordionTriggerProps, AlignItems, AvatarProps, Border, BorderRadius, BoxProps, Breakpoint, ButtonIconProps, ButtonLinkProps, ButtonProps, CardBodyProps, CardFooterProps, CardHeaderProps, CardProps, CellProfileProps, CellProps, CellTextProps, CheckboxProps, ClassNamesMap, ColumnConfig, ColumnProps, Columns, ComponentDefinition, ContainerProps, CursorParams, CursorResponse, DataAttributeValues, DataAttributesMap, DialogBodyProps, DialogHeaderProps, DialogProps, DialogTriggerProps, Display, FieldLabelProps, FilterState, FlexDirection, FlexProps, FlexWrap, GridItemProps, GridProps, HeaderPageBreadcrumb, HeaderPageProps, HeaderProps, HeaderTab, JustifyContent, LinkProps, MenuAutocompleteListBoxProps, MenuAutocompleteProps, MenuItemProps, MenuListBoxItemProps, MenuListBoxProps, MenuProps, MenuSectionProps, MenuSeparatorProps, MenuTriggerProps, NoPagination, OffsetParams, OffsetResponse, Option, PagePagination, PaginationOptions, QueryOptions, RadioGroupProps, RadioProps, Responsive, RowConfig, RowRenderFn, SearchFieldProps, SearchState, SelectProps, SkeletonProps, SortDescriptor, SortState, Space, SpaceProps, SubmenuTriggerProps, Surface, SwitchProps, TabListProps, TabMatchStrategy, TabPanelProps, TabProps, TableItem, TablePaginationProps, TablePaginationType, TableProps, TableRootProps, TableSelection, TabsProps, TagGroupProps, TagProps, TextColorStatus, TextColors, TextFieldProps, TextOwnProps, TextProps, TextVariants, TextWeights, ToggleButtonGroupProps, ToggleButtonProps, TooltipProps, UseTableCompleteOptions, UseTableCursorOptions, UseTableOffsetOptions, UseTableOptions, UseTableResult, UtilityProps, VisuallyHiddenProps };
1762
+ export { Accordion, AccordionDefinition, AccordionGroup, AccordionPanel, AccordionTrigger, Avatar, AvatarDefinition, Box, BoxDefinition, Button, ButtonDefinition, ButtonIcon, ButtonIconDefinition, ButtonLink, ButtonLinkDefinition, Card, CardBody, CardDefinition, CardFooter, CardHeader, Cell, CellProfile, CellText, Checkbox, CheckboxDefinition, Column, Container, ContainerDefinition, Dialog, DialogBody, DialogDefinition, DialogFooter, DialogHeader, DialogTrigger, FieldLabel, FieldLabelDefinition, Flex, FlexDefinition, Grid, GridDefinition, GridItemDefinition, Header, HeaderDefinition, HeaderPage, HeaderPageDefinition, Link, LinkDefinition, Menu, MenuAutocomplete, MenuAutocompleteListbox, MenuDefinition, MenuItem, MenuListBox, MenuListBoxItem, MenuSection, MenuSeparator, MenuTrigger, Popover, PopoverDefinition, Radio, RadioGroup, RadioGroupDefinition, Row, SearchField, SearchFieldDefinition, Select, SelectDefinition, Skeleton, SkeletonDefinition, SubmenuTrigger, Switch, SwitchDefinition, Tab, TabList, TabPanel, Table, TableBody, TableDefinition, TableHeader, TablePagination, TablePaginationDefinition, TableRoot, Tabs, TabsDefinition, Tag, TagGroup, TagGroupDefinition, Text, TextDefinition, TextField, TextFieldDefinition, ToggleButton, ToggleButtonDefinition, ToggleButtonGroup, ToggleButtonGroupDefinition, Tooltip, TooltipDefinition, TooltipTrigger, VisuallyHidden, VisuallyHiddenDefinition, useBreakpoint, useTable };
1763
+ export type { AccordionGroupProps, AccordionPanelProps, AccordionProps, AccordionTriggerProps, AlignItems, AvatarProps, Border, BorderRadius, BoxProps, Breakpoint, ButtonIconProps, ButtonLinkProps, ButtonProps, CardBodyProps, CardFooterProps, CardHeaderProps, CardProps, CellProfileProps, CellProps, CellTextProps, CheckboxProps, ClassNamesMap, ColumnConfig, ColumnProps, Columns, ComponentDefinition, ContainerProps, CursorParams, CursorResponse, DataAttributeValues, DataAttributesMap, DialogBodyProps, DialogHeaderProps, DialogProps, DialogTriggerProps, Display, FieldLabelProps, FilterState, FlexDirection, FlexProps, FlexWrap, GridItemProps, GridProps, HeaderPageBreadcrumb, HeaderPageProps, HeaderProps, HeaderTab, JustifyContent, LinkProps, MenuAutocompleteListBoxProps, MenuAutocompleteProps, MenuItemProps, MenuListBoxItemProps, MenuListBoxProps, MenuProps, MenuSectionProps, MenuSeparatorProps, MenuTriggerProps, NoPagination, OffsetParams, OffsetResponse, Option, PagePagination, PageSizeOption, PaginationOptions, PopoverProps, QueryOptions, RadioGroupProps, RadioProps, Responsive, RowConfig, RowRenderFn, SearchFieldProps, SearchState, SelectProps, SkeletonProps, SortDescriptor, SortState, Space, SpaceProps, SubmenuTriggerProps, Surface, SwitchProps, TabListProps, TabMatchStrategy, TabPanelProps, TabProps, TableItem, TablePaginationProps, TablePaginationType, TableProps, TableRootProps, TableSelection, TabsProps, TagGroupProps, TagProps, TextColorStatus, TextColors, TextFieldProps, TextOwnProps, TextProps, TextVariants, TextWeights, ToggleButtonGroupProps, ToggleButtonProps, TooltipProps, UseTableCompleteOptions, UseTableCursorOptions, UseTableOffsetOptions, UseTableOptions, UseTableResult, UtilityProps, VisuallyHiddenProps };
package/dist/index.esm.js CHANGED
@@ -55,6 +55,8 @@ export { Tooltip, TooltipTrigger } from './components/Tooltip/Tooltip.esm.js';
55
55
  export { TooltipDefinition } from './components/Tooltip/definition.esm.js';
56
56
  export { Menu, MenuAutocomplete, MenuAutocompleteListbox, MenuItem, MenuListBox, MenuListBoxItem, MenuSection, MenuSeparator, MenuTrigger, SubmenuTrigger } from './components/Menu/Menu.esm.js';
57
57
  export { MenuDefinition } from './components/Menu/definition.esm.js';
58
+ export { Popover } from './components/Popover/Popover.esm.js';
59
+ export { PopoverDefinition } from './components/Popover/definition.esm.js';
58
60
  export { SearchField } from './components/SearchField/SearchField.esm.js';
59
61
  export { SearchFieldDefinition } from './components/SearchField/definition.esm.js';
60
62
  export { Link } from './components/Link/Link.esm.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/ui",
3
- "version": "0.11.0-next.1",
3
+ "version": "0.11.0",
4
4
  "backstage": {
5
5
  "role": "web-library"
6
6
  },
@@ -40,14 +40,14 @@
40
40
  "test": "backstage-cli package test"
41
41
  },
42
42
  "dependencies": {
43
- "@backstage/version-bridge": "1.0.11",
43
+ "@backstage/version-bridge": "^1.0.11",
44
44
  "@remixicon/react": "^4.6.0",
45
45
  "@tanstack/react-table": "^8.21.3",
46
46
  "clsx": "^2.1.1",
47
47
  "react-aria-components": "^1.13.0"
48
48
  },
49
49
  "devDependencies": {
50
- "@backstage/cli": "0.35.2-next.1",
50
+ "@backstage/cli": "^0.35.2",
51
51
  "@types/react": "^18.0.0",
52
52
  "@types/react-dom": "^18.0.0",
53
53
  "chalk": "^5.4.1",