@bitrise/bitkit-v2 0.3.371 → 0.3.372

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 (26) hide show
  1. package/AGENTS.md +14 -2
  2. package/dist/components/BitkitAccordion/BitkitAccordion.d.ts +3 -4
  3. package/dist/components/BitkitAccordion/BitkitAccordion.js +8 -8
  4. package/dist/components/BitkitAccordion/BitkitAccordion.js.map +1 -1
  5. package/dist/components/BitkitActionMenu/BitkitActionMenu.d.ts +43 -21
  6. package/dist/components/BitkitActionMenu/BitkitActionMenu.js +46 -32
  7. package/dist/components/BitkitActionMenu/BitkitActionMenu.js.map +1 -1
  8. package/dist/components/BitkitBreadcrumb/BitkitBreadcrumb.js +1 -1
  9. package/dist/components/BitkitCombobox/BitkitCombobox.js +1 -1
  10. package/dist/components/BitkitDialog/BitkitStepperDialog.js +1 -1
  11. package/dist/components/BitkitMultiselect/BitkitMultiselect.js +1 -1
  12. package/dist/components/BitkitPageFooter/BitkitPageFooter.js +1 -1
  13. package/dist/components/BitkitSelect/BitkitSelect.js +1 -1
  14. package/dist/components/BitkitSidebar/BitkitSidebar.js +1 -1
  15. package/dist/components/BitkitSplitButton/BitkitSplitButton.d.ts +3 -6
  16. package/dist/components/BitkitSplitButton/BitkitSplitButton.js +7 -7
  17. package/dist/components/BitkitSplitButton/BitkitSplitButton.js.map +1 -1
  18. package/dist/components/BitkitSteps/BitkitSteps.js +1 -1
  19. package/dist/components/BitkitTreeView/BitkitTreeView.js +1 -1
  20. package/dist/components/index.d.ts +1 -1
  21. package/dist/main.js +3 -3
  22. package/dist/theme/slot-recipes/Menu.recipe.d.ts +14 -3
  23. package/dist/theme/slot-recipes/Menu.recipe.js +18 -6
  24. package/dist/theme/slot-recipes/Menu.recipe.js.map +1 -1
  25. package/dist/theme/slot-recipes/index.d.ts +14 -3
  26. package/package.json +1 -1
package/AGENTS.md CHANGED
@@ -92,6 +92,7 @@ Bitkit components use consistent prop names across the library:
92
92
  <BitkitSegmentedControl.Item value="b">Option B</BitkitSegmentedControl.Item>
93
93
  </BitkitSegmentedControl>
94
94
  ```
95
+ Two exceptions need an explicit `.Root` because they re-export a whole Chakra namespace: `BitkitDrawer.Root` and `BitkitTabs.Root`. Everything else is `<BitkitFoo>` + `<BitkitFoo.Part>`.
95
96
  - **Slot props for content, not boolean flags** — pass an icon/badge/etc. directly as a prop. Element presence is the toggle:
96
97
  ```tsx
97
98
  <BitkitButton icon={IconCheck}>Save</BitkitButton>
@@ -107,11 +108,22 @@ Bitkit components use consistent prop names across the library:
107
108
  ```
108
109
  `state="loading"` is button-only — not valid in anchor mode.
109
110
  - **`BitkitLink` external convenience** — `BitkitLink` accepts `isExternal` for the same auto target+rel behavior.
110
- - **`BitkitActionMenu.Item` as a link** — pass `href` to make a menu item render as an anchor; `target`, `rel`, and `isExternal` work the same way as on the button family. Without `href` it stays a normal menu item:
111
+ - **`BitkitActionMenu.Item` as a link** — pass `href` to make a menu item render as an anchor; `target` and `rel` work the same way as on the button family, and `isExternal` does too except that it also adds the trailing arrow (see below). Without `href` it stays a normal menu item:
111
112
  ```tsx
112
113
  <BitkitActionMenu.Item href="/settings" value="settings">Settings</BitkitActionMenu.Item>
113
114
  <BitkitActionMenu.Item href="https://example.com" isExternal value="docs">Open docs</BitkitActionMenu.Item>
114
115
  ```
116
+ - **`BitkitActionMenu.Item` slots** — `icon` is the leading icon, sized from the menu's `size`; `secondaryText` adds a quieter second line; `isDanger` styles the row as destructive. There is no trailing-icon prop: the only trailing icon in the design is the "leaves this page" arrow, and `isExternal` adds it for you. Groups and rules are their own children, not props:
117
+ ```tsx
118
+ <BitkitActionMenu size="md" trigger={<BitkitIconButton icon={IconDots} label="Actions" />}>
119
+ <BitkitActionMenu.Item icon={IconPencil} value="rename">Rename</BitkitActionMenu.Item>
120
+ <BitkitActionMenu.Group label="Share">
121
+ <BitkitActionMenu.Item href="https://example.com" icon={IconCopy} isExternal value="docs">Open docs</BitkitActionMenu.Item>
122
+ </BitkitActionMenu.Group>
123
+ <BitkitActionMenu.Separator />
124
+ <BitkitActionMenu.Item icon={IconTrash} isDanger secondaryText="This cannot be undone" value="delete">Delete</BitkitActionMenu.Item>
125
+ </BitkitActionMenu>
126
+ ```
115
127
  - **Form components are flat** — `BitkitTextInput`, `BitkitSelect`, `BitkitCombobox`, etc. expose `label`, `errorText`, `helperText`, etc. directly as props. No need to wrap in a separate field component.
116
128
  - **`BitkitTextInput` in-field slots** — all four slots take a `ReactNode`, not just icons/strings: `startElement` / `endElement` render inside the field (an icon, badge, text, or an interactive control like a reveal/clear button), and `startAddon` / `endAddon` render as a bordered, attached box outside the field (a text label like `$` / `USD`, or a component such as a `select` / button). These match the Figma slot names. The validation status icon (error/warning) is added automatically and sits left of `endElement`. For a component addon that brings its own styling, pass `startAddonProps={{ unstyled: true }}` (or `endAddonProps`) to drop the default grey box:
117
129
  ```tsx
@@ -208,7 +220,7 @@ Bitkit components use consistent prop names across the library:
208
220
 
209
221
  **Exceptions** — a few component groups intentionally own their own layout and don't accept arbitrary style props from outside:
210
222
  - Page-level overlays: `BitkitDialog`, `BitkitFormDialog`, `BitkitStepperDialog`, `BitkitDrawer`, `BitkitCalendar`, `BitkitTour` — they own their layout; where it's configurable at all, it's through their own props (`size`, `maxHeight`, …), not style props from outside.
211
- - Floating positioned components: `BitkitTooltip`, `BitkitLabelTooltip`, `BitkitDefinitionTooltip`, `BitkitOverflowTooltip`, `BitkitToast`, `BitkitSelectMenu`, `BitkitMultiselectMenu` — their layout is positioned automatically; pass styling via the component's own props instead of a wrapper.
223
+ - Floating positioned components: `BitkitTooltip`, `BitkitLabelTooltip`, `BitkitDefinitionTooltip`, `BitkitOverflowTooltip`, `BitkitToast`, `BitkitActionMenu`, `BitkitSelectMenu`, `BitkitMultiselectMenu` — their layout is positioned automatically; pass styling via the component's own props instead of a wrapper.
212
224
 
213
225
  > **For everything else, if a style prop doesn't take effect on a Bitkit component, that's a bug in the component, not a styling task.** Stop, tell the user something looks off in Bitkit so they can flag it to the Bitkit team — don't quietly add a `<Box>` workaround. Each silent workaround hides a regression and bakes the wrapper pattern into the codebase.
214
226
 
@@ -9,10 +9,9 @@ export interface BitkitAccordionItemTriggerProps extends AccordionItemTriggerPro
9
9
  suffix?: ReactNode;
10
10
  }
11
11
  export type BitkitAccordionItemBodyProps = AccordionItemBodyProps;
