@herca/r-kit 0.0.34 → 0.0.35

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.
Files changed (33) hide show
  1. package/dist/components/calendar/index.cjs.map +1 -1
  2. package/dist/components/calendar/index.js.map +1 -1
  3. package/dist/components/counter/index.cjs.map +1 -1
  4. package/dist/components/counter/index.js.map +1 -1
  5. package/dist/components/date-picker/index.cjs.map +1 -1
  6. package/dist/components/date-picker/index.js.map +1 -1
  7. package/dist/components/form/index.d.cts +2 -2
  8. package/dist/components/form/index.d.ts +2 -2
  9. package/dist/components/input/index.cjs.map +1 -1
  10. package/dist/components/input/index.d.cts +1 -1
  11. package/dist/components/input/index.d.ts +1 -1
  12. package/dist/components/input/index.js.map +1 -1
  13. package/dist/components/input-file/index.cjs.map +1 -1
  14. package/dist/components/input-file/index.js.map +1 -1
  15. package/dist/components/input-otp/index.cjs.map +1 -1
  16. package/dist/components/input-otp/index.js.map +1 -1
  17. package/dist/components/sidebar/index.cjs.map +1 -1
  18. package/dist/components/sidebar/index.js.map +1 -1
  19. package/dist/components/table/index.cjs.map +1 -1
  20. package/dist/components/table/index.js.map +1 -1
  21. package/dist/hooks/use-copy.cjs +18 -0
  22. package/dist/hooks/use-copy.cjs.map +1 -0
  23. package/dist/hooks/use-copy.d.cts +6 -0
  24. package/dist/hooks/use-copy.d.ts +6 -0
  25. package/dist/hooks/use-copy.js +16 -0
  26. package/dist/hooks/use-copy.js.map +1 -0
  27. package/dist/hooks/use-mobile.cjs +43 -0
  28. package/dist/hooks/use-mobile.cjs.map +1 -0
  29. package/dist/hooks/use-mobile.d.cts +3 -0
  30. package/dist/hooks/use-mobile.d.ts +3 -0
  31. package/dist/hooks/use-mobile.js +21 -0
  32. package/dist/hooks/use-mobile.js.map +1 -0
  33. package/package.json +1 -1
