@dynamic-mockups/design-system 0.2.9 → 0.2.10

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.
@@ -0,0 +1,62 @@
1
+ /**
2
+ * TextArea Component
3
+ * A textarea component that extends Radix UI TextArea
4
+ */
5
+ import React from "react";
6
+ import type { TextAreaProps as RadixTextAreaProps } from "@radix-ui/themes";
7
+ import { type ColorToken } from "../../../tokens";
8
+ import "./TextArea.scss";
9
+ export type { ColorToken } from "../../../tokens";
10
+ export type TextAreaSize = "1" | "2" | "3";
11
+ export type TextAreaColor = "primary" | "secondary" | "accent" | "success" | "error" | "warning";
12
+ export type TextAreaResize = "none" | "vertical" | "horizontal" | "both";
13
+ export interface TextAreaProps extends Omit<RadixTextAreaProps, "size" | "color" | "m" | "mx" | "my" | "mt" | "mr" | "mb" | "ml"> {
14
+ /**
15
+ * TextArea size
16
+ * @default '2'
17
+ */
18
+ size?: TextAreaSize;
19
+ /**
20
+ * TextArea color
21
+ * @default 'primary'
22
+ */
23
+ color?: TextAreaColor;
24
+ /**
25
+ * Label text for the textarea
26
+ */
27
+ label?: string;
28
+ /**
29
+ * Helper text displayed below the textarea
30
+ */
31
+ helperText?: string;
32
+ /**
33
+ * Error message - when provided, textarea shows error state
34
+ */
35
+ error?: string;
36
+ /**
37
+ * Resize behavior
38
+ * @default 'vertical'
39
+ */
40
+ resize?: TextAreaResize;
41
+ /**
42
+ * Color token for the textarea background
43
+ */
44
+ backgroundColorToken?: ColorToken;
45
+ /**
46
+ * Color token for the textarea border
47
+ */
48
+ borderColorToken?: ColorToken;
49
+ /**
50
+ * Color token for the textarea text
51
+ */
52
+ textColorToken?: ColorToken;
53
+ /**
54
+ * Color token for the placeholder text
55
+ */
56
+ placeholderColorToken?: ColorToken;
57
+ /**
58
+ * Color token for the focus border
59
+ */
60
+ focusBorderColorToken?: ColorToken;
61
+ }
62
+ export declare const TextArea: React.ForwardRefExoticComponent<TextAreaProps & React.RefAttributes<HTMLTextAreaElement>>;
@@ -0,0 +1,178 @@
1
+ import React from "react";
2
+ import type { StoryObj } from "@storybook/react-vite";
3
+ import type { ColorToken } from "./TextArea";
4
+ declare const meta: {
5
+ title: string;
6
+ component: React.ForwardRefExoticComponent<import("./TextArea").TextAreaProps & React.RefAttributes<HTMLTextAreaElement>>;
7
+ parameters: {
8
+ layout: string;
9
+ };
10
+ tags: string[];
11
+ argTypes: {
12
+ label: {
13
+ control: "text";
14
+ description: string;
15
+ table: {
16
+ category: string;
17
+ };
18
+ };
19
+ placeholder: {
20
+ control: "text";
21
+ description: string;
22
+ table: {
23
+ category: string;
24
+ };
25
+ };
26
+ helperText: {
27
+ control: "text";
28
+ description: string;
29
+ table: {
30
+ category: string;
31
+ };
32
+ };
33
+ error: {
34
+ control: "text";
35
+ description: string;
36
+ table: {
37
+ category: string;
38
+ };
39
+ };
40
+ size: {
41
+ control: "select";
42
+ options: string[];
43
+ description: string;
44
+ table: {
45
+ category: string;
46
+ };
47
+ };
48
+ color: {
49
+ control: "select";
50
+ options: string[];
51
+ description: string;
52
+ table: {
53
+ category: string;
54
+ };
55
+ };
56
+ variant: {
57
+ control: "select";
58
+ options: string[];
59
+ description: string;
60
+ table: {
61
+ category: string;
62
+ };
63
+ };
64
+ resize: {
65
+ control: "select";
66
+ options: string[];
67
+ description: string;
68
+ table: {
69
+ category: string;
70
+ };
71
+ };
72
+ disabled: {
73
+ control: "boolean";
74
+ description: string;
75
+ table: {
76
+ category: string;
77
+ };
78
+ };
79
+ rows: {
80
+ control: "number";
81
+ description: string;
82
+ table: {
83
+ category: string;
84
+ };
85
+ };
86
+ backgroundColorToken: {
87
+ control: "select";
88
+ options: ColorToken[];
89
+ description: string;
90
+ table: {
91
+ category: string;
92
+ };
93
+ };
94
+ borderColorToken: {
95
+ control: "select";
96
+ options: ColorToken[];
97
+ description: string;
98
+ table: {
99
+ category: string;
100
+ };
101
+ };
102
+ textColorToken: {
103
+ control: "select";
104
+ options: ColorToken[];
105
+ description: string;
106
+ table: {
107
+ category: string;
108
+ };
109
+ };
110
+ placeholderColorToken: {
111
+ control: "select";
112
+ options: ColorToken[];
113
+ description: string;
114
+ table: {
115
+ category: string;
116
+ };
117
+ };
118
+ focusBorderColorToken: {
119
+ control: "select";
120
+ options: ColorToken[];
121
+ description: string;
122
+ table: {
123
+ category: string;
124
+ };
125
+ };
126
+ m: {
127
+ table: {
128
+ disable: boolean;
129
+ };
130
+ };
131
+ mx: {
132
+ table: {
133
+ disable: boolean;
134
+ };
135
+ };
136
+ my: {
137
+ table: {
138
+ disable: boolean;
139
+ };
140
+ };
141
+ mt: {
142
+ table: {
143
+ disable: boolean;
144
+ };
145
+ };
146
+ mr: {
147
+ table: {
148
+ disable: boolean;
149
+ };
150
+ };
151
+ mb: {
152
+ table: {
153
+ disable: boolean;
154
+ };
155
+ };
156
+ ml: {
157
+ table: {
158
+ disable: boolean;
159
+ };
160
+ };
161
+ };
162
+ };
163
+ export default meta;
164
+ type Story = StoryObj<typeof meta>;
165
+ export declare const Default: Story;
166
+ export declare const WithLabel: Story;
167
+ export declare const WithHelperText: Story;
168
+ export declare const WithError: Story;
169
+ export declare const WithValue: Story;
170
+ export declare const Disabled: Story;
171
+ export declare const DisabledWithValue: Story;
172
+ export declare const Sizes: Story;
173
+ export declare const ResizeOptions: Story;
174
+ export declare const Colors: Story;
175
+ export declare const Variants: Story;
176
+ export declare const CustomRows: Story;
177
+ export declare const LongFormExample: Story;
178
+ export declare const InteractiveColorPicker: Story;
@@ -0,0 +1 @@
1
+ export * from "./TextArea";
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Modal Component
3
+ * A modal dialog component with Header, Content, and Footer sections built on top of the Dialog atom
4
+ */
5
+ import React from "react";
6
+ import type { DialogProps as RadixDialogProps } from "@radix-ui/react-dialog";
7
+ import { type ColorToken } from "../../../tokens";
8
+ import "./Modal.scss";
9
+ export type { ColorToken } from "../../../tokens";
10
+ export interface ModalProps extends Omit<RadixDialogProps, "children"> {
11
+ /**
12
+ * Modal trigger element
13
+ */
14
+ trigger?: React.ReactNode;
15
+ /**
16
+ * Modal content (typically Modal.Header, Modal.Content, Modal.Footer)
17
+ */
18
+ children?: React.ReactNode;
19
+ /**
20
+ * Show close button
21
+ * @default true
22
+ */
23
+ showClose?: boolean;
24
+ /**
25
+ * Color token for overlay background
26
+ */
27
+ overlayColorToken?: ColorToken;
28
+ /**
29
+ * Color token for modal background
30
+ */
31
+ backgroundColorToken?: ColorToken;
32
+ /**
33
+ * Custom className for content
34
+ */
35
+ className?: string;
36
+ /**
37
+ * Modal width
38
+ * @default '405px'
39
+ */
40
+ width?: string;
41
+ }
42
+ export interface ModalHeaderProps {
43
+ /**
44
+ * Header title
45
+ */
46
+ title: string;
47
+ /**
48
+ * Header description/subtitle
49
+ */
50
+ description?: string;
51
+ /**
52
+ * Color token for title text
53
+ */
54
+ titleColorToken?: ColorToken;
55
+ /**
56
+ * Color token for description text
57
+ */
58
+ descriptionColorToken?: ColorToken;
59
+ /**
60
+ * Custom className
61
+ */
62
+ className?: string;
63
+ /**
64
+ * Children elements
65
+ */
66
+ children?: React.ReactNode;
67
+ }
68
+ export interface ModalContentProps {
69
+ /**
70
+ * Content children
71
+ */
72
+ children: React.ReactNode;
73
+ /**
74
+ * Maximum height for scrollable content
75
+ * @default '480px'
76
+ */
77
+ maxHeight?: string;
78
+ /**
79
+ * Custom className
80
+ */
81
+ className?: string;
82
+ }
83
+ export interface ModalFooterProps {
84
+ /**
85
+ * Footer children (typically action buttons)
86
+ */
87
+ children: React.ReactNode;
88
+ /**
89
+ * Custom className
90
+ */
91
+ className?: string;
92
+ }
93
+ export declare const Modal: React.ForwardRefExoticComponent<ModalProps & React.RefAttributes<HTMLDivElement>> & {
94
+ Header: React.ForwardRefExoticComponent<ModalHeaderProps & React.RefAttributes<HTMLDivElement>>;
95
+ Content: React.ForwardRefExoticComponent<ModalContentProps & React.RefAttributes<HTMLDivElement>>;
96
+ Footer: React.ForwardRefExoticComponent<ModalFooterProps & React.RefAttributes<HTMLDivElement>>;
97
+ };
@@ -0,0 +1,64 @@
1
+ import React from "react";
2
+ import type { StoryObj } from "@storybook/react-vite";
3
+ declare const meta: {
4
+ title: string;
5
+ component: React.ForwardRefExoticComponent<import("./Modal").ModalProps & React.RefAttributes<HTMLDivElement>> & {
6
+ Header: React.ForwardRefExoticComponent<import("./Modal").ModalHeaderProps & React.RefAttributes<HTMLDivElement>>;
7
+ Content: React.ForwardRefExoticComponent<import("./Modal").ModalContentProps & React.RefAttributes<HTMLDivElement>>;
8
+ Footer: React.ForwardRefExoticComponent<import("./Modal").ModalFooterProps & React.RefAttributes<HTMLDivElement>>;
9
+ };
10
+ parameters: {
11
+ layout: string;
12
+ };
13
+ tags: string[];
14
+ argTypes: {
15
+ trigger: {
16
+ control: false;
17
+ description: string;
18
+ table: {
19
+ category: string;
20
+ };
21
+ };
22
+ showClose: {
23
+ control: "boolean";
24
+ description: string;
25
+ table: {
26
+ category: string;
27
+ };
28
+ };
29
+ overlayColorToken: {
30
+ control: "text";
31
+ description: string;
32
+ table: {
33
+ category: string;
34
+ };
35
+ };
36
+ backgroundColorToken: {
37
+ control: "text";
38
+ description: string;
39
+ table: {
40
+ category: string;
41
+ };
42
+ };
43
+ width: {
44
+ control: "text";
45
+ description: string;
46
+ table: {
47
+ category: string;
48
+ };
49
+ };
50
+ };
51
+ };
52
+ export default meta;
53
+ type Story = StoryObj<typeof meta>;
54
+ export declare const BasicModal: Story;
55
+ export declare const TwoActionButtons: Story;
56
+ export declare const ThreeActionButtons: Story;
57
+ export declare const FlagMockupModal: Story;
58
+ export declare const ScrollableContent: Story;
59
+ export declare const NoCloseButton: Story;
60
+ export declare const CustomWidth: Story;
61
+ export declare const NoDescription: Story;
62
+ export declare const FormModal: Story;
63
+ export declare const InfoModal: Story;
64
+ export declare const MinimalContent: Story;
@@ -0,0 +1,2 @@
1
+ export { Modal } from "./Modal";
2
+ export type { ModalProps, ModalHeaderProps, ModalContentProps, ModalFooterProps, ColorToken, } from "./Modal";
@@ -8,3 +8,5 @@ export { CheckboxChip } from "./CheckboxChip/CheckboxChip";
8
8
  export type { CheckboxChipProps } from "./CheckboxChip/CheckboxChip";
