@mindlogic-ai/logician-ui 3.0.0-alpha.18 → 3.0.0-alpha.19
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.
- package/README.md +19 -0
- package/dist/components/Menu/Menu.d.ts +24 -0
- package/dist/components/Menu/Menu.d.ts.map +1 -0
- package/dist/components/Menu/Menu.js +30 -0
- package/dist/components/Menu/Menu.js.map +1 -0
- package/dist/components/Menu/Menu.mjs +28 -0
- package/dist/components/Menu/Menu.mjs.map +1 -0
- package/dist/components/Menu/Menu.types.d.ts +11 -0
- package/dist/components/Menu/Menu.types.d.ts.map +1 -0
- package/dist/components/Menu/Menu.types.js +13 -0
- package/dist/components/Menu/Menu.types.js.map +1 -0
- package/dist/components/Menu/Menu.types.mjs +10 -0
- package/dist/components/Menu/Menu.types.mjs.map +1 -0
- package/dist/components/Menu/MenuItem.js +1 -1
- package/dist/components/Menu/MenuItem.js.map +1 -1
- package/dist/components/Menu/MenuItem.mjs +1 -1
- package/dist/components/Menu/MenuItem.mjs.map +1 -1
- package/dist/components/Menu/MenuList.d.ts +7 -4
- package/dist/components/Menu/MenuList.d.ts.map +1 -1
- package/dist/components/Menu/MenuList.js +9 -3
- package/dist/components/Menu/MenuList.js.map +1 -1
- package/dist/components/Menu/MenuList.mjs +10 -4
- package/dist/components/Menu/MenuList.mjs.map +1 -1
- package/dist/components/Menu/index.d.ts +2 -3
- package/dist/components/Menu/index.d.ts.map +1 -1
- package/dist/index.js +11 -15
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/package.json +1 -1
- package/src/components/Menu/Menu.stories.tsx +105 -219
- package/src/components/Menu/Menu.tsx +29 -0
- package/src/components/Menu/Menu.types.ts +18 -0
- package/src/components/Menu/MenuItem.tsx +2 -2
- package/src/components/Menu/MenuList.tsx +22 -14
- package/src/components/Menu/index.ts +2 -3
- package/dist/components/Menu/MenuButton.d.ts +0 -3
- package/dist/components/Menu/MenuButton.d.ts.map +0 -1
- package/dist/components/Menu/MenuButton.js +0 -12
- package/dist/components/Menu/MenuButton.js.map +0 -1
- package/dist/components/Menu/MenuButton.mjs +0 -10
- package/dist/components/Menu/MenuButton.mjs.map +0 -1
- package/dist/components/Menu/MenuButton.types.d.ts +0 -20
- package/dist/components/Menu/MenuButton.types.d.ts.map +0 -1
- package/src/components/Menu/MenuButton.tsx +0 -16
- package/src/components/Menu/MenuButton.types.ts +0 -30
package/README.md
CHANGED
|
@@ -228,6 +228,25 @@ Available aliases:
|
|
|
228
228
|
- `index.tsx` - Exports
|
|
229
229
|
3. Add export to main `index.ts`
|
|
230
230
|
|
|
231
|
+
## Technical Notes & TODOs
|
|
232
|
+
|
|
233
|
+
### `createScaledContext()` factory
|
|
234
|
+
|
|
235
|
+
`Popover`, `Menu`, and similar floating components each define a structurally identical context (`{ baseFontSize }`) to pass a font size down to their content wrapper for use with `ScaledContext`. This is currently duplicated across `Popover.types.ts` and `Menu.types.ts`.
|
|
236
|
+
|
|
237
|
+
If a third component (e.g. Tooltip, Dialog) adopts this pattern, extract a shared factory:
|
|
238
|
+
|
|
239
|
+
```ts
|
|
240
|
+
// utils/createScaledContext.ts
|
|
241
|
+
export function createScaledContext(defaultFontSize: string | number = '14px') {
|
|
242
|
+
const Context = React.createContext({ baseFontSize: defaultFontSize });
|
|
243
|
+
const useContext = () => React.useContext(Context);
|
|
244
|
+
return { Context, useContext };
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
This is intentionally deferred — two instances don't justify the abstraction yet.
|
|
249
|
+
|
|
231
250
|
## Contributing
|
|
232
251
|
|
|
233
252
|
1. Fork the repository
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Menu as ChakraMenu } from '@chakra-ui/react';
|
|
2
|
+
import { MenuProps } from './Menu.types';
|
|
3
|
+
export declare const Menu: {
|
|
4
|
+
({ baseFontSize, children, ...props }: MenuProps): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
displayName: string;
|
|
6
|
+
} & {
|
|
7
|
+
Trigger: import("react").ForwardRefExoticComponent<ChakraMenu.TriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
8
|
+
TriggerItem: import("react").ForwardRefExoticComponent<ChakraMenu.TriggerItemProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
9
|
+
ContextTrigger: import("react").ForwardRefExoticComponent<ChakraMenu.ContextTriggerProps & import("react").RefAttributes<HTMLElement>>;
|
|
10
|
+
List: import("react").ForwardRefExoticComponent<ChakraMenu.ContentProps & {
|
|
11
|
+
portalled?: boolean;
|
|
12
|
+
} & import("react").RefAttributes<HTMLDivElement>>;
|
|
13
|
+
Item: ({ variant, value, children, icon, rightIcon, ...rest }: import("./MenuItem.types").MenuItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
ItemGroup: import("react").ForwardRefExoticComponent<ChakraMenu.ItemGroupProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
15
|
+
ItemGroupLabel: import("react").ForwardRefExoticComponent<ChakraMenu.ItemGroupLabelProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
16
|
+
ItemCommand: import("react").ForwardRefExoticComponent<ChakraMenu.CommandProps & import("react").RefAttributes<HTMLElement>>;
|
|
17
|
+
CheckboxItem: import("react").ForwardRefExoticComponent<ChakraMenu.CheckboxItemProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
18
|
+
RadioItem: import("react").ForwardRefExoticComponent<ChakraMenu.RadioItemProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
19
|
+
RadioItemGroup: import("react").ForwardRefExoticComponent<ChakraMenu.RadioItemGroupProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
20
|
+
Separator: import("react").ForwardRefExoticComponent<ChakraMenu.SeparatorProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
21
|
+
Arrow: import("react").ForwardRefExoticComponent<ChakraMenu.ArrowProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
22
|
+
ArrowTip: import("react").ForwardRefExoticComponent<ChakraMenu.ArrowTipProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=Menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/Menu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGtD,OAAO,EAAe,SAAS,EAAE,MAAM,cAAc,CAAC;AAUtD,eAAO,MAAM,IAAI;2CAPgD,SAAS;;;;;;;;;;;;;;;;;;;CAsBxE,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
+
var react = require('@chakra-ui/react');
|
|
6
|
+
var MenuItem = require('./MenuItem.js');
|
|
7
|
+
var Menu_types = require('./Menu.types.js');
|
|
8
|
+
var MenuList = require('./MenuList.js');
|
|
9
|
+
|
|
10
|
+
const MenuBase = ({ baseFontSize = '14px', children, ...props }) => (jsxRuntime.jsx(Menu_types.MenuContext.Provider, { value: { baseFontSize }, children: jsxRuntime.jsx(react.Menu.Root, { ...props, children: children }) }));
|
|
11
|
+
MenuBase.displayName = 'Menu';
|
|
12
|
+
const Menu = Object.assign(MenuBase, {
|
|
13
|
+
Trigger: react.Menu.Trigger,
|
|
14
|
+
TriggerItem: react.Menu.TriggerItem,
|
|
15
|
+
ContextTrigger: react.Menu.ContextTrigger,
|
|
16
|
+
List: MenuList.MenuList,
|
|
17
|
+
Item: MenuItem.MenuItem,
|
|
18
|
+
ItemGroup: react.Menu.ItemGroup,
|
|
19
|
+
ItemGroupLabel: react.Menu.ItemGroupLabel,
|
|
20
|
+
ItemCommand: react.Menu.ItemCommand,
|
|
21
|
+
CheckboxItem: react.Menu.CheckboxItem,
|
|
22
|
+
RadioItem: react.Menu.RadioItem,
|
|
23
|
+
RadioItemGroup: react.Menu.RadioItemGroup,
|
|
24
|
+
Separator: react.Menu.Separator,
|
|
25
|
+
Arrow: react.Menu.Arrow,
|
|
26
|
+
ArrowTip: react.Menu.ArrowTip,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
exports.Menu = Menu;
|
|
30
|
+
//# sourceMappingURL=Menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Menu.js","sources":["../../../src/components/Menu/Menu.tsx"],"sourcesContent":[null],"names":["_jsx","MenuContext","ChakraMenu","MenuList","MenuItem"],"mappings":";;;;;;;;;AAMA,MAAM,QAAQ,GAAG,CAAC,EAAE,YAAY,GAAG,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAa,MACxEA,cAAA,CAACC,sBAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,YAAY,EAAE,YAC3CD,cAAA,CAACE,UAAU,CAAC,IAAI,OAAK,KAAK,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAmB,EAAA,CACnC,CACxB;AACD,QAAQ,CAAC,WAAW,GAAG,MAAM;MAEhB,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;IAC1C,OAAO,EAAEA,UAAU,CAAC,OAAO;IAC3B,WAAW,EAAEA,UAAU,CAAC,WAAW;IACnC,cAAc,EAAEA,UAAU,CAAC,cAAc;AACzC,IAAA,IAAI,EAAEC,iBAAQ;AACd,IAAA,IAAI,EAAEC,iBAAQ;IACd,SAAS,EAAEF,UAAU,CAAC,SAAS;IAC/B,cAAc,EAAEA,UAAU,CAAC,cAAc;IACzC,WAAW,EAAEA,UAAU,CAAC,WAAW;IACnC,YAAY,EAAEA,UAAU,CAAC,YAAY;IACrC,SAAS,EAAEA,UAAU,CAAC,SAAS;IAC/B,cAAc,EAAEA,UAAU,CAAC,cAAc;IACzC,SAAS,EAAEA,UAAU,CAAC,SAAS;IAC/B,KAAK,EAAEA,UAAU,CAAC,KAAK;IACvB,QAAQ,EAAEA,UAAU,CAAC,QAAQ;AAC9B,CAAA;;;;"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
import { Menu as Menu$1 } from '@chakra-ui/react';
|
|
4
|
+
import { MenuItem } from './MenuItem.mjs';
|
|
5
|
+
import { MenuContext } from './Menu.types.mjs';
|
|
6
|
+
import { MenuList } from './MenuList.mjs';
|
|
7
|
+
|
|
8
|
+
const MenuBase = ({ baseFontSize = '14px', children, ...props }) => (jsx(MenuContext.Provider, { value: { baseFontSize }, children: jsx(Menu$1.Root, { ...props, children: children }) }));
|
|
9
|
+
MenuBase.displayName = 'Menu';
|
|
10
|
+
const Menu = Object.assign(MenuBase, {
|
|
11
|
+
Trigger: Menu$1.Trigger,
|
|
12
|
+
TriggerItem: Menu$1.TriggerItem,
|
|
13
|
+
ContextTrigger: Menu$1.ContextTrigger,
|
|
14
|
+
List: MenuList,
|
|
15
|
+
Item: MenuItem,
|
|
16
|
+
ItemGroup: Menu$1.ItemGroup,
|
|
17
|
+
ItemGroupLabel: Menu$1.ItemGroupLabel,
|
|
18
|
+
ItemCommand: Menu$1.ItemCommand,
|
|
19
|
+
CheckboxItem: Menu$1.CheckboxItem,
|
|
20
|
+
RadioItem: Menu$1.RadioItem,
|
|
21
|
+
RadioItemGroup: Menu$1.RadioItemGroup,
|
|
22
|
+
Separator: Menu$1.Separator,
|
|
23
|
+
Arrow: Menu$1.Arrow,
|
|
24
|
+
ArrowTip: Menu$1.ArrowTip,
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
export { Menu };
|
|
28
|
+
//# sourceMappingURL=Menu.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Menu.mjs","sources":["../../../src/components/Menu/Menu.tsx"],"sourcesContent":[null],"names":["_jsx","ChakraMenu"],"mappings":";;;;;;;AAMA,MAAM,QAAQ,GAAG,CAAC,EAAE,YAAY,GAAG,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAa,MACxEA,GAAA,CAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,YAAY,EAAE,YAC3CA,GAAA,CAACC,MAAU,CAAC,IAAI,OAAK,KAAK,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAmB,EAAA,CACnC,CACxB;AACD,QAAQ,CAAC,WAAW,GAAG,MAAM;MAEhB,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;IAC1C,OAAO,EAAEA,MAAU,CAAC,OAAO;IAC3B,WAAW,EAAEA,MAAU,CAAC,WAAW;IACnC,cAAc,EAAEA,MAAU,CAAC,cAAc;AACzC,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,IAAI,EAAE,QAAQ;IACd,SAAS,EAAEA,MAAU,CAAC,SAAS;IAC/B,cAAc,EAAEA,MAAU,CAAC,cAAc;IACzC,WAAW,EAAEA,MAAU,CAAC,WAAW;IACnC,YAAY,EAAEA,MAAU,CAAC,YAAY;IACrC,SAAS,EAAEA,MAAU,CAAC,SAAS;IAC/B,cAAc,EAAEA,MAAU,CAAC,cAAc;IACzC,SAAS,EAAEA,MAAU,CAAC,SAAS;IAC/B,KAAK,EAAEA,MAAU,CAAC,KAAK;IACvB,QAAQ,EAAEA,MAAU,CAAC,QAAQ;AAC9B,CAAA;;;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Menu as ChakraMenu } from '@chakra-ui/react';
|
|
3
|
+
export interface MenuContextValue {
|
|
4
|
+
baseFontSize: string | number;
|
|
5
|
+
}
|
|
6
|
+
export declare const MenuContext: React.Context<MenuContextValue>;
|
|
7
|
+
export declare const useMenuContext: () => MenuContextValue;
|
|
8
|
+
export type MenuProps = React.ComponentPropsWithoutRef<typeof ChakraMenu.Root> & {
|
|
9
|
+
baseFontSize?: string | number;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=Menu.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Menu.types.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/Menu.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC;CAC/B;AAED,eAAO,MAAM,WAAW,iCAEtB,CAAC;AAEH,eAAO,MAAM,cAAc,wBAAsC,CAAC;AAElE,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,wBAAwB,CACpD,OAAO,UAAU,CAAC,IAAI,CACvB,GAAG;IACF,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var React = require('react');
|
|
5
|
+
|
|
6
|
+
const MenuContext = React.createContext({
|
|
7
|
+
baseFontSize: '14px',
|
|
8
|
+
});
|
|
9
|
+
const useMenuContext = () => React.useContext(MenuContext);
|
|
10
|
+
|
|
11
|
+
exports.MenuContext = MenuContext;
|
|
12
|
+
exports.useMenuContext = useMenuContext;
|
|
13
|
+
//# sourceMappingURL=Menu.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Menu.types.js","sources":["../../../src/components/Menu/Menu.types.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAOO,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAmB;AAC/D,IAAA,YAAY,EAAE,MAAM;AACrB,CAAA;AAEM,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,WAAW;;;;;"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import React__default from 'react';
|
|
3
|
+
|
|
4
|
+
const MenuContext = React__default.createContext({
|
|
5
|
+
baseFontSize: '14px',
|
|
6
|
+
});
|
|
7
|
+
const useMenuContext = () => React__default.useContext(MenuContext);
|
|
8
|
+
|
|
9
|
+
export { MenuContext, useMenuContext };
|
|
10
|
+
//# sourceMappingURL=Menu.types.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Menu.types.mjs","sources":["../../../src/components/Menu/Menu.types.ts"],"sourcesContent":[null],"names":["React"],"mappings":";;;AAOO,MAAM,WAAW,GAAGA,cAAK,CAAC,aAAa,CAAmB;AAC/D,IAAA,YAAY,EAAE,MAAM;AACrB,CAAA;AAEM,MAAM,cAAc,GAAG,MAAMA,cAAK,CAAC,UAAU,CAAC,WAAW;;;;"}
|
|
@@ -11,7 +11,7 @@ const MenuItem = ({ variant = MenuItem_types.ItemVariant.Default, value, childre
|
|
|
11
11
|
return (jsxRuntime.jsxs(react.Menu.Item, { value: value, color: isDangerVariant ? 'danger.main' : 'gray.1000', py: 2, minW: "fit-content", fontWeight: "semibold", gap: 3, cursor: "pointer", _hover: {
|
|
12
12
|
color: isDangerVariant ? 'danger.main' : 'gray.1500',
|
|
13
13
|
backgroundColor: isDangerVariant ? 'danger.lightest' : 'gray.50',
|
|
14
|
-
}, ...focusRing.focusRing, ...rest, children: [icon
|
|
14
|
+
}, ...focusRing.focusRing, ...rest, children: [icon, children, rightIcon && jsxRuntime.jsx(react.Spacer, {}), rightIcon] }));
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
exports.MenuItem = MenuItem;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuItem.js","sources":["../../../src/components/Menu/MenuItem.tsx"],"sourcesContent":[null],"names":["ItemVariant","_jsxs","Menu","focusRing","_jsx","Spacer"],"mappings":";;;;;;;;AAMO,MAAM,QAAQ,GAAG,CAAC,EACvB,OAAO,GAAGA,0BAAW,CAAC,OAAO,EAC7B,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,GAAG,IAAI,EACO,KAAI;AAClB,IAAA,MAAM,eAAe,GAAG,OAAO,KAAKA,0BAAW,CAAC,MAAM;AAEtD,IAAA,QACEC,eAAA,CAACC,UAAI,CAAC,IAAI,EAAA,EACR,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,eAAe,GAAG,aAAa,GAAG,WAAW,EACpD,EAAE,EAAE,CAAC,EACL,IAAI,EAAC,aAAa,EAClB,UAAU,EAAC,UAAU,EACrB,GAAG,EAAE,CAAC,EACN,MAAM,EAAC,SAAS,EAChB,MAAM,EAAE;YACN,KAAK,EAAE,eAAe,GAAG,aAAa,GAAG,WAAW;YACpD,eAAe,EAAE,eAAe,GAAG,iBAAiB,GAAG,SAAS;
|
|
1
|
+
{"version":3,"file":"MenuItem.js","sources":["../../../src/components/Menu/MenuItem.tsx"],"sourcesContent":[null],"names":["ItemVariant","_jsxs","Menu","focusRing","_jsx","Spacer"],"mappings":";;;;;;;;AAMO,MAAM,QAAQ,GAAG,CAAC,EACvB,OAAO,GAAGA,0BAAW,CAAC,OAAO,EAC7B,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,GAAG,IAAI,EACO,KAAI;AAClB,IAAA,MAAM,eAAe,GAAG,OAAO,KAAKA,0BAAW,CAAC,MAAM;AAEtD,IAAA,QACEC,eAAA,CAACC,UAAI,CAAC,IAAI,EAAA,EACR,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,eAAe,GAAG,aAAa,GAAG,WAAW,EACpD,EAAE,EAAE,CAAC,EACL,IAAI,EAAC,aAAa,EAClB,UAAU,EAAC,UAAU,EACrB,GAAG,EAAE,CAAC,EACN,MAAM,EAAC,SAAS,EAChB,MAAM,EAAE;YACN,KAAK,EAAE,eAAe,GAAG,aAAa,GAAG,WAAW;YACpD,eAAe,EAAE,eAAe,GAAG,iBAAiB,GAAG,SAAS;AACjE,SAAA,EAAA,GACGC,mBAAS,EAAA,GACT,IAAI,EAAA,QAAA,EAAA,CAEP,IAAI,EACJ,QAAQ,EACR,SAAS,IAAIC,eAACC,YAAM,EAAA,EAAA,CAAG,EACvB,SAAS,CAAA,EAAA,CACA;AAEhB;;;;"}
|
|
@@ -9,7 +9,7 @@ const MenuItem = ({ variant = ItemVariant.Default, value, children, icon, rightI
|
|
|
9
9
|
return (jsxs(Menu.Item, { value: value, color: isDangerVariant ? 'danger.main' : 'gray.1000', py: 2, minW: "fit-content", fontWeight: "semibold", gap: 3, cursor: "pointer", _hover: {
|
|
10
10
|
color: isDangerVariant ? 'danger.main' : 'gray.1500',
|
|
11
11
|
backgroundColor: isDangerVariant ? 'danger.lightest' : 'gray.50',
|
|
12
|
-
}, ...focusRing, ...rest, children: [icon
|
|
12
|
+
}, ...focusRing, ...rest, children: [icon, children, rightIcon && jsx(Spacer, {}), rightIcon] }));
|
|
13
13
|
};
|
|
14
14
|
|
|
15
15
|
export { MenuItem };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuItem.mjs","sources":["../../../src/components/Menu/MenuItem.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":";;;;;;AAMO,MAAM,QAAQ,GAAG,CAAC,EACvB,OAAO,GAAG,WAAW,CAAC,OAAO,EAC7B,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,GAAG,IAAI,EACO,KAAI;AAClB,IAAA,MAAM,eAAe,GAAG,OAAO,KAAK,WAAW,CAAC,MAAM;AAEtD,IAAA,QACEA,IAAA,CAAC,IAAI,CAAC,IAAI,EAAA,EACR,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,eAAe,GAAG,aAAa,GAAG,WAAW,EACpD,EAAE,EAAE,CAAC,EACL,IAAI,EAAC,aAAa,EAClB,UAAU,EAAC,UAAU,EACrB,GAAG,EAAE,CAAC,EACN,MAAM,EAAC,SAAS,EAChB,MAAM,EAAE;YACN,KAAK,EAAE,eAAe,GAAG,aAAa,GAAG,WAAW;YACpD,eAAe,EAAE,eAAe,GAAG,iBAAiB,GAAG,SAAS;
|
|
1
|
+
{"version":3,"file":"MenuItem.mjs","sources":["../../../src/components/Menu/MenuItem.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":";;;;;;AAMO,MAAM,QAAQ,GAAG,CAAC,EACvB,OAAO,GAAG,WAAW,CAAC,OAAO,EAC7B,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,GAAG,IAAI,EACO,KAAI;AAClB,IAAA,MAAM,eAAe,GAAG,OAAO,KAAK,WAAW,CAAC,MAAM;AAEtD,IAAA,QACEA,IAAA,CAAC,IAAI,CAAC,IAAI,EAAA,EACR,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,eAAe,GAAG,aAAa,GAAG,WAAW,EACpD,EAAE,EAAE,CAAC,EACL,IAAI,EAAC,aAAa,EAClB,UAAU,EAAC,UAAU,EACrB,GAAG,EAAE,CAAC,EACN,MAAM,EAAC,SAAS,EAChB,MAAM,EAAE;YACN,KAAK,EAAE,eAAe,GAAG,aAAa,GAAG,WAAW;YACpD,eAAe,EAAE,eAAe,GAAG,iBAAiB,GAAG,SAAS;AACjE,SAAA,EAAA,GACG,SAAS,EAAA,GACT,IAAI,EAAA,QAAA,EAAA,CAEP,IAAI,EACJ,QAAQ,EACR,SAAS,IAAIC,IAAC,MAAM,EAAA,EAAA,CAAG,EACvB,SAAS,CAAA,EAAA,CACA;AAEhB;;;;"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import { MenuContentProps as ChakraMenuContentProps } from '@chakra-ui/react';
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { Menu, MenuContentProps as ChakraMenuContentProps } from '@chakra-ui/react';
|
|
2
|
+
export type MenuListProps = ChakraMenuContentProps & {
|
|
3
|
+
portalled?: boolean;
|
|
4
|
+
};
|
|
5
|
+
export declare const MenuList: import("react").ForwardRefExoticComponent<Menu.ContentProps & {
|
|
6
|
+
portalled?: boolean;
|
|
7
|
+
} & import("react").RefAttributes<HTMLDivElement>>;
|
|
5
8
|
//# sourceMappingURL=MenuList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuList.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/MenuList.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MenuList.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/MenuList.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,gBAAgB,IAAI,sBAAsB,EAAU,MAAM,kBAAkB,CAAC;AAK5F,MAAM,MAAM,aAAa,GAAG,sBAAsB,GAAG;IACnD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,QAAQ;gBAHP,OAAO;kDAyBpB,CAAC"}
|
|
@@ -2,11 +2,17 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
+
var React = require('react');
|
|
5
6
|
var react = require('@chakra-ui/react');
|
|
7
|
+
var ScaledContext = require('../ScaledContext/ScaledContext.js');
|
|
8
|
+
var Menu_types = require('./Menu.types.js');
|
|
6
9
|
|
|
7
|
-
const MenuList = ({ children, ...rest }) => {
|
|
8
|
-
|
|
9
|
-
};
|
|
10
|
+
const MenuList = React.forwardRef(({ children, portalled = true, ...rest }, ref) => {
|
|
11
|
+
const { baseFontSize } = Menu_types.useMenuContext();
|
|
12
|
+
const content = (jsxRuntime.jsx(react.Menu.Positioner, { children: jsxRuntime.jsx(react.Menu.Content, { ref: ref, border: "1px solid", borderColor: "gray.200", borderRadius: "md", boxShadow: "0 5px 20px 1px {colors.gray.50}", p: "1.5", ...rest, children: jsxRuntime.jsx(ScaledContext.ScaledContext, { fontSize: baseFontSize, children: children }) }) }));
|
|
13
|
+
return portalled ? jsxRuntime.jsx(react.Portal, { children: content }) : content;
|
|
14
|
+
});
|
|
15
|
+
MenuList.displayName = 'Menu.List';
|
|
10
16
|
|
|
11
17
|
exports.MenuList = MenuList;
|
|
12
18
|
//# sourceMappingURL=MenuList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuList.js","sources":["../../../src/components/Menu/MenuList.tsx"],"sourcesContent":[null],"names":["
|
|
1
|
+
{"version":3,"file":"MenuList.js","sources":["../../../src/components/Menu/MenuList.tsx"],"sourcesContent":[null],"names":["forwardRef","useMenuContext","_jsx","Menu","ScaledContext","Portal"],"mappings":";;;;;;;;;MAUa,QAAQ,GAAGA,gBAAU,CAChC,CAAC,EAAE,QAAQ,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,KAAI;AAC/C,IAAA,MAAM,EAAE,YAAY,EAAE,GAAGC,yBAAc,EAAE;IAEzC,MAAM,OAAO,IACXC,cAAA,CAACC,UAAI,CAAC,UAAU,EAAA,EAAA,QAAA,EACdD,cAAA,CAACC,UAAI,CAAC,OAAO,EAAA,EACX,GAAG,EAAE,GAAG,EACR,MAAM,EAAC,WAAW,EAClB,WAAW,EAAC,UAAU,EACtB,YAAY,EAAC,IAAI,EACjB,SAAS,EAAC,iCAAiC,EAC3C,CAAC,EAAC,KAAK,EAAA,GACH,IAAI,EAAA,QAAA,EAERD,eAACE,2BAAa,EAAA,EAAC,QAAQ,EAAE,YAAY,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAiB,EAAA,CACpD,EAAA,CACC,CACnB;AAED,IAAA,OAAO,SAAS,GAAGF,cAAA,CAACG,YAAM,EAAA,EAAA,QAAA,EAAE,OAAO,EAAA,CAAU,GAAG,OAAO;AACzD,CAAC;AAEH,QAAQ,CAAC,WAAW,GAAG,WAAW;;;;"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import {
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { Menu, Portal } from '@chakra-ui/react';
|
|
5
|
+
import { ScaledContext } from '../ScaledContext/ScaledContext.mjs';
|
|
6
|
+
import { useMenuContext } from './Menu.types.mjs';
|
|
4
7
|
|
|
5
|
-
const MenuList = ({ children, ...rest }) => {
|
|
6
|
-
|
|
7
|
-
};
|
|
8
|
+
const MenuList = forwardRef(({ children, portalled = true, ...rest }, ref) => {
|
|
9
|
+
const { baseFontSize } = useMenuContext();
|
|
10
|
+
const content = (jsx(Menu.Positioner, { children: jsx(Menu.Content, { ref: ref, border: "1px solid", borderColor: "gray.200", borderRadius: "md", boxShadow: "0 5px 20px 1px {colors.gray.50}", p: "1.5", ...rest, children: jsx(ScaledContext, { fontSize: baseFontSize, children: children }) }) }));
|
|
11
|
+
return portalled ? jsx(Portal, { children: content }) : content;
|
|
12
|
+
});
|
|
13
|
+
MenuList.displayName = 'Menu.List';
|
|
8
14
|
|
|
9
15
|
export { MenuList };
|
|
10
16
|
//# sourceMappingURL=MenuList.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuList.mjs","sources":["../../../src/components/Menu/MenuList.tsx"],"sourcesContent":[null],"names":["_jsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"MenuList.mjs","sources":["../../../src/components/Menu/MenuList.tsx"],"sourcesContent":[null],"names":["_jsx"],"mappings":";;;;;;;MAUa,QAAQ,GAAG,UAAU,CAChC,CAAC,EAAE,QAAQ,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,KAAI;AAC/C,IAAA,MAAM,EAAE,YAAY,EAAE,GAAG,cAAc,EAAE;IAEzC,MAAM,OAAO,IACXA,GAAA,CAAC,IAAI,CAAC,UAAU,EAAA,EAAA,QAAA,EACdA,GAAA,CAAC,IAAI,CAAC,OAAO,EAAA,EACX,GAAG,EAAE,GAAG,EACR,MAAM,EAAC,WAAW,EAClB,WAAW,EAAC,UAAU,EACtB,YAAY,EAAC,IAAI,EACjB,SAAS,EAAC,iCAAiC,EAC3C,CAAC,EAAC,KAAK,EAAA,GACH,IAAI,EAAA,QAAA,EAERA,IAAC,aAAa,EAAA,EAAC,QAAQ,EAAE,YAAY,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAiB,EAAA,CACpD,EAAA,CACC,CACnB;AAED,IAAA,OAAO,SAAS,GAAGA,GAAA,CAAC,MAAM,EAAA,EAAA,QAAA,EAAE,OAAO,EAAA,CAAU,GAAG,OAAO;AACzD,CAAC;AAEH,QAAQ,CAAC,WAAW,GAAG,WAAW;;;;"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export type
|
|
1
|
+
export { Menu } from './Menu';
|
|
2
|
+
export type { MenuProps } from './Menu.types';
|
|
3
3
|
export { MenuItem } from './MenuItem';
|
|
4
4
|
export type * from './MenuItem.types';
|
|
5
5
|
export { MenuList } from './MenuList';
|
|
6
|
-
export { Menu } from '@chakra-ui/react';
|
|
7
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,mBAAmB,kBAAkB,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -52,10 +52,9 @@ var Markdown = require('./components/Markdown/Markdown.js');
|
|
|
52
52
|
var Masonry = require('./components/Masonry/Masonry.js');
|
|
53
53
|
var MaxLengthIndicator = require('./components/MaxLengthIndicator/MaxLengthIndicator.js');
|
|
54
54
|
var MDXEditor = require('./components/MDXEditor/MDXEditor.js');
|
|
55
|
-
var
|
|
55
|
+
var Menu = require('./components/Menu/Menu.js');
|
|
56
56
|
var MenuItem = require('./components/Menu/MenuItem.js');
|
|
57
57
|
var MenuList = require('./components/Menu/MenuList.js');
|
|
58
|
-
var react = require('@chakra-ui/react');
|
|
59
58
|
var Modal = require('./components/Modal/Modal.js');
|
|
60
59
|
var ModalBody = require('./components/Modal/ModalBody.js');
|
|
61
60
|
var ModalCloseButton = require('./components/Modal/ModalCloseButton.js');
|
|
@@ -101,6 +100,7 @@ var TabList = require('./components/Tabs/TabList/TabList.js');
|
|
|
101
100
|
var TabPanel = require('./components/Tabs/TabPanel.js');
|
|
102
101
|
var TabPanels = require('./components/Tabs/TabPanels.js');
|
|
103
102
|
var Tabs = require('./components/Tabs/Tabs.js');
|
|
103
|
+
var react = require('@chakra-ui/react');
|
|
104
104
|
var Tag = require('./components/Tag/Tag.js');
|
|
105
105
|
var Tag_styles = require('./components/Tag/Tag.styles.js');
|
|
106
106
|
var TagCloseButton = require('./components/Tag/TagCloseButton/TagCloseButton.js');
|
|
@@ -187,21 +187,9 @@ exports.baseMarkdownComponents = Markdown.baseMarkdownComponents;
|
|
|
187
187
|
exports.Masonry = Masonry.Masonry;
|
|
188
188
|
exports.MaxLengthIndicator = MaxLengthIndicator.MaxLengthIndicator;
|
|
189
189
|
exports.MDXEditor = MDXEditor.MDXEditor;
|
|
190
|
-
exports.
|
|
190
|
+
exports.Menu = Menu.Menu;
|
|
191
191
|
exports.MenuItem = MenuItem.MenuItem;
|
|
192
192
|
exports.MenuList = MenuList.MenuList;
|
|
193
|
-
Object.defineProperty(exports, "Menu", {
|
|
194
|
-
enumerable: true,
|
|
195
|
-
get: function () { return react.Menu; }
|
|
196
|
-
});
|
|
197
|
-
Object.defineProperty(exports, "TagLeftIcon", {
|
|
198
|
-
enumerable: true,
|
|
199
|
-
get: function () { return react.Icon; }
|
|
200
|
-
});
|
|
201
|
-
Object.defineProperty(exports, "TagRightIcon", {
|
|
202
|
-
enumerable: true,
|
|
203
|
-
get: function () { return react.Icon; }
|
|
204
|
-
});
|
|
205
193
|
exports.Modal = Modal.Modal;
|
|
206
194
|
exports.ModalBody = ModalBody.ModalBody;
|
|
207
195
|
exports.ModalCloseButton = ModalCloseButton.ModalCloseButton;
|
|
@@ -252,6 +240,14 @@ exports.TabList = TabList.TabList;
|
|
|
252
240
|
exports.TabPanel = TabPanel.TabPanel;
|
|
253
241
|
exports.TabPanels = TabPanels.TabPanels;
|
|
254
242
|
exports.Tabs = Tabs.Tabs;
|
|
243
|
+
Object.defineProperty(exports, "TagLeftIcon", {
|
|
244
|
+
enumerable: true,
|
|
245
|
+
get: function () { return react.Icon; }
|
|
246
|
+
});
|
|
247
|
+
Object.defineProperty(exports, "TagRightIcon", {
|
|
248
|
+
enumerable: true,
|
|
249
|
+
get: function () { return react.Icon; }
|
|
250
|
+
});
|
|
255
251
|
exports.Tag = Tag.Tag;
|
|
256
252
|
exports.getTagStyles = Tag_styles.getTagStyles;
|
|
257
253
|
exports.tagColorPaletteStyles = Tag_styles.tagColorPaletteStyles;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.mjs
CHANGED
|
@@ -50,10 +50,9 @@ export { Markdown, baseMarkdownComponents } from './components/Markdown/Markdown
|
|
|
50
50
|
export { Masonry } from './components/Masonry/Masonry.mjs';
|
|
51
51
|
export { MaxLengthIndicator } from './components/MaxLengthIndicator/MaxLengthIndicator.mjs';
|
|
52
52
|
export { MDXEditor } from './components/MDXEditor/MDXEditor.mjs';
|
|
53
|
-
export {
|
|
53
|
+
export { Menu } from './components/Menu/Menu.mjs';
|
|
54
54
|
export { MenuItem } from './components/Menu/MenuItem.mjs';
|
|
55
55
|
export { MenuList } from './components/Menu/MenuList.mjs';
|
|
56
|
-
export { Menu, Icon as TagLeftIcon, Icon as TagRightIcon } from '@chakra-ui/react';
|
|
57
56
|
export { Modal } from './components/Modal/Modal.mjs';
|
|
58
57
|
export { ModalBody } from './components/Modal/ModalBody.mjs';
|
|
59
58
|
export { ModalCloseButton } from './components/Modal/ModalCloseButton.mjs';
|
|
@@ -99,6 +98,7 @@ export { TabList } from './components/Tabs/TabList/TabList.mjs';
|
|
|
99
98
|
export { TabPanel } from './components/Tabs/TabPanel.mjs';
|
|
100
99
|
export { TabPanels } from './components/Tabs/TabPanels.mjs';
|
|
101
100
|
export { Tabs } from './components/Tabs/Tabs.mjs';
|
|
101
|
+
export { Icon as TagLeftIcon, Icon as TagRightIcon } from '@chakra-ui/react';
|
|
102
102
|
export { Tag } from './components/Tag/Tag.mjs';
|
|
103
103
|
export { getTagStyles, tagColorPaletteStyles, tagColorPalettes, tagVariants } from './components/Tag/Tag.styles.mjs';
|
|
104
104
|
export { TagCloseButton } from './components/Tag/TagCloseButton/TagCloseButton.mjs';
|
package/package.json
CHANGED
|
@@ -3,12 +3,11 @@ import { useState } from 'react';
|
|
|
3
3
|
|
|
4
4
|
import { IoChevronDownOutline, SlSettings } from '../Icon';
|
|
5
5
|
import { IconButton } from '../IconButton';
|
|
6
|
-
import { Menu, MenuButton, MenuItem, MenuList } from '.';
|
|
7
|
-
import { MenuItemProps } from './MenuItem.types';
|
|
8
6
|
import { Button } from '../Button/Button';
|
|
7
|
+
import { Menu } from './Menu';
|
|
8
|
+
import { MenuItemProps } from './MenuItem.types';
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
interface StoryMenuItemProps {
|
|
10
|
+
interface StoryMenuItemData {
|
|
12
11
|
label: string;
|
|
13
12
|
onClick?: () => void;
|
|
14
13
|
itemIcon?: React.ReactElement;
|
|
@@ -16,24 +15,26 @@ interface StoryMenuItemProps {
|
|
|
16
15
|
variant?: MenuItemProps['variant'];
|
|
17
16
|
}
|
|
18
17
|
|
|
19
|
-
// Props for the story templates
|
|
20
18
|
interface MenuStoryProps {
|
|
21
19
|
label?: string;
|
|
22
|
-
|
|
20
|
+
baseFontSize?: string;
|
|
21
|
+
menuItems: StoryMenuItemData[];
|
|
23
22
|
}
|
|
24
23
|
|
|
25
24
|
const meta = {
|
|
26
25
|
title: 'Components/Menu',
|
|
27
|
-
// @ts-expect-error - Menu is a namespace, not a component
|
|
28
26
|
component: Menu,
|
|
27
|
+
parameters: { layout: 'centered' },
|
|
29
28
|
args: {
|
|
30
29
|
label: 'Trigger',
|
|
30
|
+
baseFontSize: '14px',
|
|
31
31
|
menuItems: [
|
|
32
32
|
{ label: 'Profile', onClick: () => alert('Profile clicked') },
|
|
33
33
|
{ label: 'Settings', onClick: () => alert('Settings clicked') },
|
|
34
34
|
],
|
|
35
35
|
},
|
|
36
36
|
argTypes: {
|
|
37
|
+
baseFontSize: { control: 'text' },
|
|
37
38
|
menuItems: { control: 'object' },
|
|
38
39
|
},
|
|
39
40
|
} satisfies Meta<MenuStoryProps>;
|
|
@@ -42,260 +43,145 @@ export default meta;
|
|
|
42
43
|
|
|
43
44
|
type Story = StoryObj<MenuStoryProps>;
|
|
44
45
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
{
|
|
49
|
-
{
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
{item.label}
|
|
70
|
-
</MenuItem>
|
|
71
|
-
))}
|
|
72
|
-
</MenuList>
|
|
73
|
-
</Menu.Root>
|
|
46
|
+
const renderItems = (items: StoryMenuItemData[]) =>
|
|
47
|
+
items.map(item => (
|
|
48
|
+
<Menu.Item
|
|
49
|
+
key={item.label}
|
|
50
|
+
value={item.label}
|
|
51
|
+
variant={item.variant}
|
|
52
|
+
icon={item.itemIcon}
|
|
53
|
+
rightIcon={item.rightItemIcon}
|
|
54
|
+
onClick={item.onClick}
|
|
55
|
+
>
|
|
56
|
+
{item.label}
|
|
57
|
+
</Menu.Item>
|
|
58
|
+
));
|
|
59
|
+
|
|
60
|
+
export const Default: Story = {
|
|
61
|
+
render: ({ label, baseFontSize, menuItems }) => (
|
|
62
|
+
<Menu baseFontSize={baseFontSize}>
|
|
63
|
+
<Menu.Trigger asChild>
|
|
64
|
+
<Button variant="outline">
|
|
65
|
+
{label} <IoChevronDownOutline />
|
|
66
|
+
</Button>
|
|
67
|
+
</Menu.Trigger>
|
|
68
|
+
<Menu.List>{renderItems(menuItems)}</Menu.List>
|
|
69
|
+
</Menu>
|
|
74
70
|
),
|
|
75
71
|
};
|
|
76
72
|
|
|
77
|
-
export const
|
|
73
|
+
export const WithIcons: Story = {
|
|
78
74
|
args: {
|
|
79
75
|
menuItems: [
|
|
80
|
-
{
|
|
81
|
-
|
|
82
|
-
onClick: () => alert('Profile clicked'),
|
|
83
|
-
itemIcon: <SlSettings />,
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
label: 'Settings',
|
|
87
|
-
onClick: () => alert('Settings clicked'),
|
|
88
|
-
itemIcon: <SlSettings />,
|
|
89
|
-
},
|
|
76
|
+
{ label: 'Profile', onClick: () => alert('Profile clicked'), itemIcon: <SlSettings /> },
|
|
77
|
+
{ label: 'Settings', onClick: () => alert('Settings clicked'), itemIcon: <SlSettings /> },
|
|
90
78
|
],
|
|
91
79
|
},
|
|
92
|
-
render: ({ label, menuItems }) => (
|
|
93
|
-
<Menu
|
|
94
|
-
<
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
value={item.label}
|
|
102
|
-
variant={item.variant}
|
|
103
|
-
icon={item.itemIcon}
|
|
104
|
-
onClick={item.onClick}
|
|
105
|
-
>
|
|
106
|
-
{item.label}
|
|
107
|
-
</MenuItem>
|
|
108
|
-
))}
|
|
109
|
-
</MenuList>
|
|
110
|
-
</Menu.Root>
|
|
80
|
+
render: ({ label, baseFontSize, menuItems }) => (
|
|
81
|
+
<Menu baseFontSize={baseFontSize}>
|
|
82
|
+
<Menu.Trigger asChild>
|
|
83
|
+
<Button variant="outline">
|
|
84
|
+
{label} <IoChevronDownOutline />
|
|
85
|
+
</Button>
|
|
86
|
+
</Menu.Trigger>
|
|
87
|
+
<Menu.List>{renderItems(menuItems)}</Menu.List>
|
|
88
|
+
</Menu>
|
|
111
89
|
),
|
|
112
90
|
};
|
|
113
91
|
|
|
114
|
-
export const
|
|
92
|
+
export const WithRightIcons: Story = {
|
|
115
93
|
args: {
|
|
116
94
|
menuItems: [
|
|
117
|
-
{
|
|
118
|
-
|
|
119
|
-
onClick: () => alert('Profile clicked'),
|
|
120
|
-
rightItemIcon: <SlSettings />,
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
label: 'Settings',
|
|
124
|
-
onClick: () => alert('Settings clicked'),
|
|
125
|
-
rightItemIcon: <SlSettings />,
|
|
126
|
-
},
|
|
95
|
+
{ label: 'Profile', onClick: () => alert('Profile clicked'), rightItemIcon: <SlSettings /> },
|
|
96
|
+
{ label: 'Settings', onClick: () => alert('Settings clicked'), rightItemIcon: <SlSettings /> },
|
|
127
97
|
],
|
|
128
98
|
},
|
|
129
|
-
render: ({ label, menuItems }) => (
|
|
130
|
-
<Menu
|
|
131
|
-
<
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
value={item.label}
|
|
139
|
-
variant={item.variant}
|
|
140
|
-
rightIcon={item.rightItemIcon}
|
|
141
|
-
onClick={item.onClick}
|
|
142
|
-
>
|
|
143
|
-
{item.label}
|
|
144
|
-
</MenuItem>
|
|
145
|
-
))}
|
|
146
|
-
</MenuList>
|
|
147
|
-
</Menu.Root>
|
|
99
|
+
render: ({ label, baseFontSize, menuItems }) => (
|
|
100
|
+
<Menu baseFontSize={baseFontSize}>
|
|
101
|
+
<Menu.Trigger asChild>
|
|
102
|
+
<Button variant="outline">
|
|
103
|
+
{label} <IoChevronDownOutline />
|
|
104
|
+
</Button>
|
|
105
|
+
</Menu.Trigger>
|
|
106
|
+
<Menu.List>{renderItems(menuItems)}</Menu.List>
|
|
107
|
+
</Menu>
|
|
148
108
|
),
|
|
149
109
|
};
|
|
150
110
|
|
|
151
|
-
export const
|
|
111
|
+
export const WithBothIcons: Story = {
|
|
152
112
|
args: {
|
|
153
113
|
menuItems: [
|
|
154
|
-
{
|
|
155
|
-
|
|
156
|
-
onClick: () => alert('Profile clicked'),
|
|
157
|
-
itemIcon: <SlSettings />,
|
|
158
|
-
rightItemIcon: <IoChevronDownOutline />,
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
label: 'Settings',
|
|
162
|
-
onClick: () => alert('Settings clicked'),
|
|
163
|
-
itemIcon: <SlSettings />,
|
|
164
|
-
rightItemIcon: <IoChevronDownOutline />,
|
|
165
|
-
},
|
|
114
|
+
{ label: 'Profile', itemIcon: <SlSettings />, rightItemIcon: <IoChevronDownOutline />, onClick: () => alert('Profile clicked') },
|
|
115
|
+
{ label: 'Settings', itemIcon: <SlSettings />, rightItemIcon: <IoChevronDownOutline />, onClick: () => alert('Settings clicked') },
|
|
166
116
|
],
|
|
167
117
|
},
|
|
168
|
-
render: ({ label, menuItems }) => (
|
|
169
|
-
<Menu
|
|
170
|
-
<
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
value={item.label}
|
|
178
|
-
variant={item.variant}
|
|
179
|
-
icon={item.itemIcon}
|
|
180
|
-
rightIcon={item.rightItemIcon}
|
|
181
|
-
onClick={item.onClick}
|
|
182
|
-
>
|
|
183
|
-
{item.label}
|
|
184
|
-
</MenuItem>
|
|
185
|
-
))}
|
|
186
|
-
</MenuList>
|
|
187
|
-
</Menu.Root>
|
|
118
|
+
render: ({ label, baseFontSize, menuItems }) => (
|
|
119
|
+
<Menu baseFontSize={baseFontSize}>
|
|
120
|
+
<Menu.Trigger asChild>
|
|
121
|
+
<Button variant="outline">
|
|
122
|
+
{label} <IoChevronDownOutline />
|
|
123
|
+
</Button>
|
|
124
|
+
</Menu.Trigger>
|
|
125
|
+
<Menu.List>{renderItems(menuItems)}</Menu.List>
|
|
126
|
+
</Menu>
|
|
188
127
|
),
|
|
189
128
|
};
|
|
190
129
|
|
|
191
|
-
export const
|
|
130
|
+
export const WithDangerItem: Story = {
|
|
192
131
|
args: {
|
|
193
132
|
menuItems: [
|
|
194
133
|
{ label: 'Profile', onClick: () => alert('Profile clicked') },
|
|
195
|
-
{
|
|
196
|
-
label: 'Settings',
|
|
197
|
-
onClick: () => alert('Settings clicked'),
|
|
198
|
-
itemIcon: <SlSettings />,
|
|
199
|
-
variant: 'danger',
|
|
200
|
-
},
|
|
134
|
+
{ label: 'Delete', onClick: () => alert('Delete clicked'), itemIcon: <SlSettings />, variant: 'danger' },
|
|
201
135
|
],
|
|
202
136
|
},
|
|
203
|
-
render: ({ label, menuItems }) => (
|
|
204
|
-
<Menu
|
|
205
|
-
<
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
value={item.label}
|
|
213
|
-
variant={item.variant}
|
|
214
|
-
icon={item.itemIcon}
|
|
215
|
-
onClick={item.onClick}
|
|
216
|
-
>
|
|
217
|
-
{item.label}
|
|
218
|
-
</MenuItem>
|
|
219
|
-
))}
|
|
220
|
-
</MenuList>
|
|
221
|
-
</Menu.Root>
|
|
137
|
+
render: ({ label, baseFontSize, menuItems }) => (
|
|
138
|
+
<Menu baseFontSize={baseFontSize}>
|
|
139
|
+
<Menu.Trigger asChild>
|
|
140
|
+
<Button variant="outline">
|
|
141
|
+
{label} <IoChevronDownOutline />
|
|
142
|
+
</Button>
|
|
143
|
+
</Menu.Trigger>
|
|
144
|
+
<Menu.List>{renderItems(menuItems)}</Menu.List>
|
|
145
|
+
</Menu>
|
|
222
146
|
),
|
|
223
147
|
};
|
|
224
148
|
|
|
225
|
-
export const
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
label
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
],
|
|
235
|
-
},
|
|
236
|
-
argTypes: {
|
|
237
|
-
label: { table: { disable: true } },
|
|
238
|
-
},
|
|
239
|
-
render: ({ menuItems }) => (
|
|
240
|
-
<Menu.Root>
|
|
241
|
-
<MenuButton aria-label="storybook icon button menu" as={IconButton}>
|
|
242
|
-
<IoChevronDownOutline />
|
|
243
|
-
</MenuButton>
|
|
244
|
-
<MenuList>
|
|
245
|
-
{menuItems.map((item: StoryMenuItemProps) => (
|
|
246
|
-
<MenuItem
|
|
247
|
-
key={item.label}
|
|
248
|
-
value={item.label}
|
|
249
|
-
variant={item.variant}
|
|
250
|
-
icon={item.itemIcon}
|
|
251
|
-
onClick={item.onClick}
|
|
252
|
-
>
|
|
253
|
-
{item.label}
|
|
254
|
-
</MenuItem>
|
|
255
|
-
))}
|
|
256
|
-
</MenuList>
|
|
257
|
-
</Menu.Root>
|
|
149
|
+
export const IconButtonTrigger: Story = {
|
|
150
|
+
argTypes: { label: { table: { disable: true } } },
|
|
151
|
+
render: ({ baseFontSize, menuItems }) => (
|
|
152
|
+
<Menu baseFontSize={baseFontSize}>
|
|
153
|
+
<Menu.Trigger asChild>
|
|
154
|
+
<IconButton aria-label="Open menu"><IoChevronDownOutline /></IconButton>
|
|
155
|
+
</Menu.Trigger>
|
|
156
|
+
<Menu.List>{renderItems(menuItems)}</Menu.List>
|
|
157
|
+
</Menu>
|
|
258
158
|
),
|
|
259
159
|
};
|
|
260
160
|
|
|
261
|
-
export const
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
{ label: 'Profile', onClick: () => alert('Profile clicked') },
|
|
265
|
-
{ label: 'Settings', onClick: () => alert('Settings clicked') },
|
|
266
|
-
{ label: 'Logout', onClick: () => alert('Logout clicked') },
|
|
267
|
-
],
|
|
268
|
-
},
|
|
269
|
-
render: function SelectiveIconRender({ label, menuItems }) {
|
|
270
|
-
const [selectedLabel, setSelectedLabel] = useState<string | null>(
|
|
271
|
-
menuItems[0].label
|
|
272
|
-
);
|
|
273
|
-
|
|
274
|
-
const handleItemClick = (label: string, onClick?: () => void) => {
|
|
275
|
-
setSelectedLabel(label);
|
|
276
|
-
onClick && onClick();
|
|
277
|
-
};
|
|
161
|
+
export const SelectiveIcon: Story = {
|
|
162
|
+
render: function SelectiveIconRender({ label, baseFontSize, menuItems }) {
|
|
163
|
+
const [selectedLabel, setSelectedLabel] = useState<string | null>(menuItems[0].label);
|
|
278
164
|
|
|
279
165
|
return (
|
|
280
|
-
<Menu
|
|
281
|
-
<
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
166
|
+
<Menu baseFontSize={baseFontSize}>
|
|
167
|
+
<Menu.Trigger asChild>
|
|
168
|
+
<Button variant="outline">
|
|
169
|
+
{label} <IoChevronDownOutline />
|
|
170
|
+
</Button>
|
|
171
|
+
</Menu.Trigger>
|
|
172
|
+
<Menu.List>
|
|
173
|
+
{menuItems.map(item => (
|
|
174
|
+
<Menu.Item
|
|
287
175
|
key={item.label}
|
|
288
176
|
value={item.label}
|
|
289
|
-
onClick={() =>
|
|
290
|
-
icon={
|
|
291
|
-
selectedLabel === item.label ? <SlSettings /> : undefined
|
|
292
|
-
}
|
|
177
|
+
onClick={() => { setSelectedLabel(item.label); item.onClick?.(); }}
|
|
178
|
+
icon={selectedLabel === item.label ? <SlSettings /> : undefined}
|
|
293
179
|
>
|
|
294
180
|
{item.label}
|
|
295
|
-
</
|
|
181
|
+
</Menu.Item>
|
|
296
182
|
))}
|
|
297
|
-
</
|
|
298
|
-
</Menu
|
|
183
|
+
</Menu.List>
|
|
184
|
+
</Menu>
|
|
299
185
|
);
|
|
300
186
|
},
|
|
301
187
|
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Menu as ChakraMenu } from '@chakra-ui/react';
|
|
2
|
+
|
|
3
|
+
import { MenuItem } from './MenuItem';
|
|
4
|
+
import { MenuContext, MenuProps } from './Menu.types';
|
|
5
|
+
import { MenuList } from './MenuList';
|
|
6
|
+
|
|
7
|
+
const MenuBase = ({ baseFontSize = '14px', children, ...props }: MenuProps) => (
|
|
8
|
+
<MenuContext.Provider value={{ baseFontSize }}>
|
|
9
|
+
<ChakraMenu.Root {...props}>{children}</ChakraMenu.Root>
|
|
10
|
+
</MenuContext.Provider>
|
|
11
|
+
);
|
|
12
|
+
MenuBase.displayName = 'Menu';
|
|
13
|
+
|
|
14
|
+
export const Menu = Object.assign(MenuBase, {
|
|
15
|
+
Trigger: ChakraMenu.Trigger,
|
|
16
|
+
TriggerItem: ChakraMenu.TriggerItem,
|
|
17
|
+
ContextTrigger: ChakraMenu.ContextTrigger,
|
|
18
|
+
List: MenuList,
|
|
19
|
+
Item: MenuItem,
|
|
20
|
+
ItemGroup: ChakraMenu.ItemGroup,
|
|
21
|
+
ItemGroupLabel: ChakraMenu.ItemGroupLabel,
|
|
22
|
+
ItemCommand: ChakraMenu.ItemCommand,
|
|
23
|
+
CheckboxItem: ChakraMenu.CheckboxItem,
|
|
24
|
+
RadioItem: ChakraMenu.RadioItem,
|
|
25
|
+
RadioItemGroup: ChakraMenu.RadioItemGroup,
|
|
26
|
+
Separator: ChakraMenu.Separator,
|
|
27
|
+
Arrow: ChakraMenu.Arrow,
|
|
28
|
+
ArrowTip: ChakraMenu.ArrowTip,
|
|
29
|
+
});
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Menu as ChakraMenu } from '@chakra-ui/react';
|
|
3
|
+
|
|
4
|
+
export interface MenuContextValue {
|
|
5
|
+
baseFontSize: string | number;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const MenuContext = React.createContext<MenuContextValue>({
|
|
9
|
+
baseFontSize: '14px',
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
export const useMenuContext = () => React.useContext(MenuContext);
|
|
13
|
+
|
|
14
|
+
export type MenuProps = React.ComponentPropsWithoutRef<
|
|
15
|
+
typeof ChakraMenu.Root
|
|
16
|
+
> & {
|
|
17
|
+
baseFontSize?: string | number;
|
|
18
|
+
};
|
|
@@ -1,26 +1,34 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
MenuContentProps as ChakraMenuContentProps,
|
|
4
|
-
Portal,
|
|
5
|
-
} from '@chakra-ui/react';
|
|
1
|
+
import { forwardRef } from 'react';
|
|
2
|
+
import { Menu, MenuContentProps as ChakraMenuContentProps, Portal } from '@chakra-ui/react';
|
|
6
3
|
|
|
7
|
-
|
|
4
|
+
import { ScaledContext } from '../ScaledContext';
|
|
5
|
+
import { useMenuContext } from './Menu.types';
|
|
8
6
|
|
|
9
|
-
export
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
export type MenuListProps = ChakraMenuContentProps & {
|
|
8
|
+
portalled?: boolean;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export const MenuList = forwardRef<HTMLDivElement, MenuListProps>(
|
|
12
|
+
({ children, portalled = true, ...rest }, ref) => {
|
|
13
|
+
const { baseFontSize } = useMenuContext();
|
|
14
|
+
|
|
15
|
+
const content = (
|
|
12
16
|
<Menu.Positioner>
|
|
13
17
|
<Menu.Content
|
|
18
|
+
ref={ref}
|
|
14
19
|
border="1px solid"
|
|
15
20
|
borderColor="gray.200"
|
|
16
21
|
borderRadius="md"
|
|
17
|
-
boxShadow="0 5px 20px 1px
|
|
22
|
+
boxShadow="0 5px 20px 1px {colors.gray.50}"
|
|
18
23
|
p="1.5"
|
|
19
24
|
{...rest}
|
|
20
25
|
>
|
|
21
|
-
{children}
|
|
26
|
+
<ScaledContext fontSize={baseFontSize}>{children}</ScaledContext>
|
|
22
27
|
</Menu.Content>
|
|
23
28
|
</Menu.Positioner>
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
};
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
return portalled ? <Portal>{content}</Portal> : content;
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
MenuList.displayName = 'Menu.List';
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export type
|
|
1
|
+
export { Menu } from './Menu';
|
|
2
|
+
export type { MenuProps } from './Menu.types';
|
|
3
3
|
export { MenuItem } from './MenuItem';
|
|
4
4
|
export type * from './MenuItem.types';
|
|
5
5
|
export { MenuList } from './MenuList';
|
|
6
|
-
export { Menu } from '@chakra-ui/react';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MenuButton.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/MenuButton.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,eAAO,MAAM,UAAU,GAAI,sCAIxB,qBAAqB,4CAMvB,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
'use strict';
|
|
3
|
-
|
|
4
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
-
var react = require('@chakra-ui/react');
|
|
6
|
-
|
|
7
|
-
const MenuButton = ({ as: Component, children, ...rest }) => {
|
|
8
|
-
return (jsxRuntime.jsx(react.Menu.Trigger, { asChild: true, children: jsxRuntime.jsx(Component, { ...rest, children: children }) }));
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
exports.MenuButton = MenuButton;
|
|
12
|
-
//# sourceMappingURL=MenuButton.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MenuButton.js","sources":["../../../src/components/Menu/MenuButton.tsx"],"sourcesContent":[null],"names":["_jsx","Menu"],"mappings":";;;;;;AAKO,MAAM,UAAU,GAAG,CAAC,EACzB,EAAE,EAAE,SAAS,EACb,QAAQ,EACR,GAAG,IAAI,EACe,KAAI;AAC1B,IAAA,QACEA,cAAA,CAACC,UAAI,CAAC,OAAO,IAAC,OAAO,EAAA,IAAA,EAAA,QAAA,EACnBD,cAAA,CAAC,SAAS,OAAK,IAAI,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAa,EAAA,CAC9B;AAEnB;;;;"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { Menu } from '@chakra-ui/react';
|
|
4
|
-
|
|
5
|
-
const MenuButton = ({ as: Component, children, ...rest }) => {
|
|
6
|
-
return (jsx(Menu.Trigger, { asChild: true, children: jsx(Component, { ...rest, children: children }) }));
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
export { MenuButton };
|
|
10
|
-
//# sourceMappingURL=MenuButton.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MenuButton.mjs","sources":["../../../src/components/Menu/MenuButton.tsx"],"sourcesContent":[null],"names":["_jsx"],"mappings":";;;;AAKO,MAAM,UAAU,GAAG,CAAC,EACzB,EAAE,EAAE,SAAS,EACb,QAAQ,EACR,GAAG,IAAI,EACe,KAAI;AAC1B,IAAA,QACEA,GAAA,CAAC,IAAI,CAAC,OAAO,IAAC,OAAO,EAAA,IAAA,EAAA,QAAA,EACnBA,GAAA,CAAC,SAAS,OAAK,IAAI,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAa,EAAA,CAC9B;AAEnB;;;;"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { Button } from '@/components/Button';
|
|
2
|
-
import type { ButtonProps } from '@/components/Button/Button.types';
|
|
3
|
-
import { IconButton } from '@/components/IconButton';
|
|
4
|
-
import type { IconButtonProps as CustomIconButtonProps } from '@/components/IconButton/IconButton.types';
|
|
5
|
-
interface ButtonMenuButtonProps extends Omit<ButtonProps, 'as' | 'colorScheme'> {
|
|
6
|
-
as: typeof Button;
|
|
7
|
-
rightIcon?: React.ReactElement;
|
|
8
|
-
icon?: never;
|
|
9
|
-
children?: React.ReactNode;
|
|
10
|
-
}
|
|
11
|
-
interface IconButtonMenuButtonProps extends Omit<CustomIconButtonProps, 'as' | 'colorScheme'> {
|
|
12
|
-
as: typeof IconButton;
|
|
13
|
-
icon?: React.ReactElement;
|
|
14
|
-
rightIcon?: never;
|
|
15
|
-
'aria-label': string;
|
|
16
|
-
children?: React.ReactNode;
|
|
17
|
-
}
|
|
18
|
-
export type CustomMenuButtonProps = ButtonMenuButtonProps | IconButtonMenuButtonProps;
|
|
19
|
-
export {};
|
|
20
|
-
//# sourceMappingURL=MenuButton.types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MenuButton.types.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/MenuButton.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,IAAI,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AAGzG,UAAU,qBAAsB,SAAQ,IAAI,CAC1C,WAAW,EACX,IAAI,GAAG,aAAa,CACrB;IACC,EAAE,EAAE,OAAO,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAC/B,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,UAAU,yBAA0B,SAAQ,IAAI,CAC9C,qBAAqB,EACrB,IAAI,GAAG,aAAa,CACrB;IACC,EAAE,EAAE,OAAO,UAAU,CAAC;IACtB,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAC1B,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,MAAM,MAAM,qBAAqB,GAC7B,qBAAqB,GACrB,yBAAyB,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { Menu } from '@chakra-ui/react';
|
|
3
|
-
|
|
4
|
-
import { CustomMenuButtonProps } from './MenuButton.types';
|
|
5
|
-
|
|
6
|
-
export const MenuButton = ({
|
|
7
|
-
as: Component,
|
|
8
|
-
children,
|
|
9
|
-
...rest
|
|
10
|
-
}: CustomMenuButtonProps) => {
|
|
11
|
-
return (
|
|
12
|
-
<Menu.Trigger asChild>
|
|
13
|
-
<Component {...rest}>{children}</Component>
|
|
14
|
-
</Menu.Trigger>
|
|
15
|
-
);
|
|
16
|
-
};
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { Button } from '@/components/Button';
|
|
2
|
-
import type { ButtonProps } from '@/components/Button/Button.types';
|
|
3
|
-
import { IconButton } from '@/components/IconButton';
|
|
4
|
-
import type { IconButtonProps as CustomIconButtonProps } from '@/components/IconButton/IconButton.types';
|
|
5
|
-
|
|
6
|
-
// as 속성에 들어갈 `Button`과 `IconButton`에 따른 조건부 타입
|
|
7
|
-
interface ButtonMenuButtonProps extends Omit<
|
|
8
|
-
ButtonProps,
|
|
9
|
-
'as' | 'colorScheme'
|
|
10
|
-
> {
|
|
11
|
-
as: typeof Button;
|
|
12
|
-
rightIcon?: React.ReactElement;
|
|
13
|
-
icon?: never;
|
|
14
|
-
children?: React.ReactNode;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
interface IconButtonMenuButtonProps extends Omit<
|
|
18
|
-
CustomIconButtonProps,
|
|
19
|
-
'as' | 'colorScheme'
|
|
20
|
-
> {
|
|
21
|
-
as: typeof IconButton;
|
|
22
|
-
icon?: React.ReactElement;
|
|
23
|
-
rightIcon?: never;
|
|
24
|
-
'aria-label': string;
|
|
25
|
-
children?: React.ReactNode;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export type CustomMenuButtonProps =
|
|
29
|
-
| ButtonMenuButtonProps
|
|
30
|
-
| IconButtonMenuButtonProps;
|