@moderneinc/neo-styled-components 2.8.0 → 3.0.0-next.ac08ae

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.
@@ -1,13 +1,22 @@
1
1
  import { type AlertProps } from '@mui/material/Alert';
2
- import type { ReactNode } from 'react';
2
+ import { type ReactNode } from 'react';
3
+ type Intent = 'info' | 'success' | 'error' | 'warning' | 'neutral';
4
+ type BannerType = 'outlined' | 'filled';
3
5
  export interface NeoBannerProps extends Omit<AlertProps, 'variant' | 'severity' | 'color'> {
4
6
  /**
5
- * The visual style variant of the banner
6
- * @default "light"
7
+ * The intent/purpose of the banner
8
+ * @default "info"
7
9
  *
8
- * @figmaPropMapping color (Dark|Light|Success|Error|Warning) → variant
10
+ * @figmaPropMapping Intention (Info|Success|Error|Warning|Neutral) → intent
9
11
  */
10
- variant?: 'dark' | 'light' | 'success' | 'error' | 'warning';
12
+ intent?: Intent;
13
+ /**
14
+ * Visual type: outlined (light bg) or filled (solid bg)
15
+ * @default "outlined"
16
+ *
17
+ * @figmaPropMapping Type (Outlined|Filled) → type
18
+ */
19
+ type?: BannerType;
11
20
  /**
12
21
  * The message text to display
13
22
  *
@@ -18,20 +27,20 @@ export interface NeoBannerProps extends Omit<AlertProps, 'variant' | 'severity'
18
27
  * Horizontal alignment of the message content
19
28
  * @default "left"
20
29
  *
21
- * @figmaPropMapping messagePosition (Left|Center) → messagePosition
30
+ * @figmaPropMapping Message Position (Left|Center) → messagePosition
22
31
  */
23
32
  messagePosition?: 'left' | 'center';
24
33
  /**
25
34
  * Optional link text to display after the message
26
35
  *
27
- * @figmaPropMapping link (boolean) → linkText (string)
36
+ * @figmaPropMapping Show Link (boolean) → linkText (string)
28
37
  */
29
38
  linkText?: string;
30
39
  /**
31
40
  * Whether to show the close button
32
- * @default true
41
+ * @default false
33
42
  *
34
- * @figmaPropMapping closeIcon → showClose
43
+ * @figmaPropMapping Dismissible → showClose
35
44
  */
36
45
  showClose?: boolean;
37
46
  /**
@@ -48,19 +57,8 @@ export interface NeoBannerProps extends Omit<AlertProps, 'variant' | 'severity'
48
57
  */
49
58
  onLinkClick?: () => void;
50
59
  }
51
- /**
52
- * NeoBanner - Inline banner/alert component based on MUI Alert
53
- *
54
- * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4170-2158
55
- *
56
- * Figma Props Mapping:
57
- * - color (Dark|Light|Success|Error|Warning) → variant (dark|light|success|error|warning)
58
- * - messagePosition (Left|Center) → messagePosition ("left"|"center")
59
- * - closeIcon (boolean) → showClose (boolean)
60
- * - link (boolean) → linkText (string)
61
- * - {Message} → message (string)
62
- */
63
60
  export declare const NeoBanner: {
64
- ({ variant, message, messagePosition, linkText, showClose, icon, onClose, onLinkClick, ...props }: NeoBannerProps): import("react/jsx-runtime").JSX.Element;
61
+ ({ intent, type, message, messagePosition, linkText, showClose, icon, onClose, onLinkClick, ...props }: NeoBannerProps): import("react/jsx-runtime").JSX.Element | null;
65
62
  displayName: string;
66
63
  };