12
- declare const BitkitAccordion: {
13
- Root: import('react').ForwardRefExoticComponent<Accordion.RootProps & import('react').RefAttributes<HTMLDivElement>>;
12
+ declare const _default: import('react').ForwardRefExoticComponent<Accordion.RootProps & import('react').RefAttributes<HTMLDivElement>> & {
14
13
  Item: import('react').ForwardRefExoticComponent<Accordion.ItemProps & import('react').RefAttributes<HTMLDivElement>>;
15
- ItemTrigger: import('react').ForwardRefExoticComponent<BitkitAccordionItemTriggerProps & import('react').RefAttributes<HTMLButtonElement>>;
16
14
  ItemBody: import('react').ForwardRefExoticComponent<Accordion.ItemBodyProps & import('react').RefAttributes<HTMLDivElement>>;
15
+ ItemTrigger: import('react').ForwardRefExoticComponent<BitkitAccordionItemTriggerProps & import('react').RefAttributes<HTMLButtonElement>>;
17
16
  };
18
- export default BitkitAccordion;
17
+ export default _default;
@@ -1,11 +1,12 @@
1
1
  import AssetSelectChevron from "../../utilities/AssetSelectChevron.js";
2
+ import { withSubComponents } from "../../utilities/withSubComponents.js";
2
3
  import { Accordion, useAccordionItemContext } from "@chakra-ui/react/accordion";
3
4
  import { Box } from "@chakra-ui/react/box";
4
5
  import { useSlotRecipe } from "@chakra-ui/react/styled-system";
5
6
  import { forwardRef } from "react";
6
7
  import { jsx, jsxs } from "react/jsx-runtime";
7
8
  //#region lib/components/BitkitAccordion/BitkitAccordion.tsx
8
- var Root = forwardRef((props, ref) => {
9
+ var BitkitAccordion = forwardRef((props, ref) => {
9
10
  return /* @__PURE__ */ jsx(Accordion.Root, {
10
11
  ref,
11
12
  multiple: true,
@@ -63,17 +64,16 @@ var ItemBody = forwardRef(({ ...props }, ref) => {
63
64
  ...props
64
65
  }) });
65
66
  });
66
- Root.displayName = "BitkitAccordion.Root";
67
+ BitkitAccordion.displayName = "BitkitAccordion";
67
68
  ItemBody.displayName = "BitkitAccordion.ItemBody";
68
69
  Item.displayName = "BitkitAccordion.Item";
69
70
  ItemTrigger.displayName = "BitkitAccordion.ItemTrigger";
70
- var BitkitAccordion = {
71
- Root,
71
+ var BitkitAccordion_default = withSubComponents(BitkitAccordion, {
72
72
  Item,
73
- ItemTrigger,
74
- ItemBody
75
- };
73
+ ItemBody,
74
+ ItemTrigger
75
+ });
76
76
  //#endregion
77
- export { BitkitAccordion as default };
77
+ export { BitkitAccordion_default as default };
78
78
 
79
79
  //# sourceMappingURL=BitkitAccordion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BitkitAccordion.js","names":[],"sources":["../../../lib/components/BitkitAccordion/BitkitAccordion.tsx"],"sourcesContent":["import {\n Accordion,\n type AccordionItemBodyProps,\n type AccordionItemProps,\n type AccordionItemTriggerProps,\n type AccordionRootProps,\n useAccordionItemContext,\n} from '@chakra-ui/react/accordion';\nimport { Box } from '@chakra-ui/react/box';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { type BitkitIconComponent } from '../../icons';\nimport AssetSelectChevron from '../../utilities/AssetSelectChevron';\n\nexport type BitkitAccordionProps = AccordionRootProps;\nexport type BitkitAccordionItemProps = AccordionItemProps;\nexport interface BitkitAccordionItemTriggerProps extends AccordionItemTriggerProps {\n icon?: BitkitIconComponent;\n secondaryText?: ReactNode;\n suffix?: ReactNode;\n}\nexport type BitkitAccordionItemBodyProps = AccordionItemBodyProps;\n\nconst Root = forwardRef<HTMLDivElement, BitkitAccordionProps>((props, ref) => {\n return <Accordion.Root ref={ref} multiple {...props} />;\n});\nconst Item = forwardRef<HTMLDivElement, BitkitAccordionItemProps>((props, ref) => {\n return <Accordion.Item ref={ref} {...props}></Accordion.Item>;\n});\nconst ItemTrigger = forwardRef<HTMLButtonElement, BitkitAccordionItemTriggerProps>(\n ({ children, icon: Icon, secondaryText, suffix, ...props }, ref) => {\n const recipe = useSlotRecipe({ key: 'accordion' });\n const styles = recipe();\n return (\n <Accordion.ItemTrigger ref={ref} {...props}>\n <Box display=\"flex\" alignItems=\"center\" gap=\"8\">\n {Icon && (\n <Box css={styles.icon} asChild>\n <Icon size=\"16\" />\n </Box>\n )}\n <Box display=\"flex\" alignItems=\"flex-start\" flexDirection=\"column\">\n {children}\n {secondaryText && (\n <Box as=\"span\" css={styles.secdText}>\n {secondaryText}\n </Box>\n )}\n </Box>\n </Box>\n <Box display=\"flex\" alignItems=\"center\">\n {suffix && (\n <Box as=\"span\" css={styles.suffix}>\n {suffix}\n </Box>\n )}\n <Accordion.ItemIndicator asChild>\n <AssetSelectChevron />\n </Accordion.ItemIndicator>\n </Box>\n </Accordion.ItemTrigger>\n );\n },\n);\nconst ItemBody = forwardRef<HTMLDivElement, BitkitAccordionItemBodyProps>(({ ...props }, ref) => {\n const itemProps = useAccordionItemContext();\n return (\n <Accordion.ItemContent>\n <Accordion.ItemBody ref={ref} aria-disabled={itemProps.disabled} {...props} />\n </Accordion.ItemContent>\n );\n});\n\nRoot.displayName = 'BitkitAccordion.Root';\nItemBody.displayName = 'BitkitAccordion.ItemBody';\nItem.displayName = 'BitkitAccordion.Item';\nItemTrigger.displayName = 'BitkitAccordion.ItemTrigger';\nconst BitkitAccordion = { Root, Item, ItemTrigger, ItemBody };\n\nexport default BitkitAccordion;\n"],"mappings":";;;;;;;AAwBA,IAAM,OAAO,YAAkD,OAAO,QAAQ;CAC5E,OAAO,oBAAC,UAAU,MAAX;EAAqB;EAAK,UAAA;EAAS,GAAI;CAAQ,CAAA;AACxD,CAAC;AACD,IAAM,OAAO,YAAsD,OAAO,QAAQ;CAChF,OAAO,oBAAC,UAAU,MAAX;EAAqB;EAAK,GAAI;CAAuB,CAAA;AAC9D,CAAC;AACD,IAAM,cAAc,YACjB,EAAE,UAAU,MAAM,MAAM,eAAe,QAAQ,GAAG,SAAS,QAAQ;CAElE,MAAM,SADS,cAAc,EAAE,KAAK,YAAY,CACjC,CAAA,CAAO;CACtB,OACE,qBAAC,UAAU,aAAX;EAA4B;EAAK,GAAI;EAArC,UAAA,CACE,qBAAC,KAAD;GAAK,SAAQ;GAAO,YAAW;GAAS,KAAI;GAA5C,UAAA,CACG,QACC,oBAAC,KAAD;IAAK,KAAK,OAAO;IAAM,SAAA;IACrB,UAAA,oBAAC,MAAD,EAAM,MAAK,KAAM,CAAA;GACd,CAAA,GAEP,qBAAC,KAAD;IAAK,SAAQ;IAAO,YAAW;IAAa,eAAc;IAA1D,UAAA,CACG,UACA,iBACC,oBAAC,KAAD;KAAK,IAAG;KAAO,KAAK,OAAO;KACxB,UAAA;IACE,CAAA,CAEJ;GACF,CAAA,CAAA;EACL,CAAA,GAAA,qBAAC,KAAD;GAAK,SAAQ;GAAO,YAAW;GAA/B,UAAA,CACG,UACC,oBAAC,KAAD;IAAK,IAAG;IAAO,KAAK,OAAO;IACxB,UAAA;GACE,CAAA,GAEP,oBAAC,UAAU,eAAX;IAAyB,SAAA;IACvB,UAAA,oBAAC,oBAAD,CAAqB,CAAA;GACE,CAAA,CACtB;EACgB,CAAA,CAAA;;AAE3B,CACF;AACA,IAAM,WAAW,YAA0D,EAAE,GAAG,SAAS,QAAQ;CAC/F,MAAM,YAAY,wBAAwB;CAC1C,OACE,oBAAC,UAAU,aAAX,EAAA,UACE,oBAAC,UAAU,UAAX;EAAyB;EAAK,iBAAe,UAAU;EAAU,GAAI;CAAQ,CAAA,EACxD,CAAA;AAE3B,CAAC;AAED,KAAK,cAAc;AACnB,SAAS,cAAc;AACvB,KAAK,cAAc;AACnB,YAAY,cAAc;AAC1B,IAAM,kBAAkB;CAAE;CAAM;CAAM;CAAa;AAAS"}
1
+ {"version":3,"file":"BitkitAccordion.js","names":[],"sources":["../../../lib/components/BitkitAccordion/BitkitAccordion.tsx"],"sourcesContent":["import {\n Accordion,\n type AccordionItemBodyProps,\n type AccordionItemProps,\n type AccordionItemTriggerProps,\n type AccordionRootProps,\n useAccordionItemContext,\n} from '@chakra-ui/react/accordion';\nimport { Box } from '@chakra-ui/react/box';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { type BitkitIconComponent } from '../../icons';\nimport AssetSelectChevron from '../../utilities/AssetSelectChevron';\nimport { withSubComponents } from '../../utilities/withSubComponents';\n\nexport type BitkitAccordionProps = AccordionRootProps;\nexport type BitkitAccordionItemProps = AccordionItemProps;\nexport interface BitkitAccordionItemTriggerProps extends AccordionItemTriggerProps {\n icon?: BitkitIconComponent;\n secondaryText?: ReactNode;\n suffix?: ReactNode;\n}\nexport type BitkitAccordionItemBodyProps = AccordionItemBodyProps;\n\nconst BitkitAccordion = forwardRef<HTMLDivElement, BitkitAccordionProps>((props, ref) => {\n return <Accordion.Root ref={ref} multiple {...props} />;\n});\nconst Item = forwardRef<HTMLDivElement, BitkitAccordionItemProps>((props, ref) => {\n return <Accordion.Item ref={ref} {...props}></Accordion.Item>;\n});\nconst ItemTrigger = forwardRef<HTMLButtonElement, BitkitAccordionItemTriggerProps>(\n ({ children, icon: Icon, secondaryText, suffix, ...props }, ref) => {\n const recipe = useSlotRecipe({ key: 'accordion' });\n const styles = recipe();\n return (\n <Accordion.ItemTrigger ref={ref} {...props}>\n <Box display=\"flex\" alignItems=\"center\" gap=\"8\">\n {Icon && (\n <Box css={styles.icon} asChild>\n <Icon size=\"16\" />\n </Box>\n )}\n <Box display=\"flex\" alignItems=\"flex-start\" flexDirection=\"column\">\n {children}\n {secondaryText && (\n <Box as=\"span\" css={styles.secdText}>\n {secondaryText}\n </Box>\n )}\n </Box>\n </Box>\n <Box display=\"flex\" alignItems=\"center\">\n {suffix && (\n <Box as=\"span\" css={styles.suffix}>\n {suffix}\n </Box>\n )}\n <Accordion.ItemIndicator asChild>\n <AssetSelectChevron />\n </Accordion.ItemIndicator>\n </Box>\n </Accordion.ItemTrigger>\n );\n },\n);\nconst ItemBody = forwardRef<HTMLDivElement, BitkitAccordionItemBodyProps>(({ ...props }, ref) => {\n const itemProps = useAccordionItemContext();\n return (\n <Accordion.ItemContent>\n <Accordion.ItemBody ref={ref} aria-disabled={itemProps.disabled} {...props} />\n </Accordion.ItemContent>\n );\n});\n\nBitkitAccordion.displayName = 'BitkitAccordion';\nItemBody.displayName = 'BitkitAccordion.ItemBody';\nItem.displayName = 'BitkitAccordion.Item';\nItemTrigger.displayName = 'BitkitAccordion.ItemTrigger';\n\nexport default withSubComponents(BitkitAccordion, { Item, ItemBody, ItemTrigger });\n"],"mappings":";;;;;;;;AAyBA,IAAM,kBAAkB,YAAkD,OAAO,QAAQ;CACvF,OAAO,oBAAC,UAAU,MAAX;EAAqB;EAAK,UAAA;EAAS,GAAI;CAAQ,CAAA;AACxD,CAAC;AACD,IAAM,OAAO,YAAsD,OAAO,QAAQ;CAChF,OAAO,oBAAC,UAAU,MAAX;EAAqB;EAAK,GAAI;CAAuB,CAAA;AAC9D,CAAC;AACD,IAAM,cAAc,YACjB,EAAE,UAAU,MAAM,MAAM,eAAe,QAAQ,GAAG,SAAS,QAAQ;CAElE,MAAM,SADS,cAAc,EAAE,KAAK,YAAY,CACjC,CAAA,CAAO;CACtB,OACE,qBAAC,UAAU,aAAX;EAA4B;EAAK,GAAI;EAArC,UAAA,CACE,qBAAC,KAAD;GAAK,SAAQ;GAAO,YAAW;GAAS,KAAI;GAA5C,UAAA,CACG,QACC,oBAAC,KAAD;IAAK,KAAK,OAAO;IAAM,SAAA;IACrB,UAAA,oBAAC,MAAD,EAAM,MAAK,KAAM,CAAA;GACd,CAAA,GAEP,qBAAC,KAAD;IAAK,SAAQ;IAAO,YAAW;IAAa,eAAc;IAA1D,UAAA,CACG,UACA,iBACC,oBAAC,KAAD;KAAK,IAAG;KAAO,KAAK,OAAO;KACxB,UAAA;IACE,CAAA,CAEJ;GACF,CAAA,CAAA;EACL,CAAA,GAAA,qBAAC,KAAD;GAAK,SAAQ;GAAO,YAAW;GAA/B,UAAA,CACG,UACC,oBAAC,KAAD;IAAK,IAAG;IAAO,KAAK,OAAO;IACxB,UAAA;GACE,CAAA,GAEP,oBAAC,UAAU,eAAX;IAAyB,SAAA;IACvB,UAAA,oBAAC,oBAAD,CAAqB,CAAA;GACE,CAAA,CACtB;EACgB,CAAA,CAAA;;AAE3B,CACF;AACA,IAAM,WAAW,YAA0D,EAAE,GAAG,SAAS,QAAQ;CAC/F,MAAM,YAAY,wBAAwB;CAC1C,OACE,oBAAC,UAAU,aAAX,EAAA,UACE,oBAAC,UAAU,UAAX;EAAyB;EAAK,iBAAe,UAAU;EAAU,GAAI;CAAQ,CAAA,EACxD,CAAA;AAE3B,CAAC;AAED,gBAAgB,cAAc;AAC9B,SAAS,cAAc;AACvB,KAAK,cAAc;AACnB,YAAY,cAAc;AAE1B,IAAA,0BAAe,kBAAkB,iBAAiB;CAAE;CAAM;CAAU;AAAY,CAAC"}
@@ -1,41 +1,63 @@
1
- import { MenuItemGroupProps, MenuItemProps, MenuRootProps } from '@chakra-ui/react/menu';
1
+ import { Menu, MenuItemGroupProps, MenuItemProps, MenuRootProps, MenuSeparatorProps } from '@chakra-ui/react/menu';
2
2
  import { ReactNode } from 'react';
3
3
  import { BitkitIconComponent } from '../../icons';
4
- interface BitkitMenuRootProps extends Omit<MenuRootProps, 'children'> {
5
- trigger: ReactNode;
4
+ export interface BitkitActionMenuProps extends Omit<MenuRootProps, 'children'> {
5
+ /** The menu's items — `BitkitActionMenu.Item`, `.Group` and `.Separator`. */
6
6
  children?: ReactNode;
7
+ /**
8
+ * Row density, inherited by every item. `lg` (default) is the standalone action menu; `md` is for
9
+ * menus attached to dense UI, such as an overflow menu in a toolbar or a tab bar.
10
+ */
11
+ size?: MenuRootProps['size'];
12
+ /**
13
+ * The element the menu is anchored to — usually a `BitkitIconButton` or `BitkitButton`. Rendered
14
+ * via `asChild`, so it must accept a ref.
15
+ */
16
+ trigger: ReactNode;
7
17
  }
8
- interface BitkitMenuItemCommonProps extends MenuItemProps {
9
- danger?: boolean;
18
+ interface BitkitActionMenuItemCommonProps extends MenuItemProps {
19
+ /** The item's label. */
20
+ children?: ReactNode;
21
+ /** Leading icon, sized from the menu's `size` (24 on `lg`, 16 on `md`). */
10
22
  icon?: BitkitIconComponent;
23
+ /** Style the item as destructive — red label and icon. Use it for delete and similar actions. */
24
+ isDanger?: boolean;
25
+ /** A second, quieter line under the label. Adding it makes the row taller and top-aligns the icon. */
11
26
  secondaryText?: ReactNode;
12
27
  }
13
- interface BitkitMenuItemAsButtonProps extends BitkitMenuItemCommonProps {
28
+ interface BitkitActionMenuItemAsButtonProps extends BitkitActionMenuItemCommonProps {
14
29
  href?: undefined;
15
30
  isExternal?: undefined;
16
31
  rel?: undefined;
17
32
  target?: undefined;
18
33
  }
19
- interface BitkitMenuItemAsAnchorProps extends BitkitMenuItemCommonProps {
34
+ interface BitkitActionMenuItemAsAnchorProps extends BitkitActionMenuItemCommonProps {
35
+ /** Renders the item as an `<a>` instead of a menu button. */
20
36
  href: string;
37
+ /**
38
+ * Shorthand for `target="_blank"` plus `rel="noreferrer noopener"`. Also puts an
39
+ * `IconArrowNortheast` at the end of the row — the design system's "leaves this page" marker.
40
+ */
21
41
  isExternal?: boolean;
42
+ /** Extra `rel` tokens. With `isExternal` the safety tokens are appended to these. */
22
43
  rel?: string;
44
+ /** Anchor target. Ignored when `isExternal` is set. */
23
45
  target?: string;
24
46
  }
25
- export type BitkitMenuItemProps = BitkitMenuItemAsButtonProps | BitkitMenuItemAsAnchorProps;
26
- export interface BitkitMenuGroupProps extends MenuItemGroupProps {
47
+ export type BitkitActionMenuItemProps = BitkitActionMenuItemAsButtonProps | BitkitActionMenuItemAsAnchorProps;
48
+ export interface BitkitActionMenuGroupProps extends MenuItemGroupProps {
49
+ /** The group's items. */
50
+ children?: ReactNode;
51
+ /** The group's heading, rendered uppercase with a rule filling the rest of the row. */
27
52
  label: ReactNode;
28
53
  }
29
- declare const BitkitActionMenu: {
30
- Root: {
31
- ({ trigger, children, size, ...props }: BitkitMenuRootProps): import("react").JSX.Element;
32
- displayName: string;
33
- };
34
- Separator: {
35
- (): import("react").JSX.Element;
36
- displayName: string;
37
- };
38
- Item: import('react').ForwardRefExoticComponent<BitkitMenuItemProps & import('react').RefAttributes<HTMLElement>>;
39
- Group: import('react').ForwardRefExoticComponent<BitkitMenuGroupProps & import('react').RefAttributes<HTMLDivElement>>;
54
+ export type BitkitActionMenuSeparatorProps = MenuSeparatorProps;
55
+ declare const _default: {
56
+ ({ trigger, children, size, ...props }: BitkitActionMenuProps): import("react").JSX.Element;
57
+ displayName: string;
58
+ } & {
59
+ Group: import('react').ForwardRefExoticComponent<BitkitActionMenuGroupProps & import('react').RefAttributes<HTMLDivElement>>;
60
+ Item: import('react').ForwardRefExoticComponent<BitkitActionMenuItemProps & import('react').RefAttributes<HTMLElement>>;
61
+ Separator: import('react').ForwardRefExoticComponent<Menu.SeparatorProps & import('react').RefAttributes<HTMLHRElement>>;
40
62
  };
41
- export default BitkitActionMenu;
63
+ export default _default;
@@ -1,3 +1,5 @@
1
+ import { withSubComponents } from "../../utilities/withSubComponents.js";
2
+ import IconArrowNortheast from "../../icons/IconArrowNortheast.js";
1
3
  import { Box } from "@chakra-ui/react/box";
2
4
  import { createContext, forwardRef, useContext } from "react";
3
5
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -6,39 +8,48 @@ import { Menu, useMenuStyles } from "@chakra-ui/react/menu";
6
8
  import { Separator } from "@chakra-ui/react/separator";
7
9
  import { Text } from "@chakra-ui/react/text";
8
10
  //#region lib/components/BitkitActionMenu/BitkitActionMenu.tsx
9
- var BitkitMenuContext = createContext("lg");
10
- var Root = ({ trigger, children, size = "lg", ...props }) => {
11
+ var BitkitActionMenuContext = createContext("lg");
12
+ var BitkitActionMenu = ({ trigger, children, size = "lg", ...props }) => {
11
13
  return /* @__PURE__ */ jsxs(Menu.Root, {
12
14
  size,
13
15
  ...props,
14
16
  children: [/* @__PURE__ */ jsx(Menu.Trigger, {
15
17
  asChild: true,
16
18
  children: trigger
17
- }), /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(Menu.Positioner, { children: /* @__PURE__ */ jsx(BitkitMenuContext.Provider, {
19
+ }), /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(Menu.Positioner, { children: /* @__PURE__ */ jsx(BitkitActionMenuContext.Provider, {
18
20
  value: size,
19
21
  children: /* @__PURE__ */ jsx(Menu.Content, { children })
20
22
  }) }) })]
21
23
  });
22
24
  };
23
- Root.displayName = "BitkitActionMenu.Root";
24
- var Item = forwardRef((props, ref) => {
25
- const { children, danger, icon: Icon, secondaryText } = props;
25
+ BitkitActionMenu.displayName = "BitkitActionMenu";
26
+ var BitkitActionMenuItem = forwardRef((props, ref) => {
27
+ const { children, icon: Icon, isDanger, secondaryText } = props;
26
28
  const style = useMenuStyles();
27
- const menuCtx = useContext(BitkitMenuContext);
28
- const content = /* @__PURE__ */ jsxs(Fragment$1, { children: [Icon && /* @__PURE__ */ jsx(Icon, { size: menuCtx === "lg" ? "24" : "16" }), /* @__PURE__ */ jsxs(Box, {
29
- flex: "1",
30
- children: [/* @__PURE__ */ jsx(Text, { children }), secondaryText && /* @__PURE__ */ jsx(Text, {
31
- css: style.itemHelper,
32
- children: secondaryText
33
- })]
34
- })] });
29
+ const iconSize = useContext(BitkitActionMenuContext) === "lg" ? "24" : "16";
30
+ const hasHelper = secondaryText ? true : void 0;
31
+ const content = /* @__PURE__ */ jsxs(Fragment$1, { children: [
32
+ Icon && /* @__PURE__ */ jsx(Icon, { size: iconSize }),
33
+ /* @__PURE__ */ jsxs(Box, {
34
+ flex: "1",
35
+ children: [/* @__PURE__ */ jsx(Text, { children }), secondaryText && /* @__PURE__ */ jsx(Text, {
36
+ css: style.itemHelper,
37
+ children: secondaryText
38
+ })]
39
+ }),
40
+ props.isExternal && /* @__PURE__ */ jsx(IconArrowNortheast, {
41
+ "data-suffix-icon": true,
42
+ size: iconSize
43
+ })
44
+ ] });
35
45
  if (props.href !== void 0) {
36
- const { children: _children, danger: _danger, href, icon: _icon, isExternal, rel, secondaryText: _secondaryText, target, ...rest } = props;
46
+ const { children: _children, href, icon: _icon, isDanger: _isDanger, isExternal, rel, secondaryText: _secondaryText, target, ...rest } = props;
37
47
  const effectiveTarget = isExternal ? "_blank" : target;
38
48
  const effectiveRel = isExternal ? rel ? `${rel} noreferrer noopener` : "noreferrer noopener" : rel;
39
49
  return /* @__PURE__ */ jsx(Menu.Item, {
40
50
  asChild: true,
41
- "data-danger": danger,
51
+ "data-danger": isDanger,
52
+ "data-helper": hasHelper,
42
53
  ...rest,
43
54
  children: /* @__PURE__ */ jsx("a", {
44
55
  ref,
@@ -49,34 +60,37 @@ var Item = forwardRef((props, ref) => {
49
60
  })
50
61
  });
51
62
  }
52
- const { children: _children, danger: _danger, icon: _icon, secondaryText: _secondaryText, ...rest } = props;
63
+ const { children: _children, icon: _icon, isDanger: _isDanger, secondaryText: _secondaryText, ...rest } = props;
53
64
  return /* @__PURE__ */ jsx(Menu.Item, {
54
- "data-danger": danger,
65
+ "data-danger": isDanger,
66
+ "data-helper": hasHelper,
55
67
  ref,
56
68
  ...rest,
57
69
  children: content
58
70
  });
59
71
  });
60
- Item.displayName = "BitkitActionMenu.Item";
61
- var Group = forwardRef(({ label, children, ...props }, ref) => {
72
+ BitkitActionMenuItem.displayName = "BitkitActionMenu.Item";
73
+ var BitkitActionMenuGroup = forwardRef(({ label, children, ...props }, ref) => {
62
74
  return /* @__PURE__ */ jsxs(Menu.ItemGroup, {
63
75
  ref,
64
76
  ...props,
65
77
  children: [/* @__PURE__ */ jsxs(Menu.ItemGroupLabel, { children: [/* @__PURE__ */ jsx(Text, { children: label }), /* @__PURE__ */ jsx(Separator, { flex: "1" })] }), children]
66
78
  });
67
79
  });
68
- Group.displayName = "BitkitActionMenu.Group";
69
- var Separator$1 = () => {
70
- return /* @__PURE__ */ jsx(Menu.Separator, {});
71
- };
72
- Separator$1.displayName = "BitkitActionMenu.Separator";
73
- var BitkitActionMenu = {
74
- Root,
75
- Separator: Separator$1,
76
- Item,
77
- Group
78
- };
80
+ BitkitActionMenuGroup.displayName = "BitkitActionMenu.Group";
81
+ var BitkitActionMenuSeparator = forwardRef((props, ref) => {
82
+ return /* @__PURE__ */ jsx(Menu.Separator, {
83
+ ref,
84
+ ...props
85
+ });
86
+ });
87
+ BitkitActionMenuSeparator.displayName = "BitkitActionMenu.Separator";
88
+ var BitkitActionMenu_default = withSubComponents(BitkitActionMenu, {
89
+ Group: BitkitActionMenuGroup,
90
+ Item: BitkitActionMenuItem,
91
+ Separator: BitkitActionMenuSeparator
92
+ });
79
93
  //#endregion
80
- export { BitkitActionMenu as default };
94
+ export { BitkitActionMenu_default as default };
81
95
 
82
96
  //# sourceMappingURL=BitkitActionMenu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BitkitActionMenu.js","names":[],"sources":["../../../lib/components/BitkitActionMenu/BitkitActionMenu.tsx"],"sourcesContent":["import { Box } from '@chakra-ui/react/box';\nimport {\n Menu,\n type MenuItemGroupProps,\n type MenuItemProps,\n type MenuRootProps,\n useMenuStyles,\n} from '@chakra-ui/react/menu';\nimport { Portal } from '@chakra-ui/react/portal';\nimport { Separator as ChakraSeparator } from '@chakra-ui/react/separator';\nimport { Text } from '@chakra-ui/react/text';\nimport { createContext, forwardRef, type ReactNode, type Ref, useContext } from 'react';\n\nimport { type BitkitIconComponent } from '../../icons';\n\nconst BitkitMenuContext = createContext<MenuRootProps['size']>('lg');\n\ninterface BitkitMenuRootProps extends Omit<MenuRootProps, 'children'> {\n trigger: ReactNode;\n children?: ReactNode;\n}\n\nconst Root = ({ trigger, children, size = 'lg', ...props }: BitkitMenuRootProps) => {\n return (\n <Menu.Root size={size} {...props}>\n <Menu.Trigger asChild>{trigger}</Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <BitkitMenuContext.Provider value={size}>\n <Menu.Content>{children}</Menu.Content>\n </BitkitMenuContext.Provider>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\nRoot.displayName = 'BitkitActionMenu.Root';\n\ninterface BitkitMenuItemCommonProps extends MenuItemProps {\n danger?: boolean;\n icon?: BitkitIconComponent;\n secondaryText?: ReactNode;\n}\n\ninterface BitkitMenuItemAsButtonProps extends BitkitMenuItemCommonProps {\n href?: undefined;\n isExternal?: undefined;\n rel?: undefined;\n target?: undefined;\n}\n\ninterface BitkitMenuItemAsAnchorProps extends BitkitMenuItemCommonProps {\n href: string;\n isExternal?: boolean;\n rel?: string;\n target?: string;\n}\n\nexport type BitkitMenuItemProps = BitkitMenuItemAsButtonProps | BitkitMenuItemAsAnchorProps;\n\nconst Item = forwardRef<HTMLElement, BitkitMenuItemProps>((props, ref) => {\n const { children, danger, icon: Icon, secondaryText } = props;\n const style = useMenuStyles();\n const menuCtx = useContext(BitkitMenuContext);\n\n const content = (\n <>\n {Icon && <Icon size={menuCtx === 'lg' ? '24' : '16'} />}\n <Box flex=\"1\">\n <Text>{children}</Text>\n {secondaryText && <Text css={style.itemHelper}>{secondaryText}</Text>}\n </Box>\n </>\n );\n\n if (props.href !== undefined) {\n const {\n children: _children,\n danger: _danger,\n href,\n icon: _icon,\n isExternal,\n rel,\n secondaryText: _secondaryText,\n target,\n ...rest\n } = props;\n const effectiveTarget = isExternal ? '_blank' : target;\n const effectiveRel = isExternal ? (rel ? `${rel} noreferrer noopener` : 'noreferrer noopener') : rel;\n return (\n <Menu.Item asChild data-danger={danger} {...rest}>\n <a ref={ref as Ref<HTMLAnchorElement>} href={href} rel={effectiveRel} target={effectiveTarget}>\n {content}\n </a>\n </Menu.Item>\n );\n }\n\n const { children: _children, danger: _danger, icon: _icon, secondaryText: _secondaryText, ...rest } = props;\n return (\n <Menu.Item data-danger={danger} ref={ref as Ref<HTMLDivElement>} {...rest}>\n {content}\n </Menu.Item>\n );\n});\nItem.displayName = 'BitkitActionMenu.Item';\n\nexport interface BitkitMenuGroupProps extends MenuItemGroupProps {\n label: ReactNode;\n}\nconst Group = forwardRef<HTMLDivElement, BitkitMenuGroupProps>(({ label, children, ...props }, ref) => {\n return (\n <Menu.ItemGroup ref={ref} {...props}>\n <Menu.ItemGroupLabel>\n <Text>{label}</Text>\n <ChakraSeparator flex=\"1\" />\n </Menu.ItemGroupLabel>\n {children}\n </Menu.ItemGroup>\n );\n});\nGroup.displayName = 'BitkitActionMenu.Group';\n\nconst Separator = () => {\n return <Menu.Separator />;\n};\nSeparator.displayName = 'BitkitActionMenu.Separator';\n\nconst BitkitActionMenu = {\n Root,\n Separator,\n Item,\n Group,\n};\n\nexport default BitkitActionMenu;\n"],"mappings":";;;;;;;;AAeA,IAAM,oBAAoB,cAAqC,IAAI;AAOnE,IAAM,QAAQ,EAAE,SAAS,UAAU,OAAO,MAAM,GAAG,YAAiC;CAClF,OACE,qBAAC,KAAK,MAAN;EAAiB;EAAM,GAAI;EAA3B,UAAA,CACE,oBAAC,KAAK,SAAN;GAAc,SAAA;GAAS,UAAA;EAAsB,CAAA,GAC7C,oBAAC,QAAD,EAAA,UACE,oBAAC,KAAK,YAAN,EAAA,UACE,oBAAC,kBAAkB,UAAnB;GAA4B,OAAO;GACjC,UAAA,oBAAC,KAAK,SAAN,EAAe,SAAuB,CAAA;EACZ,CAAA,EACb,CAAA,EACX,CAAA,CACC;;AAEf;AACA,KAAK,cAAc;AAwBnB,IAAM,OAAO,YAA8C,OAAO,QAAQ;CACxE,MAAM,EAAE,UAAU,QAAQ,MAAM,MAAM,kBAAkB;CACxD,MAAM,QAAQ,cAAc;CAC5B,MAAM,UAAU,WAAW,iBAAiB;CAE5C,MAAM,UACJ,qBAAA,YAAA,EAAA,UAAA,CACG,QAAQ,oBAAC,MAAD,EAAM,MAAM,YAAY,OAAO,OAAO,KAAO,CAAA,GACtD,qBAAC,KAAD;EAAK,MAAK;EAAV,UAAA,CACE,oBAAC,MAAD,EAAO,SAAe,CAAA,GACrB,iBAAiB,oBAAC,MAAD;GAAM,KAAK,MAAM;GAAa,UAAA;EAAoB,CAAA,CACjE;CACL,CAAA,CAAA,EAAA,CAAA;CAGJ,IAAI,MAAM,SAAS,KAAA,GAAW;EAC5B,MAAM,EACJ,UAAU,WACV,QAAQ,SACR,MACA,MAAM,OACN,YACA,KACA,eAAe,gBACf,QACA,GAAG,SACD;EACJ,MAAM,kBAAkB,aAAa,WAAW;EAChD,MAAM,eAAe,aAAc,MAAM,GAAG,IAAI,wBAAwB,wBAAyB;EACjG,OACE,oBAAC,KAAK,MAAN;GAAW,SAAA;GAAQ,eAAa;GAAQ,GAAI;GAC1C,UAAA,oBAAC,KAAD;IAAQ;IAAqC;IAAM,KAAK;IAAc,QAAQ;IAC3E,UAAA;GACA,CAAA;EACM,CAAA;CAEf;CAEA,MAAM,EAAE,UAAU,WAAW,QAAQ,SAAS,MAAM,OAAO,eAAe,gBAAgB,GAAG,SAAS;CACtG,OACE,oBAAC,KAAK,MAAN;EAAW,eAAa;EAAa;EAA4B,GAAI;EAClE,UAAA;CACQ,CAAA;AAEf,CAAC;AACD,KAAK,cAAc;AAKnB,IAAM,QAAQ,YAAkD,EAAE,OAAO,UAAU,GAAG,SAAS,QAAQ;CACrG,OACE,qBAAC,KAAK,WAAN;EAAqB;EAAK,GAAI;EAA9B,UAAA,CACE,qBAAC,KAAK,gBAAN,EAAA,UAAA,CACE,oBAAC,MAAD,EAAA,UAAO,MAAY,CAAA,GACnB,oBAAC,WAAD,EAAiB,MAAK,IAAK,CAAA,CACR,EAAA,CAAA,GACpB,QACa;;AAEpB,CAAC;AACD,MAAM,cAAc;AAEpB,IAAM,oBAAkB;CACtB,OAAO,oBAAC,KAAK,WAAN,CAAiB,CAAA;AAC1B;AACA,YAAU,cAAc;AAExB,IAAM,mBAAmB;CACvB;CACA,WAAA;CACA;CACA;AACF"}
1
+ {"version":3,"file":"BitkitActionMenu.js","names":[],"sources":["../../../lib/components/BitkitActionMenu/BitkitActionMenu.tsx"],"sourcesContent":["import { Box } from '@chakra-ui/react/box';\nimport {\n Menu,\n type MenuItemGroupProps,\n type MenuItemProps,\n type MenuRootProps,\n type MenuSeparatorProps,\n useMenuStyles,\n} from '@chakra-ui/react/menu';\nimport { Portal } from '@chakra-ui/react/portal';\nimport { Separator as ChakraSeparator } from '@chakra-ui/react/separator';\nimport { Text } from '@chakra-ui/react/text';\nimport { createContext, forwardRef, type ReactNode, type Ref, useContext } from 'react';\n\nimport { type BitkitIconComponent, IconArrowNortheast } from '../../icons';\nimport { withSubComponents } from '../../utilities/withSubComponents';\n\nconst BitkitActionMenuContext = createContext<MenuRootProps['size']>('lg');\n\nexport interface BitkitActionMenuProps extends Omit<MenuRootProps, 'children'> {\n /** The menu's items — `BitkitActionMenu.Item`, `.Group` and `.Separator`. */\n children?: ReactNode;\n /**\n * Row density, inherited by every item. `lg` (default) is the standalone action menu; `md` is for\n * menus attached to dense UI, such as an overflow menu in a toolbar or a tab bar.\n */\n size?: MenuRootProps['size'];\n /**\n * The element the menu is anchored to — usually a `BitkitIconButton` or `BitkitButton`. Rendered\n * via `asChild`, so it must accept a ref.\n */\n trigger: ReactNode;\n}\n\nconst BitkitActionMenu = ({ trigger, children, size = 'lg', ...props }: BitkitActionMenuProps) => {\n return (\n <Menu.Root size={size} {...props}>\n <Menu.Trigger asChild>{trigger}</Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <BitkitActionMenuContext.Provider value={size}>\n <Menu.Content>{children}</Menu.Content>\n </BitkitActionMenuContext.Provider>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\nBitkitActionMenu.displayName = 'BitkitActionMenu';\n\ninterface BitkitActionMenuItemCommonProps extends MenuItemProps {\n /** The item's label. */\n children?: ReactNode;\n /** Leading icon, sized from the menu's `size` (24 on `lg`, 16 on `md`). */\n icon?: BitkitIconComponent;\n /** Style the item as destructive — red label and icon. Use it for delete and similar actions. */\n isDanger?: boolean;\n /** A second, quieter line under the label. Adding it makes the row taller and top-aligns the icon. */\n secondaryText?: ReactNode;\n}\n\ninterface BitkitActionMenuItemAsButtonProps extends BitkitActionMenuItemCommonProps {\n href?: undefined;\n isExternal?: undefined;\n rel?: undefined;\n target?: undefined;\n}\n\ninterface BitkitActionMenuItemAsAnchorProps extends BitkitActionMenuItemCommonProps {\n /** Renders the item as an `<a>` instead of a menu button. */\n href: string;\n /**\n * Shorthand for `target=\"_blank\"` plus `rel=\"noreferrer noopener\"`. Also puts an\n * `IconArrowNortheast` at the end of the row — the design system's \"leaves this page\" marker.\n */\n isExternal?: boolean;\n /** Extra `rel` tokens. With `isExternal` the safety tokens are appended to these. */\n rel?: string;\n /** Anchor target. Ignored when `isExternal` is set. */\n target?: string;\n}\n\nexport type BitkitActionMenuItemProps = BitkitActionMenuItemAsButtonProps | BitkitActionMenuItemAsAnchorProps;\n\nconst BitkitActionMenuItem = forwardRef<HTMLElement, BitkitActionMenuItemProps>((props, ref) => {\n const { children, icon: Icon, isDanger, secondaryText } = props;\n const style = useMenuStyles();\n const menuCtx = useContext(BitkitActionMenuContext);\n const iconSize = menuCtx === 'lg' ? '24' : '16';\n const hasHelper = secondaryText ? true : undefined;\n\n const content = (\n <>\n {Icon && <Icon size={iconSize} />}\n <Box flex=\"1\">\n <Text>{children}</Text>\n {secondaryText && <Text css={style.itemHelper}>{secondaryText}</Text>}\n </Box>\n {props.isExternal && <IconArrowNortheast data-suffix-icon size={iconSize} />}\n </>\n );\n\n if (props.href !== undefined) {\n const {\n children: _children,\n href,\n icon: _icon,\n isDanger: _isDanger,\n isExternal,\n rel,\n secondaryText: _secondaryText,\n target,\n ...rest\n } = props;\n const effectiveTarget = isExternal ? '_blank' : target;\n const effectiveRel = isExternal ? (rel ? `${rel} noreferrer noopener` : 'noreferrer noopener') : rel;\n return (\n <Menu.Item asChild data-danger={isDanger} data-helper={hasHelper} {...rest}>\n <a ref={ref as Ref<HTMLAnchorElement>} href={href} rel={effectiveRel} target={effectiveTarget}>\n {content}\n </a>\n </Menu.Item>\n );\n }\n\n const { children: _children, icon: _icon, isDanger: _isDanger, secondaryText: _secondaryText, ...rest } = props;\n return (\n <Menu.Item data-danger={isDanger} data-helper={hasHelper} ref={ref as Ref<HTMLDivElement>} {...rest}>\n {content}\n </Menu.Item>\n );\n});\nBitkitActionMenuItem.displayName = 'BitkitActionMenu.Item';\n\nexport interface BitkitActionMenuGroupProps extends MenuItemGroupProps {\n /** The group's items. */\n children?: ReactNode;\n /** The group's heading, rendered uppercase with a rule filling the rest of the row. */\n label: ReactNode;\n}\n\nconst BitkitActionMenuGroup = forwardRef<HTMLDivElement, BitkitActionMenuGroupProps>(\n ({ label, children, ...props }, ref) => {\n return (\n <Menu.ItemGroup ref={ref} {...props}>\n <Menu.ItemGroupLabel>\n <Text>{label}</Text>\n <ChakraSeparator flex=\"1\" />\n </Menu.ItemGroupLabel>\n {children}\n </Menu.ItemGroup>\n );\n },\n);\nBitkitActionMenuGroup.displayName = 'BitkitActionMenu.Group';\n\nexport type BitkitActionMenuSeparatorProps = MenuSeparatorProps;\n\nconst BitkitActionMenuSeparator = forwardRef<HTMLHRElement, BitkitActionMenuSeparatorProps>((props, ref) => {\n return <Menu.Separator ref={ref} {...props} />;\n});\nBitkitActionMenuSeparator.displayName = 'BitkitActionMenu.Separator';\n\nexport default withSubComponents(BitkitActionMenu, {\n Group: BitkitActionMenuGroup,\n Item: BitkitActionMenuItem,\n Separator: BitkitActionMenuSeparator,\n});\n"],"mappings":";;;;;;;;;;AAiBA,IAAM,0BAA0B,cAAqC,IAAI;AAiBzE,IAAM,oBAAoB,EAAE,SAAS,UAAU,OAAO,MAAM,GAAG,YAAmC;CAChG,OACE,qBAAC,KAAK,MAAN;EAAiB;EAAM,GAAI;EAA3B,UAAA,CACE,oBAAC,KAAK,SAAN;GAAc,SAAA;GAAS,UAAA;EAAsB,CAAA,GAC7C,oBAAC,QAAD,EAAA,UACE,oBAAC,KAAK,YAAN,EAAA,UACE,oBAAC,wBAAwB,UAAzB;GAAkC,OAAO;GACvC,UAAA,oBAAC,KAAK,SAAN,EAAe,SAAuB,CAAA;EACN,CAAA,EACnB,CAAA,EACX,CAAA,CACC;;AAEf;AACA,iBAAiB,cAAc;AAoC/B,IAAM,uBAAuB,YAAoD,OAAO,QAAQ;CAC9F,MAAM,EAAE,UAAU,MAAM,MAAM,UAAU,kBAAkB;CAC1D,MAAM,QAAQ,cAAc;CAE5B,MAAM,WADU,WAAW,uBACV,MAAY,OAAO,OAAO;CAC3C,MAAM,YAAY,gBAAgB,OAAO,KAAA;CAEzC,MAAM,UACJ,qBAAA,YAAA,EAAA,UAAA;EACG,QAAQ,oBAAC,MAAD,EAAM,MAAM,SAAW,CAAA;EAChC,qBAAC,KAAD;GAAK,MAAK;GAAV,UAAA,CACE,oBAAC,MAAD,EAAO,SAAe,CAAA,GACrB,iBAAiB,oBAAC,MAAD;IAAM,KAAK,MAAM;IAAa,UAAA;GAAoB,CAAA,CACjE;;EACJ,MAAM,cAAc,oBAAC,oBAAD;GAAoB,oBAAA;GAAiB,MAAM;EAAW,CAAA;CAC3E,EAAA,CAAA;CAGJ,IAAI,MAAM,SAAS,KAAA,GAAW;EAC5B,MAAM,EACJ,UAAU,WACV,MACA,MAAM,OACN,UAAU,WACV,YACA,KACA,eAAe,gBACf,QACA,GAAG,SACD;EACJ,MAAM,kBAAkB,aAAa,WAAW;EAChD,MAAM,eAAe,aAAc,MAAM,GAAG,IAAI,wBAAwB,wBAAyB;EACjG,OACE,oBAAC,KAAK,MAAN;GAAW,SAAA;GAAQ,eAAa;GAAU,eAAa;GAAW,GAAI;GACpE,UAAA,oBAAC,KAAD;IAAQ;IAAqC;IAAM,KAAK;IAAc,QAAQ;IAC3E,UAAA;GACA,CAAA;EACM,CAAA;CAEf;CAEA,MAAM,EAAE,UAAU,WAAW,MAAM,OAAO,UAAU,WAAW,eAAe,gBAAgB,GAAG,SAAS;CAC1G,OACE,oBAAC,KAAK,MAAN;EAAW,eAAa;EAAU,eAAa;EAAgB;EAA4B,GAAI;EAC5F,UAAA;CACQ,CAAA;AAEf,CAAC;AACD,qBAAqB,cAAc;AASnC,IAAM,wBAAwB,YAC3B,EAAE,OAAO,UAAU,GAAG,SAAS,QAAQ;CACtC,OACE,qBAAC,KAAK,WAAN;EAAqB;EAAK,GAAI;EAA9B,UAAA,CACE,qBAAC,KAAK,gBAAN,EAAA,UAAA,CACE,oBAAC,MAAD,EAAA,UAAO,MAAY,CAAA,GACnB,oBAAC,WAAD,EAAiB,MAAK,IAAK,CAAA,CACR,EAAA,CAAA,GACpB,QACa;;AAEpB,CACF;AACA,sBAAsB,cAAc;AAIpC,IAAM,4BAA4B,YAA2D,OAAO,QAAQ;CAC1G,OAAO,oBAAC,KAAK,WAAN;EAAqB;EAAK,GAAI;CAAQ,CAAA;AAC/C,CAAC;AACD,0BAA0B,cAAc;AAExC,IAAA,2BAAe,kBAAkB,kBAAkB;CACjD,OAAO;CACP,MAAM;CACN,WAAW;AACb,CAAC"}
@@ -1,7 +1,7 @@
1
+ import { withSubComponents } from "../../utilities/withSubComponents.js";
1
2
  import IconChevronRight from "../../icons/IconChevronRight.js";
2
3
  import IconMoreHorizontal from "../../icons/IconMoreHorizontal.js";
3
4
  import { flattenChildren } from "../../utilities/flattenChildren.js";
4
- import { withSubComponents } from "../../utilities/withSubComponents.js";
5
5
  import BitkitControlButton from "../BitkitControlButton/BitkitControlButton.js";
6
6
  import BreadcrumbCurrentItem from "./components/BreadcrumbCurrentItem.js";
7
7
  import BreadcrumbItem from "./components/BreadcrumbItem.js";
@@ -1,9 +1,9 @@
1
1
  import AssetSelectChevron from "../../utilities/AssetSelectChevron.js";
2
+ import { withSubComponents } from "../../utilities/withSubComponents.js";
2
3
  import IconErrorCircleFilled from "../../icons/IconErrorCircleFilled.js";
3
4
  import IconWarningYellow from "../../icons/IconWarningYellow.js";
4
5
  import BitkitPortalContext from "../../utilities/BitkitPortalContext.js";
5
6
  import BitkitCloseButton from "../BitkitCloseButton/BitkitCloseButton.js";
6
- import { withSubComponents } from "../../utilities/withSubComponents.js";
7
7
  import BitkitSelectMenuAction from "../BitkitSelectMenu/BitkitSelectMenuAction.js";
8
8
  import BitkitSelectMenu from "../BitkitSelectMenu/BitkitSelectMenu.js";
9
9
  import BitkitField from "../BitkitField/BitkitField.js";
@@ -1,5 +1,5 @@
1
- import { flattenChildren } from "../../utilities/flattenChildren.js";
2
1
  import { withSubComponents } from "../../utilities/withSubComponents.js";
2
+ import { flattenChildren } from "../../utilities/flattenChildren.js";
3
3
  import DialogInner from "./DialogInner.js";
4
4
  import DialogShell from "./DialogShell.js";
5
5
  import BitkitSteps_default from "../BitkitSteps/BitkitSteps.js";
@@ -1,9 +1,9 @@
1
1
  import AssetSelectChevron from "../../utilities/AssetSelectChevron.js";
2
+ import { withSubComponents } from "../../utilities/withSubComponents.js";
2
3
  import IconErrorCircleFilled from "../../icons/IconErrorCircleFilled.js";
3
4
  import IconWarningYellow from "../../icons/IconWarningYellow.js";
4
5
  import BitkitPortalContext from "../../utilities/BitkitPortalContext.js";
5
6
  import BitkitCloseButton from "../BitkitCloseButton/BitkitCloseButton.js";
6
- import { withSubComponents } from "../../utilities/withSubComponents.js";
7
7
  import BitkitSelectMenuAction from "../BitkitSelectMenu/BitkitSelectMenuAction.js";
8
8
  import BitkitField from "../BitkitField/BitkitField.js";
9
9
  import BitkitMultiselectMenu from "../BitkitMultiselectMenu/BitkitMultiselectMenu.js";
@@ -1,5 +1,5 @@
1
- import IconBitbot from "../../icons/IconBitbot.js";
2
1
  import { withSubComponents } from "../../utilities/withSubComponents.js";
2
+ import IconBitbot from "../../icons/IconBitbot.js";
3
3
  import { Box } from "@chakra-ui/react/box";
4
4
  import { chakra, useSlotRecipe } from "@chakra-ui/react/styled-system";
5
5
  import { forwardRef } from "react";
@@ -1,9 +1,9 @@
1
1
  import AssetSelectChevron from "../../utilities/AssetSelectChevron.js";
2
+ import { withSubComponents } from "../../utilities/withSubComponents.js";
2
3
  import IconErrorCircleFilled from "../../icons/IconErrorCircleFilled.js";
3
4
  import IconWarningYellow from "../../icons/IconWarningYellow.js";
4
5
  import BitkitPortalContext from "../../utilities/BitkitPortalContext.js";
5
6
  import BitkitAvatar from "../BitkitAvatar/BitkitAvatar.js";
6
- import { withSubComponents } from "../../utilities/withSubComponents.js";
7
7
  import BitkitSelectMenuAction from "../BitkitSelectMenu/BitkitSelectMenuAction.js";
8
8
  import { selectSizeMap } from "../BitkitSelectMenu/SelectMenuShell.js";
9
9
  import BitkitSelectMenu from "../BitkitSelectMenu/BitkitSelectMenu.js";
@@ -1,6 +1,6 @@
1
+ import { withSubComponents } from "../../utilities/withSubComponents.js";
1
2
  import IconChevronLeft from "../../icons/IconChevronLeft.js";
2
3
  import BitkitLabelTooltip from "../BitkitLabelTooltip/BitkitLabelTooltip.js";
3
- import { withSubComponents } from "../../utilities/withSubComponents.js";
4
4
  import BitkitGroupHeading from "../BitkitGroupHeading/BitkitGroupHeading.js";
5
5
  import { Box } from "@chakra-ui/react/box";
6
6
  import { chakra, useRecipe, useSlotRecipe } from "@chakra-ui/react/styled-system";
@@ -18,11 +18,8 @@ declare const _default: import('react').ForwardRefExoticComponent<Omit<GroupProp
18
18
  children?: ReactNode | undefined;
19
19
  } & import('react').RefAttributes<HTMLDivElement>> & {
20
20
  Action: import('react').ForwardRefExoticComponent<BitkitSplitButtonActionProps & import('react').RefAttributes<HTMLElement>>;
21
- Group: import('react').ForwardRefExoticComponent<import('..').BitkitMenuGroupProps & import('react').RefAttributes<HTMLDivElement>>;
22
- Item: import('react').ForwardRefExoticComponent<import('..').BitkitMenuItemProps & import('react').RefAttributes<HTMLElement>>;
23
- Separator: {
24
- (): import("react").JSX.Element;
25
- displayName: string;
26
- };
21
+ Group: import('react').ForwardRefExoticComponent<import('..').BitkitActionMenuGroupProps & import('react').RefAttributes<HTMLDivElement>>;
22
+ Item: import('react').ForwardRefExoticComponent<import('..').BitkitActionMenuItemProps & import('react').RefAttributes<HTMLElement>>;
23
+ Separator: import('react').ForwardRefExoticComponent<import('@chakra-ui/react').MenuSeparatorProps & import('react').RefAttributes<HTMLHRElement>>;
27
24
  };
28
25
  export default _default;
@@ -1,7 +1,7 @@
1
+ import { withSubComponents } from "../../utilities/withSubComponents.js";
1
2
  import IconChevronDown from "../../icons/IconChevronDown.js";
2
- import BitkitActionMenu from "../BitkitActionMenu/BitkitActionMenu.js";
3
+ import BitkitActionMenu_default from "../BitkitActionMenu/BitkitActionMenu.js";
3
4
  import { flattenChildren } from "../../utilities/flattenChildren.js";
4
- import { withSubComponents } from "../../utilities/withSubComponents.js";
5
5
  import BitkitButton from "../BitkitButton/BitkitButton.js";
6
6
  import BitkitIconButton from "../BitkitIconButton/BitkitIconButton.js";
7
7
  import { useSlotRecipe } from "@chakra-ui/react/styled-system";
@@ -15,7 +15,7 @@ var isValidActionItem = (child) => {
15
15
  return isValidElement(child) && child.type === BitkitSplitButtonAction;
16
16
  };
17
17
  var isValidMenuItem = (child) => {
18
- return isValidElement(child) && (child.type === BitkitActionMenu.Group || child.type === BitkitActionMenu.Item || child.type === BitkitActionMenu.Separator);
18
+ return isValidElement(child) && (child.type === BitkitActionMenu_default.Group || child.type === BitkitActionMenu_default.Item || child.type === BitkitActionMenu_default.Separator);
19
19
  };
20
20
  var [SplitButtonProvider, useSplitButtonContext] = createContext$1({
21
21
  name: "SplitButtonContext",
@@ -64,7 +64,7 @@ var BitkitSplitButton = forwardRef((props, ref) => {
64
64
  ...rest,
65
65
  attached: true,
66
66
  display: "inline-flex",
67
- children: [actionChild, /* @__PURE__ */ jsx(BitkitActionMenu.Root, {
67
+ children: [actionChild, /* @__PURE__ */ jsx(BitkitActionMenu_default, {
68
68
  size: menuSize,
69
69
  trigger: /* @__PURE__ */ jsx(BitkitIconButton, {
70
70
  css: styles.trigger,
@@ -85,9 +85,9 @@ var BitkitSplitButton = forwardRef((props, ref) => {
85
85
  BitkitSplitButton.displayName = "BitkitSplitButton";
86
86
  var BitkitSplitButton_default = withSubComponents(BitkitSplitButton, {
87
87
  Action: BitkitSplitButtonAction,
88
- Group: BitkitActionMenu.Group,
89
- Item: BitkitActionMenu.Item,
90
- Separator: BitkitActionMenu.Separator
88
+ Group: BitkitActionMenu_default.Group,
89
+ Item: BitkitActionMenu_default.Item,
90
+ Separator: BitkitActionMenu_default.Separator
91
91
  });
92
92
  //#endregion
93
93
  export { BitkitSplitButton_default as default };
@@ -1 +1 @@
1
- {"version":3,"file":"BitkitSplitButton.js","names":[],"sources":["../../../lib/components/BitkitSplitButton/BitkitSplitButton.tsx"],"sourcesContent":["// eslint-disable-next-line no-restricted-imports\nimport { createContext } from '@chakra-ui/react';\nimport { Group, type GroupProps } from '@chakra-ui/react/group';\nimport { Skeleton } from '@chakra-ui/react/skeleton';\nimport { type SystemStyleObject, useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { forwardRef, isValidElement, type PropsWithChildren, type ReactElement, type ReactNode } from 'react';\n\nimport { IconChevronDown } from '../../icons';\nimport { flattenChildren } from '../../utilities/flattenChildren';\nimport { withSubComponents } from '../../utilities/withSubComponents';\nimport BitkitActionMenu from '../BitkitActionMenu/BitkitActionMenu';\nimport BitkitButton, {\n type BitkitButtonAsAnchorProps,\n type BitkitButtonAsButtonProps,\n} from '../BitkitButton/BitkitButton';\nimport BitkitIconButton from '../BitkitIconButton/BitkitIconButton';\n\ntype Size = 'lg' | 'md' | 'sm';\ntype Variant = 'primary' | 'secondary';\ntype State = 'disabled' | 'loading' | 'skeleton';\n\nconst isValidActionItem = (child: ReactNode): child is ReactElement => {\n return isValidElement(child) && child.type === BitkitSplitButtonAction;\n};\n\nconst isValidMenuItem = (child: ReactNode): child is ReactElement => {\n return (\n isValidElement(child) &&\n (child.type === BitkitActionMenu.Group ||\n child.type === BitkitActionMenu.Item ||\n child.type === BitkitActionMenu.Separator)\n );\n};\n\n// --- Context ---\ninterface SplitButtonContext {\n size: Size;\n variant: Variant;\n state: State | undefined;\n styles: Record<string, SystemStyleObject>;\n}\n\nconst [SplitButtonProvider, useSplitButtonContext] = createContext<SplitButtonContext>({\n name: 'SplitButtonContext',\n hookName: 'useSplitButtonContext',\n providerName: '<BitkitSplitButton />',\n});\n\n// --- Action ---\n// Split-button action can be a button (default) or anchor (when href is set). asChild is intentionally\n// not part of the API — routing-library elements don't fit cleanly into the Group attached layout.\n// The forwarded ref is HTMLElement so it covers both <button> and <a>.\ntype BitkitSplitButtonActionProps = Omit<\n BitkitButtonAsButtonProps | BitkitButtonAsAnchorProps,\n 'size' | 'variant' | 'state'\n>;\n\nconst BitkitSplitButtonAction = forwardRef<HTMLElement, BitkitSplitButtonActionProps>((props, ref) => {\n const { size, state, styles, variant } = useSplitButtonContext();\n\n if (props.href !== undefined) {\n // Anchor branch: BitkitButton's anchor variant doesn't allow state=\"loading\". Coerce to \"disabled\"\n // so a SplitButton-wide loading state still surfaces visually on a link-mode action.\n return (\n <BitkitButton\n {...(props as BitkitButtonAsAnchorProps)}\n css={styles.action}\n ref={ref}\n size={size}\n state={state === 'loading' ? 'disabled' : state}\n variant={variant}\n />\n );\n }\n\n return (\n <BitkitButton\n {...(props as BitkitButtonAsButtonProps)}\n css={styles.action}\n ref={ref}\n size={size}\n state={state}\n variant={variant}\n />\n );\n});\n\nBitkitSplitButtonAction.displayName = 'BitkitSplitButtonAction';\n\n// --- Root ---\nexport type BitkitSplitButtonProps = PropsWithChildren<\n Omit<GroupProps, 'attached' | 'children' | 'display'> & {\n size?: Size;\n variant?: Variant;\n state?: State;\n }\n>;\n\nconst BitkitSplitButton = forwardRef<HTMLDivElement, BitkitSplitButtonProps>((props, ref) => {\n const { children, size = 'lg', state, variant = 'primary', ...rest } = props;\n\n const childArray = flattenChildren(children);\n const actionChild = childArray.find(isValidActionItem);\n const menuItems = childArray.filter(isValidMenuItem);\n\n const menuSize = size === 'lg' ? 'lg' : 'md';\n const recipe = useSlotRecipe({ key: 'splitButton' });\n const styles = recipe({ variant });\n\n return (\n <SplitButtonProvider value={{ size, state, styles, variant }}>\n <Skeleton asChild loading={state === 'skeleton'}>\n <Group ref={ref} {...rest} attached display=\"inline-flex\">\n {actionChild}\n <BitkitActionMenu.Root\n size={menuSize}\n trigger={\n <BitkitIconButton\n css={styles.trigger}\n icon={IconChevronDown}\n label=\"Toggle menu\"\n size={size}\n state={state === 'loading' ? 'disabled' : state}\n // Design decision: no tooltip on the menu trigger — the label stays as aria-label\n tooltipProps={{ disabled: true }}\n variant={variant}\n />\n }\n positioning={{ placement: 'bottom-end' }}\n >\n {menuItems}\n </BitkitActionMenu.Root>\n </Group>\n </Skeleton>\n </SplitButtonProvider>\n );\n});\nBitkitSplitButton.displayName = 'BitkitSplitButton';\n\nexport default withSubComponents(BitkitSplitButton, {\n Action: BitkitSplitButtonAction,\n Group: BitkitActionMenu.Group,\n Item: BitkitActionMenu.Item,\n Separator: BitkitActionMenu.Separator,\n});\n"],"mappings":";;;;;;;;;;;;;AAqBA,IAAM,qBAAqB,UAA4C;CACrE,OAAO,eAAe,KAAK,KAAK,MAAM,SAAS;AACjD;AAEA,IAAM,mBAAmB,UAA4C;CACnE,OACE,eAAe,KAAK,MACnB,MAAM,SAAS,iBAAiB,SAC/B,MAAM,SAAS,iBAAiB,QAChC,MAAM,SAAS,iBAAiB;AAEtC;AAUA,IAAM,CAAC,qBAAqB,yBAAyB,gBAAkC;CACrF,MAAM;CACN,UAAU;CACV,cAAc;AAChB,CAAC;AAWD,IAAM,0BAA0B,YAAuD,OAAO,QAAQ;CACpG,MAAM,EAAE,MAAM,OAAO,QAAQ,YAAY,sBAAsB;CAE/D,IAAI,MAAM,SAAS,KAAA,GAGjB,OACE,oBAAC,cAAD;EACE,GAAK;EACL,KAAK,OAAO;EACP;EACC;EACN,OAAO,UAAU,YAAY,aAAa;EACjC;CACV,CAAA;CAIL,OACE,oBAAC,cAAD;EACE,GAAK;EACL,KAAK,OAAO;EACP;EACC;EACC;EACE;CACV,CAAA;AAEL,CAAC;AAED,wBAAwB,cAAc;AAWtC,IAAM,oBAAoB,YAAoD,OAAO,QAAQ;CAC3F,MAAM,EAAE,UAAU,OAAO,MAAM,OAAO,UAAU,WAAW,GAAG,SAAS;CAEvE,MAAM,aAAa,gBAAgB,QAAQ;CAC3C,MAAM,cAAc,WAAW,KAAK,iBAAiB;CACrD,MAAM,YAAY,WAAW,OAAO,eAAe;CAEnD,MAAM,WAAW,SAAS,OAAO,OAAO;CAExC,MAAM,SADS,cAAc,EAAE,KAAK,cAAc,CACnC,CAAA,CAAO,EAAE,QAAQ,CAAC;CAEjC,OACE,oBAAC,qBAAD;EAAqB,OAAO;GAAE;GAAM;GAAO;GAAQ;EAAQ;EACzD,UAAA,oBAAC,UAAD;GAAU,SAAA;GAAQ,SAAS,UAAU;GACnC,UAAA,qBAAC,OAAD;IAAY;IAAK,GAAI;IAAM,UAAA;IAAS,SAAQ;IAA5C,UAAA,CACG,aACD,oBAAC,iBAAiB,MAAlB;KACE,MAAM;KACN,SACE,oBAAC,kBAAD;MACE,KAAK,OAAO;MACZ,MAAM;MACN,OAAM;MACA;MACN,OAAO,UAAU,YAAY,aAAa;MAE1C,cAAc,EAAE,UAAU,KAAK;MACtB;KACV,CAAA;KAEH,aAAa,EAAE,WAAW,aAAa;KAEtC,UAAA;IACoB,CAAA,CAClB;;EACC,CAAA;CACS,CAAA;AAEzB,CAAC;AACD,kBAAkB,cAAc;AAEhC,IAAA,4BAAe,kBAAkB,mBAAmB;CAClD,QAAQ;CACR,OAAO,iBAAiB;CACxB,MAAM,iBAAiB;CACvB,WAAW,iBAAiB;AAC9B,CAAC"}
1
+ {"version":3,"file":"BitkitSplitButton.js","names":[],"sources":["../../../lib/components/BitkitSplitButton/BitkitSplitButton.tsx"],"sourcesContent":["// eslint-disable-next-line no-restricted-imports\nimport { createContext } from '@chakra-ui/react';\nimport { Group, type GroupProps } from '@chakra-ui/react/group';\nimport { Skeleton } from '@chakra-ui/react/skeleton';\nimport { type SystemStyleObject, useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { forwardRef, isValidElement, type PropsWithChildren, type ReactElement, type ReactNode } from 'react';\n\nimport { IconChevronDown } from '../../icons';\nimport { flattenChildren } from '../../utilities/flattenChildren';\nimport { withSubComponents } from '../../utilities/withSubComponents';\nimport BitkitActionMenu from '../BitkitActionMenu/BitkitActionMenu';\nimport BitkitButton, {\n type BitkitButtonAsAnchorProps,\n type BitkitButtonAsButtonProps,\n} from '../BitkitButton/BitkitButton';\nimport BitkitIconButton from '../BitkitIconButton/BitkitIconButton';\n\ntype Size = 'lg' | 'md' | 'sm';\ntype Variant = 'primary' | 'secondary';\ntype State = 'disabled' | 'loading' | 'skeleton';\n\nconst isValidActionItem = (child: ReactNode): child is ReactElement => {\n return isValidElement(child) && child.type === BitkitSplitButtonAction;\n};\n\nconst isValidMenuItem = (child: ReactNode): child is ReactElement => {\n return (\n isValidElement(child) &&\n (child.type === BitkitActionMenu.Group ||\n child.type === BitkitActionMenu.Item ||\n child.type === BitkitActionMenu.Separator)\n );\n};\n\n// --- Context ---\ninterface SplitButtonContext {\n size: Size;\n variant: Variant;\n state: State | undefined;\n styles: Record<string, SystemStyleObject>;\n}\n\nconst [SplitButtonProvider, useSplitButtonContext] = createContext<SplitButtonContext>({\n name: 'SplitButtonContext',\n hookName: 'useSplitButtonContext',\n providerName: '<BitkitSplitButton />',\n});\n\n// --- Action ---\n// Split-button action can be a button (default) or anchor (when href is set). asChild is intentionally\n// not part of the API — routing-library elements don't fit cleanly into the Group attached layout.\n// The forwarded ref is HTMLElement so it covers both <button> and <a>.\ntype BitkitSplitButtonActionProps = Omit<\n BitkitButtonAsButtonProps | BitkitButtonAsAnchorProps,\n 'size' | 'variant' | 'state'\n>;\n\nconst BitkitSplitButtonAction = forwardRef<HTMLElement, BitkitSplitButtonActionProps>((props, ref) => {\n const { size, state, styles, variant } = useSplitButtonContext();\n\n if (props.href !== undefined) {\n // Anchor branch: BitkitButton's anchor variant doesn't allow state=\"loading\". Coerce to \"disabled\"\n // so a SplitButton-wide loading state still surfaces visually on a link-mode action.\n return (\n <BitkitButton\n {...(props as BitkitButtonAsAnchorProps)}\n css={styles.action}\n ref={ref}\n size={size}\n state={state === 'loading' ? 'disabled' : state}\n variant={variant}\n />\n );\n }\n\n return (\n <BitkitButton\n {...(props as BitkitButtonAsButtonProps)}\n css={styles.action}\n ref={ref}\n size={size}\n state={state}\n variant={variant}\n />\n );\n});\n\nBitkitSplitButtonAction.displayName = 'BitkitSplitButtonAction';\n\n// --- Root ---\nexport type BitkitSplitButtonProps = PropsWithChildren<\n Omit<GroupProps, 'attached' | 'children' | 'display'> & {\n size?: Size;\n variant?: Variant;\n state?: State;\n }\n>;\n\nconst BitkitSplitButton = forwardRef<HTMLDivElement, BitkitSplitButtonProps>((props, ref) => {\n const { children, size = 'lg', state, variant = 'primary', ...rest } = props;\n\n const childArray = flattenChildren(children);\n const actionChild = childArray.find(isValidActionItem);\n const menuItems = childArray.filter(isValidMenuItem);\n\n const menuSize = size === 'lg' ? 'lg' : 'md';\n const recipe = useSlotRecipe({ key: 'splitButton' });\n const styles = recipe({ variant });\n\n return (\n <SplitButtonProvider value={{ size, state, styles, variant }}>\n <Skeleton asChild loading={state === 'skeleton'}>\n <Group ref={ref} {...rest} attached display=\"inline-flex\">\n {actionChild}\n <BitkitActionMenu\n size={menuSize}\n trigger={\n <BitkitIconButton\n css={styles.trigger}\n icon={IconChevronDown}\n label=\"Toggle menu\"\n size={size}\n state={state === 'loading' ? 'disabled' : state}\n // Design decision: no tooltip on the menu trigger — the label stays as aria-label\n tooltipProps={{ disabled: true }}\n variant={variant}\n />\n }\n positioning={{ placement: 'bottom-end' }}\n >\n {menuItems}\n </BitkitActionMenu>\n </Group>\n </Skeleton>\n </SplitButtonProvider>\n );\n});\nBitkitSplitButton.displayName = 'BitkitSplitButton';\n\nexport default withSubComponents(BitkitSplitButton, {\n Action: BitkitSplitButtonAction,\n Group: BitkitActionMenu.Group,\n Item: BitkitActionMenu.Item,\n Separator: BitkitActionMenu.Separator,\n});\n"],"mappings":";;;;;;;;;;;;;AAqBA,IAAM,qBAAqB,UAA4C;CACrE,OAAO,eAAe,KAAK,KAAK,MAAM,SAAS;AACjD;AAEA,IAAM,mBAAmB,UAA4C;CACnE,OACE,eAAe,KAAK,MACnB,MAAM,SAAS,yBAAiB,SAC/B,MAAM,SAAS,yBAAiB,QAChC,MAAM,SAAS,yBAAiB;AAEtC;AAUA,IAAM,CAAC,qBAAqB,yBAAyB,gBAAkC;CACrF,MAAM;CACN,UAAU;CACV,cAAc;AAChB,CAAC;AAWD,IAAM,0BAA0B,YAAuD,OAAO,QAAQ;CACpG,MAAM,EAAE,MAAM,OAAO,QAAQ,YAAY,sBAAsB;CAE/D,IAAI,MAAM,SAAS,KAAA,GAGjB,OACE,oBAAC,cAAD;EACE,GAAK;EACL,KAAK,OAAO;EACP;EACC;EACN,OAAO,UAAU,YAAY,aAAa;EACjC;CACV,CAAA;CAIL,OACE,oBAAC,cAAD;EACE,GAAK;EACL,KAAK,OAAO;EACP;EACC;EACC;EACE;CACV,CAAA;AAEL,CAAC;AAED,wBAAwB,cAAc;AAWtC,IAAM,oBAAoB,YAAoD,OAAO,QAAQ;CAC3F,MAAM,EAAE,UAAU,OAAO,MAAM,OAAO,UAAU,WAAW,GAAG,SAAS;CAEvE,MAAM,aAAa,gBAAgB,QAAQ;CAC3C,MAAM,cAAc,WAAW,KAAK,iBAAiB;CACrD,MAAM,YAAY,WAAW,OAAO,eAAe;CAEnD,MAAM,WAAW,SAAS,OAAO,OAAO;CAExC,MAAM,SADS,cAAc,EAAE,KAAK,cAAc,CACnC,CAAA,CAAO,EAAE,QAAQ,CAAC;CAEjC,OACE,oBAAC,qBAAD;EAAqB,OAAO;GAAE;GAAM;GAAO;GAAQ;EAAQ;EACzD,UAAA,oBAAC,UAAD;GAAU,SAAA;GAAQ,SAAS,UAAU;GACnC,UAAA,qBAAC,OAAD;IAAY;IAAK,GAAI;IAAM,UAAA;IAAS,SAAQ;IAA5C,UAAA,CACG,aACD,oBAAC,0BAAD;KACE,MAAM;KACN,SACE,oBAAC,kBAAD;MACE,KAAK,OAAO;MACZ,MAAM;MACN,OAAM;MACA;MACN,OAAO,UAAU,YAAY,aAAa;MAE1C,cAAc,EAAE,UAAU,KAAK;MACtB;KACV,CAAA;KAEH,aAAa,EAAE,WAAW,aAAa;KAEtC,UAAA;IACe,CAAA,CACb;;EACC,CAAA;CACS,CAAA;AAEzB,CAAC;AACD,kBAAkB,cAAc;AAEhC,IAAA,4BAAe,kBAAkB,mBAAmB;CAClD,QAAQ;CACR,OAAO,yBAAiB;CACxB,MAAM,yBAAiB;CACvB,WAAW,yBAAiB;AAC9B,CAAC"}
@@ -1,6 +1,6 @@
1
+ import { withSubComponents } from "../../utilities/withSubComponents.js";
1
2
  import IconCheck from "../../icons/IconCheck.js";
2
3
  import IconSkip from "../../icons/IconSkip.js";
3
- import { withSubComponents } from "../../utilities/withSubComponents.js";
4
4
  import { useStepCardContext } from "../BitkitStepsCard/StepCardContext.js";
5
5
  import { Box } from "@chakra-ui/react/box";
6
6
  import { Children, cloneElement, forwardRef, isValidElement } from "react";
@@ -1,7 +1,7 @@
1
+ import { withSubComponents } from "../../utilities/withSubComponents.js";
1
2
  import IconChevronRight from "../../icons/IconChevronRight.js";
2
3
  import IconFolder from "../../icons/IconFolder.js";
3
4
  import IconWarningYellow from "../../icons/IconWarningYellow.js";
4
- import { withSubComponents } from "../../utilities/withSubComponents.js";
5
5
  import { Box } from "@chakra-ui/react/box";
6
6
  import { useSlotRecipe } from "@chakra-ui/react/styled-system";
7
7
  import { cloneElement, forwardRef } from "react";
@@ -1,6 +1,6 @@
1
1
  export { default as BitkitAccordion, type BitkitAccordionItemBodyProps, type BitkitAccordionItemProps, type BitkitAccordionItemTriggerProps, type BitkitAccordionProps, } from './BitkitAccordion/BitkitAccordion';
2
2
  export { default as BitkitActionBar, type BitkitActionBarProps } from './BitkitActionBar/BitkitActionBar';
3
- export { default as BitkitActionMenu, type BitkitMenuGroupProps, type BitkitMenuItemProps, } from './BitkitActionMenu/BitkitActionMenu';
3
+ export { default as BitkitActionMenu, type BitkitActionMenuGroupProps, type BitkitActionMenuItemProps, type BitkitActionMenuProps, type BitkitActionMenuSeparatorProps, } from './BitkitActionMenu/BitkitActionMenu';
4
4
  export { default as BitkitAlert, type BitkitAlertProps } from './BitkitAlert/BitkitAlert';
5
5
  export { default as BitkitAvatar, type BitkitAvatarProps } from './BitkitAvatar/BitkitAvatar';
6
6
  export { default as BitkitBadge, type BitkitBadgeProps } from './BitkitBadge/BitkitBadge';
package/dist/main.js CHANGED
@@ -1,4 +1,4 @@
1
- import BitkitAccordion from "./components/BitkitAccordion/BitkitAccordion.js";
1
+ import BitkitAccordion_default from "./components/BitkitAccordion/BitkitAccordion.js";
2
2
  import { bitkitIcon } from "./icons/bitkitIcon.js";
3
3
  import IconAbortCircle from "./icons/IconAbortCircle.js";
4
4
  import IconAbortCircleFilled from "./icons/IconAbortCircleFilled.js";
@@ -286,7 +286,7 @@ import IconXTwitter from "./icons/IconXTwitter.js";
286
286
  import BitkitLabelTooltip from "./components/BitkitLabelTooltip/BitkitLabelTooltip.js";
287
287
  import BitkitCloseButton from "./components/BitkitCloseButton/BitkitCloseButton.js";
288
288
  import BitkitActionBar from "./components/BitkitActionBar/BitkitActionBar.js";
289
- import BitkitActionMenu from "./components/BitkitActionMenu/BitkitActionMenu.js";
289
+ import BitkitActionMenu_default from "./components/BitkitActionMenu/BitkitActionMenu.js";
290
290
  import { rem } from "./theme/themeUtils.js";
291
291
  import BitkitColorButton from "./components/BitkitColorButton/BitkitColorButton.js";
292
292
  import BitkitAlert from "./components/BitkitAlert/BitkitAlert.js";
@@ -373,4 +373,4 @@ import BitkitTreeView, { createTreeCollection } from "./components/BitkitTreeVie
373
373
  import useResponsive, { ResponsiveProvider } from "./hooks/useResponsive.js";
374
374
  import bitkitTheme from "./theme/index.js";
375
375
  import Provider from "./providers/BitkitProvider.js";
376
- export { BitkitAccordion, BitkitActionBar, BitkitActionMenu, BitkitAlert, BitkitAvatar, BitkitBadge, BitkitBreadcrumb, BitkitButton, BitkitCalendar, BitkitCheckbox, BitkitCheckboxGroup, BitkitCloseButton, BitkitCodeSnippet, BitkitCollapsible, BitkitColorButton, BitkitCombobox_default as BitkitCombobox, BitkitControlButton, BitkitDataWidget, BitkitDatePicker, BitkitDefinitionTooltip, BitkitDialog_default as BitkitDialog, BitkitDraggableCard, BitkitDrawer, BitkitEmptyState, BitkitExpandableCard, BitkitExpandableRow, BitkitField, BitkitFileInput, BitkitFormDialog_default as BitkitFormDialog, BitkitGroupHeading, BitkitHeading, BitkitIconButton, BitkitInlineLoading, BitkitLabel, BitkitLabelTooltip, BitkitLabeledData, BitkitLightbox, BitkitLink, BitkitLinkButton, BitkitList_default as BitkitList, BitkitMarkdown, BitkitMarkdownCard, BitkitMultiselect_default as BitkitMultiselect, BitkitMultiselectMenu, BitkitNativeSelect, BitkitNoteCard, BitkitNumberInput, BitkitOverflowContent, BitkitOverflowTooltip, BitkitPageFooter_default as BitkitPageFooter, BitkitPagination, BitkitPaginationLoadMore, BitkitPopover, BitkitProgressBar, BitkitPromoBanner, Provider as BitkitProvider, BitkitRadio, BitkitRadioGroup, BitkitRibbon, BitkitSearchInput, BitkitSectionHeading, BitkitSegmentedControl_default as BitkitSegmentedControl, BitkitSelect_default as BitkitSelect, BitkitSelectMenu, BitkitSelectMenuAction, BitkitSelectableTag_default as BitkitSelectableTag, BitkitSettingsCard_default as BitkitSettingsCard, BitkitSidebar_default as BitkitSidebar, BitkitSkeletonGroup, BitkitSortableColumnHeader, BitkitSpinner, BitkitSplitButton_default as BitkitSplitButton, BitkitStat, BitkitStepperDialog_default as BitkitStepperDialog, BitkitSteps_default as BitkitSteps, BitkitStepsCard_default as BitkitStepsCard, BitkitSwitch, BitkitTabs, BitkitTag, BitkitTagsInput, BitkitTextArea, BitkitTextInput, BitkitToggleButton, BitkitTooltip, BitkitTour, BitkitTreeView, IconAbortCircle, IconAbortCircleFilled, IconAddons, IconAgent, IconAnchor, IconAndroid, IconApp, IconAppSettings, IconAppStore, IconAppStoreColor, IconApple, IconArchive, IconArchiveDelete, IconArchiveRestore, IconArrowBackAndDown, IconArrowBackAndUp, IconArrowDown, IconArrowForwardAndDown, IconArrowForwardAndUp, IconArrowLeft, IconArrowNortheast, IconArrowNorthwest, IconArrowRight, IconArrowUp, IconArrowsHorizontal, IconArrowsVertical, IconAutomation, IconAws, IconAwsColor, IconBadge3RdParty, IconBadgeBitrise, IconBadgeUpgrade, IconBadgeVersionOk, IconBazel, IconBell, IconBitbot, IconBitbotError, IconBitbucket, IconBitbucketColor, IconBitbucketNeutral, IconBitbucketWhite, IconBlockCircle, IconBook, IconBoxArrowDown, IconBoxDot, IconBoxLinesOverflow, IconBoxLinesWrap, IconBranch, IconBrowserstackColor, IconBug, IconBuild, IconBuildCache, IconBuildCacheFilled, IconBuildEnvSetup, IconBuildHub, IconBuildHubFilled, IconCalendar, IconChangePlan, IconChat, IconCheck, IconCheckCircle, IconCheckCircleFilled, IconChevronDown, IconChevronLeft, IconChevronRight, IconChevronUp, IconCi, IconCiFilled, IconCircle, IconCircleDashed, IconCircleHalfFilled, IconClaude, IconClaudeColor, IconClock, IconCode, IconCodePush, IconCodeSigning, IconCoffee, IconCommit, IconConfigure, IconConnectedAccounts, IconContainer, IconCopy, IconCordova, IconCpu, IconCreditcard, IconCredits, IconCross, IconCrossCircle, IconCrossCircleFilled, IconCrown, IconCycle, IconDashboard, IconDashboardFilled, IconDeployment, IconDetails, IconDoc, IconDollar, IconDot, IconDotnet, IconDotnetColor, IconDotnetText, IconDotnetTextColor, IconDoubleCircle, IconDownload, IconDragHandle, IconEc2Ami, IconEnterprise, IconErrorCircle, IconErrorCircleFilled, IconExpand, IconExtraBuildCapacity, IconEye, IconEyeSlash, IconFastlane, IconFileDoc, IconFilePdf, IconFilePlist, IconFileYml, IconFileZip, IconFilter, IconFlag, IconFlutter, IconFolder, IconFullscreen, IconFullscreenExit, IconGauge, IconGit, IconGithub, IconGitlab, IconGitlabColor, IconGitlabWhite, IconGlobe, IconGo, IconGoogleColor, IconGooglePlay, IconGooglePlayColor, IconGradle, IconGroup, IconHashtag, IconHeadset, IconHeart, IconHistory, IconHourglass, IconImage, IconInfoCircle, IconInfoCircleFilled, IconInsights, IconInsightsFilled, IconInstall, IconInteraction, IconInvoice, IconIonic, IconJapanese, IconJava, IconJavaColor, IconJavaDuke, IconJavaDukeColor, IconKey, IconKotlin, IconKotlinColor, IconKotlinWhite, IconLaptop, IconLaunchdarkly, IconLegacyApp, IconLightbulb, IconLink, IconLinux, IconLock, IconLockOpen, IconLogin, IconLogout, IconMacos, IconMagicWand, IconMagnifier, IconMail, IconMedal, IconMemory, IconMenuGrid, IconMenuHamburger, IconMessage, IconMessageAlert, IconMessageQuestion, IconMicrophone, IconMinus, IconMinusCircle, IconMinusCircleFilled, IconMobile, IconMobileLandscape, IconMonitorChart, IconMoreHorizontal, IconMoreVertical, IconNews, IconNextjs, IconNodejs, IconOpenInNew, IconOther, IconOutsideContributor, IconOverview, IconPause, IconPencil, IconPeople, IconPercent, IconPerson, IconPersonWithDesk, IconPlay, IconPlus, IconPlusCircle, IconPlusCircleFilled, IconPower, IconProject, IconProjectSettings, IconPull, IconPush, IconPuzzle, IconPython, IconPythonColor, IconQuestionCircle, IconQuestionCircleFilled, IconReact, IconRefresh, IconRegex, IconRelease, IconReleaseFilled, IconRemoteAccess, IconReplace, IconResponsiveness, IconReviewerApproved, IconReviewerAssigned, IconReviewerRejected, IconRuby, IconRubyColor, IconSave, IconSecurityShield, IconSettings, IconSettingsFilled, IconShuffle, IconSiren, IconSkip, IconSkipCircle, IconSkipCircleFilled, IconSlack, IconSlackColor, IconSparkle, IconSparkleFilled, IconSpinnerOnDisabled, IconSpinnerPurple, IconSpinnerPurpleDouble, IconSpinnerWhite, IconStability, IconStack, IconStar, IconStep, IconStop, IconStopwatch, IconTag, IconTasks, IconTeams, IconTeamsColor, IconTemplateCode, IconTerminal, IconTestQuarantine, IconThemeDarkToggle, IconThumbDown, IconThumbUp, IconTools, IconTrash, IconTrigger, IconUbuntu, IconUbuntuColor, IconUnity3D, IconUpload, IconValidateShield, IconVideo, IconWarning, IconWarningYellow, IconWebUi, IconWebhooks, IconWorkflow, IconWorkflowFlow, IconXTwitter, IconXamarin, IconXcode, ResponsiveProvider, bitkitIcon, bitkitTheme as bitriseTheme, createBitkitToast, createTreeCollection, dismissBitkitToast, rem, useBitkitTour, useResponsive, useStepperDialog };
376
+ export { BitkitAccordion_default as BitkitAccordion, BitkitActionBar, BitkitActionMenu_default as BitkitActionMenu, BitkitAlert, BitkitAvatar, BitkitBadge, BitkitBreadcrumb, BitkitButton, BitkitCalendar, BitkitCheckbox, BitkitCheckboxGroup, BitkitCloseButton, BitkitCodeSnippet, BitkitCollapsible, BitkitColorButton, BitkitCombobox_default as BitkitCombobox, BitkitControlButton, BitkitDataWidget, BitkitDatePicker, BitkitDefinitionTooltip, BitkitDialog_default as BitkitDialog, BitkitDraggableCard, BitkitDrawer, BitkitEmptyState, BitkitExpandableCard, BitkitExpandableRow, BitkitField, BitkitFileInput, BitkitFormDialog_default as BitkitFormDialog, BitkitGroupHeading, BitkitHeading, BitkitIconButton, BitkitInlineLoading, BitkitLabel, BitkitLabelTooltip, BitkitLabeledData, BitkitLightbox, BitkitLink, BitkitLinkButton, BitkitList_default as BitkitList, BitkitMarkdown, BitkitMarkdownCard, BitkitMultiselect_default as BitkitMultiselect, BitkitMultiselectMenu, BitkitNativeSelect, BitkitNoteCard, BitkitNumberInput, BitkitOverflowContent, BitkitOverflowTooltip, BitkitPageFooter_default as BitkitPageFooter, BitkitPagination, BitkitPaginationLoadMore, BitkitPopover, BitkitProgressBar, BitkitPromoBanner, Provider as BitkitProvider, BitkitRadio, BitkitRadioGroup, BitkitRibbon, BitkitSearchInput, BitkitSectionHeading, BitkitSegmentedControl_default as BitkitSegmentedControl, BitkitSelect_default as BitkitSelect, BitkitSelectMenu, BitkitSelectMenuAction, BitkitSelectableTag_default as BitkitSelectableTag, BitkitSettingsCard_default as BitkitSettingsCard, BitkitSidebar_default as BitkitSidebar, BitkitSkeletonGroup, BitkitSortableColumnHeader, BitkitSpinner, BitkitSplitButton_default as BitkitSplitButton, BitkitStat, BitkitStepperDialog_default as BitkitStepperDialog, BitkitSteps_default as BitkitSteps, BitkitStepsCard_default as BitkitStepsCard, BitkitSwitch, BitkitTabs, BitkitTag, BitkitTagsInput, BitkitTextArea, BitkitTextInput, BitkitToggleButton, BitkitTooltip, BitkitTour, BitkitTreeView, IconAbortCircle, IconAbortCircleFilled, IconAddons, IconAgent, IconAnchor, IconAndroid, IconApp, IconAppSettings, IconAppStore, IconAppStoreColor, IconApple, IconArchive, IconArchiveDelete, IconArchiveRestore, IconArrowBackAndDown, IconArrowBackAndUp, IconArrowDown, IconArrowForwardAndDown, IconArrowForwardAndUp, IconArrowLeft, IconArrowNortheast, IconArrowNorthwest, IconArrowRight, IconArrowUp, IconArrowsHorizontal, IconArrowsVertical, IconAutomation, IconAws, IconAwsColor, IconBadge3RdParty, IconBadgeBitrise, IconBadgeUpgrade, IconBadgeVersionOk, IconBazel, IconBell, IconBitbot, IconBitbotError, IconBitbucket, IconBitbucketColor, IconBitbucketNeutral, IconBitbucketWhite, IconBlockCircle, IconBook, IconBoxArrowDown, IconBoxDot, IconBoxLinesOverflow, IconBoxLinesWrap, IconBranch, IconBrowserstackColor, IconBug, IconBuild, IconBuildCache, IconBuildCacheFilled, IconBuildEnvSetup, IconBuildHub, IconBuildHubFilled, IconCalendar, IconChangePlan, IconChat, IconCheck, IconCheckCircle, IconCheckCircleFilled, IconChevronDown, IconChevronLeft, IconChevronRight, IconChevronUp, IconCi, IconCiFilled, IconCircle, IconCircleDashed, IconCircleHalfFilled, IconClaude, IconClaudeColor, IconClock, IconCode, IconCodePush, IconCodeSigning, IconCoffee, IconCommit, IconConfigure, IconConnectedAccounts, IconContainer, IconCopy, IconCordova, IconCpu, IconCreditcard, IconCredits, IconCross, IconCrossCircle, IconCrossCircleFilled, IconCrown, IconCycle, IconDashboard, IconDashboardFilled, IconDeployment, IconDetails, IconDoc, IconDollar, IconDot, IconDotnet, IconDotnetColor, IconDotnetText, IconDotnetTextColor, IconDoubleCircle, IconDownload, IconDragHandle, IconEc2Ami, IconEnterprise, IconErrorCircle, IconErrorCircleFilled, IconExpand, IconExtraBuildCapacity, IconEye, IconEyeSlash, IconFastlane, IconFileDoc, IconFilePdf, IconFilePlist, IconFileYml, IconFileZip, IconFilter, IconFlag, IconFlutter, IconFolder, IconFullscreen, IconFullscreenExit, IconGauge, IconGit, IconGithub, IconGitlab, IconGitlabColor, IconGitlabWhite, IconGlobe, IconGo, IconGoogleColor, IconGooglePlay, IconGooglePlayColor, IconGradle, IconGroup, IconHashtag, IconHeadset, IconHeart, IconHistory, IconHourglass, IconImage, IconInfoCircle, IconInfoCircleFilled, IconInsights, IconInsightsFilled, IconInstall, IconInteraction, IconInvoice, IconIonic, IconJapanese, IconJava, IconJavaColor, IconJavaDuke, IconJavaDukeColor, IconKey, IconKotlin, IconKotlinColor, IconKotlinWhite, IconLaptop, IconLaunchdarkly, IconLegacyApp, IconLightbulb, IconLink, IconLinux, IconLock, IconLockOpen, IconLogin, IconLogout, IconMacos, IconMagicWand, IconMagnifier, IconMail, IconMedal, IconMemory, IconMenuGrid, IconMenuHamburger, IconMessage, IconMessageAlert, IconMessageQuestion, IconMicrophone, IconMinus, IconMinusCircle, IconMinusCircleFilled, IconMobile, IconMobileLandscape, IconMonitorChart, IconMoreHorizontal, IconMoreVertical, IconNews, IconNextjs, IconNodejs, IconOpenInNew, IconOther, IconOutsideContributor, IconOverview, IconPause, IconPencil, IconPeople, IconPercent, IconPerson, IconPersonWithDesk, IconPlay, IconPlus, IconPlusCircle, IconPlusCircleFilled, IconPower, IconProject, IconProjectSettings, IconPull, IconPush, IconPuzzle, IconPython, IconPythonColor, IconQuestionCircle, IconQuestionCircleFilled, IconReact, IconRefresh, IconRegex, IconRelease, IconReleaseFilled, IconRemoteAccess, IconReplace, IconResponsiveness, IconReviewerApproved, IconReviewerAssigned, IconReviewerRejected, IconRuby, IconRubyColor, IconSave, IconSecurityShield, IconSettings, IconSettingsFilled, IconShuffle, IconSiren, IconSkip, IconSkipCircle, IconSkipCircleFilled, IconSlack, IconSlackColor, IconSparkle, IconSparkleFilled, IconSpinnerOnDisabled, IconSpinnerPurple, IconSpinnerPurpleDouble, IconSpinnerWhite, IconStability, IconStack, IconStar, IconStep, IconStop, IconStopwatch, IconTag, IconTasks, IconTeams, IconTeamsColor, IconTemplateCode, IconTerminal, IconTestQuarantine, IconThemeDarkToggle, IconThumbDown, IconThumbUp, IconTools, IconTrash, IconTrigger, IconUbuntu, IconUbuntuColor, IconUnity3D, IconUpload, IconValidateShield, IconVideo, IconWarning, IconWarningYellow, IconWebUi, IconWebhooks, IconWorkflow, IconWorkflowFlow, IconXTwitter, IconXamarin, IconXcode, ResponsiveProvider, bitkitIcon, bitkitTheme as bitriseTheme, createBitkitToast, createTreeCollection, dismissBitkitToast, rem, useBitkitTour, useResponsive, useStepperDialog };
@@ -2,17 +2,28 @@ declare const menuSlotRecipe: import('@chakra-ui/react').SlotRecipeDefinition<"c
2
2
  size: {
3
3
  lg: {
4
4
  item: {
5
+ alignItems: "center";
5
6
  paddingY: "12";
6
7
  textStyle: "body/lg/regular";
8
+ '&[data-helper]': {
9
+ alignItems: "flex-start";
10
+ paddingY: "8";
11
+ };
7
12
  };
8
13
  };
9
14
  md: {
10
15
  item: {
11
- _icon: {
12
- marginTop: "2";
13
- };
16
+ alignItems: "center";
17
+ minHeight: "40";
14
18
  paddingY: "8";
15
19
  textStyle: "body/md/regular";
20
+ '&[data-helper]': {
21
+ _icon: {
22
+ marginTop: "2";
23
+ };
24
+ alignItems: "flex-start";
25
+ paddingY: "6";
26
+ };
16
27
  };
17
28
  };
18
29
  };
@@ -15,13 +15,24 @@ var menuSlotRecipe = defineSlotRecipe({
15
15
  slots: [...menuAnatomy.keys(), "itemHelper"],
16
16
  variants: { size: {
17
17
  lg: { item: {
18
+ alignItems: "center",
18
19
  paddingY: "12",
19
- textStyle: "body/lg/regular"
20
+ textStyle: "body/lg/regular",
21
+ "&[data-helper]": {
22
+ alignItems: "flex-start",
23
+ paddingY: "8"
24
+ }
20
25
  } },
21
26
  md: { item: {
22
- _icon: { marginTop: "2" },
27
+ alignItems: "center",
28
+ minHeight: "40",
23
29
  paddingY: "8",
24
- textStyle: "body/md/regular"
30
+ textStyle: "body/md/regular",
31
+ "&[data-helper]": {
32
+ _icon: { marginTop: "2" },
33
+ alignItems: "flex-start",
34
+ paddingY: "6"
35
+ }
25
36
  } }
26
37
  } },
27
38
  base: {
@@ -76,17 +87,18 @@ var menuSlotRecipe = defineSlotRecipe({
76
87
  _highlighted: {
77
88
  background: "button/secondary/bg-hover",
78
89
  _active: itemActive
79
- }
90
+ },
91
+ "& [data-suffix-icon]": { color: "icon/tertiary" }
80
92
  },
81
93
  itemGroupLabel: {
82
94
  textStyle: "heading/h6",
83
95
  color: "text/tertiary",
84
96
  paddingTop: "12",
85
97
  paddingLeft: "16",
86
- paddingRight: "24",
98
+ paddingRight: "16",
87
99
  paddingBottom: "6",
88
100
  display: "flex",
89
- gap: "12",
101
+ gap: "8",
90
102
  flexDirection: "row",
91
103
  alignItems: "center"
92
104
  },
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.recipe.js","names":[],"sources":["../../../lib/theme/slot-recipes/Menu.recipe.ts"],"sourcesContent":["import { menuAnatomy } from '@chakra-ui/react/anatomy';\nimport { defineSlotRecipe, type SystemStyleObject } from '@chakra-ui/react/styled-system';\n\nconst itemActive: SystemStyleObject = {\n background: 'button/secondary/bg-active',\n _icon: {\n color: 'icon/primary',\n },\n};\nconst itemActiveDanger: SystemStyleObject = {\n background: 'button/danger-secondary/bg-active',\n color: 'button/danger-secondary/fg-active',\n _icon: {\n color: 'button/danger-secondary/fg-active',\n },\n};\nconst menuSlotRecipe = defineSlotRecipe({\n className: 'menu',\n slots: [...menuAnatomy.keys(), 'itemHelper'],\n variants: {\n size: {\n lg: {\n item: {\n paddingY: '12',\n textStyle: 'body/lg/regular',\n },\n },\n md: {\n item: {\n _icon: {\n marginTop: '2',\n },\n paddingY: '8',\n textStyle: 'body/md/regular',\n },\n },\n },\n },\n base: {\n content: {\n // Sit above the legacy v1 full-dialog/drawer layer (zIndex.fullDialog = 1200); the menu\n // portals out, so without this it renders behind a v1 FloatingDrawer. Matches the content-slot\n // z-index convention of the other floating recipes (Popover, Tooltip, Combobox/Select).\n zIndex: 'popover',\n borderRadius: '4',\n paddingY: '8',\n border: '1px solid',\n borderColor: 'border/minimal',\n _focusVisible: { outline: 'none' },\n boxShadow: 'elevation/lg',\n background: 'background/primary',\n maxHeight: 'var(--available-height)',\n _open: {\n animationStyle: 'slide-fade-in',\n animationDuration: 'fast',\n },\n _closed: {\n animationStyle: 'slide-fade-out',\n animationDuration: 'faster',\n },\n },\n itemHelper: {\n textStyle: 'body/sm/regular',\n color: 'text/secondary',\n },\n item: {\n _icon: {\n color: 'icon/secondary',\n _active: {\n color: 'icon/primary',\n },\n },\n cursor: 'pointer',\n display: 'flex',\n gap: '12',\n userSelect: 'none',\n flexDirection: 'row',\n paddingLeft: '16',\n paddingRight: '24',\n _disabled: {\n cursor: 'not-allowed',\n },\n '&[data-danger]': {\n color: 'button/danger-secondary/fg',\n _icon: {\n color: 'button/danger-secondary/fg',\n },\n _active: itemActiveDanger,\n _highlighted: {\n background: 'button/danger-secondary/bg-hover',\n color: 'button/danger-secondary/fg-hover',\n _active: itemActiveDanger,\n _icon: {\n color: 'button/danger-secondary/fg-hover',\n },\n },\n },\n _active: itemActive,\n _highlighted: {\n background: 'button/secondary/bg-hover',\n _active: itemActive,\n },\n },\n itemGroupLabel: {\n textStyle: 'heading/h6',\n color: 'text/tertiary',\n paddingTop: '12',\n paddingLeft: '16',\n paddingRight: '24',\n paddingBottom: '6',\n display: 'flex',\n gap: '12',\n flexDirection: 'row',\n alignItems: 'center',\n },\n separator: {\n color: 'border/minimal',\n marginY: '8',\n },\n },\n defaultVariants: {\n size: 'lg',\n },\n});\n\nexport default menuSlotRecipe;\n"],"mappings":";;;AAGA,IAAM,aAAgC;CACpC,YAAY;CACZ,OAAO,EACL,OAAO,eACT;AACF;AACA,IAAM,mBAAsC;CAC1C,YAAY;CACZ,OAAO;CACP,OAAO,EACL,OAAO,oCACT;AACF;AACA,IAAM,iBAAiB,iBAAiB;CACtC,WAAW;CACX,OAAO,CAAC,GAAG,YAAY,KAAK,GAAG,YAAY;CAC3C,UAAU,EACR,MAAM;EACJ,IAAI,EACF,MAAM;GACJ,UAAU;GACV,WAAW;EACb,EACF;EACA,IAAI,EACF,MAAM;GACJ,OAAO,EACL,WAAW,IACb;GACA,UAAU;GACV,WAAW;EACb,EACF;CACF,EACF;CACA,MAAM;EACJ,SAAS;GAIP,QAAQ;GACR,cAAc;GACd,UAAU;GACV,QAAQ;GACR,aAAa;GACb,eAAe,EAAE,SAAS,OAAO;GACjC,WAAW;GACX,YAAY;GACZ,WAAW;GACX,OAAO;IACL,gBAAgB;IAChB,mBAAmB;GACrB;GACA,SAAS;IACP,gBAAgB;IAChB,mBAAmB;GACrB;EACF;EACA,YAAY;GACV,WAAW;GACX,OAAO;EACT;EACA,MAAM;GACJ,OAAO;IACL,OAAO;IACP,SAAS,EACP,OAAO,eACT;GACF;GACA,QAAQ;GACR,SAAS;GACT,KAAK;GACL,YAAY;GACZ,eAAe;GACf,aAAa;GACb,cAAc;GACd,WAAW,EACT,QAAQ,cACV;GACA,kBAAkB;IAChB,OAAO;IACP,OAAO,EACL,OAAO,6BACT;IACA,SAAS;IACT,cAAc;KACZ,YAAY;KACZ,OAAO;KACP,SAAS;KACT,OAAO,EACL,OAAO,mCACT;IACF;GACF;GACA,SAAS;GACT,cAAc;IACZ,YAAY;IACZ,SAAS;GACX;EACF;EACA,gBAAgB;GACd,WAAW;GACX,OAAO;GACP,YAAY;GACZ,aAAa;GACb,cAAc;GACd,eAAe;GACf,SAAS;GACT,KAAK;GACL,eAAe;GACf,YAAY;EACd;EACA,WAAW;GACT,OAAO;GACP,SAAS;EACX;CACF;CACA,iBAAiB,EACf,MAAM,KACR;AACF,CAAC"}
1
+ {"version":3,"file":"Menu.recipe.js","names":[],"sources":["../../../lib/theme/slot-recipes/Menu.recipe.ts"],"sourcesContent":["import { menuAnatomy } from '@chakra-ui/react/anatomy';\nimport { defineSlotRecipe, type SystemStyleObject } from '@chakra-ui/react/styled-system';\n\nconst itemActive: SystemStyleObject = {\n background: 'button/secondary/bg-active',\n _icon: {\n color: 'icon/primary',\n },\n};\nconst itemActiveDanger: SystemStyleObject = {\n background: 'button/danger-secondary/bg-active',\n color: 'button/danger-secondary/fg-active',\n _icon: {\n color: 'button/danger-secondary/fg-active',\n },\n};\nconst menuSlotRecipe = defineSlotRecipe({\n className: 'menu',\n slots: [...menuAnatomy.keys(), 'itemHelper'],\n variants: {\n size: {\n lg: {\n item: {\n alignItems: 'center',\n paddingY: '12',\n textStyle: 'body/lg/regular',\n // With a helper line the item aligns to the top of the label and gets tighter padding.\n '&[data-helper]': {\n alignItems: 'flex-start',\n paddingY: '8',\n },\n },\n },\n md: {\n item: {\n alignItems: 'center',\n // The label line (20px) alone is shorter than the designed 40px row.\n minHeight: '40',\n paddingY: '8',\n textStyle: 'body/md/regular',\n '&[data-helper]': {\n _icon: {\n // Optically center the 16px icon against the 20px label line.\n marginTop: '2',\n },\n alignItems: 'flex-start',\n paddingY: '6',\n },\n },\n },\n },\n },\n base: {\n content: {\n // Sit above the legacy v1 full-dialog/drawer layer (zIndex.fullDialog = 1200); the menu\n // portals out, so without this it renders behind a v1 FloatingDrawer. Matches the content-slot\n // z-index convention of the other floating recipes (Popover, Tooltip, Combobox/Select).\n zIndex: 'popover',\n borderRadius: '4',\n paddingY: '8',\n border: '1px solid',\n borderColor: 'border/minimal',\n _focusVisible: { outline: 'none' },\n boxShadow: 'elevation/lg',\n background: 'background/primary',\n maxHeight: 'var(--available-height)',\n _open: {\n animationStyle: 'slide-fade-in',\n animationDuration: 'fast',\n },\n _closed: {\n animationStyle: 'slide-fade-out',\n animationDuration: 'faster',\n },\n },\n itemHelper: {\n textStyle: 'body/sm/regular',\n color: 'text/secondary',\n },\n item: {\n _icon: {\n color: 'icon/secondary',\n _active: {\n color: 'icon/primary',\n },\n },\n cursor: 'pointer',\n display: 'flex',\n gap: '12',\n userSelect: 'none',\n flexDirection: 'row',\n paddingLeft: '16',\n paddingRight: '24',\n _disabled: {\n cursor: 'not-allowed',\n },\n '&[data-danger]': {\n color: 'button/danger-secondary/fg',\n _icon: {\n color: 'button/danger-secondary/fg',\n },\n _active: itemActiveDanger,\n _highlighted: {\n background: 'button/danger-secondary/bg-hover',\n color: 'button/danger-secondary/fg-hover',\n _active: itemActiveDanger,\n _icon: {\n color: 'button/danger-secondary/fg-hover',\n },\n },\n },\n _active: itemActive,\n _highlighted: {\n background: 'button/secondary/bg-hover',\n _active: itemActive,\n },\n // The \"leaves this page\" arrow is quieter than the leading icon, and stays that way in every\n // state — including the destructive one, which overrides `_icon` above.\n '& [data-suffix-icon]': {\n color: 'icon/tertiary',\n },\n },\n itemGroupLabel: {\n textStyle: 'heading/h6',\n color: 'text/tertiary',\n paddingTop: '12',\n paddingLeft: '16',\n paddingRight: '16',\n paddingBottom: '6',\n display: 'flex',\n gap: '8',\n flexDirection: 'row',\n alignItems: 'center',\n },\n separator: {\n color: 'border/minimal',\n marginY: '8',\n },\n },\n defaultVariants: {\n size: 'lg',\n },\n});\n\nexport default menuSlotRecipe;\n"],"mappings":";;;AAGA,IAAM,aAAgC;CACpC,YAAY;CACZ,OAAO,EACL,OAAO,eACT;AACF;AACA,IAAM,mBAAsC;CAC1C,YAAY;CACZ,OAAO;CACP,OAAO,EACL,OAAO,oCACT;AACF;AACA,IAAM,iBAAiB,iBAAiB;CACtC,WAAW;CACX,OAAO,CAAC,GAAG,YAAY,KAAK,GAAG,YAAY;CAC3C,UAAU,EACR,MAAM;EACJ,IAAI,EACF,MAAM;GACJ,YAAY;GACZ,UAAU;GACV,WAAW;GAEX,kBAAkB;IAChB,YAAY;IACZ,UAAU;GACZ;EACF,EACF;EACA,IAAI,EACF,MAAM;GACJ,YAAY;GAEZ,WAAW;GACX,UAAU;GACV,WAAW;GACX,kBAAkB;IAChB,OAAO,EAEL,WAAW,IACb;IACA,YAAY;IACZ,UAAU;GACZ;EACF,EACF;CACF,EACF;CACA,MAAM;EACJ,SAAS;GAIP,QAAQ;GACR,cAAc;GACd,UAAU;GACV,QAAQ;GACR,aAAa;GACb,eAAe,EAAE,SAAS,OAAO;GACjC,WAAW;GACX,YAAY;GACZ,WAAW;GACX,OAAO;IACL,gBAAgB;IAChB,mBAAmB;GACrB;GACA,SAAS;IACP,gBAAgB;IAChB,mBAAmB;GACrB;EACF;EACA,YAAY;GACV,WAAW;GACX,OAAO;EACT;EACA,MAAM;GACJ,OAAO;IACL,OAAO;IACP,SAAS,EACP,OAAO,eACT;GACF;GACA,QAAQ;GACR,SAAS;GACT,KAAK;GACL,YAAY;GACZ,eAAe;GACf,aAAa;GACb,cAAc;GACd,WAAW,EACT,QAAQ,cACV;GACA,kBAAkB;IAChB,OAAO;IACP,OAAO,EACL,OAAO,6BACT;IACA,SAAS;IACT,cAAc;KACZ,YAAY;KACZ,OAAO;KACP,SAAS;KACT,OAAO,EACL,OAAO,mCACT;IACF;GACF;GACA,SAAS;GACT,cAAc;IACZ,YAAY;IACZ,SAAS;GACX;GAGA,wBAAwB,EACtB,OAAO,gBACT;EACF;EACA,gBAAgB;GACd,WAAW;GACX,OAAO;GACP,YAAY;GACZ,aAAa;GACb,cAAc;GACd,eAAe;GACf,SAAS;GACT,KAAK;GACL,eAAe;GACf,YAAY;EACd;EACA,WAAW;GACT,OAAO;GACP,SAAS;EACX;CACF;CACA,iBAAiB,EACf,MAAM,KACR;AACF,CAAC"}
@@ -1111,17 +1111,28 @@ declare const slotRecipes: {
1111
1111
  size: {
1112
1112
  lg: {
1113
1113
  item: {
1114
+ alignItems: "center";
1114
1115
  paddingY: "12";
1115
1116
  textStyle: "body/lg/regular";
1117
+ '&[data-helper]': {
1118
+ alignItems: "flex-start";
1119
+ paddingY: "8";
1120
+ };
1116
1121
  };
1117
1122
  };
1118
1123
  md: {
1119
1124
  item: {
1120
- _icon: {
1121
- marginTop: "2";
1122
- };
1125
+ alignItems: "center";
1126
+ minHeight: "40";
1123
1127
  paddingY: "8";
1124
1128
  textStyle: "body/md/regular";
1129
+ '&[data-helper]': {
1130
+ _icon: {
1131
+ marginTop: "2";
1132
+ };
1133
+ alignItems: "flex-start";
1134
+ paddingY: "6";
1135
+ };
1125
1136
  };
1126
1137
  };
1127
1138
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bitrise/bitkit-v2",
3
3
  "private": false,
4
- "version": "0.3.371",
4
+ "version": "0.3.372",
5
5
  "description": "Bitrise Design System Components built with Chakra UI V3",
6
6
  "keywords": [
7
7
  "react",