@@ -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","../../../src/components/input-otp/input-otp.tsx"],"names":["twMerge","clsx","cva","jsx","jsxs","React","FormField","React2","React3"],"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","import * as React from 'react';\nimport { Input } from '../input';\nimport { cn } from '../../lib/utils';\nimport { FormField } from '../form';\n\nexport interface InputOTPProps {\n length?: number;\n value: string;\n onChange?: (value: string) => void;\n label?: string;\n hint?: string;\n description?: string | undefined;\n errorMessages?: string | string[] | undefined;\n disabled?: boolean;\n className?: string;\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const InputOTP = ({\n length = 6,\n value,\n onChange,\n label,\n hint,\n description,\n errorMessages,\n disabled,\n className,\n size = 'md',\n}: InputOTPProps) => {\n const inputsRef = React.useRef<Array<HTMLInputElement | null>>([]);\n\n const values = React.useMemo(() => {\n const chars = value.split('');\n return Array.from({ length }, (_, i) => chars[i] ?? '');\n }, [value, length]);\n\n const focusInput = (index: number) => {\n inputsRef.current[index]?.focus();\n };\n\n const handleChange = (index: number, char: string) => {\n if (!/^\\d?$/.test(char)) return;\n\n const next = [...values];\n next[index] = char;\n onChange?.(next.join(''));\n\n if (char && index < length - 1) {\n focusInput(index + 1);\n }\n };\n\n const handleKeyDown = (\n index: number,\n e: React.KeyboardEvent<HTMLInputElement>\n ) => {\n if (e.key === 'Backspace' && Boolean(values[index]) && index > 0) {\n focusInput(index - 1);\n }\n };\n\n return (\n <FormField\n label={label}\n hint={hint}\n className={className}\n errorMessages={errorMessages}\n >\n <div className=\"flex gap-2\">\n {values.map((char, i) => (\n <Input\n key={i}\n ref={(el) => {\n inputsRef.current[i] = el;\n }}\n value={char}\n disabled={disabled}\n inputMode=\"numeric\"\n maxLength={1}\n onChange={(e) => handleChange(i, e.target.value)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n className={cn('text-center', {\n 'w-9': size === 'sm',\n 'w-10': size === 'md',\n 'w-11': size === 'lg',\n })}\n size={size}\n description={i === 0 ? description : undefined}\n isError={Boolean(errorMessages)}\n />\n ))}\n </div>\n </FormField>\n );\n};\n\nInputOTP.displayName = 'InputOTP';\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","../../../src/components/input-otp/input-otp.tsx"],"names":["twMerge","clsx","cva","jsx","jsxs","React","FormField","React2","React3"],"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","import * as React from 'react';\nimport { Input } from '../input';\nimport { cn } from '../../lib/utils';\nimport { FormField } from '../form';\n\nexport interface InputOTPProps {\n length?: number;\n value: string;\n onChange?: (value: string) => void;\n label?: string;\n hint?: string;\n description?: string | undefined;\n errorMessages?: string | string[] | undefined;\n disabled?: boolean;\n className?: string;\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const InputOTP = ({\n length = 6,\n value,\n onChange,\n label,\n hint,\n description,\n errorMessages,\n disabled,\n className,\n size = 'md',\n}: InputOTPProps) => {\n const inputsRef = React.useRef<Array<HTMLInputElement | null>>([]);\n\n const values = React.useMemo(() => {\n const chars = value.split('');\n return Array.from({ length }, (_, i) => chars[i] ?? '');\n }, [value, length]);\n\n const focusInput = (index: number) => {\n inputsRef.current[index]?.focus();\n };\n\n const handleChange = (index: number, char: string) => {\n if (!/^\\d?$/.test(char)) return;\n\n const next = [...values];\n next[index] = char;\n onChange?.(next.join(''));\n\n if (char && index < length - 1) {\n focusInput(index + 1);\n }\n };\n\n const handleKeyDown = (\n index: number,\n e: React.KeyboardEvent<HTMLInputElement>\n ) => {\n if (e.key === 'Backspace' && Boolean(values[index]) && index > 0) {\n focusInput(index - 1);\n }\n };\n\n return (\n <FormField\n label={label}\n hint={hint}\n className={className}\n errorMessages={errorMessages}\n >\n <div className=\"flex gap-2\">\n {values.map((char, i) => (\n <Input\n key={i}\n ref={(el) => {\n inputsRef.current[i] = el;\n }}\n value={char}\n disabled={disabled}\n inputMode=\"numeric\"\n maxLength={1}\n onChange={(e) => handleChange(i, e.target.value)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n className={cn('text-center', {\n 'w-9': size === 'sm',\n 'w-10': size === 'md',\n 'w-11': size === 'lg',\n })}\n size={size}\n description={i === 0 ? description : undefined}\n isError={Boolean(errorMessages)}\n />\n ))}\n </div>\n </FormField>\n );\n};\n\nInputOTP.displayName = 'InputOTP';\n"]}
@@ -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","../../../src/components/input-otp/input-otp.tsx"],"names":["jsx","React","FormField","jsxs","React3"],"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","import * as React from 'react';\nimport { Input } from '../input';\nimport { cn } from '../../lib/utils';\nimport { FormField } from '../form';\n\nexport interface InputOTPProps {\n length?: number;\n value: string;\n onChange?: (value: string) => void;\n label?: string;\n hint?: string;\n description?: string | undefined;\n errorMessages?: string | string[] | undefined;\n disabled?: boolean;\n className?: string;\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const InputOTP = ({\n length = 6,\n value,\n onChange,\n label,\n hint,\n description,\n errorMessages,\n disabled,\n className,\n size = 'md',\n}: InputOTPProps) => {\n const inputsRef = React.useRef<Array<HTMLInputElement | null>>([]);\n\n const values = React.useMemo(() => {\n const chars = value.split('');\n return Array.from({ length }, (_, i) => chars[i] ?? '');\n }, [value, length]);\n\n const focusInput = (index: number) => {\n inputsRef.current[index]?.focus();\n };\n\n const handleChange = (index: number, char: string) => {\n if (!/^\\d?$/.test(char)) return;\n\n const next = [...values];\n next[index] = char;\n onChange?.(next.join(''));\n\n if (char && index < length - 1) {\n focusInput(index + 1);\n }\n };\n\n const handleKeyDown = (\n index: number,\n e: React.KeyboardEvent<HTMLInputElement>\n ) => {\n if (e.key === 'Backspace' && Boolean(values[index]) && index > 0) {\n focusInput(index - 1);\n }\n };\n\n return (\n <FormField\n label={label}\n hint={hint}\n className={className}\n errorMessages={errorMessages}\n >\n <div className=\"flex gap-2\">\n {values.map((char, i) => (\n <Input\n key={i}\n ref={(el) => {\n inputsRef.current[i] = el;\n }}\n value={char}\n disabled={disabled}\n inputMode=\"numeric\"\n maxLength={1}\n onChange={(e) => handleChange(i, e.target.value)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n className={cn('text-center', {\n 'w-9': size === 'sm',\n 'w-10': size === 'md',\n 'w-11': size === 'lg',\n })}\n size={size}\n description={i === 0 ? description : undefined}\n isError={Boolean(errorMessages)}\n />\n ))}\n </div>\n </FormField>\n );\n};\n\nInputOTP.displayName = 'InputOTP';\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","../../../src/components/input-otp/input-otp.tsx"],"names":["jsx","React","FormField","jsxs","React3"],"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","import * as React from 'react';\nimport { Input } from '../input';\nimport { cn } from '../../lib/utils';\nimport { FormField } from '../form';\n\nexport interface InputOTPProps {\n length?: number;\n value: string;\n onChange?: (value: string) => void;\n label?: string;\n hint?: string;\n description?: string | undefined;\n errorMessages?: string | string[] | undefined;\n disabled?: boolean;\n className?: string;\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const InputOTP = ({\n length = 6,\n value,\n onChange,\n label,\n hint,\n description,\n errorMessages,\n disabled,\n className,\n size = 'md',\n}: InputOTPProps) => {\n const inputsRef = React.useRef<Array<HTMLInputElement | null>>([]);\n\n const values = React.useMemo(() => {\n const chars = value.split('');\n return Array.from({ length }, (_, i) => chars[i] ?? '');\n }, [value, length]);\n\n const focusInput = (index: number) => {\n inputsRef.current[index]?.focus();\n };\n\n const handleChange = (index: number, char: string) => {\n if (!/^\\d?$/.test(char)) return;\n\n const next = [...values];\n next[index] = char;\n onChange?.(next.join(''));\n\n if (char && index < length - 1) {\n focusInput(index + 1);\n }\n };\n\n const handleKeyDown = (\n index: number,\n e: React.KeyboardEvent<HTMLInputElement>\n ) => {\n if (e.key === 'Backspace' && Boolean(values[index]) && index > 0) {\n focusInput(index - 1);\n }\n };\n\n return (\n <FormField\n label={label}\n hint={hint}\n className={className}\n errorMessages={errorMessages}\n >\n <div className=\"flex gap-2\">\n {values.map((char, i) => (\n <Input\n key={i}\n ref={(el) => {\n inputsRef.current[i] = el;\n }}\n value={char}\n disabled={disabled}\n inputMode=\"numeric\"\n maxLength={1}\n onChange={(e) => handleChange(i, e.target.value)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n className={cn('text-center', {\n 'w-9': size === 'sm',\n 'w-10': size === 'md',\n 'w-11': size === 'lg',\n })}\n size={size}\n description={i === 0 ? description : undefined}\n isError={Boolean(errorMessages)}\n />\n ))}\n </div>\n </FormField>\n );\n};\n\nInputOTP.displayName = 'InputOTP';\n"]}