9
9
  export { CheckboxChipGroup } from "./CheckboxChip/CheckboxChipGroup";
10
10
  export type { CheckboxChipGroupProps, CheckboxChipOption, } from "./CheckboxChip/CheckboxChipGroup";
11
+ export { Modal } from "./Modal/Modal";
12
+ export type { ModalProps, ModalHeaderProps, ModalContentProps, ModalFooterProps, } from "./Modal/Modal";
@@ -0,0 +1,27 @@
1
+ /**
2
+ * FlagBadMockups Organism
3
+ * A multi-step modal flow for flagging bad mockups
4
+ * Flow: Flag Modal → Form Modal (if "Something else") → Info Modal
5
+ */
6
+ import React from "react";
7
+ import "./FlagBadMockups.scss";
8
+ export type { ColorToken } from "../../../tokens";
9
+ export interface FlagBadMockupsProps {
10
+ /**
11
+ * Trigger button element (optional, defaults to "Flag this mockup" button)
12
+ */
13
+ trigger?: React.ReactNode;
14
+ /**
15
+ * Callback when the flow is closed
16
+ */
17
+ onClose?: () => void;
18
+ /**
19
+ * Callback when feedback is submitted with selected reason and optional feedback text
20
+ */
21
+ onSubmit?: (reason: string, feedback?: string) => void;
22
+ /**
23
+ * Custom className
24
+ */
25
+ className?: string;
26
+ }
27
+ export declare const FlagBadMockups: React.ForwardRefExoticComponent<FlagBadMockupsProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,46 @@
1
+ import React from "react";
2
+ import type { StoryObj } from "@storybook/react-vite";
3
+ declare const meta: {
4
+ title: string;
5
+ component: React.ForwardRefExoticComponent<import("./FlagBadMockups").FlagBadMockupsProps & React.RefAttributes<HTMLDivElement>>;
6
+ parameters: {
7
+ layout: string;
8
+ };
9
+ tags: string[];
10
+ argTypes: {
11
+ trigger: {
12
+ control: false;
13
+ description: string;
14
+ table: {
15
+ category: string;
16
+ };
17
+ };
18
+ onClose: {
19
+ control: false;
20
+ description: string;
21
+ table: {
22
+ category: string;
23
+ };
24
+ };
25
+ onSubmit: {
26
+ control: false;
27
+ description: string;
28
+ table: {
29
+ category: string;
30
+ };
31
+ };
32
+ className: {
33
+ control: "text";
34
+ description: string;
35
+ table: {
36
+ category: string;
37
+ };
38
+ };
39
+ };
40
+ };
41
+ export default meta;
42
+ type Story = StoryObj<typeof meta>;
43
+ export declare const Default: Story;
44
+ export declare const CustomTrigger: Story;
45
+ export declare const InteractiveDemo: Story;
46
+ export declare const FlowExample: Story;
@@ -0,0 +1,2 @@
1
+ export { FlagBadMockups } from "./FlagBadMockups";
2
+ export type { FlagBadMockupsProps, ColorToken } from "./FlagBadMockups";
@@ -6,3 +6,5 @@ export { OnboardingInfoBox } from "./OnboardingInfoBox/OnboardingInfoBox";
6
6
  export type { OnboardingInfoBoxProps, OnboardingInfoItem, } from "./OnboardingInfoBox/OnboardingInfoBox";
7
7
  export { CTABox } from "./CTABox/CTABox";
8
8
  export type { CTABoxProps } from "./CTABox/CTABox";
9
+ export { FlagBadMockups } from "./FlagBadMockups/FlagBadMockups";
10
+ export type { FlagBadMockupsProps } from "./FlagBadMockups/FlagBadMockups";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-mockups/design-system",
3
- "version": "0.2.9",
3
+ "version": "0.2.10",
4
4
  "description": "A professional, scalable design system built with React 18, TypeScript, Radix UI, and Storybook",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",