64
+ export {};
@@ -0,0 +1,32 @@
1
+ import { type CardProps } from '@mui/material/Card';
2
+ import type { ReactNode } from 'react';
3
+ export type NeoCardSize = 'small' | 'large';
4
+ export interface NeoCardSmallProps extends Omit<CardProps, 'children' | 'title'> {
5
+ size: 'small';
6
+ logo: ReactNode;
7
+ recipeCount: string;
8
+ title: ReactNode | string;
9
+ description: string;
10
+ selected?: boolean;
11
+ disabled?: boolean;
12
+ onClick?: () => void;
13
+ }
14
+ export interface NeoCardLargeProps extends Omit<CardProps, 'children' | 'title'> {
15
+ size: 'large';
16
+ disabled?: boolean;
17
+ cardTheme?: 'light' | 'dark';
18
+ showIcon?: boolean;
19
+ showGel?: boolean;
20
+ showButtons?: boolean;
21
+ icon?: ReactNode;
22
+ gel?: ReactNode;
23
+ title?: ReactNode;
24
+ children?: ReactNode;
25
+ actions?: ReactNode;
26
+ onClick?: () => void;
27
+ }
28
+ export type NeoCardProps = NeoCardSmallProps | NeoCardLargeProps;
29
+ export declare const NeoCard: {
30
+ (props: NeoCardProps): import("react/jsx-runtime").JSX.Element;
31
+ displayName: string;
32
+ };
@@ -2,7 +2,7 @@ import { type CheckboxProps } from '@mui/material/Checkbox';
2
2
  import type { ReactNode } from 'react';
3
3
  /**
4
4
  * Custom checkbox icons matching Figma design
5
- * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4122-39311
5
+ * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=11487-81
6
6
  *
7
7
  * Checkbox sizes: xs=12x12, small=16x16, medium=20x20
8
8
  * Check/minus paths scaled from Untitled UI (originally 24x24)
@@ -43,7 +43,7 @@ export interface NeoCheckboxProps extends Omit<CheckboxProps, 'size'> {
43
43
  /**
44
44
  * NeoCheckbox - Checkbox component based on MUI Checkbox
45
45
  *
46
- * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4122-39311
46
+ * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=11487-81
47
47
  *
48
48
  * Figma Props Mapping:
49
49
  * - Checked (True|False) → checked prop
@@ -20,7 +20,7 @@ export interface NeoCodeSnippetProps extends Omit<ButtonBaseProps, 'children'> {
20
20
  * The size of the code snippet
21
21
  * @default "small"
22
22
  *
23
- * @figma Size (Single line|multiline|inline)
23
+ * @figma Content (Multi|Inline)
24
24
  */
25
25
  size?: CodeSnippetSize;
26
26
  /**
@@ -38,9 +38,9 @@ export interface NeoCodeSnippetProps extends Omit<ButtonBaseProps, 'children'> {
38
38
  * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4187-30353
39
39
  *
40
40
  * Figma Props Mapping:
41
- * - Color (Light|Dark) → variant (outlined|filled)
42
- * - size (Single line|multiline|inline) → size prop + auto-detected multiline
43
- * - Copy button → endIcon (ReactNode)
41
+ * - Theme (Dark|Light) → variant (filled|outlined)
42
+ * - Content (Multi|Inline) → size prop + auto-detected multiline
43
+ * - Show icon → endIcon (ReactNode, unmappable: boolean vs ReactNode)
44
44
  * - Text content → children prop
45
45
  */
