gd-ui-library 1.0.3 → 1.0.4

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/index.css ADDED
@@ -0,0 +1,5 @@
1
+ /* src/index.css */
2
+ @tailwind base;
3
+ @tailwind components;
4
+ @tailwind utilities;
5
+ /*# sourceMappingURL=index.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.css"],"sourcesContent":["@tailwind base;\r\n@tailwind components;\r\n@tailwind utilities;"],"mappings":";AAAA,UAAU;AACV,UAAU;AACV,UAAU;","names":[]}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/components/Button/Button.tsx","../src/utils/cn.ts","../src/components/Input/Input.tsx"],"sourcesContent":["export { Button } from \"./components/Button/Button\";\r\nexport { Input } from \"./components/Input/Input\";","import React, { ButtonHTMLAttributes, forwardRef } from \"react\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\nexport interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'size'> {\r\n label?: string;\r\n error?: string;\r\n description?: string;\r\n required?: boolean;\r\n leftIcon?: React.ReactNode;\r\n rightIcon?: React.ReactNode;\r\n size?: 'sm' | 'md' | 'lg';\r\n variant?: 'default' | 'filled' | 'unstyled';\r\n}\r\n\r\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ \r\n className,\r\n label,\r\n error,\r\n description,\r\n required,\r\n leftIcon,\r\n rightIcon,\r\n size = 'md',\r\n variant = 'default',\r\n children,\r\n ...props \r\n }, ref) => {\r\n // Base styles\r\n const baseStyles = \"inline-flex items-center justify-center font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none\";\r\n \r\n // Size variants\r\n const sizeStyles = {\r\n sm: \"px-3 py-1.5 text-sm rounded-md\",\r\n md: \"px-4 py-2 text-sm rounded-md\",\r\n lg: \"px-6 py-3 text-base rounded-lg\"\r\n };\r\n \r\n // Style variants\r\n const variantStyles = {\r\n default: \"bg-white text-gray-900 border border-gray-300 hover:bg-gray-50 focus:ring-blue-500\",\r\n filled: \"bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500\",\r\n unstyled: \"\"\r\n };\r\n \r\n return (\r\n <button\r\n ref={ref}\r\n className={cn(\r\n baseStyles,\r\n sizeStyles[size],\r\n variantStyles[variant],\r\n error && \"border-red-500 focus:ring-red-500\",\r\n className\r\n )}\r\n aria-invalid={!!error}\r\n aria-describedby={description ? `${props.id}-description` : undefined}\r\n {...props}\r\n >\r\n {leftIcon && <span className=\"mr-2\">{leftIcon}</span>}\r\n {label || children}\r\n {rightIcon && <span className=\"ml-2\">{rightIcon}</span>}\r\n {required && <span className=\"ml-1 text-red-500\">*</span>}\r\n {error && <span className=\"sr-only\">{error}</span>}\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nButton.displayName = \"Button\";","import { clsx, type ClassValue } from \"clsx\"\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return clsx(inputs)\r\n}\r\n","import React, { forwardRef } from \"react\";\r\nimport { cn } from \"../../utils/cn\";\r\nimport { AlertCircle } from \"lucide-react\";\r\n\r\nexport interface InputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\"> {\r\n label?: string;\r\n error?: string;\r\n description?: string;\r\n required?: boolean;\r\n placeholder?: string;\r\n leftIcon?: React.ReactNode;\r\n rightIcon?: React.ReactNode;\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n}\r\n\r\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\r\n (\r\n {\r\n label,\r\n error,\r\n description,\r\n required,\r\n placeholder,\r\n leftIcon,\r\n rightIcon,\r\n size = \"md\",\r\n className,\r\n disabled,\r\n id,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const inputId = id || `input-${Math.random().toString(36).slice(2, 9)}`;\r\n\r\n const sizeClasses = {\r\n sm: \"h-9 text-sm px-3\",\r\n md: \"h-10 text-sm px-3.5\",\r\n lg: \"h-12 text-base px-4\",\r\n }[size];\r\n\r\n return (\r\n <div className=\"w-full space-y-1.5\">\r\n {/* Label */}\r\n {label && (\r\n <label\r\n htmlFor={inputId}\r\n className={cn(\r\n \"text-sm font-medium\",\r\n disabled ? \"text-gray-400\" : \"text-gray-700\"\r\n )}\r\n >\r\n {label}\r\n {required && <span className=\"text-red-500 ml-1\">*</span>}\r\n </label>\r\n )}\r\n\r\n {/* Description */}\r\n {description && !error && (\r\n <p className=\"text-xs text-gray-500\">{description}</p>\r\n )}\r\n\r\n {/* Input wrapper */}\r\n <div className=\"relative\">\r\n {/* Left Icon */}\r\n {leftIcon && (\r\n <span className=\"absolute left-3 top-1/2 -translate-y-1/2 text-gray-400\">\r\n {leftIcon}\r\n </span>\r\n )}\r\n\r\n {/* Input */}\r\n <input\r\n ref={ref}\r\n id={inputId}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n aria-invalid={!!error}\r\n className={cn(\r\n \"w-full rounded-lg border border-gray-300 bg-white\",\r\n \"transition-all duration-150 outline-none\",\r\n \"placeholder:text-gray-400 placeholder:text-sm\",\r\n \"focus:border-blue-500 focus:ring-2 focus:ring-blue-100\",\r\n \"disabled:bg-gray-100 disabled:text-gray-400 disabled:cursor-not-allowed\",\r\n error && \"border-red-500 focus:border-red-500 focus:ring-red-100\",\r\n leftIcon && \"pl-10\",\r\n rightIcon && \"pr-10\",\r\n sizeClasses,\r\n className\r\n )}\r\n {...props}\r\n />\r\n\r\n {/* Right Icon */}\r\n {rightIcon && (\r\n <span className=\"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400\">\r\n {rightIcon}\r\n </span>\r\n )}\r\n </div>\r\n \r\n {error && (\r\n <p className=\"flex items-center gap-1 text-xs text-red-500\">\r\n <AlertCircle className=\"w-3.5 h-3.5\" />\r\n {error}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nInput.displayName = \"Input\";"],"mappings":"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","names":["import_react","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/components/Button/Button.tsx","../src/utils/cn.ts","../src/components/Input/Input.tsx"],"sourcesContent":["import './index.css';\r\nexport { Button } from \"./components/Button/Button\";\r\nexport { Input } from \"./components/Input/Input\";","import React, { ButtonHTMLAttributes, forwardRef } from \"react\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\nexport interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'size'> {\r\n label?: string;\r\n error?: string;\r\n description?: string;\r\n required?: boolean;\r\n leftIcon?: React.ReactNode;\r\n rightIcon?: React.ReactNode;\r\n size?: 'sm' | 'md' | 'lg';\r\n variant?: 'default' | 'filled' | 'unstyled';\r\n}\r\n\r\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ \r\n className,\r\n label,\r\n error,\r\n description,\r\n required,\r\n leftIcon,\r\n rightIcon,\r\n size = 'md',\r\n variant = 'default',\r\n children,\r\n ...props \r\n }, ref) => {\r\n // Base styles\r\n const baseStyles = \"inline-flex items-center justify-center font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none\";\r\n \r\n // Size variants\r\n const sizeStyles = {\r\n sm: \"px-3 py-1.5 text-sm rounded-md\",\r\n md: \"px-4 py-2 text-sm rounded-md\",\r\n lg: \"px-6 py-3 text-base rounded-lg\"\r\n };\r\n \r\n // Style variants\r\n const variantStyles = {\r\n default: \"bg-white text-gray-900 border border-gray-300 hover:bg-gray-50 focus:ring-blue-500\",\r\n filled: \"bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500\",\r\n unstyled: \"\"\r\n };\r\n \r\n return (\r\n <button\r\n ref={ref}\r\n className={cn(\r\n baseStyles,\r\n sizeStyles[size],\r\n variantStyles[variant],\r\n error && \"border-red-500 focus:ring-red-500\",\r\n className\r\n )}\r\n aria-invalid={!!error}\r\n aria-describedby={description ? `${props.id}-description` : undefined}\r\n {...props}\r\n >\r\n {leftIcon && <span className=\"mr-2\">{leftIcon}</span>}\r\n {label || children}\r\n {rightIcon && <span className=\"ml-2\">{rightIcon}</span>}\r\n {required && <span className=\"ml-1 text-red-500\">*</span>}\r\n {error && <span className=\"sr-only\">{error}</span>}\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nButton.displayName = \"Button\";","import { clsx, type ClassValue } from \"clsx\"\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return clsx(inputs)\r\n}\r\n","import React, { forwardRef } from \"react\";\r\nimport { cn } from \"../../utils/cn\";\r\nimport { AlertCircle } from \"lucide-react\";\r\n\r\nexport interface InputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\"> {\r\n label?: string;\r\n error?: string;\r\n description?: string;\r\n required?: boolean;\r\n placeholder?: string;\r\n leftIcon?: React.ReactNode;\r\n rightIcon?: React.ReactNode;\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n}\r\n\r\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\r\n (\r\n {\r\n label,\r\n error,\r\n description,\r\n required,\r\n placeholder,\r\n leftIcon,\r\n rightIcon,\r\n size = \"md\",\r\n className,\r\n disabled,\r\n id,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const inputId = id || `input-${Math.random().toString(36).slice(2, 9)}`;\r\n\r\n const sizeClasses = {\r\n sm: \"h-9 text-sm px-3\",\r\n md: \"h-10 text-sm px-3.5\",\r\n lg: \"h-12 text-base px-4\",\r\n }[size];\r\n\r\n return (\r\n <div className=\"w-full space-y-1.5\">\r\n {/* Label */}\r\n {label && (\r\n <label\r\n htmlFor={inputId}\r\n className={cn(\r\n \"text-sm font-medium\",\r\n disabled ? \"text-gray-400\" : \"text-gray-700\"\r\n )}\r\n >\r\n {label}\r\n {required && <span className=\"text-red-500 ml-1\">*</span>}\r\n </label>\r\n )}\r\n\r\n {/* Description */}\r\n {description && !error && (\r\n <p className=\"text-xs text-gray-500\">{description}</p>\r\n )}\r\n\r\n {/* Input wrapper */}\r\n <div className=\"relative\">\r\n {/* Left Icon */}\r\n {leftIcon && (\r\n <span className=\"absolute left-3 top-1/2 -translate-y-1/2 text-gray-400\">\r\n {leftIcon}\r\n </span>\r\n )}\r\n\r\n {/* Input */}\r\n <input\r\n ref={ref}\r\n id={inputId}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n aria-invalid={!!error}\r\n className={cn(\r\n \"w-full rounded-lg border border-gray-300 bg-white\",\r\n \"transition-all duration-150 outline-none\",\r\n \"placeholder:text-gray-400 placeholder:text-sm\",\r\n \"focus:border-blue-500 focus:ring-2 focus:ring-blue-100\",\r\n \"disabled:bg-gray-100 disabled:text-gray-400 disabled:cursor-not-allowed\",\r\n error && \"border-red-500 focus:border-red-500 focus:ring-red-100\",\r\n leftIcon && \"pl-10\",\r\n rightIcon && \"pr-10\",\r\n sizeClasses,\r\n className\r\n )}\r\n {...props}\r\n />\r\n\r\n {/* Right Icon */}\r\n {rightIcon && (\r\n <span className=\"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400\">\r\n {rightIcon}\r\n </span>\r\n )}\r\n </div>\r\n \r\n {error && (\r\n <p className=\"flex items-center gap-1 text-xs text-red-500\">\r\n <AlertCircle className=\"w-3.5 h-3.5\" />\r\n {error}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nInput.displayName = \"Input\";"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAAwD;;;ACAxD,kBAAsC;AAE/B,SAAS,MAAM,QAAsB;AAC1C,aAAO,kBAAK,MAAM;AACpB;;;AD0CM;AAhCC,IAAM,aAAS;AAAA,EACpB,CAAC;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,UAAU;AAAA,IACV;AAAA,IACA,GAAG;AAAA,EACL,GAAG,QAAQ;AAET,UAAM,aAAa;AAGnB,UAAM,aAAa;AAAA,MACjB,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAGA,UAAM,gBAAgB;AAAA,MACpB,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,UAAU;AAAA,IACZ;AAEA,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA,WAAW,IAAI;AAAA,UACf,cAAc,OAAO;AAAA,UACrB,SAAS;AAAA,UACT;AAAA,QACF;AAAA,QACA,gBAAc,CAAC,CAAC;AAAA,QAChB,oBAAkB,cAAc,GAAG,MAAM,EAAE,iBAAiB;AAAA,QAC3D,GAAG;AAAA,QAEH;AAAA,sBAAY,4CAAC,UAAK,WAAU,QAAQ,oBAAS;AAAA,UAC7C,SAAS;AAAA,UACT,aAAa,4CAAC,UAAK,WAAU,QAAQ,qBAAU;AAAA,UAC/C,YAAY,4CAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA,UACjD,SAAS,4CAAC,UAAK,WAAU,WAAW,iBAAM;AAAA;AAAA;AAAA,IAC7C;AAAA,EAEJ;AACF;AAEA,OAAO,cAAc;;;AErErB,IAAAA,gBAAkC;AAElC,0BAA4B;AA4ClB,IAAAC,sBAAA;AA9BH,IAAM,YAAQ;AAAA,EACnB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,UAAU,MAAM,SAAS,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AAErE,UAAM,cAAc;AAAA,MAClB,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACN,EAAE,IAAI;AAEN,WACE,8CAAC,SAAI,WAAU,sBAEZ;AAAA,eACC;AAAA,QAAC;AAAA;AAAA,UACC,SAAS;AAAA,UACT,WAAW;AAAA,YACT;AAAA,YACA,WAAW,kBAAkB;AAAA,UAC/B;AAAA,UAEC;AAAA;AAAA,YACA,YAAY,6CAAC,UAAK,WAAU,qBAAoB,eAAC;AAAA;AAAA;AAAA,MACpD;AAAA,MAID,eAAe,CAAC,SACf,6CAAC,OAAE,WAAU,yBAAyB,uBAAY;AAAA,MAIpD,8CAAC,SAAI,WAAU,YAEZ;AAAA,oBACC,6CAAC,UAAK,WAAU,0DACb,oBACH;AAAA,QAIF;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,IAAI;AAAA,YACJ;AAAA,YACA;AAAA,YACA,gBAAc,CAAC,CAAC;AAAA,YAChB,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,aAAa;AAAA,cACb;AAAA,cACA;AAAA,YACF;AAAA,YACC,GAAG;AAAA;AAAA,QACN;AAAA,QAGC,aACC,6CAAC,UAAK,WAAU,2DACb,qBACH;AAAA,SAEJ;AAAA,MAEC,SACC,8CAAC,OAAE,WAAU,gDACX;AAAA,qDAAC,mCAAY,WAAU,eAAc;AAAA,QACpC;AAAA,SACH;AAAA,OAEJ;AAAA,EAEJ;AACF;AAEA,MAAM,cAAc;","names":["import_react","import_jsx_runtime"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gd-ui-library",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "Reusable UI components",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",
@@ -23,7 +23,10 @@
23
23
  "devDependencies": {
24
24
  "@types/react": "^19.2.14",
25
25
  "@types/react-dom": "^19.2.3",
26
+ "autoprefixer": "^10.4.27",
27
+ "postcss": "^8.5.8",
26
28
  "react": "^19.2.4",
29
+ "tailwindcss": "^4.2.1",
27
30
  "tsup": "^8.5.1",
28
31
  "typescript": "^5.9.3"
29
32
  },