@herca/r-kit 0.0.34 → 0.0.36
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/dist/components/calendar/index.cjs +443 -1469
- package/dist/components/calendar/index.cjs.map +1 -1
- package/dist/components/calendar/index.js +429 -1455
- package/dist/components/calendar/index.js.map +1 -1
- package/dist/components/checkbox/index.d.cts +2 -2
- package/dist/components/checkbox/index.d.ts +2 -2
- package/dist/components/counter/index.cjs.map +1 -1
- package/dist/components/counter/index.js.map +1 -1
- package/dist/components/date-picker/index.cjs +1641 -2667
- package/dist/components/date-picker/index.cjs.map +1 -1
- package/dist/components/date-picker/index.js +1629 -2655
- package/dist/components/date-picker/index.js.map +1 -1
- package/dist/components/form/index.d.cts +2 -2
- package/dist/components/form/index.d.ts +2 -2
- package/dist/components/input/index.cjs.map +1 -1
- package/dist/components/input/index.d.cts +1 -1
- package/dist/components/input/index.d.ts +1 -1
- package/dist/components/input/index.js.map +1 -1
- package/dist/components/input-file/index.cjs.map +1 -1
- package/dist/components/input-file/index.js.map +1 -1
- package/dist/components/input-otp/index.cjs.map +1 -1
- package/dist/components/input-otp/index.js.map +1 -1
- package/dist/components/modal/index.d.cts +3 -3
- package/dist/components/modal/index.d.ts +3 -3
- package/dist/components/sidebar/index.cjs.map +1 -1
- package/dist/components/sidebar/index.js.map +1 -1
- package/dist/components/switch/index.d.cts +1 -1
- package/dist/components/switch/index.d.ts +1 -1
- package/dist/components/table/index.cjs.map +1 -1
- package/dist/components/table/index.js.map +1 -1
- package/dist/components/useCopy/index.cjs +18 -0
- package/dist/components/useCopy/index.cjs.map +1 -0
- package/dist/components/useCopy/index.d.cts +6 -0
- package/dist/components/useCopy/index.d.ts +6 -0
- package/dist/components/useCopy/index.js +16 -0
- package/dist/components/useCopy/index.js.map +1 -0
- package/dist/components/useIsMobile/index.cjs +43 -0
- package/dist/components/useIsMobile/index.cjs.map +1 -0
- package/dist/components/useIsMobile/index.d.cts +3 -0
- package/dist/components/useIsMobile/index.d.ts +3 -0
- package/dist/components/useIsMobile/index.js +21 -0
- package/dist/components/useIsMobile/index.js.map +1 -0
- package/package.json +2 -2
|
@@ -19,7 +19,7 @@ interface FormHintProps {
|
|
|
19
19
|
children: React.ReactNode;
|
|
20
20
|
}
|
|
21
21
|
interface FormErrorMessagesProps {
|
|
22
|
-
messages?: string | string[];
|
|
22
|
+
messages?: string | string[] | undefined | null;
|
|
23
23
|
size?: FormSizeType;
|
|
24
24
|
className?: string;
|
|
25
25
|
}
|
|
@@ -32,7 +32,7 @@ interface FormFieldProps {
|
|
|
32
32
|
label?: string;
|
|
33
33
|
description?: string;
|
|
34
34
|
hint?: string;
|
|
35
|
-
errorMessages?: string | string[];
|
|
35
|
+
errorMessages?: string | string[] | undefined | null;
|
|
36
36
|
required?: boolean;
|
|
37
37
|
size?: FormSizeType;
|
|
38
38
|
htmlFor?: string;
|
|
@@ -19,7 +19,7 @@ interface FormHintProps {
|
|
|
19
19
|
children: React.ReactNode;
|
|
20
20
|
}
|
|
21
21
|
interface FormErrorMessagesProps {
|
|
22
|
-
messages?: string | string[];
|
|
22
|
+
messages?: string | string[] | undefined | null;
|
|
23
23
|
size?: FormSizeType;
|
|
24
24
|
className?: string;
|
|
25
25
|
}
|
|
@@ -32,7 +32,7 @@ interface FormFieldProps {
|
|
|
32
32
|
label?: string;
|
|
33
33
|
description?: string;
|
|
34
34
|
hint?: string;
|
|
35
|
-
errorMessages?: string | string[];
|
|
35
|
+
errorMessages?: string | string[] | undefined | null;
|
|
36
36
|
required?: boolean;
|
|
37
37
|
size?: FormSizeType;
|
|
38
38
|
htmlFor?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/input/input-variants.ts","../../../src/components/form/form-description.tsx","../../../src/components/form/form-error-messages.tsx","../../../src/components/form/form-label.tsx","../../../src/components/form/form-hint.tsx","../../../src/components/form/form-field.tsx","../../../src/components/input/input.tsx"],"names":["twMerge","clsx","cva","jsx","jsxs","React","FormField","React2"],"mappings":"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","file":"index.cjs","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport function fieldHasError(errorMessages: unknown) {\n return typeof errorMessages === 'string'\n ? errorMessages.trim().length > 0\n : Array.isArray(errorMessages)\n ? errorMessages.length > 0\n : false;\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const inputVariants = cva(\n 'w-full min-w-0 rounded-lg border bg-transparent px-3 py-2 text-base font-medium text-gray-800 shadow-xs transition outline-none placeholder:text-gray-500',\n {\n variants: {\n size: {\n sm: 'h-8 text-xs',\n md: 'h-9 text-sm',\n lg: 'h-10 text-base',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nexport type InputVariantProps = VariantProps<typeof inputVariants>;\n","import { cn } from '../../lib/utils';\nimport type { FormDescriptionProps } from './type';\n\nexport const FormDescription: React.FC<FormDescriptionProps> = ({\n className,\n children,\n}) => {\n return <p className={cn('text-xs text-gray-600', className)}>{children}</p>;\n};\n","import { cn } from '../../lib/utils';\nimport type { FormErrorMessageProps, FormErrorMessagesProps } from './type';\n\nexport const FormErrorMessages: React.FC<FormErrorMessagesProps> = ({\n messages,\n size = 'md',\n className,\n}) => {\n if (messages === undefined) return null;\n\n const errorList = Array.isArray(messages) ? messages : [messages];\n\n if (errorList.length === 0) return null;\n\n return (\n <div className={cn('space-y-0.5', className)}>\n {errorList.map((msg, i) => (\n <FormErrorMessage key={i} size={size}>\n {msg}\n </FormErrorMessage>\n ))}\n </div>\n );\n};\n\nexport const FormErrorMessage: React.FC<FormErrorMessageProps> = ({\n className,\n children,\n}) => {\n return <p className={cn('text-danger-500 text-xs', className)}>{children}</p>;\n};\n","import { cn } from '../../lib/utils';\nimport type { FormLabelProps } from './type';\n\nexport const FormLabel: React.FC<FormLabelProps> = ({\n htmlFor,\n required = false,\n size = 'md',\n className,\n children,\n}) => {\n const sizeClasses = {\n sm: 'text-xs',\n md: 'text-xs',\n lg: 'text-sm',\n };\n\n return (\n <label\n htmlFor={htmlFor}\n className={cn(\n sizeClasses[size || 'md'],\n 'font-metropolis block font-semibold text-gray-900',\n className\n )}\n >\n {children}\n {required && <span className=\"text-danger-500 ml-1\">*</span>}\n </label>\n );\n};\n","import { cn } from '../../lib/utils';\nimport type { FormHintProps } from './type';\n\nexport const FormHint: React.FC<FormHintProps> = ({ className, children }) => {\n return <p className={cn('text-xs text-gray-700', className)}>{children}</p>;\n};\n","import React from 'react';\nimport { cn } from '../../lib/utils';\nimport type { FormFieldProps } from './type';\nimport { FormLabel } from './form-label';\nimport { FormDescription } from './form-description';\nimport { FormHint } from './form-hint';\nimport { FormErrorMessages } from './form-error-messages';\n\nexport const FormField = React.forwardRef<HTMLDivElement, FormFieldProps>(\n function FormField(\n {\n label,\n description,\n hint,\n errorMessages,\n required = false,\n size = 'md',\n htmlFor,\n className,\n children,\n },\n ref\n ) {\n return (\n <div ref={ref} className={cn('flex flex-col gap-1', className)}>\n {label !== undefined && (\n <FormLabel htmlFor={htmlFor} required={required} size={size}>\n {label}\n </FormLabel>\n )}\n\n {description !== undefined && (\n <FormDescription size={size}>{description}</FormDescription>\n )}\n\n {children}\n\n {hint !== undefined && <FormHint size={size}>{hint}</FormHint>}\n\n {errorMessages !== undefined && (\n <FormErrorMessages messages={errorMessages} size={size} />\n )}\n </div>\n );\n }\n);\n","import * as React from 'react';\nimport { cn, fieldHasError } from '../../lib/utils';\nimport { inputVariants, type InputVariantProps } from './input-variants';\nimport { FormField } from '../form';\n\nexport interface InputProps\n extends Omit<React.ComponentProps<'input'>, 'size'>, InputVariantProps {\n leftAddon?: React.ReactNode;\n rightAddon?: React.ReactNode;\n label?: string;\n hint?: string;\n errorMessages?: string | string[];\n inputSize?: number;\n description?: string;\n leftAddonClassName?: string;\n rightAddonClassName?: string;\n isError?: boolean;\n mergedAddon?: boolean;\n onContainerResize?: (width: number) => void;\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n leftAddon,\n rightAddon,\n type = 'text',\n label,\n hint,\n errorMessages,\n size,\n inputSize,\n description,\n leftAddonClassName,\n rightAddonClassName,\n mergedAddon,\n isError,\n onContainerResize,\n ...props\n },\n ref\n ) => {\n const hasError = fieldHasError(errorMessages) ?? isError;\n const generatedId = React.useId();\n const fieldRef = React.useRef<HTMLDivElement | null>(null);\n\n React.useEffect(() => {\n if (!fieldRef.current || !onContainerResize) return;\n\n const ro = new ResizeObserver(([entry]) => {\n onContainerResize(entry.contentRect.width);\n });\n\n ro.observe(fieldRef.current);\n return () => ro.disconnect();\n }, [onContainerResize]);\n\n return (\n <FormField\n ref={fieldRef}\n label={label}\n hint={hint}\n description={description}\n errorMessages={errorMessages}\n className={className}\n required={props.required}\n size={size}\n htmlFor={props?.id ?? generatedId}\n >\n <div\n className={cn(\n 'flex w-full items-stretch overflow-hidden rounded-lg border bg-white',\n hasError\n ? 'border-danger-500 focus-within:border-danger-500'\n : 'focus-within:border-primary-300 border-gray-200'\n )}\n >\n {Boolean(leftAddon) && (\n <div\n className={cn(\n leftAddonClassName,\n 'flex items-center justify-center border-r border-gray-200 px-3',\n Boolean(mergedAddon) && 'border-r-0',\n hasError\n ? 'text-danger-500 border-danger-500'\n : 'border-gray-200 text-gray-600'\n )}\n >\n {leftAddon}\n </div>\n )}\n\n <input\n ref={ref}\n type={type}\n size={inputSize}\n id={props?.id ?? generatedId}\n className={cn(\n inputVariants({ size }),\n 'font-metropolis w-full rounded-none border-none focus-visible:outline-none',\n Boolean(leftAddon) && 'pl-2',\n Boolean(rightAddon) && 'pr-2',\n Boolean(mergedAddon) && 'shadow-none',\n Boolean(props.disabled) && 'cursor-not-allowed bg-gray-100',\n className\n )}\n {...props}\n required={false}\n />\n\n {Boolean(rightAddon) && (\n <div\n className={cn(\n rightAddonClassName,\n 'flex items-center justify-center border-l border-gray-200 px-3',\n hasError ? 'text-danger-500' : 'text-gray-600',\n Boolean(mergedAddon) && 'border-l-0'\n )}\n >\n {rightAddon}\n </div>\n )}\n </div>\n </FormField>\n );\n }\n);\n\nInput.displayName = 'Input';\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/input/input-variants.ts","../../../src/components/form/form-description.tsx","../../../src/components/form/form-error-messages.tsx","../../../src/components/form/form-label.tsx","../../../src/components/form/form-hint.tsx","../../../src/components/form/form-field.tsx","../../../src/components/input/input.tsx"],"names":["twMerge","clsx","cva","jsx","jsxs","React","FormField","React2"],"mappings":"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","file":"index.cjs","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport function fieldHasError(errorMessages: unknown) {\n return typeof errorMessages === 'string'\n ? errorMessages.trim().length > 0\n : Array.isArray(errorMessages)\n ? errorMessages.length > 0\n : false;\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const inputVariants = cva(\n 'w-full min-w-0 rounded-lg border bg-transparent px-3 py-2 text-base font-medium text-gray-800 shadow-xs transition outline-none placeholder:text-gray-500',\n {\n variants: {\n size: {\n sm: 'h-8 text-xs',\n md: 'h-9 text-sm',\n lg: 'h-10 text-base',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nexport type InputVariantProps = VariantProps<typeof inputVariants>;\n","import { cn } from '../../lib/utils';\nimport type { FormDescriptionProps } from './type';\n\nexport const FormDescription: React.FC<FormDescriptionProps> = ({\n className,\n children,\n}) => {\n return <p className={cn('text-xs text-gray-600', className)}>{children}</p>;\n};\n","import { cn } from '../../lib/utils';\nimport type { FormErrorMessageProps, FormErrorMessagesProps } from './type';\n\nexport const FormErrorMessages: React.FC<FormErrorMessagesProps> = ({\n messages,\n size = 'md',\n className,\n}) => {\n if (messages === undefined) return null;\n\n const errorList = Array.isArray(messages) ? messages : [messages];\n\n if (errorList.length === 0) return null;\n\n return (\n <div className={cn('space-y-0.5', className)}>\n {errorList.map((msg, i) => (\n <FormErrorMessage key={i} size={size}>\n {msg}\n </FormErrorMessage>\n ))}\n </div>\n );\n};\n\nexport const FormErrorMessage: React.FC<FormErrorMessageProps> = ({\n className,\n children,\n}) => {\n return <p className={cn('text-danger-500 text-xs', className)}>{children}</p>;\n};\n","import { cn } from '../../lib/utils';\nimport type { FormLabelProps } from './type';\n\nexport const FormLabel: React.FC<FormLabelProps> = ({\n htmlFor,\n required = false,\n size = 'md',\n className,\n children,\n}) => {\n const sizeClasses = {\n sm: 'text-xs',\n md: 'text-xs',\n lg: 'text-sm',\n };\n\n return (\n <label\n htmlFor={htmlFor}\n className={cn(\n sizeClasses[size || 'md'],\n 'font-metropolis block font-semibold text-gray-900',\n className\n )}\n >\n {children}\n {required && <span className=\"text-danger-500 ml-1\">*</span>}\n </label>\n );\n};\n","import { cn } from '../../lib/utils';\nimport type { FormHintProps } from './type';\n\nexport const FormHint: React.FC<FormHintProps> = ({ className, children }) => {\n return <p className={cn('text-xs text-gray-700', className)}>{children}</p>;\n};\n","import React from 'react';\nimport { cn } from '../../lib/utils';\nimport type { FormFieldProps } from './type';\nimport { FormLabel } from './form-label';\nimport { FormDescription } from './form-description';\nimport { FormHint } from './form-hint';\nimport { FormErrorMessages } from './form-error-messages';\n\nexport const FormField = React.forwardRef<HTMLDivElement, FormFieldProps>(\n function FormField(\n {\n label,\n description,\n hint,\n errorMessages,\n required = false,\n size = 'md',\n htmlFor,\n className,\n children,\n },\n ref\n ) {\n return (\n <div ref={ref} className={cn('flex flex-col gap-1', className)}>\n {label !== undefined && (\n <FormLabel htmlFor={htmlFor} required={required} size={size}>\n {label}\n </FormLabel>\n )}\n\n {description !== undefined && (\n <FormDescription size={size}>{description}</FormDescription>\n )}\n\n {children}\n\n {hint !== undefined && <FormHint size={size}>{hint}</FormHint>}\n\n {errorMessages !== undefined && (\n <FormErrorMessages messages={errorMessages} size={size} />\n )}\n </div>\n );\n }\n);\n","import * as React from 'react';\nimport { cn, fieldHasError } from '../../lib/utils';\nimport { inputVariants, type InputVariantProps } from './input-variants';\nimport { FormField } from '../form';\n\nexport interface InputProps\n extends Omit<React.ComponentProps<'input'>, 'size'>, InputVariantProps {\n leftAddon?: React.ReactNode;\n rightAddon?: React.ReactNode;\n label?: string;\n hint?: string;\n errorMessages?: string | string[] | undefined | null;\n inputSize?: number;\n description?: string;\n leftAddonClassName?: string;\n rightAddonClassName?: string;\n isError?: boolean;\n mergedAddon?: boolean;\n onContainerResize?: (width: number) => void;\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n leftAddon,\n rightAddon,\n type = 'text',\n label,\n hint,\n errorMessages,\n size,\n inputSize,\n description,\n leftAddonClassName,\n rightAddonClassName,\n mergedAddon,\n isError,\n onContainerResize,\n ...props\n },\n ref\n ) => {\n const hasError = fieldHasError(errorMessages) ?? isError;\n const generatedId = React.useId();\n const fieldRef = React.useRef<HTMLDivElement | null>(null);\n\n React.useEffect(() => {\n if (!fieldRef.current || !onContainerResize) return;\n\n const ro = new ResizeObserver(([entry]) => {\n onContainerResize(entry.contentRect.width);\n });\n\n ro.observe(fieldRef.current);\n return () => ro.disconnect();\n }, [onContainerResize]);\n\n return (\n <FormField\n ref={fieldRef}\n label={label}\n hint={hint}\n description={description}\n errorMessages={errorMessages}\n className={className}\n required={props.required}\n size={size}\n htmlFor={props?.id ?? generatedId}\n >\n <div\n className={cn(\n 'flex w-full items-stretch overflow-hidden rounded-lg border bg-white',\n hasError\n ? 'border-danger-500 focus-within:border-danger-500'\n : 'focus-within:border-primary-300 border-gray-200'\n )}\n >\n {Boolean(leftAddon) && (\n <div\n className={cn(\n leftAddonClassName,\n 'flex items-center justify-center border-r border-gray-200 px-3',\n Boolean(mergedAddon) && 'border-r-0',\n hasError\n ? 'text-danger-500 border-danger-500'\n : 'border-gray-200 text-gray-600'\n )}\n >\n {leftAddon}\n </div>\n )}\n\n <input\n ref={ref}\n type={type}\n size={inputSize}\n id={props?.id ?? generatedId}\n className={cn(\n inputVariants({ size }),\n 'font-metropolis w-full rounded-none border-none focus-visible:outline-none',\n Boolean(leftAddon) && 'pl-2',\n Boolean(rightAddon) && 'pr-2',\n Boolean(mergedAddon) && 'shadow-none',\n Boolean(props.disabled) && 'cursor-not-allowed bg-gray-100',\n className\n )}\n {...props}\n required={false}\n />\n\n {Boolean(rightAddon) && (\n <div\n className={cn(\n rightAddonClassName,\n 'flex items-center justify-center border-l border-gray-200 px-3',\n hasError ? 'text-danger-500' : 'text-gray-600',\n Boolean(mergedAddon) && 'border-l-0'\n )}\n >\n {rightAddon}\n </div>\n )}\n </div>\n </FormField>\n );\n }\n);\n\nInput.displayName = 'Input';\n"]}
|
|
@@ -12,7 +12,7 @@ interface InputProps extends Omit<react.ComponentProps<'input'>, 'size'>, InputV
|
|
|
12
12
|
rightAddon?: react.ReactNode;
|
|
13
13
|
label?: string;
|
|
14
14
|
hint?: string;
|
|
15
|
-
errorMessages?: string | string[];
|
|
15
|
+
errorMessages?: string | string[] | undefined | null;
|
|
16
16
|
inputSize?: number;
|
|
17
17
|
description?: string;
|
|
18
18
|
leftAddonClassName?: string;
|
|
@@ -12,7 +12,7 @@ interface InputProps extends Omit<react.ComponentProps<'input'>, 'size'>, InputV
|
|
|
12
12
|
rightAddon?: react.ReactNode;
|
|
13
13
|
label?: string;
|
|
14
14
|
hint?: string;
|
|
15
|
-
errorMessages?: string | string[];
|
|
15
|
+
errorMessages?: string | string[] | undefined | null;
|
|
16
16
|
inputSize?: number;
|
|
17
17
|
description?: string;
|
|
18
18
|
leftAddonClassName?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/input/input-variants.ts","../../../src/components/form/form-description.tsx","../../../src/components/form/form-error-messages.tsx","../../../src/components/form/form-label.tsx","../../../src/components/form/form-hint.tsx","../../../src/components/form/form-field.tsx","../../../src/components/input/input.tsx"],"names":["jsx","React","FormField","jsxs"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport function fieldHasError(errorMessages: unknown) {\n return typeof errorMessages === 'string'\n ? errorMessages.trim().length > 0\n : Array.isArray(errorMessages)\n ? errorMessages.length > 0\n : false;\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const inputVariants = cva(\n 'w-full min-w-0 rounded-lg border bg-transparent px-3 py-2 text-base font-medium text-gray-800 shadow-xs transition outline-none placeholder:text-gray-500',\n {\n variants: {\n size: {\n sm: 'h-8 text-xs',\n md: 'h-9 text-sm',\n lg: 'h-10 text-base',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nexport type InputVariantProps = VariantProps<typeof inputVariants>;\n","import { cn } from '../../lib/utils';\nimport type { FormDescriptionProps } from './type';\n\nexport const FormDescription: React.FC<FormDescriptionProps> = ({\n className,\n children,\n}) => {\n return <p className={cn('text-xs text-gray-600', className)}>{children}</p>;\n};\n","import { cn } from '../../lib/utils';\nimport type { FormErrorMessageProps, FormErrorMessagesProps } from './type';\n\nexport const FormErrorMessages: React.FC<FormErrorMessagesProps> = ({\n messages,\n size = 'md',\n className,\n}) => {\n if (messages === undefined) return null;\n\n const errorList = Array.isArray(messages) ? messages : [messages];\n\n if (errorList.length === 0) return null;\n\n return (\n <div className={cn('space-y-0.5', className)}>\n {errorList.map((msg, i) => (\n <FormErrorMessage key={i} size={size}>\n {msg}\n </FormErrorMessage>\n ))}\n </div>\n );\n};\n\nexport const FormErrorMessage: React.FC<FormErrorMessageProps> = ({\n className,\n children,\n}) => {\n return <p className={cn('text-danger-500 text-xs', className)}>{children}</p>;\n};\n","import { cn } from '../../lib/utils';\nimport type { FormLabelProps } from './type';\n\nexport const FormLabel: React.FC<FormLabelProps> = ({\n htmlFor,\n required = false,\n size = 'md',\n className,\n children,\n}) => {\n const sizeClasses = {\n sm: 'text-xs',\n md: 'text-xs',\n lg: 'text-sm',\n };\n\n return (\n <label\n htmlFor={htmlFor}\n className={cn(\n sizeClasses[size || 'md'],\n 'font-metropolis block font-semibold text-gray-900',\n className\n )}\n >\n {children}\n {required && <span className=\"text-danger-500 ml-1\">*</span>}\n </label>\n );\n};\n","import { cn } from '../../lib/utils';\nimport type { FormHintProps } from './type';\n\nexport const FormHint: React.FC<FormHintProps> = ({ className, children }) => {\n return <p className={cn('text-xs text-gray-700', className)}>{children}</p>;\n};\n","import React from 'react';\nimport { cn } from '../../lib/utils';\nimport type { FormFieldProps } from './type';\nimport { FormLabel } from './form-label';\nimport { FormDescription } from './form-description';\nimport { FormHint } from './form-hint';\nimport { FormErrorMessages } from './form-error-messages';\n\nexport const FormField = React.forwardRef<HTMLDivElement, FormFieldProps>(\n function FormField(\n {\n label,\n description,\n hint,\n errorMessages,\n required = false,\n size = 'md',\n htmlFor,\n className,\n children,\n },\n ref\n ) {\n return (\n <div ref={ref} className={cn('flex flex-col gap-1', className)}>\n {label !== undefined && (\n <FormLabel htmlFor={htmlFor} required={required} size={size}>\n {label}\n </FormLabel>\n )}\n\n {description !== undefined && (\n <FormDescription size={size}>{description}</FormDescription>\n )}\n\n {children}\n\n {hint !== undefined && <FormHint size={size}>{hint}</FormHint>}\n\n {errorMessages !== undefined && (\n <FormErrorMessages messages={errorMessages} size={size} />\n )}\n </div>\n );\n }\n);\n","import * as React from 'react';\nimport { cn, fieldHasError } from '../../lib/utils';\nimport { inputVariants, type InputVariantProps } from './input-variants';\nimport { FormField } from '../form';\n\nexport interface InputProps\n extends Omit<React.ComponentProps<'input'>, 'size'>, InputVariantProps {\n leftAddon?: React.ReactNode;\n rightAddon?: React.ReactNode;\n label?: string;\n hint?: string;\n errorMessages?: string | string[];\n inputSize?: number;\n description?: string;\n leftAddonClassName?: string;\n rightAddonClassName?: string;\n isError?: boolean;\n mergedAddon?: boolean;\n onContainerResize?: (width: number) => void;\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n leftAddon,\n rightAddon,\n type = 'text',\n label,\n hint,\n errorMessages,\n size,\n inputSize,\n description,\n leftAddonClassName,\n rightAddonClassName,\n mergedAddon,\n isError,\n onContainerResize,\n ...props\n },\n ref\n ) => {\n const hasError = fieldHasError(errorMessages) ?? isError;\n const generatedId = React.useId();\n const fieldRef = React.useRef<HTMLDivElement | null>(null);\n\n React.useEffect(() => {\n if (!fieldRef.current || !onContainerResize) return;\n\n const ro = new ResizeObserver(([entry]) => {\n onContainerResize(entry.contentRect.width);\n });\n\n ro.observe(fieldRef.current);\n return () => ro.disconnect();\n }, [onContainerResize]);\n\n return (\n <FormField\n ref={fieldRef}\n label={label}\n hint={hint}\n description={description}\n errorMessages={errorMessages}\n className={className}\n required={props.required}\n size={size}\n htmlFor={props?.id ?? generatedId}\n >\n <div\n className={cn(\n 'flex w-full items-stretch overflow-hidden rounded-lg border bg-white',\n hasError\n ? 'border-danger-500 focus-within:border-danger-500'\n : 'focus-within:border-primary-300 border-gray-200'\n )}\n >\n {Boolean(leftAddon) && (\n <div\n className={cn(\n leftAddonClassName,\n 'flex items-center justify-center border-r border-gray-200 px-3',\n Boolean(mergedAddon) && 'border-r-0',\n hasError\n ? 'text-danger-500 border-danger-500'\n : 'border-gray-200 text-gray-600'\n )}\n >\n {leftAddon}\n </div>\n )}\n\n <input\n ref={ref}\n type={type}\n size={inputSize}\n id={props?.id ?? generatedId}\n className={cn(\n inputVariants({ size }),\n 'font-metropolis w-full rounded-none border-none focus-visible:outline-none',\n Boolean(leftAddon) && 'pl-2',\n Boolean(rightAddon) && 'pr-2',\n Boolean(mergedAddon) && 'shadow-none',\n Boolean(props.disabled) && 'cursor-not-allowed bg-gray-100',\n className\n )}\n {...props}\n required={false}\n />\n\n {Boolean(rightAddon) && (\n <div\n className={cn(\n rightAddonClassName,\n 'flex items-center justify-center border-l border-gray-200 px-3',\n hasError ? 'text-danger-500' : 'text-gray-600',\n Boolean(mergedAddon) && 'border-l-0'\n )}\n >\n {rightAddon}\n </div>\n )}\n </div>\n </FormField>\n );\n }\n);\n\nInput.displayName = 'Input';\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/input/input-variants.ts","../../../src/components/form/form-description.tsx","../../../src/components/form/form-error-messages.tsx","../../../src/components/form/form-label.tsx","../../../src/components/form/form-hint.tsx","../../../src/components/form/form-field.tsx","../../../src/components/input/input.tsx"],"names":["jsx","React","FormField","jsxs"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport function fieldHasError(errorMessages: unknown) {\n return typeof errorMessages === 'string'\n ? errorMessages.trim().length > 0\n : Array.isArray(errorMessages)\n ? errorMessages.length > 0\n : false;\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const inputVariants = cva(\n 'w-full min-w-0 rounded-lg border bg-transparent px-3 py-2 text-base font-medium text-gray-800 shadow-xs transition outline-none placeholder:text-gray-500',\n {\n variants: {\n size: {\n sm: 'h-8 text-xs',\n md: 'h-9 text-sm',\n lg: 'h-10 text-base',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nexport type InputVariantProps = VariantProps<typeof inputVariants>;\n","import { cn } from '../../lib/utils';\nimport type { FormDescriptionProps } from './type';\n\nexport const FormDescription: React.FC<FormDescriptionProps> = ({\n className,\n children,\n}) => {\n return <p className={cn('text-xs text-gray-600', className)}>{children}</p>;\n};\n","import { cn } from '../../lib/utils';\nimport type { FormErrorMessageProps, FormErrorMessagesProps } from './type';\n\nexport const FormErrorMessages: React.FC<FormErrorMessagesProps> = ({\n messages,\n size = 'md',\n className,\n}) => {\n if (messages === undefined) return null;\n\n const errorList = Array.isArray(messages) ? messages : [messages];\n\n if (errorList.length === 0) return null;\n\n return (\n <div className={cn('space-y-0.5', className)}>\n {errorList.map((msg, i) => (\n <FormErrorMessage key={i} size={size}>\n {msg}\n </FormErrorMessage>\n ))}\n </div>\n );\n};\n\nexport const FormErrorMessage: React.FC<FormErrorMessageProps> = ({\n className,\n children,\n}) => {\n return <p className={cn('text-danger-500 text-xs', className)}>{children}</p>;\n};\n","import { cn } from '../../lib/utils';\nimport type { FormLabelProps } from './type';\n\nexport const FormLabel: React.FC<FormLabelProps> = ({\n htmlFor,\n required = false,\n size = 'md',\n className,\n children,\n}) => {\n const sizeClasses = {\n sm: 'text-xs',\n md: 'text-xs',\n lg: 'text-sm',\n };\n\n return (\n <label\n htmlFor={htmlFor}\n className={cn(\n sizeClasses[size || 'md'],\n 'font-metropolis block font-semibold text-gray-900',\n className\n )}\n >\n {children}\n {required && <span className=\"text-danger-500 ml-1\">*</span>}\n </label>\n );\n};\n","import { cn } from '../../lib/utils';\nimport type { FormHintProps } from './type';\n\nexport const FormHint: React.FC<FormHintProps> = ({ className, children }) => {\n return <p className={cn('text-xs text-gray-700', className)}>{children}</p>;\n};\n","import React from 'react';\nimport { cn } from '../../lib/utils';\nimport type { FormFieldProps } from './type';\nimport { FormLabel } from './form-label';\nimport { FormDescription } from './form-description';\nimport { FormHint } from './form-hint';\nimport { FormErrorMessages } from './form-error-messages';\n\nexport const FormField = React.forwardRef<HTMLDivElement, FormFieldProps>(\n function FormField(\n {\n label,\n description,\n hint,\n errorMessages,\n required = false,\n size = 'md',\n htmlFor,\n className,\n children,\n },\n ref\n ) {\n return (\n <div ref={ref} className={cn('flex flex-col gap-1', className)}>\n {label !== undefined && (\n <FormLabel htmlFor={htmlFor} required={required} size={size}>\n {label}\n </FormLabel>\n )}\n\n {description !== undefined && (\n <FormDescription size={size}>{description}</FormDescription>\n )}\n\n {children}\n\n {hint !== undefined && <FormHint size={size}>{hint}</FormHint>}\n\n {errorMessages !== undefined && (\n <FormErrorMessages messages={errorMessages} size={size} />\n )}\n </div>\n );\n }\n);\n","import * as React from 'react';\nimport { cn, fieldHasError } from '../../lib/utils';\nimport { inputVariants, type InputVariantProps } from './input-variants';\nimport { FormField } from '../form';\n\nexport interface InputProps\n extends Omit<React.ComponentProps<'input'>, 'size'>, InputVariantProps {\n leftAddon?: React.ReactNode;\n rightAddon?: React.ReactNode;\n label?: string;\n hint?: string;\n errorMessages?: string | string[] | undefined | null;\n inputSize?: number;\n description?: string;\n leftAddonClassName?: string;\n rightAddonClassName?: string;\n isError?: boolean;\n mergedAddon?: boolean;\n onContainerResize?: (width: number) => void;\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n leftAddon,\n rightAddon,\n type = 'text',\n label,\n hint,\n errorMessages,\n size,\n inputSize,\n description,\n leftAddonClassName,\n rightAddonClassName,\n mergedAddon,\n isError,\n onContainerResize,\n ...props\n },\n ref\n ) => {\n const hasError = fieldHasError(errorMessages) ?? isError;\n const generatedId = React.useId();\n const fieldRef = React.useRef<HTMLDivElement | null>(null);\n\n React.useEffect(() => {\n if (!fieldRef.current || !onContainerResize) return;\n\n const ro = new ResizeObserver(([entry]) => {\n onContainerResize(entry.contentRect.width);\n });\n\n ro.observe(fieldRef.current);\n return () => ro.disconnect();\n }, [onContainerResize]);\n\n return (\n <FormField\n ref={fieldRef}\n label={label}\n hint={hint}\n description={description}\n errorMessages={errorMessages}\n className={className}\n required={props.required}\n size={size}\n htmlFor={props?.id ?? generatedId}\n >\n <div\n className={cn(\n 'flex w-full items-stretch overflow-hidden rounded-lg border bg-white',\n hasError\n ? 'border-danger-500 focus-within:border-danger-500'\n : 'focus-within:border-primary-300 border-gray-200'\n )}\n >\n {Boolean(leftAddon) && (\n <div\n className={cn(\n leftAddonClassName,\n 'flex items-center justify-center border-r border-gray-200 px-3',\n Boolean(mergedAddon) && 'border-r-0',\n hasError\n ? 'text-danger-500 border-danger-500'\n : 'border-gray-200 text-gray-600'\n )}\n >\n {leftAddon}\n </div>\n )}\n\n <input\n ref={ref}\n type={type}\n size={inputSize}\n id={props?.id ?? generatedId}\n className={cn(\n inputVariants({ size }),\n 'font-metropolis w-full rounded-none border-none focus-visible:outline-none',\n Boolean(leftAddon) && 'pl-2',\n Boolean(rightAddon) && 'pr-2',\n Boolean(mergedAddon) && 'shadow-none',\n Boolean(props.disabled) && 'cursor-not-allowed bg-gray-100',\n className\n )}\n {...props}\n required={false}\n />\n\n {Boolean(rightAddon) && (\n <div\n className={cn(\n rightAddonClassName,\n 'flex items-center justify-center border-l border-gray-200 px-3',\n hasError ? 'text-danger-500' : 'text-gray-600',\n Boolean(mergedAddon) && 'border-l-0'\n )}\n >\n {rightAddon}\n </div>\n )}\n </div>\n </FormField>\n );\n }\n);\n\nInput.displayName = 'Input';\n"]}
|