46
46
  export declare const NeoCodeSnippet: {
@@ -0,0 +1,47 @@
1
+ import { type PaperProps } from '@mui/material/Paper';
2
+ import type { ReactNode } from 'react';
3
+ export interface NeoDownloadToastProps extends Omit<PaperProps, 'title'> {
4
+ /**
5
+ * The header text
6
+ */
7
+ title?: string;
8
+ /**
9
+ * The file name being downloaded
10
+ */
11
+ fileName?: string;
12
+ /**
13
+ * Progress value (0-100)
14
+ */
15
+ progress?: number;
16
+ /**
17
+ * Whether to show the close button
18
+ * @default true
19
+ */
20
+ showClose?: boolean;
21
+ /**
22
+ * Whether to show the pause button
23
+ * @default true
24
+ */
25
+ showPause?: boolean;
26
+ /**
27
+ * Callback when close button is clicked
28
+ */
29
+ onClose?: () => void;
30
+ /**
31
+ * Callback when pause button is clicked
32
+ */
33
+ onPause?: () => void;
34
+ /**
35
+ * Custom actions to override the default pause/close buttons
36
+ */
37
+ actions?: ReactNode;
38
+ }
39
+ /**
40
+ * NeoDownloadToast - Standalone download progress toast notification
41
+ *
42
+ * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=3377-26954
43
+ */
44
+ export declare const NeoDownloadToast: {
45
+ ({ title, fileName, progress, showClose, showPause, onClose, onPause, actions, ...props }: NeoDownloadToastProps): import("react/jsx-runtime").JSX.Element;
46
+ displayName: string;
47
+ };
@@ -1,85 +1,23 @@
1
- import { type CardProps } from '@mui/material/Card';
2
- import type { ReactNode } from 'react';
1
+ import type { NeoCardSmallProps } from '../Card/Card';
3
2
  /**
4
3
  * Props for the NeoMarketplaceCard component
4
+ * @deprecated Use NeoCardSmallProps with NeoCard instead
5
5
  */
6
- export interface NeoMarketplaceCardProps extends Omit<CardProps, 'children' | 'title'> {
7
- /**
8
- * The logo to display (48x48px ReactNode)
9
- */
10
- logo: ReactNode;
11
- /**
12
- * The recipe count text (e.g., "1,260 recipes")
13
- */
14
- recipeCount: string;
15
- /**
16
- * The title text or element
17
- */
18
- title: ReactNode | string;
19
- /**
20
- * The description text
21
- */
22
- description: string;
23
- /**
24
- * Whether the card is in selected/active state
25
- * @default false
26
- * @figma State (Active)
27
- */
28
- selected?: boolean;
29
- /**
30
- * Whether the card is disabled
31
- * @default false
32
- * @figma State (Disabled)
33
- */
34
- disabled?: boolean;
35
- /**
36
- * Click handler for the card
37
- */
38
- onClick?: () => void;
6
+ export interface NeoMarketplaceCardProps extends Omit<NeoCardSmallProps, 'size'> {
39
7
  }
40
8
  /**
41
- * NeoMarketplaceCard - Selectable card component for marketplace items
42
- *
43
- * A fixed-size card (160x160px) displaying a logo, recipe count, title, and description.
44
- * Supports selected (active), disabled, and focused states.
9
+ * @deprecated Use `NeoCard` with `size="small"` instead.
45
10
  *
46
11
  * @example
47
12
  * ```tsx
48
- * <NeoMarketplaceCard
49
- * logo={<JavaLogo />}
50
- * recipeCount="1,260 recipes"
51
- * title="Java"
52
- * description="Basic building blocks for transforming Java..."
53
- * selected={false}
54
- * disabled={false}
55
- * onClick={() => console.log('clicked')}
56
- * />
57
- * ```
58
- *
59
- * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4286-1635&t=Bo58EpFmg6ILJtmv-11
13
+ * // Before
14
+ * <NeoMarketplaceCard logo={...} title="Java" ... />
60
15
  *
61
- * Figma Props Mapping:
62
- * - State="Active" → selected={true}
63
- * - State="Disabled" → disabled={true}
64
- * - State="Focused" → CSS :focus-visible state (not a prop)
65
- * - State="Hover" → CSS :hover state (not a prop)
66
- * - State="Default" → Base state (no props)
67
- *
68
- * Design Tokens Used:
69
- * - semanticColors.surfaces.card (#FFFFFF) - Default card background
70
- * - semanticColors.status.info.light (#f2f3ff) - Active/focused card background
71
- * - semanticColors.border.primary (#d1d5db) - Default border
72
- * - semanticColors.buttons.primary.default (#2f42ff) - Active/focused border
73
- * - shadows.focusWhite1 - Inner white focus ring (2px spread)
74
- * - shadows.focusBlue2 - Outer blue focus ring (4px spread)
75
- * - colors.grey[800] (#1F2937) - Text color
76
- * - typography.fontSize.xxs (10px) - Recipe count
77
- * - typography.fontSize.xs (12px) - Description
78
- * - typography.fontSize.h6 (16px) - Title
79
- * - typography.fontWeight.semiBold (600) - Title and recipe count
80
- * - typography.fontWeight.regular (400) - Description
16
+ * // After
17
+ * <NeoCard size="small" logo={...} title="Java" ... />
18
+ * ```
81
19
  */
82
20
  export declare const NeoMarketplaceCard: {
83
- ({ logo, recipeCount, title, description, selected, disabled, onClick, ...props }: NeoMarketplaceCardProps): import("react/jsx-runtime").JSX.Element;
21
+ (props: NeoMarketplaceCardProps): import("react/jsx-runtime").JSX.Element;
84
22
  displayName: string;
85
23
  };
@@ -1,91 +1,23 @@
1
- import { type CardProps } from '@mui/material/Card';
2
- import type { ReactNode } from 'react';
3
- type LargeCardState = 'default' | 'active' | 'disabled' | 'focused';
4
- type LargeCardTheme = 'light' | 'dark';
5
- export interface NeoMarketplaceLargeCardProps extends Omit<CardProps, 'children' | 'title'> {
6
- /**
7
- * The visual state of the card
8
- * @default "default"
9
- * @figma State
10
- */
11
- state?: LargeCardState;
12
- /**
13
- * The theme variant of the card
14
- * @default "light"
15
- * @figma Theme
16
- */
17
- cardTheme?: LargeCardTheme;
18
- /**
19
- * Whether to show the icon
20
- * @default true
21
- * @figma Show Icon
22
- */
23
- showIcon?: boolean;
24
- /**
25
- * Whether to show the gel brand icon
26
- * @default true
27
- * @figma Show Gel
28
- */
29
- showGel?: boolean;
30
- /**
31
- * Whether to show the button area
32
- * @default true
33
- * @figma Show Buttons
34
- */
35
- showButtons?: boolean;
36
- /**
37
- * Icon element to display in the header row (rendered at 20x20)
38
- */
39
- icon?: ReactNode;
40
- /**
41
- * Gel/brand icon to display in the header row (rendered at 20x20)
42
- */
43
- gel?: ReactNode;
44
- /**
45
- * Title text displayed inline in the header row with icon and gel
46
- */
47
- title?: ReactNode;
48
- /**
49
- * Description text displayed below the header row
50
- */
51
- children?: ReactNode;
52
- /**
53
- * Button/action elements for the footer row
54
- */
55
- actions?: ReactNode;
56
- /**
57
- * Click handler for the card
58
- */
59
- onClick?: () => void;
1
+ import type { NeoCardLargeProps } from '../Card/Card';
2
+ /**
3
+ * Props for the NeoMarketplaceLargeCard component
4
+ * @deprecated Use NeoCardLargeProps with NeoCard instead
5
+ */
6
+ export interface NeoMarketplaceLargeCardProps extends Omit<NeoCardLargeProps, 'size'> {
60
7
  }
61
8
  /**
62
- * NeoMarketplaceLargeCard - A large marketplace card with state and theme variants
63
- *
64
- * A 340x162px card with optional icon, gel brand icon, title, description, and action buttons.
65
- * Icon, gel, and title display inline in a header row.
66
- * Supports 4 states (default, active, disabled, focused) and 2 themes (light, dark).
67
- *
68
- * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC?node-id=5925-11
9
+ * @deprecated Use `NeoCard` with `size="large"` instead.
69
10
  *
70
- * Figma Props Mapping:
71
- * - State → state (Default/Active/Disabled/Focused)
72
- * - Theme → cardTheme (Dark/Light)
73
- * - Show Icon → showIcon
74
- * - Show Gel → showGel
75
- * - Show Buttons → showButtons
11
+ * @example
12
+ * ```tsx
13
+ * // Before
14
+ * <NeoMarketplaceLargeCard cardTheme="light" ... />
76
15
  *
77
- * Design Tokens Used:
78
- * - semanticColors.surfaces.card (#ffffff) - Light theme background
79
- * - colors.grey[800] (#1f2937) - Dark theme background
80
- * - semanticColors.border.primary (#d1d5db) - Default border (50% opacity on dark)
81
- * - semanticColors.buttons.primary.default (#2f42ff) - Active/focused border (light theme)
82
- * - colors.digitalGreen[300] (#88fe9b) - Active/focused border (dark theme)
83
- * - borderRadius.xS (4px) - Corner radius
84
- * - shadows.focusWhite1 + shadows.focusBlue2 - Focus ring
85
- * - shadows.card - Active state shadow
16
+ * // After
17
+ * <NeoCard size="large" cardTheme="light" ... />
18
+ * ```
86
19
  */
87
20
  export declare const NeoMarketplaceLargeCard: {
88
- ({ state, cardTheme, showIcon, showGel, showButtons, icon, gel, title, children, actions, onClick, ...props }: NeoMarketplaceLargeCardProps): import("react/jsx-runtime").JSX.Element;
21
+ (props: NeoMarketplaceLargeCardProps): import("react/jsx-runtime").JSX.Element;
89
22
  displayName: string;
90
23
  };
91
- export {};
@@ -32,7 +32,6 @@ export interface NeoRadioProps extends Omit<RadioProps, 'size'> {
32
32
  * NeoRadio - Radio button component based on MUI Radio
33
33
  *
34
34
  * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4122-40039
35
- * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4122-40150
36
35
  *
37
36
  * Figma Props Mapping:
38
37
  * - Checked (True|False) → checked prop
package/dist/Tag/Tag.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import { type ChipProps } from '@mui/material/Chip';
1
+ import Chip from '@mui/material/Chip';
2
+ import type { ComponentPropsWithoutRef, ElementType } from 'react';
2
3
  declare module '@mui/material/Chip' {
3
4
  interface ChipPropsColorOverrides {
4
5
  violet: true;
@@ -12,7 +13,7 @@ declare module '@mui/material/Chip' {
12
13
  filled: true;
13
14
  }
14
15
  }
15
- export interface NeoTagProps extends Omit<ChipProps, 'variant' | 'size'> {
16
+ type NeoTagOwnProps = {
16
17
  /**
17
18
  * The size of the tag
18
19
  * @figma m (sm|md|lg)
@@ -31,7 +32,10 @@ export interface NeoTagProps extends Omit<ChipProps, 'variant' | 'size'> {
31
32
  * @default "default"
32
33
  */
33
34
  color?: 'default' | 'error' | 'warning' | 'success' | 'info' | 'violet' | 'beta';
34
- }
35
+ };
36
+ export type NeoTagProps<C extends ElementType = typeof Chip> = NeoTagOwnProps & Omit<ComponentPropsWithoutRef<C>, keyof NeoTagOwnProps> & {
37
+ component?: C;
38
+ };
35
39
  /**
36
40
  * NeoTag - Small pill-shaped label component based on MUI Chip
37
41
  *
@@ -43,7 +47,8 @@ export interface NeoTagProps extends Omit<ChipProps, 'variant' | 'size'> {
43
47
  * - state (Neutral|Error|Warning|Success|Info|Violet|Beta) → color (default|error|warning|success|info|violet|beta)
44
48
  * - Label text → label prop
45
49
  */
46
- export declare const NeoTag: {
47
- ({ size, variant, ...props }: NeoTagProps): import("react/jsx-runtime").JSX.Element;
48
- displayName: string;
49
- };
50
+ export declare function NeoTag<C extends ElementType = typeof Chip>({ size, variant, ...props }: NeoTagProps<C>): import("react/jsx-runtime").JSX.Element;
51
+ export declare namespace NeoTag {
52
+ var displayName: string;
53
+ }
54
+ export {};
@@ -6,7 +6,7 @@ export interface NeoToastProps extends Omit<AlertProps, 'variant' | 'severity' |
6
6
  * The visual style variant of the toast
7
7
  * @default "default"
8
8
  */
9
- variant?: 'default' | 'dark' | 'brand' | 'error' | 'success' | 'info' | 'download';
9
+ variant?: 'default' | 'dark' | 'brand' | 'error' | 'success' | 'info';
10
10
  /**
11
11
  * The title/header text
12
12
  */
@@ -25,14 +25,6 @@ export interface NeoToastProps extends Omit<AlertProps, 'variant' | 'severity' |
25
25
  * Pass action buttons as children of this prop
26
26
  */
27
27
  actions?: ReactNode;
28
- /**
29
- * Progress value (0-100) for download variant
30
- */
31
- progress?: number;
32
- /**
33
- * File name for download variant
34
- */
35
- fileName?: string;
36
28
  /**
37
29
  * Callback when close button is clicked
38
30
  */
@@ -44,15 +36,14 @@ export interface NeoToastProps extends Omit<AlertProps, 'variant' | 'severity' |
44
36
  * @figma https://www.figma.com/design/fQTkGSFbYyE7LiHuQJsENC/Neo---Moderne-Design-system---2025?node-id=4122-37223
45
37
  *
46
38
  * Figma Props Mapping:
47
- * - type (Light mode|Dark mode|Brand color|Error|Success|Info|Download) → variant (default|dark|brand|error|success|info|download)
39
+ * - type (Light mode|Dark mode|Brand color|Error|Success|Info) → variant (default|dark|brand|error|success|info)
48
40
  * - header → title (string)
49
41
  * - supportingText → message (string)
50
42
  * - xCloseButton → showClose (boolean)
51
43
  * - actions → actions (ReactNode)
52
- * - Progress bar → progress (number 0-100)
53
44
  */
54
45
  export declare const NeoToast: {
55
- ({ variant, title, message, showClose, actions, progress, fileName, onClose, ...props }: NeoToastProps): import("react/jsx-runtime").JSX.Element;
46
+ ({ variant, title, message, showClose, actions, onClose, ...props }: NeoToastProps): import("react/jsx-runtime").JSX.Element;
56
47
  displayName: string;
57
48
  };
58
49
  /**