droplinked-ui-kit 0.0.1

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,448 @@
1
+ import { BoxProps } from '@chakra-ui/react';
2
+ import { ButtonProps as ButtonProps_2 } from '@chakra-ui/react';
3
+ import { ChangeEvent } from 'react';
4
+ import { default as default_2 } from 'react';
5
+ import { ElementType } from 'react';
6
+ import { FlexProps } from '@chakra-ui/react';
7
+ import { InputProps as InputProps_2 } from '@chakra-ui/react';
8
+ import { JSX } from 'react/jsx-runtime';
9
+ import { ReactNode } from 'react';
10
+ import { SystemContext } from '@chakra-ui/react';
11
+ import { TextareaProps } from '@chakra-ui/react';
12
+
13
+ export declare function ActionMenu(props: ActionMenuProps): JSX.Element;
14
+
15
+ export declare type ActionMenuItem = {
16
+ icon: ElementType;
17
+ title: string;
18
+ variant?: ActionMenuItemVariant;
19
+ onClick?: () => void;
20
+ hasBottomDivider?: boolean;
21
+ };
22
+
23
+ declare type ActionMenuItemVariant = 'default' | 'error' | 'disabled' | 'selected';
24
+
25
+ declare type ActionMenuProps = {
26
+ items: ActionMenuItem[];
27
+ triggerIcon?: ElementType;
28
+ triggerAriaLabel?: string;
29
+ buttonVariant?: ButtonProps['variant'];
30
+ buttonProps?: Omit<ButtonProps, 'buttonType' | 'leftIcon' | 'children' | 'variant'>;
31
+ open?: boolean;
32
+ defaultOpen?: boolean;
33
+ onOpenChange?: (open: boolean) => void;
34
+ closeOnSelect?: boolean;
35
+ menuWidth?: string | number;
36
+ };
37
+
38
+ export declare function ActionOverlay({ children, ...rest }: FlexProps): JSX.Element;
39
+
40
+ declare type BaseProps = {
41
+ isSelected?: boolean;
42
+ isDisabled?: boolean;
43
+ isInvalid?: boolean;
44
+ onClick?: () => void;
45
+ };
46
+
47
+ export declare function Button(props: ButtonProps): JSX.Element;
48
+
49
+ declare interface ButtonProps extends Omit<ButtonProps_2, 'variant'> {
50
+ leftIcon?: ElementType;
51
+ rightIcon?: ElementType;
52
+ icon?: ElementType;
53
+ variant?: variants;
54
+ buttonType?: ButtonType;
55
+ }
56
+
57
+ declare type ButtonType = 'text' | 'icon';
58
+
59
+ export declare function Checkbox(props: CheckboxProps): JSX.Element;
60
+
61
+ declare interface CheckboxProps extends Omit<BoxProps, 'onChange'> {
62
+ id?: string;
63
+ label?: string;
64
+ subtitle?: string;
65
+ isRequired?: boolean;
66
+ requiredText?: string;
67
+ chipsLabel?: string;
68
+ isDisabled?: boolean;
69
+ checked?: boolean;
70
+ defaultChecked?: boolean;
71
+ onChange?: (checked: boolean, event: ChangeEvent<HTMLInputElement>) => void;
72
+ icon?: ElementType;
73
+ }
74
+
75
+ export declare function CheckoutHeader(props: CheckoutHeaderProps): JSX.Element;
76
+
77
+ declare interface CheckoutHeaderProps {
78
+ buttonLabel: string;
79
+ onClick?: () => void;
80
+ imageSrc: string;
81
+ imageAlt: string;
82
+ }
83
+
84
+ export declare function Chips(props: ChipsProps): JSX.Element;
85
+
86
+ declare interface ChipsProps extends Omit<BoxProps, 'color' | 'direction'> {
87
+ label?: string;
88
+ showLeftIcon?: boolean;
89
+ showRightIcon?: boolean;
90
+ leftIcon?: React.ReactNode;
91
+ rightIcon?: React.ReactNode;
92
+ variant?: variants;
93
+ onClick?: () => void;
94
+ }
95
+
96
+ /**
97
+ * Corner Radius Options (from design system)
98
+ */
99
+ export declare const cornerRadiusOptions: Record<RadiiOption, RadiiConfigs>;
100
+
101
+ /**
102
+ * Create Chakra UI System from FullThemePalette
103
+ * This function enables dynamic theme updates for the Drag & Drop Designer
104
+ */
105
+ export declare function createThemeSystem(palette?: FullThemePalette, typography?: TypographyConfigs, radiiOption?: RadiiOption): SystemContext;
106
+
107
+ /**
108
+ * Default Light Theme Palette
109
+ */
110
+ export declare const defaultLightTheme: FullThemePalette;
111
+
112
+ /**
113
+ * Default Border Radius Configuration (Option 2)
114
+ */
115
+ export declare const defaultRadii: RadiiConfigs;
116
+
117
+ /**
118
+ * Default system instance
119
+ * Can be replaced with custom theme in Designer or Checkout
120
+ */
121
+ export declare const defaultSystem: SystemContext;
122
+
123
+ /**
124
+ * Default Typography Configuration
125
+ */
126
+ export declare const defaultTypography: TypographyConfigs;
127
+
128
+ export declare function Dropdown(props: DropdownProps): JSX.Element;
129
+
130
+ declare interface DropdownProps {
131
+ triggerText?: string;
132
+ children?: ReactNode | ((helpers: DropdownRenderHelpers) => ReactNode);
133
+ open?: boolean;
134
+ defaultOpen?: boolean;
135
+ onOpenChange?: (open: boolean) => void;
136
+ leftIcon?: ElementType;
137
+ title?: string;
138
+ subtitle?: string;
139
+ secondaryText?: string;
140
+ required?: boolean;
141
+ chipsLabel?: string;
142
+ isDisabled?: boolean;
143
+ isError?: boolean;
144
+ isSuccess?: boolean;
145
+ message?: string;
146
+ }
147
+
148
+ declare interface DropdownRenderHelpers {
149
+ open: boolean;
150
+ close: () => void;
151
+ }
152
+
153
+ /**
154
+ * Central theme interface for UI-Kit
155
+ * Used across Drag & Drop Designer and Checkout projects
156
+ */
157
+ export declare interface FullThemePalette {
158
+ isDarkTheme?: boolean;
159
+ themeName: string;
160
+ primary: {
161
+ main: string;
162
+ hover: string;
163
+ tint10: string;
164
+ tint20: string;
165
+ };
166
+ neutral: {
167
+ bgDark: string;
168
+ bgLight: string;
169
+ neutral10: string;
170
+ neutral30: string;
171
+ neutral50: string;
172
+ };
173
+ text: {
174
+ main: string;
175
+ inverse: string;
176
+ subtext: string;
177
+ disabled: string;
178
+ };
179
+ state: {
180
+ success: {
181
+ main: string;
182
+ tint10: string;
183
+ tint20: string;
184
+ };
185
+ error: {
186
+ main: string;
187
+ tint10: string;
188
+ tint20: string;
189
+ };
190
+ warning: {
191
+ main: string;
192
+ tint10: string;
193
+ tint20: string;
194
+ };
195
+ info: {
196
+ main: string;
197
+ tint10: string;
198
+ tint20: string;
199
+ };
200
+ };
201
+ }
202
+
203
+ export declare function IconContainer(props: IconContainerProps): JSX.Element;
204
+
205
+ declare type IconContainerProps = {
206
+ type?: IconContainerType;
207
+ variant?: IconContainerVariant;
208
+ icon?: ElementType;
209
+ text?: string;
210
+ imageSrc?: string;
211
+ imageAlt?: string;
212
+ };
213
+
214
+ declare type IconContainerType = 'icon' | 'text' | 'image';
215
+
216
+ declare type IconContainerVariant = 'outlined' | 'muted' | 'secondary' | 'information' | 'success' | 'warning' | 'error' | 'disabled' | 'image';
217
+
218
+ declare type IconListItemProps = BaseProps & {
219
+ type: 'icon';
220
+ leftIcon: ElementType;
221
+ };
222
+
223
+ export declare const Input: default_2.ForwardRefExoticComponent<InputProps & default_2.RefAttributes<HTMLInputElement>>;
224
+
225
+ declare interface InputProps extends Omit<InputProps_2, 'title' | 'onChange' | 'variant' | 'isInvalid'> {
226
+ /** Label text */
227
+ title?: string;
228
+ /** Subtitle text displayed below label */
229
+ subtitle?: string;
230
+ /** Left icon element */
231
+ leftIcon?: ReactNode;
232
+ /** Right icon element */
233
+ rightIcon?: ReactNode;
234
+ /** The supporting message text */
235
+ supportingMessage?: string;
236
+ /** Right element to display outside the input */
237
+ rightElement?: ReactNode;
238
+ /** Secondary text next to the label (e.g. "(Required)") */
239
+ secondaryText?: string;
240
+ /** Whether the input is required */
241
+ required?: boolean;
242
+ /** Label text for the chips badge in the label row */
243
+ chipsLabel?: string;
244
+ /** Variant of the input */
245
+ variant?: variants;
246
+ /** Change handler */
247
+ onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;
248
+ /** Disabled state */
249
+ isDisabled?: boolean;
250
+ }
251
+
252
+ export declare function ListItem(props: ListItemProps): JSX.Element;
253
+
254
+ declare type ListItemProps = TextListItemProps | IconListItemProps;
255
+
256
+ export declare function Modal(props: ModalProps): JSX.Element;
257
+
258
+ declare interface ModalProps {
259
+ /** Whether the modal is open */
260
+ open: boolean;
261
+ /** Callback when modal open state changes */
262
+ onOpenChange?: (open: boolean) => void;
263
+ /** Modal header content (TabBar, SearchBar, etc.) */
264
+ headerContent?: ReactNode;
265
+ /** Modal body content */
266
+ children: ReactNode;
267
+ /** Modal footer content (buttons, etc.) */
268
+ footerContent?: ReactNode;
269
+ /** Modal title */
270
+ title?: string;
271
+ /** Icon to display in header */
272
+ icon?: React.ComponentType<{
273
+ className?: string;
274
+ }>;
275
+ /** Whether to show close button */
276
+ showCloseButton?: boolean;
277
+ /** Whether to apply blur background to backdrop */
278
+ hasBlurBg?: boolean;
279
+ /** Modal size (desktop only) */
280
+ size?: 'full' | 'sm' | 'md' | 'lg' | 'xl';
281
+ minHeight?: string;
282
+ maxHeight?: string;
283
+ }
284
+
285
+ export declare function ProductCard(props: ProductCardProps): JSX.Element;
286
+
287
+ declare interface ProductCardProps {
288
+ title: string;
289
+ price: number;
290
+ abbreviation: string;
291
+ sku: string[];
292
+ quantity: number;
293
+ url?: string;
294
+ thumbnail: string;
295
+ rightContent?: ReactNode;
296
+ }
297
+
298
+ export declare interface RadiiConfigs {
299
+ xs: string;
300
+ sm: string;
301
+ md: string;
302
+ lg: string;
303
+ xl: string;
304
+ '2xl': string;
305
+ }
306
+
307
+ export declare type RadiiOption = 'option1' | 'option2' | 'option3' | 'option4';
308
+
309
+ export declare function SearchBar(props: SearchBarProps): JSX.Element;
310
+
311
+ declare interface SearchBarProps extends Omit<BoxProps, 'onChange'> {
312
+ placeholder?: string;
313
+ variant?: SearchBarVariant;
314
+ value?: string;
315
+ defaultValue?: string;
316
+ onChange?: InputProps_2['onChange'];
317
+ showClear?: boolean;
318
+ isDisabled?: boolean;
319
+ isExpanded?: boolean;
320
+ defaultExpanded?: boolean;
321
+ onExpandedChange?: (expanded: boolean) => void;
322
+ }
323
+
324
+ declare type SearchBarVariant = 'maximized' | 'icon';
325
+
326
+ export declare function SectionTitle(props: SectionTitleProps): JSX.Element;
327
+
328
+ declare interface SectionTitleProps extends Omit<BoxProps, 'title' | 'color' | 'direction'> {
329
+ title?: string;
330
+ icon?: React.ReactNode;
331
+ rightContent?: React.ReactNode;
332
+ showIcon?: boolean;
333
+ }
334
+
335
+ export declare function SelectionCard(props: SelectionCardProps): JSX.Element;
336
+
337
+ declare type SelectionCardProps = {
338
+ title: string;
339
+ subtitle: ReactNode;
340
+ actionMenuItems: ActionMenuItem[];
341
+ actionMenuProps?: Omit<ActionMenuProps, 'items'>;
342
+ isSelected?: boolean;
343
+ onClick?: () => void;
344
+ };
345
+
346
+ export declare const SelectionTab: ({ label, icon, showIcon, isSelected, isDisabled, onClick, }: SelectionTabProps) => JSX.Element;
347
+
348
+ declare interface SelectionTabProps {
349
+ label: string;
350
+ icon?: ElementType;
351
+ showIcon?: boolean;
352
+ isSelected?: boolean;
353
+ isDisabled?: boolean;
354
+ onClick?: () => void;
355
+ }
356
+
357
+ export declare const TextArea: default_2.ForwardRefExoticComponent<TextAreaProps & default_2.RefAttributes<HTMLTextAreaElement>>;
358
+
359
+ declare interface TextAreaProps extends Omit<TextareaProps, 'title' | 'onChange' | 'variant' | 'isInvalid'> {
360
+ /** Label text */
361
+ title?: string;
362
+ /** Subtitle text displayed below label */
363
+ subtitle?: string;
364
+ /** The supporting message text */
365
+ supportingMessage?: string;
366
+ /** Secondary text next to the label (e.g. "(Required)") */
367
+ secondaryText?: string;
368
+ /** Whether the textarea is required */
369
+ required?: boolean;
370
+ /** Label text for the chips badge in the label row */
371
+ chipsLabel?: string;
372
+ /** Variant of the textarea */
373
+ variant?: variants;
374
+ /** Change handler */
375
+ onChange?: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;
376
+ /** Disabled state */
377
+ isDisabled?: boolean;
378
+ /** Number of visible text rows */
379
+ rows?: number;
380
+ }
381
+
382
+ declare type TextListItemProps = BaseProps & {
383
+ type?: 'text';
384
+ label: string;
385
+ chipsLabel?: string;
386
+ leftIcon?: ElementType;
387
+ rightContent?: ReactNode;
388
+ };
389
+
390
+ export declare function Toast(props: ToastProps): JSX.Element;
391
+
392
+ declare type ToastProps = {
393
+ variant?: ToastVariant;
394
+ title: string;
395
+ description: string;
396
+ secondaryTitle: string;
397
+ primaryTitle: string;
398
+ onSecondaryClick?: () => void;
399
+ onPrimaryClick?: () => void;
400
+ onClose?: () => void;
401
+ };
402
+
403
+ declare type ToastVariant = 'information' | 'success' | 'warning' | 'error';
404
+
405
+ export declare interface TypographyConfigs {
406
+ fontFamily: string;
407
+ fontSizes?: {
408
+ h1?: string;
409
+ h2?: string;
410
+ h3?: string;
411
+ h4?: string;
412
+ h5?: string;
413
+ h6?: string;
414
+ subtitle?: string;
415
+ body1?: string;
416
+ body2?: string;
417
+ body3?: string;
418
+ caption?: string;
419
+ };
420
+ }
421
+
422
+ /**
423
+ * Theme Provider for UI-Kit
424
+ * Wraps Chakra UI and Next Themes
425
+ *
426
+ * @example
427
+ * // Use with default theme
428
+ * <UIKitProvider>
429
+ * <App />
430
+ * </UIKitProvider>
431
+ *
432
+ * @example
433
+ * // Use with custom theme
434
+ * const customSystem = createThemeSystem(customPalette, customTypography, 'option3');
435
+ * <UIKitProvider system={customSystem}>
436
+ * <App />
437
+ * </UIKitProvider>
438
+ */
439
+ export declare function UIKitProvider({ children, system }: UIKitProviderProps): JSX.Element;
440
+
441
+ declare interface UIKitProviderProps {
442
+ children: ReactNode;
443
+ system?: SystemContext;
444
+ }
445
+
446
+ declare type variants = 'primary' | 'outlined' | 'filled' | 'muted' | 'transparent' | 'information' | 'success' | 'warning' | 'error' | 'disabled';
447
+
448
+ export { }
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "droplinked-ui-kit",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "main": "./dist/droplinked-ui-kit.cjs",
6
+ "module": "./dist/droplinked-ui-kit.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/droplinked-ui-kit.js",
12
+ "require": "./dist/droplinked-ui-kit.cjs"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "scripts": {
19
+ "dev": "vite",
20
+ "build": "tsc -b && vite build",
21
+ "lint": "eslint .",
22
+ "preview": "vite preview",
23
+ "storybook": "storybook dev -p 6006",
24
+ "build-storybook": "storybook build"
25
+ },
26
+ "peerDependencies": {
27
+ "@chakra-ui/react": "^3.30.0",
28
+ "@emotion/react": "^11.14.0",
29
+ "next-themes": "^0.4.6",
30
+ "react": "^19.2.0",
31
+ "react-dom": "^19.2.0"
32
+ },
33
+ "devDependencies": {
34
+ "@chakra-ui/react": "^3.30.0",
35
+ "@chromatic-com/storybook": "^5.0.0",
36
+ "@emotion/react": "^11.14.0",
37
+ "@eslint/js": "^9.39.1",
38
+ "@storybook/addon-a11y": "^10.2.3",
39
+ "@storybook/addon-docs": "^10.2.3",
40
+ "@storybook/addon-mcp": "^0.2.2",
41
+ "@storybook/addon-onboarding": "^10.2.3",
42
+ "@storybook/addon-vitest": "^10.2.3",
43
+ "@storybook/react-vite": "^10.2.3",
44
+ "@types/node": "^24.10.1",
45
+ "@types/react": "^19.2.5",
46
+ "@types/react-dom": "^19.2.3",
47
+ "@vitejs/plugin-react": "^5.1.1",
48
+ "@vitest/browser-playwright": "^4.0.18",
49
+ "@vitest/coverage-v8": "^4.0.18",
50
+ "babel-plugin-react-compiler": "^1.0.0",
51
+ "eslint": "^9.39.1",
52
+ "eslint-plugin-react-hooks": "^7.0.1",
53
+ "eslint-plugin-react-refresh": "^0.4.24",
54
+ "eslint-plugin-storybook": "^10.2.3",
55
+ "globals": "^16.5.0",
56
+ "next-themes": "^0.4.6",
57
+ "playwright": "^1.58.1",
58
+ "prop-types": "^15.8.1",
59
+ "react": "^19.2.0",
60
+ "react-dom": "^19.2.0",
61
+ "storybook": "^10.2.3",
62
+ "typescript": "~5.8.2",
63
+ "typescript-eslint": "^8.46.4",
64
+ "vite": "^7.2.4",
65
+ "vite-plugin-dts": "^4.5.4",
66
+ "vite-tsconfig-paths": "^6.0.3",
67
+ "vitest": "^4.0.18"
68
+ },
69
+ "dependencies": {
70
+ "react-router-dom": "^7.12.0"
71
+ }
72
+ }