tccd-ui 0.0.4 → 0.0.6

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.js CHANGED
@@ -365,6 +365,8 @@ var TCCD_logo_default = "./TCCD_logo-65HFB2NY.svg";
365
365
 
366
366
  // src/components/LoadingPage.tsx
367
367
  var import_jsx_runtime8 = require("react/jsx-runtime");
368
+ var import_meta = {};
369
+ var tccd_logo = new URL(TCCD_logo_default, import_meta.url).href;
368
370
  var LoadingPage = () => {
369
371
  return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_jsx_runtime8.Fragment, { children: [
370
372
  /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("style", { children: `
@@ -517,7 +519,7 @@ var LoadingPage = () => {
517
519
  /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
518
520
  "img",
519
521
  {
520
- src: TCCD_logo_default,
522
+ src: tccd_logo,
521
523
  alt: "TCCD logo",
522
524
  className: "relative z-10 animate-logo-luxury drop-shadow-2xl lg:w-[160px] md:w-[135px] w-[110px]"
523
525
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/types/index.ts","../src/components/Button.tsx","../src/components/Checkbox.tsx","../src/components/DatePicker.tsx","../src/components/DropdownMenu.tsx","../src/components/ErrorScreen.tsx","../src/components/InputField.tsx","../src/components/LazyImageLoader.tsx","../src/components/LoadingPage.tsx","../src/components/Modal.tsx","../src/components/NumberField.tsx","../src/components/PasswordField.tsx","../src/components/RadioButton.tsx","../src/components/SearchField.tsx","../src/components/TextAreaField.tsx","../src/components/UnauthorizedPage.tsx"],"sourcesContent":["export { default as Button } from \"./components/Button\";\r\nexport { default as Checkbox } from \"./components/Checkbox\";\r\nexport { default as DatePicker } from \"./components/DatePicker\";\r\nexport { default as DropdownMenu } from \"./components/DropdownMenu\";\r\nexport { default as ErrorScreen } from \"./components/ErrorScreen\";\r\nexport { default as InputField } from \"./components/InputField\";\r\nexport { default as LazyImageLoader } from \"./components/LazyImageLoader\";\r\nexport { default as LoadingPage } from \"./components/LoadingPage\";\r\nexport { default as Modal } from \"./components/Modal\";\r\nexport { default as NumberField } from \"./components/NumberField\";\r\nexport { default as PasswordField } from \"./components/PasswordField\";\r\nexport { default as RadioButton } from \"./components/RadioButton\";\r\nexport { default as SearchField } from \"./components/SearchField\";\r\nexport { default as TextAreaField } from \"./components/TextAreaField\";\r\nexport { default as UnauthorizedPage } from \"./components/UnauthorizedPage\";\r\nexport * from \"./types\";\r\n","export const ButtonTypes = {\r\n PRIMARY: \"primary\",\r\n SECONDARY: \"secondary\",\r\n TERTIARY: \"tertiary\",\r\n DANGER: \"danger\",\r\n GHOST: \"ghost\",\r\n BASIC: \"basic\"\r\n} as const;\r\n\r\nexport type ButtonTypes = typeof ButtonTypes[keyof typeof ButtonTypes];\r\n\r\nexport const ButtonWidths = {\r\n AUTO: \"auto\",\r\n SMALL: \"small\",\r\n MEDIUM: \"medium\",\r\n LARGE: \"large\",\r\n XL: \"xl\",\r\n FULL: \"full\"\r\n} as const;\r\n\r\nexport type ButtonWidths = typeof ButtonWidths[keyof typeof ButtonWidths];\r\n\r\nexport interface DropdownOption {\r\n value: string;\r\n label: string;\r\n disabled?: boolean;\r\n}\r\n","import { ButtonTypes, ButtonWidths } from \"../types\";\r\nimport { AiOutlineLoading3Quarters } from \"react-icons/ai\";\r\nimport React from \"react\";\r\n\r\ninterface ButtonProps {\r\n buttonText?: string;\r\n buttonIcon?: React.ReactNode;\r\n onClick: () => void;\r\n type: ButtonTypes;\r\n disabled?: boolean;\r\n loading?: boolean;\r\n width?: ButtonWidths;\r\n}\r\n\r\nconst Button = ({ buttonText, buttonIcon, onClick, type, disabled = false, loading = false, width = ButtonWidths.AUTO }: ButtonProps) => {\r\n const isDisabled = disabled || loading;\r\n\r\n const stylePresets: Record<ButtonTypes, string> = {\r\n primary: \"bg-primary text-text border-primary\",\r\n secondary: \"bg-secondary text-text border-secondary\",\r\n tertiary: \"bg-contrast text-text border-contrast\",\r\n danger: \"border-primary text-primary\",\r\n ghost: \"text-secondary border-secondary\",\r\n basic: \"border-contrast\"\r\n }\r\n\r\n const hoverStyles: Record<ButtonTypes, string> = {\r\n primary: \"hover:bg-background hover:border-primary hover:text-primary\",\r\n secondary: \"hover:bg-background hover:border-secondary hover:text-secondary\",\r\n tertiary: \"hover:bg-background hover:border-tertiary hover:text-black\",\r\n danger: \"hover:bg-primary hover:text-text\",\r\n ghost: \"hover:bg-secondary/30\",\r\n basic: \"hover:bg-contrast/30\",\r\n }\r\n\r\n const disabledStyles = \"opacity-50\";\r\n\r\n const widthStyles: Record<ButtonWidths, string> = {\r\n auto: \"w-auto\",\r\n small: \"w-24\",\r\n medium: \"w-32\",\r\n large: \"w-48\",\r\n xl: \"w-64\",\r\n full: \"w-full\"\r\n }\r\n\r\n const handleClick = () => {\r\n if (!isDisabled) {\r\n onClick();\r\n }\r\n };\r\n\r\n return (\r\n <button\r\n onClick={handleClick}\r\n disabled={isDisabled}\r\n className={`\r\n ${stylePresets[type]} \r\n ${!isDisabled ? hoverStyles[type] : ''} \r\n ${isDisabled ? disabledStyles : ''} \r\n ${widthStyles[width]}\r\n rounded-full px-6 py-2 border font-bold text-[11px] lg:text-[12px] whitespace-nowrap\r\n transition-all duration-200 ease-in-out flex items-center justify-center h-fit\r\n ${isDisabled ? 'cursor-not-allowed' : 'cursor-pointer'}\r\n `}\r\n >\r\n {loading && (\r\n <span className=\"animate-spin -ml-1 mr-2 h-4 w-4 inline-block\">\r\n <AiOutlineLoading3Quarters />\r\n </span>\r\n )}\r\n {loading ? 'Loading...' : buttonText}\r\n {buttonIcon && !loading && (\r\n <span className=\"ml-2 inline-block\">\r\n {buttonIcon}\r\n </span>\r\n )}\r\n </button>\r\n )\r\n}\r\n\r\nexport default Button;","export default function Checkbox({label, checked, onChange}: {label: string, checked: boolean, onChange: () => void}) {\r\n return (\r\n <label className=\"inline-flex items-center cursor-pointer relative pl-7 select-none\">\r\n <input\r\n type=\"checkbox\"\r\n checked={checked}\r\n onChange={() => onChange()}\r\n className=\"peer absolute left-0 top-1/2 -translate-y-1/2 w-5 h-5 opacity-0 cursor-pointer\"\r\n />\r\n <span className=\"\r\n absolute left-0 top-1/2 -translate-y-1/2 w-5 h-5 rounded-md\r\n border-2 border-gray-300 bg-white\r\n peer-checked:bg-primary peer-checked:border-primary\r\n flex items-center justify-center\r\n transition-colors\r\n pointer-events-none\r\n \">\r\n <svg\r\n className=\"w-4 h-4 text-white\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"3\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\r\n </svg>\r\n </span>\r\n <span className=\"text-sm\">{label}</span>\r\n </label>\r\n );\r\n}","import React from 'react';\r\nimport { MdCalendarToday } from 'react-icons/md';\r\n\r\ninterface DatePickerProps {\r\n label: string;\r\n id: string;\r\n value: string;\r\n onChange: (date: string) => void;\r\n error?: string;\r\n disabled?: boolean;\r\n minDate?: string;\r\n maxDate?: string;\r\n}\r\n\r\nexport default function DatePicker({\r\n label,\r\n id,\r\n value,\r\n onChange,\r\n error,\r\n disabled = false,\r\n minDate,\r\n maxDate,\r\n}: DatePickerProps) {\r\n const handleDateChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(e.target.value.toString());\r\n };\r\n\r\n return (\r\n <div className=\"flex flex-col w-full\">\r\n <label className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\">\r\n {label}\r\n </label>\r\n\r\n <div className=\"relative\">\r\n <input\r\n id={id}\r\n type=\"date\"\r\n value={value}\r\n onChange={handleDateChange}\r\n disabled={disabled}\r\n min={minDate}\r\n max={maxDate}\r\n className={`w-full border-contrast rounded-xl px-3 py-2 md:px-4 md:py-3 border outline-none ${error\r\n ? \"border-red-300 focus:border-red-500 focus:ring-red-500/30\"\r\n : \"focus:border-primary\"\r\n } ${disabled ? \"bg-gray-100 cursor-not-allowed opacity-60\" : \"bg-white\"\r\n } transition-all duration-300 ease-in-out text-sm pr-10 [&::-webkit-calendar-picker-indicator]:opacity-0 [&::-webkit-calendar-picker-indicator]:absolute [&::-webkit-calendar-picker-indicator]:right-3 [&::-webkit-calendar-picker-indicator]:w-5 [&::-webkit-calendar-picker-indicator]:h-5 [&::-webkit-calendar-picker-indicator]:cursor-pointer`}\r\n />\r\n\r\n <div className=\"absolute right-3 top-1/2 transform -translate-y-1/2 pointer-events-none\">\r\n <span className={`w-5 h-5 ${disabled ? \"text-gray-400\" : \"text-secondary\"}`}>\r\n <MdCalendarToday />\r\n </span>\r\n </div>\r\n </div>\r\n\r\n {error && (\r\n <span className=\"text-red-500 text-sm font-medium mt-1\">{error}</span>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import { useState, useRef, useEffect } from \"react\";\r\nimport { IoChevronDown } from \"react-icons/io5\";\r\nimport Button from \"./Button\";\r\nimport { ButtonTypes, ButtonWidths } from \"../types\";\r\nimport type { DropdownOption } from \"../types\";\r\n\r\ninterface DropdownMenuProps {\r\n label?: string;\r\n placeholder?: string;\r\n options: DropdownOption[];\r\n value?: string;\r\n onChange: (value: string) => void;\r\n error?: string;\r\n disabled?: boolean;\r\n className?: string;\r\n id?: string;\r\n}\r\n\r\nexport default function DropdownMenu({\r\n label,\r\n placeholder = \"Select an option\",\r\n options,\r\n value,\r\n onChange,\r\n error,\r\n disabled = false,\r\n className = \"\",\r\n id,\r\n}: DropdownMenuProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const dropdownRef = useRef<HTMLDivElement>(null);\r\n\r\n const selectedOption = options.find((option) => option.value === value);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (\r\n dropdownRef.current &&\r\n !dropdownRef.current.contains(event.target as Node)\r\n ) {\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\r\n const handleOptionClick = (optionValue: string) => {\r\n if (!disabled) {\r\n onChange(optionValue);\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n return (\r\n <div className={`flex flex-col w-full ${className}`}>\r\n {label && (\r\n <label\r\n htmlFor={id}\r\n className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\"\r\n >\r\n {label}\r\n </label>\r\n )}\r\n\r\n <div className=\"relative\" ref={dropdownRef}>\r\n <div className=\"relative\">\r\n <Button\r\n buttonText={selectedOption ? selectedOption.label : placeholder}\r\n onClick={() => !disabled && setIsOpen(!isOpen)}\r\n type={ButtonTypes.BASIC}\r\n disabled={disabled}\r\n width={ButtonWidths.FULL}\r\n />\r\n <span\r\n className={`absolute right-3 top-1/2 transform -translate-y-1/2 w-5 h-5 text-secondary transition-transform duration-200 pointer-events-none ${\r\n isOpen ? \"rotate-180\" : \"\"\r\n }`}\r\n >\r\n <IoChevronDown />\r\n </span>\r\n </div>\r\n\r\n {isOpen && !disabled && (\r\n <div className=\"absolute z-50 w-full mt-1 bg-white border border-secondary/30 rounded-xl shadow-lg max-h-60 overflow-y-auto\">\r\n {options.length === 0 ? (\r\n <div className=\"px-3 py-2 text-sm text-muted-secondary\">\r\n No options available\r\n </div>\r\n ) : (\r\n options.map((option) => (\r\n <button\r\n key={option.value}\r\n type=\"button\"\r\n onClick={() => handleOptionClick(option.value)}\r\n disabled={option.disabled}\r\n className={`\r\n w-full px-3 py-2 text-left text-sm transition-colors duration-150\r\n ${\r\n option.disabled\r\n ? \"text-gray-400 cursor-not-allowed\"\r\n : \"text-gray-900 hover:bg-secondary/10 hover:text-secondary cursor-pointer\"\r\n }\r\n ${\r\n value === option.value\r\n ? \"bg-secondary/20 text-secondary font-medium\"\r\n : \"\"\r\n }\r\n first:rounded-t-xl last:rounded-b-xl\r\n `}\r\n >\r\n {option.label}\r\n </button>\r\n ))\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {error && <p className=\"mt-1 text-sm text-red-600\">{error}</p>}\r\n </div>\r\n );\r\n}\r\n","import { FaExclamationTriangle } from \"react-icons/fa\";\r\n\r\ninterface ErrorComponentProps {\r\n title: string;\r\n message: string;\r\n}\r\n\r\nexport default function ErrorComponent({\r\n title,\r\n message,\r\n}: ErrorComponentProps) {\r\n return (\r\n <div className=\"min-h-screen bg-background\">\r\n <div className=\"w-full md:w-3/4 lg:w-10/12 m-auto rounded-xl shadow-md p-5 flex flex-col gap-4\">\r\n {/* Error Container */}\r\n <div className=\"flex flex-col items-center justify-center py-16 px-4\">\r\n {/* Error Icon */}\r\n <div className=\"mb-6\">\r\n <div className=\"w-20 h-20 bg-red-100 rounded-full flex items-center justify-center\">\r\n <span className=\"text-error text-3xl\">\r\n <FaExclamationTriangle />\r\n </span>\r\n </div>\r\n </div>\r\n\r\n {/* Error Title */}\r\n <h1 className=\"text-2xl md:text-3xl lg:text-4xl font-bold text-error mb-4 text-center\">\r\n {title}\r\n </h1>\r\n\r\n {/* Error Message */}\r\n <p className=\"text-base md:text-lg text-center mb-8 max-w-md\">\r\n {message}\r\n </p>\r\n </div>\r\n\r\n <div className=\"mt-8 bg-red-50 border border-red-200 rounded-xl p-4\">\r\n <h3 className=\"font-semibold text-red-800 mb-2\">\r\n Technical Details\r\n </h3>\r\n <div className=\"text-red-700 text-sm space-y-1\">\r\n <p>• Check your internet connection</p>\r\n <p>• The page may be temporarily unavailable</p>\r\n <p>• Contact support if the problem persists</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\n\r\nexport default function InputField({\r\n label,\r\n value,\r\n placeholder,\r\n onChange,\r\n error,\r\n id,\r\n}: {\r\n label: string;\r\n id: string;\r\n value: string;\r\n placeholder: string;\r\n onChange: (newValue: React.ChangeEvent<HTMLInputElement>) => void;\r\n error?: string;\r\n}) {\r\n return (\r\n <div className=\"flex flex-col w-full\">\r\n <label className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\">\r\n {label}\r\n </label>\r\n <input\r\n id={id}\r\n value={value}\r\n placeholder={placeholder}\r\n onChange={(e) => onChange(e)}\r\n className={`border-gray-400 rounded-xl px-3 py-2 md:px-4 md:py-3 border outline-none ${\r\n error\r\n ? \"border-red-300 focus:border-red-500 focus:ring-red-500/30\"\r\n : \"focus:border-primary\"\r\n } transition-all duration-300 ease-in-out text-sm`}\r\n />\r\n </div>\r\n );\r\n}\r\n","import { useState } from \"react\";\r\nimport { HiOutlinePhotograph } from \"react-icons/hi\";\r\n\r\ninterface LazyImageLoaderProps {\r\n src: string;\r\n alt: string;\r\n className?: string;\r\n width?: string | number;\r\n height?: string | number;\r\n}\r\n\r\nexport default function LazyImageLoader({ \r\n src, \r\n alt, \r\n className = \"\", \r\n width = \"100%\", \r\n height = \"200px\" \r\n}: LazyImageLoaderProps) {\r\n const [imageLoaded, setImageLoaded] = useState(false);\r\n const [imageError, setImageError] = useState(false);\r\n\r\n const handleImageLoad = () => {\r\n setImageLoaded(true);\r\n };\r\n\r\n const handleImageError = () => {\r\n setImageError(true);\r\n setImageLoaded(true);\r\n };\r\n\r\n return (\r\n <div \r\n className={`relative overflow-hidden ${className}`}\r\n style={{ width, height }}\r\n >\r\n {!imageLoaded && (\r\n <div className=\"absolute inset-0 bg-gray-200 animate-pulse\">\r\n <div className=\"absolute inset-0 bg-gradient-to-r from-gray-200 via-gray-100 to-gray-200 animate-shimmer\"></div>\r\n </div>\r\n )}\r\n\r\n {imageError && (\r\n <div className=\"absolute inset-0 bg-gray-100 flex items-center justify-center\">\r\n <div className=\"text-center text-gray-400\">\r\n <span className=\"w-12 h-12 mx-auto mb-2\">\r\n <HiOutlinePhotograph />\r\n </span>\r\n <p className=\"text-sm\">Failed to load</p>\r\n </div>\r\n </div>\r\n )}\r\n\r\n <img\r\n src={src}\r\n alt={alt}\r\n onLoad={handleImageLoad}\r\n onError={handleImageError}\r\n className={`w-full h-full object-cover transition-opacity duration-300 ${\r\n imageLoaded ? \"opacity-100\" : \"opacity-0\"\r\n }`}\r\n />\r\n </div>\r\n );\r\n}\r\n","import tccd_logo from \"../assets/TCCD_logo.svg\";\r\n\r\nconst LoadingPage = () => {\r\n return (\r\n <>\r\n <style>{`\r\n @keyframes custom-bounce {\r\n 0%, 100% {\r\n transform: translateY(0);\r\n animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\r\n }\r\n 50% {\r\n transform: translateY(-8px);\r\n animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\r\n }\r\n }\r\n\r\n @keyframes logoLuxury {\r\n 0% {\r\n filter: brightness(1) contrast(1) drop-shadow(0 0 15px rgba(205, 58, 56, 0.3)) saturate(1);\r\n transform: scale(1) rotate(0deg);\r\n }\r\n 25% {\r\n filter: brightness(1.2) contrast(1.2) drop-shadow(0 0 25px rgba(41, 94, 126, 0.5)) saturate(1.2);\r\n transform: scale(1.05) rotate(2deg);\r\n }\r\n 50% {\r\n filter: brightness(1.4) contrast(1.3) drop-shadow(0 0 35px rgba(205, 58, 56, 0.7)) saturate(1.4);\r\n transform: scale(1.08) rotate(0deg);\r\n }\r\n 75% {\r\n filter: brightness(1.2) contrast(1.2) drop-shadow(0 0 25px rgba(41, 94, 126, 0.5)) saturate(1.2);\r\n transform: scale(1.05) rotate(-2deg);\r\n }\r\n 100% {\r\n filter: brightness(1) contrast(1) drop-shadow(0 0 15px rgba(205, 58, 56, 0.3)) saturate(1);\r\n transform: scale(1) rotate(0deg);\r\n }\r\n }\r\n\r\n @keyframes float {\r\n 0%, 100% {\r\n transform: translateY(0px) translateX(0px) scale(1);\r\n opacity: 0.3;\r\n }\r\n 50% {\r\n transform: translateY(-20px) translateX(10px) scale(1.2);\r\n opacity: 0.8;\r\n }\r\n }\r\n\r\n @keyframes spinSlow {\r\n from {\r\n transform: rotate(0deg);\r\n }\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n\r\n @keyframes rotateSlow {\r\n from {\r\n transform: rotate(0deg);\r\n }\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n\r\n @keyframes gradientShift {\r\n 0%, 100% {\r\n background-position: 0% 50%;\r\n }\r\n 50% {\r\n background-position: 100% 50%;\r\n }\r\n }\r\n\r\n @keyframes progressWave {\r\n 0% {\r\n transform: translateX(-100%) scaleX(1);\r\n opacity: 0.8;\r\n }\r\n 50% {\r\n transform: translateX(0%) scaleX(1.5);\r\n opacity: 1;\r\n }\r\n 100% {\r\n transform: translateX(100%) scaleX(1);\r\n opacity: 0.8;\r\n }\r\n }\r\n\r\n .animate-custom-bounce {\r\n animation-name: custom-bounce;\r\n animation-duration: 2s;\r\n animation-iteration-count: infinite;\r\n }\r\n\r\n .animate-logo-luxury {\r\n animation: logoLuxury 4s ease-in-out infinite;\r\n }\r\n\r\n .animate-float {\r\n animation: float 6s ease-in-out infinite;\r\n }\r\n\r\n .animate-spin-slow {\r\n animation: spinSlow 8s linear infinite;\r\n }\r\n\r\n .animate-rotate-slow {\r\n animation: rotateSlow 12s linear infinite;\r\n }\r\n\r\n .animate-gradient-shift {\r\n background-size: 300% 300%;\r\n animation: gradientShift 3s ease infinite;\r\n }\r\n\r\n .animate-progress-wave {\r\n animation: progressWave 2s ease-in-out infinite;\r\n }\r\n\r\n .dot-container .dot:nth-child(1) { animation-delay: 0s; }\r\n .dot-container .dot:nth-child(2) { animation-delay: 0.15s; }\r\n .dot-container .dot:nth-child(3) { animation-delay: 0.3s; }\r\n .dot-container .dot:nth-child(4) { animation-delay: 0.45s; }\r\n .dot-container .dot:nth-child(5) { animation-delay: 0.6s; }\r\n .dot-container .dot:nth-child(6) { animation-delay: 0.75s; }\r\n .dot-container .dot:nth-child(7) { animation-delay: 0.9s; }\r\n .dot-container .dot:nth-child(8) { animation-delay: 1.05s; }\r\n `}</style>\r\n <div className=\"relative min-h-screen bg-gradient-to-br from-background via-dashboard-welcome-bg to-muted-secondary overflow-hidden\">\r\n <div className=\"absolute inset-0\">\r\n {[...Array(25)].map((_, i) => (\r\n <div\r\n key={i}\r\n className=\"absolute w-2 h-2 bg-primary/20 rounded-full animate-float\"\r\n style={{\r\n left: `${Math.random() * 100}%`,\r\n top: `${Math.random() * 100}%`,\r\n animationDelay: `${Math.random() * 5}s`,\r\n animationDuration: `${3 + Math.random() * 4}s`,\r\n }}\r\n />\r\n ))}\r\n </div>\r\n\r\n <div className=\"relative z-10 flex flex-col items-center justify-center min-h-screen px-4\">\r\n\r\n <div className=\"relative mb-5 md:mb-10\">\r\n <div className=\"absolute inset-0 rounded-full bg-gradient-to-r from-primary via-secondary to-primary opacity-30 blur-2xl animate-spin-slow scale-150\"></div>\r\n\r\n <div className=\"absolute inset-4 rounded-full bg-gradient-to-r from-secondary via-primary to-secondary opacity-40 blur-xl animate-pulse\"></div>\r\n\r\n <div className=\"relative bg-white/10 backdrop-blur-sm rounded-full p-8 border border-white/20 shadow-2xl\">\r\n <div className=\"relative\">\r\n <img\r\n src={tccd_logo}\r\n alt=\"TCCD logo\"\r\n className=\"relative z-10 animate-logo-luxury drop-shadow-2xl lg:w-[160px] md:w-[135px] w-[110px]\"\r\n />\r\n\r\n <div className=\"absolute inset-0 bg-gradient-to-tr from-transparent via-white/40 to-transparent animate-rotate-slow opacity-60\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"text-center mb-4\">\r\n <h1 className=\"lg:text-3xl md:text-2xl text-xl font-bold bg-gradient-to-r from-primary via-secondary to-primary bg-clip-text text-transparent animate-gradient-shift mb-4\">\r\n Loading your experience...\r\n </h1>\r\n\r\n <p className=\"text-dashboard-description lg:text-lg md:text-md text-sm font-medium opacity-80\">\r\n Please wait while we prepare everything for you\r\n </p>\r\n </div>\r\n\r\n <div className=\"relative w-80 mb-8\">\r\n <div className=\"h-2 bg-muted-secondary/30 rounded-full overflow-hidden backdrop-blur-sm\">\r\n <div className=\"h-full bg-gradient-to-r from-primary via-secondary to-primary animate-progress-wave\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"absolute top-8 left-8 w-16 h-16 border-l-2 border-t-2 border-primary/30 rounded-tl-lg\"></div>\r\n <div className=\"absolute top-8 right-8 w-16 h-16 border-r-2 border-t-2 border-secondary/30 rounded-tr-lg\"></div>\r\n <div className=\"absolute bottom-8 left-8 w-16 h-16 border-l-2 border-b-2 border-secondary/30 rounded-bl-lg\"></div>\r\n <div className=\"absolute bottom-8 right-8 w-16 h-16 border-r-2 border-b-2 border-primary/30 rounded-br-lg\"></div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default LoadingPage;\r\n","import { useEffect, useRef } from \"react\";\r\nimport type { ReactNode } from \"react\";\r\nimport { LuX } from \"react-icons/lu\";\r\nimport React from 'react';\r\n\r\nconst Modal = ({\r\n title,\r\n isOpen,\r\n onClose,\r\n children,\r\n}: {\r\n title: string;\r\n isOpen: boolean;\r\n onClose: () => void;\r\n children: ReactNode;\r\n}) => {\r\n const modalRef = useRef<HTMLDivElement>(null);\r\n const previousFocusRef = useRef<HTMLElement | null>(null);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n // Store the previously focused element\r\n previousFocusRef.current = document.activeElement as HTMLElement;\r\n\r\n // Focus the modal\r\n modalRef.current?.focus();\r\n\r\n // Prevent body scroll\r\n document.body.style.overflow = \"hidden\";\r\n } else {\r\n // Restore body scroll\r\n document.body.style.overflow = \"unset\";\r\n\r\n // Restore focus to previously focused element\r\n previousFocusRef.current?.focus();\r\n }\r\n\r\n return () => {\r\n document.body.style.overflow = \"unset\";\r\n };\r\n }, [isOpen]);\r\n\r\n useEffect(() => {\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\" && isOpen) {\r\n onClose();\r\n }\r\n };\r\n\r\n document.addEventListener(\"keydown\", handleEscape);\r\n return () => document.removeEventListener(\"keydown\", handleEscape);\r\n }, [isOpen, onClose]);\r\n\r\n const handleBackdropClick = (e: React.MouseEvent<HTMLDivElement>) => {\r\n if (e.target === e.currentTarget) {\r\n onClose();\r\n }\r\n };\r\n\r\n if (!isOpen) return null;\r\n\r\n return (\r\n <div\r\n className=\"fixed inset-0 bg-black/30 backdrop-blur-sm flex items-center justify-center z-50\"\r\n onClick={handleBackdropClick}\r\n >\r\n <div\r\n ref={modalRef}\r\n className=\"bg-background rounded-lg shadow-xl w-full mx-4 sm:max-w-lg xl:max-w-xl max-h-[90vh] flex flex-col overflow-y-auto\"\r\n tabIndex={-1}\r\n >\r\n <div className=\"p-4 sm:p-6 flex-1 flex flex-col\">\r\n <div className=\"flex justify-between items-center mb-4\">\r\n <h2\r\n id=\"modal-title\"\r\n className=\"text-lg sm:text-xl md:text-2xl font-bold text-primary\"\r\n >\r\n {title}\r\n </h2>\r\n <span\r\n onClick={onClose}\r\n className=\"text-gray-400 hover:text-gray-600 transition-colors duration-300 p-1 text-xl sm:text-2xl md:text-3xl cursor-pointer\"\r\n >\r\n <LuX />\r\n </span>\r\n </div>\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Modal;\r\n","import { useState } from \"react\";\r\nimport React from 'react';\r\n\r\nexport default function NumberField({\r\n label,\r\n value,\r\n placeholder,\r\n onChange,\r\n error,\r\n maxLength,\r\n id,\r\n}: {\r\n label: string;\r\n id: string;\r\n value: string;\r\n placeholder: string;\r\n maxLength?: number;\r\n onChange: (newValue: React.ChangeEvent<HTMLInputElement>) => void;\r\n error?: string;\r\n}) {\r\n const [lengthError, setLengthError] = useState<string | null>(null);\r\n function handleChange(e: React.ChangeEvent<HTMLInputElement>) {\r\n const inputValue = e.target.value;\r\n if (maxLength && inputValue.length > maxLength) {\r\n setLengthError(`Maximum length of ${maxLength} characters exceeded.`);\r\n return;\r\n }\r\n lengthError && setLengthError(null);\r\n onChange(e);\r\n }\r\n return (\r\n <div className=\"flex flex-col w-full\">\r\n <label className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\">\r\n {label}\r\n </label>\r\n <input\r\n id={id}\r\n value={value}\r\n type=\"number\"\r\n placeholder={placeholder}\r\n onChange={handleChange}\r\n className={`border-gray-400 rounded-xl px-3 py-2 md:px-4 md:py-3 border outline-none ${\r\n error || lengthError\r\n ? \"border-red-300 focus:border-red-500 focus:ring-red-500/30\"\r\n : \"focus:border-primary\"\r\n } transition-all duration-300 ease-in-out text-sm`}\r\n />\r\n </div>\r\n );\r\n}\r\n","import { useState } from \"react\";\r\nimport { LuEye, LuEyeOff } from \"react-icons/lu\";\r\nimport React from 'react';\r\n\r\nexport default function PasswordField({\r\n value,\r\n onChange,\r\n error,\r\n}: {\r\n value: string;\r\n onChange: (newValue: React.ChangeEvent<HTMLInputElement>) => void;\r\n error?: string;\r\n}) {\r\n const [show, setShow] = useState(false);\r\n\r\n return (\r\n <div className=\"flex flex-col w-full\">\r\n <label className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\">\r\n Password\r\n </label>\r\n <div className=\"relative\">\r\n <input\r\n id=\"password\"\r\n value={value}\r\n placeholder=\"Enter your Password\"\r\n onChange={(e) => onChange(e)}\r\n type={show ? \"text\" : \"password\"}\r\n className={`border-gray-400 rounded-xl px-3 py-2 md:px-4 md:py-3 border outline-none ${\r\n error\r\n ? \"border-red-300 focus:border-red-500 focus:ring-red-500/30\"\r\n : \"focus:border-primary\"\r\n } transition-all duration-300 ease-in-out text-sm w-full pr-10 `}\r\n />\r\n <button\r\n type=\"button\"\r\n className=\"absolute right-3 top-1/2 -translate-y-1/2 contrast-50 cursor-pointer transition duration-300 ease-in-out hover:contrast-100\"\r\n onClick={() => setShow(!show)}\r\n tabIndex={-1}\r\n >\r\n {show ? <LuEyeOff size={20} /> : <LuEye size={20} />}\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","\r\n\r\nexport default function Radiobutton({label, checked, onChange}: {label: string, checked: boolean, onChange: (newValue: boolean) => void}) {\r\n return (\r\n <label className=\"inline-flex items-center cursor-pointer relative pl-7 select-none\">\r\n <input\r\n type=\"radio\"\r\n checked={checked}\r\n onChange={(e) => onChange(e.target.checked)}\r\n className=\"peer absolute left-0 top-1/2 -translate-y-1/2 w-5 h-5 opacity-0 cursor-pointer\"\r\n />\r\n <span className=\"\r\n absolute left-0 top-1/2 -translate-y-1/2 w-5 h-5 rounded-full\r\n border-2 border-gray-300 bg-background\r\n flex items-center justify-center\r\n transition-colors\r\n pointer-events-none\r\n \">\r\n <span className={`w-3 h-3 ${checked ? 'bg-primary' : 'bg-transparent'} rounded-full transition-all`} />\r\n </span>\r\n <span className=\"text-sm\">{label}</span>\r\n </label>\r\n );\r\n}","import { HiOutlineMagnifyingGlass } from \"react-icons/hi2\";\r\n\r\ninterface SearchFieldProps {\r\n value: string;\r\n onChange: (value: string) => void;\r\n placeholder?: string;\r\n className?: string;\r\n}\r\n\r\nexport default function SearchField({\r\n value,\r\n onChange,\r\n placeholder = \"Search...\",\r\n className = \"\"\r\n}: SearchFieldProps) {\r\n return (\r\n <div className={`relative w-full lg:w-96 ${className}`}>\r\n <div className=\"relative\">\r\n <span className=\"absolute left-4 top-1/2 transform -translate-y-1/2 text-muted-secondary/60 text-lg\">\r\n <HiOutlineMagnifyingGlass />\r\n </span>\r\n <input\r\n type=\"text\"\r\n value={value}\r\n onChange={(e) => onChange(e.target.value)}\r\n placeholder={placeholder}\r\n className=\"w-full bg-background/50 rounded-3xl border-contrast pl-12 pr-4 py-2 text-[14px] md:text-[15px] lg:text-[16px] border focus:border-primary focus:outline-none transition-all duration-300 ease-in-out placeholder:text-muted-secondary\"\r\n />\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { useState, useRef } from \"react\";\r\nimport React from 'react';\r\n\r\nexport default function TextAreaField({\r\n label,\r\n value,\r\n placeholder,\r\n onChange,\r\n error,\r\n maxLength,\r\n id,\r\n}: {\r\n label: string;\r\n id: string;\r\n value: string;\r\n placeholder: string;\r\n maxLength?: number;\r\n onChange: (newValue: React.ChangeEvent<HTMLTextAreaElement>) => void;\r\n error?: string;\r\n}) {\r\n const [lengthError, setLengthError] = useState<string | null>(null);\r\n const textareaRef = useRef<HTMLTextAreaElement>(null);\r\n function handleChange(e: React.ChangeEvent<HTMLTextAreaElement>) {\r\n const inputValue = e.target.value;\r\n if (maxLength && inputValue.length > maxLength) {\r\n setLengthError(`Maximum length of ${maxLength} characters exceeded.`);\r\n return;\r\n }\r\n lengthError && setLengthError(null);\r\n if (textareaRef.current) {\r\n textareaRef.current.style.height = \"auto\";\r\n textareaRef.current.style.height =\r\n textareaRef.current.scrollHeight + \"px\";\r\n }\r\n onChange(e);\r\n }\r\n return (\r\n <div className=\"flex flex-col w-full\">\r\n <label className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\">\r\n {label}\r\n </label>\r\n <textarea\r\n ref={textareaRef}\r\n id={id}\r\n onChange={handleChange}\r\n value={value}\r\n placeholder={placeholder}\r\n rows={4}\r\n className={`border-gray-400 rounded-xl px-3 py-2 md:px-4 md:py-3 border outline-none ${\r\n error || lengthError\r\n ? \"border-red-300 focus:border-red-500 focus:ring-red-500/30\"\r\n : \"focus:border-primary\"\r\n } transition-all duration-300 ease-in-out text-sm`}\r\n />\r\n {maxLength && (\r\n <p className=\"text-[9px] md:text-[10px] lg:text-[11px] p-1 text-inactive-tab-text\">\r\n {value.length}/{maxLength}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import { HiMiniXMark } from \"react-icons/hi2\";\r\n\r\nexport default function UnauthorizedPage() {\r\n return (\r\n <div className=\"w-screen h-screen flex flex-col justify-center items-center bg-background\">\r\n <div className=\"w-fit rounded-2xl bg-background p-8 shadow-[0_0px_20px_rgba(0,0,0,0.2)] flex flex-col items-center\">\r\n <div className=\"rounded-full bg-muted-primary md:p-4 p-2 mb-4 md:mb-6 lg:mb-8 w-fit\">\r\n <span className=\"text-[52px] md:text-[56px] lg:text-[60px] text-primary\">\r\n <HiMiniXMark />\r\n </span>\r\n </div>\r\n <p className=\"text-[24px] md:text-[28px] lg:text-[32px] font-bold mb-2 md:mb-4\">Unauthorized Access</p>\r\n <p className=\"text-[14px] md:text-[16px] text-center max-w-md text-inactive-tab-text font-medium\">\r\n Sorry, you do not have the necessary permissions to view this page .\r\n </p>\r\n </div>\r\n </div>\r\n )\r\n}"],"mappings":"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","names":["import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lu","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_hi2","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/types/index.ts","../src/components/Button.tsx","../src/components/Checkbox.tsx","../src/components/DatePicker.tsx","../src/components/DropdownMenu.tsx","../src/components/ErrorScreen.tsx","../src/components/InputField.tsx","../src/components/LazyImageLoader.tsx","../src/components/LoadingPage.tsx","../src/components/Modal.tsx","../src/components/NumberField.tsx","../src/components/PasswordField.tsx","../src/components/RadioButton.tsx","../src/components/SearchField.tsx","../src/components/TextAreaField.tsx","../src/components/UnauthorizedPage.tsx"],"sourcesContent":["export { default as Button } from \"./components/Button\";\r\nexport { default as Checkbox } from \"./components/Checkbox\";\r\nexport { default as DatePicker } from \"./components/DatePicker\";\r\nexport { default as DropdownMenu } from \"./components/DropdownMenu\";\r\nexport { default as ErrorScreen } from \"./components/ErrorScreen\";\r\nexport { default as InputField } from \"./components/InputField\";\r\nexport { default as LazyImageLoader } from \"./components/LazyImageLoader\";\r\nexport { default as LoadingPage } from \"./components/LoadingPage\";\r\nexport { default as Modal } from \"./components/Modal\";\r\nexport { default as NumberField } from \"./components/NumberField\";\r\nexport { default as PasswordField } from \"./components/PasswordField\";\r\nexport { default as RadioButton } from \"./components/RadioButton\";\r\nexport { default as SearchField } from \"./components/SearchField\";\r\nexport { default as TextAreaField } from \"./components/TextAreaField\";\r\nexport { default as UnauthorizedPage } from \"./components/UnauthorizedPage\";\r\nexport * from \"./types\";\r\n","export const ButtonTypes = {\r\n PRIMARY: \"primary\",\r\n SECONDARY: \"secondary\",\r\n TERTIARY: \"tertiary\",\r\n DANGER: \"danger\",\r\n GHOST: \"ghost\",\r\n BASIC: \"basic\"\r\n} as const;\r\n\r\nexport type ButtonTypes = typeof ButtonTypes[keyof typeof ButtonTypes];\r\n\r\nexport const ButtonWidths = {\r\n AUTO: \"auto\",\r\n SMALL: \"small\",\r\n MEDIUM: \"medium\",\r\n LARGE: \"large\",\r\n XL: \"xl\",\r\n FULL: \"full\"\r\n} as const;\r\n\r\nexport type ButtonWidths = typeof ButtonWidths[keyof typeof ButtonWidths];\r\n\r\nexport interface DropdownOption {\r\n value: string;\r\n label: string;\r\n disabled?: boolean;\r\n}\r\n","import { ButtonTypes, ButtonWidths } from \"../types\";\r\nimport { AiOutlineLoading3Quarters } from \"react-icons/ai\";\r\nimport React from \"react\";\r\n\r\ninterface ButtonProps {\r\n buttonText?: string;\r\n buttonIcon?: React.ReactNode;\r\n onClick: () => void;\r\n type: ButtonTypes;\r\n disabled?: boolean;\r\n loading?: boolean;\r\n width?: ButtonWidths;\r\n}\r\n\r\nconst Button = ({ buttonText, buttonIcon, onClick, type, disabled = false, loading = false, width = ButtonWidths.AUTO }: ButtonProps) => {\r\n const isDisabled = disabled || loading;\r\n\r\n const stylePresets: Record<ButtonTypes, string> = {\r\n primary: \"bg-primary text-text border-primary\",\r\n secondary: \"bg-secondary text-text border-secondary\",\r\n tertiary: \"bg-contrast text-text border-contrast\",\r\n danger: \"border-primary text-primary\",\r\n ghost: \"text-secondary border-secondary\",\r\n basic: \"border-contrast\"\r\n }\r\n\r\n const hoverStyles: Record<ButtonTypes, string> = {\r\n primary: \"hover:bg-background hover:border-primary hover:text-primary\",\r\n secondary: \"hover:bg-background hover:border-secondary hover:text-secondary\",\r\n tertiary: \"hover:bg-background hover:border-tertiary hover:text-black\",\r\n danger: \"hover:bg-primary hover:text-text\",\r\n ghost: \"hover:bg-secondary/30\",\r\n basic: \"hover:bg-contrast/30\",\r\n }\r\n\r\n const disabledStyles = \"opacity-50\";\r\n\r\n const widthStyles: Record<ButtonWidths, string> = {\r\n auto: \"w-auto\",\r\n small: \"w-24\",\r\n medium: \"w-32\",\r\n large: \"w-48\",\r\n xl: \"w-64\",\r\n full: \"w-full\"\r\n }\r\n\r\n const handleClick = () => {\r\n if (!isDisabled) {\r\n onClick();\r\n }\r\n };\r\n\r\n return (\r\n <button\r\n onClick={handleClick}\r\n disabled={isDisabled}\r\n className={`\r\n ${stylePresets[type]} \r\n ${!isDisabled ? hoverStyles[type] : ''} \r\n ${isDisabled ? disabledStyles : ''} \r\n ${widthStyles[width]}\r\n rounded-full px-6 py-2 border font-bold text-[11px] lg:text-[12px] whitespace-nowrap\r\n transition-all duration-200 ease-in-out flex items-center justify-center h-fit\r\n ${isDisabled ? 'cursor-not-allowed' : 'cursor-pointer'}\r\n `}\r\n >\r\n {loading && (\r\n <span className=\"animate-spin -ml-1 mr-2 h-4 w-4 inline-block\">\r\n <AiOutlineLoading3Quarters />\r\n </span>\r\n )}\r\n {loading ? 'Loading...' : buttonText}\r\n {buttonIcon && !loading && (\r\n <span className=\"ml-2 inline-block\">\r\n {buttonIcon}\r\n </span>\r\n )}\r\n </button>\r\n )\r\n}\r\n\r\nexport default Button;","export default function Checkbox({label, checked, onChange}: {label: string, checked: boolean, onChange: () => void}) {\r\n return (\r\n <label className=\"inline-flex items-center cursor-pointer relative pl-7 select-none\">\r\n <input\r\n type=\"checkbox\"\r\n checked={checked}\r\n onChange={() => onChange()}\r\n className=\"peer absolute left-0 top-1/2 -translate-y-1/2 w-5 h-5 opacity-0 cursor-pointer\"\r\n />\r\n <span className=\"\r\n absolute left-0 top-1/2 -translate-y-1/2 w-5 h-5 rounded-md\r\n border-2 border-gray-300 bg-white\r\n peer-checked:bg-primary peer-checked:border-primary\r\n flex items-center justify-center\r\n transition-colors\r\n pointer-events-none\r\n \">\r\n <svg\r\n className=\"w-4 h-4 text-white\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"3\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\r\n </svg>\r\n </span>\r\n <span className=\"text-sm\">{label}</span>\r\n </label>\r\n );\r\n}","import React from 'react';\r\nimport { MdCalendarToday } from 'react-icons/md';\r\n\r\ninterface DatePickerProps {\r\n label: string;\r\n id: string;\r\n value: string;\r\n onChange: (date: string) => void;\r\n error?: string;\r\n disabled?: boolean;\r\n minDate?: string;\r\n maxDate?: string;\r\n}\r\n\r\nexport default function DatePicker({\r\n label,\r\n id,\r\n value,\r\n onChange,\r\n error,\r\n disabled = false,\r\n minDate,\r\n maxDate,\r\n}: DatePickerProps) {\r\n const handleDateChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(e.target.value.toString());\r\n };\r\n\r\n return (\r\n <div className=\"flex flex-col w-full\">\r\n <label className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\">\r\n {label}\r\n </label>\r\n\r\n <div className=\"relative\">\r\n <input\r\n id={id}\r\n type=\"date\"\r\n value={value}\r\n onChange={handleDateChange}\r\n disabled={disabled}\r\n min={minDate}\r\n max={maxDate}\r\n className={`w-full border-contrast rounded-xl px-3 py-2 md:px-4 md:py-3 border outline-none ${error\r\n ? \"border-red-300 focus:border-red-500 focus:ring-red-500/30\"\r\n : \"focus:border-primary\"\r\n } ${disabled ? \"bg-gray-100 cursor-not-allowed opacity-60\" : \"bg-white\"\r\n } transition-all duration-300 ease-in-out text-sm pr-10 [&::-webkit-calendar-picker-indicator]:opacity-0 [&::-webkit-calendar-picker-indicator]:absolute [&::-webkit-calendar-picker-indicator]:right-3 [&::-webkit-calendar-picker-indicator]:w-5 [&::-webkit-calendar-picker-indicator]:h-5 [&::-webkit-calendar-picker-indicator]:cursor-pointer`}\r\n />\r\n\r\n <div className=\"absolute right-3 top-1/2 transform -translate-y-1/2 pointer-events-none\">\r\n <span className={`w-5 h-5 ${disabled ? \"text-gray-400\" : \"text-secondary\"}`}>\r\n <MdCalendarToday />\r\n </span>\r\n </div>\r\n </div>\r\n\r\n {error && (\r\n <span className=\"text-red-500 text-sm font-medium mt-1\">{error}</span>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import { useState, useRef, useEffect } from \"react\";\r\nimport { IoChevronDown } from \"react-icons/io5\";\r\nimport Button from \"./Button\";\r\nimport { ButtonTypes, ButtonWidths } from \"../types\";\r\nimport type { DropdownOption } from \"../types\";\r\n\r\ninterface DropdownMenuProps {\r\n label?: string;\r\n placeholder?: string;\r\n options: DropdownOption[];\r\n value?: string;\r\n onChange: (value: string) => void;\r\n error?: string;\r\n disabled?: boolean;\r\n className?: string;\r\n id?: string;\r\n}\r\n\r\nexport default function DropdownMenu({\r\n label,\r\n placeholder = \"Select an option\",\r\n options,\r\n value,\r\n onChange,\r\n error,\r\n disabled = false,\r\n className = \"\",\r\n id,\r\n}: DropdownMenuProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const dropdownRef = useRef<HTMLDivElement>(null);\r\n\r\n const selectedOption = options.find((option) => option.value === value);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (\r\n dropdownRef.current &&\r\n !dropdownRef.current.contains(event.target as Node)\r\n ) {\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\r\n const handleOptionClick = (optionValue: string) => {\r\n if (!disabled) {\r\n onChange(optionValue);\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n return (\r\n <div className={`flex flex-col w-full ${className}`}>\r\n {label && (\r\n <label\r\n htmlFor={id}\r\n className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\"\r\n >\r\n {label}\r\n </label>\r\n )}\r\n\r\n <div className=\"relative\" ref={dropdownRef}>\r\n <div className=\"relative\">\r\n <Button\r\n buttonText={selectedOption ? selectedOption.label : placeholder}\r\n onClick={() => !disabled && setIsOpen(!isOpen)}\r\n type={ButtonTypes.BASIC}\r\n disabled={disabled}\r\n width={ButtonWidths.FULL}\r\n />\r\n <span\r\n className={`absolute right-3 top-1/2 transform -translate-y-1/2 w-5 h-5 text-secondary transition-transform duration-200 pointer-events-none ${\r\n isOpen ? \"rotate-180\" : \"\"\r\n }`}\r\n >\r\n <IoChevronDown />\r\n </span>\r\n </div>\r\n\r\n {isOpen && !disabled && (\r\n <div className=\"absolute z-50 w-full mt-1 bg-white border border-secondary/30 rounded-xl shadow-lg max-h-60 overflow-y-auto\">\r\n {options.length === 0 ? (\r\n <div className=\"px-3 py-2 text-sm text-muted-secondary\">\r\n No options available\r\n </div>\r\n ) : (\r\n options.map((option) => (\r\n <button\r\n key={option.value}\r\n type=\"button\"\r\n onClick={() => handleOptionClick(option.value)}\r\n disabled={option.disabled}\r\n className={`\r\n w-full px-3 py-2 text-left text-sm transition-colors duration-150\r\n ${\r\n option.disabled\r\n ? \"text-gray-400 cursor-not-allowed\"\r\n : \"text-gray-900 hover:bg-secondary/10 hover:text-secondary cursor-pointer\"\r\n }\r\n ${\r\n value === option.value\r\n ? \"bg-secondary/20 text-secondary font-medium\"\r\n : \"\"\r\n }\r\n first:rounded-t-xl last:rounded-b-xl\r\n `}\r\n >\r\n {option.label}\r\n </button>\r\n ))\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {error && <p className=\"mt-1 text-sm text-red-600\">{error}</p>}\r\n </div>\r\n );\r\n}\r\n","import { FaExclamationTriangle } from \"react-icons/fa\";\r\n\r\ninterface ErrorComponentProps {\r\n title: string;\r\n message: string;\r\n}\r\n\r\nexport default function ErrorComponent({\r\n title,\r\n message,\r\n}: ErrorComponentProps) {\r\n return (\r\n <div className=\"min-h-screen bg-background\">\r\n <div className=\"w-full md:w-3/4 lg:w-10/12 m-auto rounded-xl shadow-md p-5 flex flex-col gap-4\">\r\n {/* Error Container */}\r\n <div className=\"flex flex-col items-center justify-center py-16 px-4\">\r\n {/* Error Icon */}\r\n <div className=\"mb-6\">\r\n <div className=\"w-20 h-20 bg-red-100 rounded-full flex items-center justify-center\">\r\n <span className=\"text-error text-3xl\">\r\n <FaExclamationTriangle />\r\n </span>\r\n </div>\r\n </div>\r\n\r\n {/* Error Title */}\r\n <h1 className=\"text-2xl md:text-3xl lg:text-4xl font-bold text-error mb-4 text-center\">\r\n {title}\r\n </h1>\r\n\r\n {/* Error Message */}\r\n <p className=\"text-base md:text-lg text-center mb-8 max-w-md\">\r\n {message}\r\n </p>\r\n </div>\r\n\r\n <div className=\"mt-8 bg-red-50 border border-red-200 rounded-xl p-4\">\r\n <h3 className=\"font-semibold text-red-800 mb-2\">\r\n Technical Details\r\n </h3>\r\n <div className=\"text-red-700 text-sm space-y-1\">\r\n <p>• Check your internet connection</p>\r\n <p>• The page may be temporarily unavailable</p>\r\n <p>• Contact support if the problem persists</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\n\r\nexport default function InputField({\r\n label,\r\n value,\r\n placeholder,\r\n onChange,\r\n error,\r\n id,\r\n}: {\r\n label: string;\r\n id: string;\r\n value: string;\r\n placeholder: string;\r\n onChange: (newValue: React.ChangeEvent<HTMLInputElement>) => void;\r\n error?: string;\r\n}) {\r\n return (\r\n <div className=\"flex flex-col w-full\">\r\n <label className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\">\r\n {label}\r\n </label>\r\n <input\r\n id={id}\r\n value={value}\r\n placeholder={placeholder}\r\n onChange={(e) => onChange(e)}\r\n className={`border-gray-400 rounded-xl px-3 py-2 md:px-4 md:py-3 border outline-none ${\r\n error\r\n ? \"border-red-300 focus:border-red-500 focus:ring-red-500/30\"\r\n : \"focus:border-primary\"\r\n } transition-all duration-300 ease-in-out text-sm`}\r\n />\r\n </div>\r\n );\r\n}\r\n","import { useState } from \"react\";\r\nimport { HiOutlinePhotograph } from \"react-icons/hi\";\r\n\r\ninterface LazyImageLoaderProps {\r\n src: string;\r\n alt: string;\r\n className?: string;\r\n width?: string | number;\r\n height?: string | number;\r\n}\r\n\r\nexport default function LazyImageLoader({ \r\n src, \r\n alt, \r\n className = \"\", \r\n width = \"100%\", \r\n height = \"200px\" \r\n}: LazyImageLoaderProps) {\r\n const [imageLoaded, setImageLoaded] = useState(false);\r\n const [imageError, setImageError] = useState(false);\r\n\r\n const handleImageLoad = () => {\r\n setImageLoaded(true);\r\n };\r\n\r\n const handleImageError = () => {\r\n setImageError(true);\r\n setImageLoaded(true);\r\n };\r\n\r\n return (\r\n <div \r\n className={`relative overflow-hidden ${className}`}\r\n style={{ width, height }}\r\n >\r\n {!imageLoaded && (\r\n <div className=\"absolute inset-0 bg-gray-200 animate-pulse\">\r\n <div className=\"absolute inset-0 bg-gradient-to-r from-gray-200 via-gray-100 to-gray-200 animate-shimmer\"></div>\r\n </div>\r\n )}\r\n\r\n {imageError && (\r\n <div className=\"absolute inset-0 bg-gray-100 flex items-center justify-center\">\r\n <div className=\"text-center text-gray-400\">\r\n <span className=\"w-12 h-12 mx-auto mb-2\">\r\n <HiOutlinePhotograph />\r\n </span>\r\n <p className=\"text-sm\">Failed to load</p>\r\n </div>\r\n </div>\r\n )}\r\n\r\n <img\r\n src={src}\r\n alt={alt}\r\n onLoad={handleImageLoad}\r\n onError={handleImageError}\r\n className={`w-full h-full object-cover transition-opacity duration-300 ${\r\n imageLoaded ? \"opacity-100\" : \"opacity-0\"\r\n }`}\r\n />\r\n </div>\r\n );\r\n}\r\n","import logoFile from \"../assets/TCCD_logo.svg\";\r\nconst tccd_logo = new URL(logoFile, import.meta.url).href;\r\n\r\nconst LoadingPage = () => {\r\n return (\r\n <>\r\n <style>{`\r\n @keyframes custom-bounce {\r\n 0%, 100% {\r\n transform: translateY(0);\r\n animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\r\n }\r\n 50% {\r\n transform: translateY(-8px);\r\n animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\r\n }\r\n }\r\n\r\n @keyframes logoLuxury {\r\n 0% {\r\n filter: brightness(1) contrast(1) drop-shadow(0 0 15px rgba(205, 58, 56, 0.3)) saturate(1);\r\n transform: scale(1) rotate(0deg);\r\n }\r\n 25% {\r\n filter: brightness(1.2) contrast(1.2) drop-shadow(0 0 25px rgba(41, 94, 126, 0.5)) saturate(1.2);\r\n transform: scale(1.05) rotate(2deg);\r\n }\r\n 50% {\r\n filter: brightness(1.4) contrast(1.3) drop-shadow(0 0 35px rgba(205, 58, 56, 0.7)) saturate(1.4);\r\n transform: scale(1.08) rotate(0deg);\r\n }\r\n 75% {\r\n filter: brightness(1.2) contrast(1.2) drop-shadow(0 0 25px rgba(41, 94, 126, 0.5)) saturate(1.2);\r\n transform: scale(1.05) rotate(-2deg);\r\n }\r\n 100% {\r\n filter: brightness(1) contrast(1) drop-shadow(0 0 15px rgba(205, 58, 56, 0.3)) saturate(1);\r\n transform: scale(1) rotate(0deg);\r\n }\r\n }\r\n\r\n @keyframes float {\r\n 0%, 100% {\r\n transform: translateY(0px) translateX(0px) scale(1);\r\n opacity: 0.3;\r\n }\r\n 50% {\r\n transform: translateY(-20px) translateX(10px) scale(1.2);\r\n opacity: 0.8;\r\n }\r\n }\r\n\r\n @keyframes spinSlow {\r\n from {\r\n transform: rotate(0deg);\r\n }\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n\r\n @keyframes rotateSlow {\r\n from {\r\n transform: rotate(0deg);\r\n }\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n\r\n @keyframes gradientShift {\r\n 0%, 100% {\r\n background-position: 0% 50%;\r\n }\r\n 50% {\r\n background-position: 100% 50%;\r\n }\r\n }\r\n\r\n @keyframes progressWave {\r\n 0% {\r\n transform: translateX(-100%) scaleX(1);\r\n opacity: 0.8;\r\n }\r\n 50% {\r\n transform: translateX(0%) scaleX(1.5);\r\n opacity: 1;\r\n }\r\n 100% {\r\n transform: translateX(100%) scaleX(1);\r\n opacity: 0.8;\r\n }\r\n }\r\n\r\n .animate-custom-bounce {\r\n animation-name: custom-bounce;\r\n animation-duration: 2s;\r\n animation-iteration-count: infinite;\r\n }\r\n\r\n .animate-logo-luxury {\r\n animation: logoLuxury 4s ease-in-out infinite;\r\n }\r\n\r\n .animate-float {\r\n animation: float 6s ease-in-out infinite;\r\n }\r\n\r\n .animate-spin-slow {\r\n animation: spinSlow 8s linear infinite;\r\n }\r\n\r\n .animate-rotate-slow {\r\n animation: rotateSlow 12s linear infinite;\r\n }\r\n\r\n .animate-gradient-shift {\r\n background-size: 300% 300%;\r\n animation: gradientShift 3s ease infinite;\r\n }\r\n\r\n .animate-progress-wave {\r\n animation: progressWave 2s ease-in-out infinite;\r\n }\r\n\r\n .dot-container .dot:nth-child(1) { animation-delay: 0s; }\r\n .dot-container .dot:nth-child(2) { animation-delay: 0.15s; }\r\n .dot-container .dot:nth-child(3) { animation-delay: 0.3s; }\r\n .dot-container .dot:nth-child(4) { animation-delay: 0.45s; }\r\n .dot-container .dot:nth-child(5) { animation-delay: 0.6s; }\r\n .dot-container .dot:nth-child(6) { animation-delay: 0.75s; }\r\n .dot-container .dot:nth-child(7) { animation-delay: 0.9s; }\r\n .dot-container .dot:nth-child(8) { animation-delay: 1.05s; }\r\n `}</style>\r\n <div className=\"relative min-h-screen bg-gradient-to-br from-background via-dashboard-welcome-bg to-muted-secondary overflow-hidden\">\r\n <div className=\"absolute inset-0\">\r\n {[...Array(25)].map((_, i) => (\r\n <div\r\n key={i}\r\n className=\"absolute w-2 h-2 bg-primary/20 rounded-full animate-float\"\r\n style={{\r\n left: `${Math.random() * 100}%`,\r\n top: `${Math.random() * 100}%`,\r\n animationDelay: `${Math.random() * 5}s`,\r\n animationDuration: `${3 + Math.random() * 4}s`,\r\n }}\r\n />\r\n ))}\r\n </div>\r\n\r\n <div className=\"relative z-10 flex flex-col items-center justify-center min-h-screen px-4\">\r\n\r\n <div className=\"relative mb-5 md:mb-10\">\r\n <div className=\"absolute inset-0 rounded-full bg-gradient-to-r from-primary via-secondary to-primary opacity-30 blur-2xl animate-spin-slow scale-150\"></div>\r\n\r\n <div className=\"absolute inset-4 rounded-full bg-gradient-to-r from-secondary via-primary to-secondary opacity-40 blur-xl animate-pulse\"></div>\r\n\r\n <div className=\"relative bg-white/10 backdrop-blur-sm rounded-full p-8 border border-white/20 shadow-2xl\">\r\n <div className=\"relative\">\r\n <img\r\n src={tccd_logo}\r\n alt=\"TCCD logo\"\r\n className=\"relative z-10 animate-logo-luxury drop-shadow-2xl lg:w-[160px] md:w-[135px] w-[110px]\"\r\n />\r\n\r\n <div className=\"absolute inset-0 bg-gradient-to-tr from-transparent via-white/40 to-transparent animate-rotate-slow opacity-60\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"text-center mb-4\">\r\n <h1 className=\"lg:text-3xl md:text-2xl text-xl font-bold bg-gradient-to-r from-primary via-secondary to-primary bg-clip-text text-transparent animate-gradient-shift mb-4\">\r\n Loading your experience...\r\n </h1>\r\n\r\n <p className=\"text-dashboard-description lg:text-lg md:text-md text-sm font-medium opacity-80\">\r\n Please wait while we prepare everything for you\r\n </p>\r\n </div>\r\n\r\n <div className=\"relative w-80 mb-8\">\r\n <div className=\"h-2 bg-muted-secondary/30 rounded-full overflow-hidden backdrop-blur-sm\">\r\n <div className=\"h-full bg-gradient-to-r from-primary via-secondary to-primary animate-progress-wave\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"absolute top-8 left-8 w-16 h-16 border-l-2 border-t-2 border-primary/30 rounded-tl-lg\"></div>\r\n <div className=\"absolute top-8 right-8 w-16 h-16 border-r-2 border-t-2 border-secondary/30 rounded-tr-lg\"></div>\r\n <div className=\"absolute bottom-8 left-8 w-16 h-16 border-l-2 border-b-2 border-secondary/30 rounded-bl-lg\"></div>\r\n <div className=\"absolute bottom-8 right-8 w-16 h-16 border-r-2 border-b-2 border-primary/30 rounded-br-lg\"></div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default LoadingPage;\r\n","import { useEffect, useRef } from \"react\";\r\nimport type { ReactNode } from \"react\";\r\nimport { LuX } from \"react-icons/lu\";\r\nimport React from 'react';\r\n\r\nconst Modal = ({\r\n title,\r\n isOpen,\r\n onClose,\r\n children,\r\n}: {\r\n title: string;\r\n isOpen: boolean;\r\n onClose: () => void;\r\n children: ReactNode;\r\n}) => {\r\n const modalRef = useRef<HTMLDivElement>(null);\r\n const previousFocusRef = useRef<HTMLElement | null>(null);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n // Store the previously focused element\r\n previousFocusRef.current = document.activeElement as HTMLElement;\r\n\r\n // Focus the modal\r\n modalRef.current?.focus();\r\n\r\n // Prevent body scroll\r\n document.body.style.overflow = \"hidden\";\r\n } else {\r\n // Restore body scroll\r\n document.body.style.overflow = \"unset\";\r\n\r\n // Restore focus to previously focused element\r\n previousFocusRef.current?.focus();\r\n }\r\n\r\n return () => {\r\n document.body.style.overflow = \"unset\";\r\n };\r\n }, [isOpen]);\r\n\r\n useEffect(() => {\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\" && isOpen) {\r\n onClose();\r\n }\r\n };\r\n\r\n document.addEventListener(\"keydown\", handleEscape);\r\n return () => document.removeEventListener(\"keydown\", handleEscape);\r\n }, [isOpen, onClose]);\r\n\r\n const handleBackdropClick = (e: React.MouseEvent<HTMLDivElement>) => {\r\n if (e.target === e.currentTarget) {\r\n onClose();\r\n }\r\n };\r\n\r\n if (!isOpen) return null;\r\n\r\n return (\r\n <div\r\n className=\"fixed inset-0 bg-black/30 backdrop-blur-sm flex items-center justify-center z-50\"\r\n onClick={handleBackdropClick}\r\n >\r\n <div\r\n ref={modalRef}\r\n className=\"bg-background rounded-lg shadow-xl w-full mx-4 sm:max-w-lg xl:max-w-xl max-h-[90vh] flex flex-col overflow-y-auto\"\r\n tabIndex={-1}\r\n >\r\n <div className=\"p-4 sm:p-6 flex-1 flex flex-col\">\r\n <div className=\"flex justify-between items-center mb-4\">\r\n <h2\r\n id=\"modal-title\"\r\n className=\"text-lg sm:text-xl md:text-2xl font-bold text-primary\"\r\n >\r\n {title}\r\n </h2>\r\n <span\r\n onClick={onClose}\r\n className=\"text-gray-400 hover:text-gray-600 transition-colors duration-300 p-1 text-xl sm:text-2xl md:text-3xl cursor-pointer\"\r\n >\r\n <LuX />\r\n </span>\r\n </div>\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Modal;\r\n","import { useState } from \"react\";\r\nimport React from 'react';\r\n\r\nexport default function NumberField({\r\n label,\r\n value,\r\n placeholder,\r\n onChange,\r\n error,\r\n maxLength,\r\n id,\r\n}: {\r\n label: string;\r\n id: string;\r\n value: string;\r\n placeholder: string;\r\n maxLength?: number;\r\n onChange: (newValue: React.ChangeEvent<HTMLInputElement>) => void;\r\n error?: string;\r\n}) {\r\n const [lengthError, setLengthError] = useState<string | null>(null);\r\n function handleChange(e: React.ChangeEvent<HTMLInputElement>) {\r\n const inputValue = e.target.value;\r\n if (maxLength && inputValue.length > maxLength) {\r\n setLengthError(`Maximum length of ${maxLength} characters exceeded.`);\r\n return;\r\n }\r\n lengthError && setLengthError(null);\r\n onChange(e);\r\n }\r\n return (\r\n <div className=\"flex flex-col w-full\">\r\n <label className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\">\r\n {label}\r\n </label>\r\n <input\r\n id={id}\r\n value={value}\r\n type=\"number\"\r\n placeholder={placeholder}\r\n onChange={handleChange}\r\n className={`border-gray-400 rounded-xl px-3 py-2 md:px-4 md:py-3 border outline-none ${\r\n error || lengthError\r\n ? \"border-red-300 focus:border-red-500 focus:ring-red-500/30\"\r\n : \"focus:border-primary\"\r\n } transition-all duration-300 ease-in-out text-sm`}\r\n />\r\n </div>\r\n );\r\n}\r\n","import { useState } from \"react\";\r\nimport { LuEye, LuEyeOff } from \"react-icons/lu\";\r\nimport React from 'react';\r\n\r\nexport default function PasswordField({\r\n value,\r\n onChange,\r\n error,\r\n}: {\r\n value: string;\r\n onChange: (newValue: React.ChangeEvent<HTMLInputElement>) => void;\r\n error?: string;\r\n}) {\r\n const [show, setShow] = useState(false);\r\n\r\n return (\r\n <div className=\"flex flex-col w-full\">\r\n <label className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\">\r\n Password\r\n </label>\r\n <div className=\"relative\">\r\n <input\r\n id=\"password\"\r\n value={value}\r\n placeholder=\"Enter your Password\"\r\n onChange={(e) => onChange(e)}\r\n type={show ? \"text\" : \"password\"}\r\n className={`border-gray-400 rounded-xl px-3 py-2 md:px-4 md:py-3 border outline-none ${\r\n error\r\n ? \"border-red-300 focus:border-red-500 focus:ring-red-500/30\"\r\n : \"focus:border-primary\"\r\n } transition-all duration-300 ease-in-out text-sm w-full pr-10 `}\r\n />\r\n <button\r\n type=\"button\"\r\n className=\"absolute right-3 top-1/2 -translate-y-1/2 contrast-50 cursor-pointer transition duration-300 ease-in-out hover:contrast-100\"\r\n onClick={() => setShow(!show)}\r\n tabIndex={-1}\r\n >\r\n {show ? <LuEyeOff size={20} /> : <LuEye size={20} />}\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","\r\n\r\nexport default function Radiobutton({label, checked, onChange}: {label: string, checked: boolean, onChange: (newValue: boolean) => void}) {\r\n return (\r\n <label className=\"inline-flex items-center cursor-pointer relative pl-7 select-none\">\r\n <input\r\n type=\"radio\"\r\n checked={checked}\r\n onChange={(e) => onChange(e.target.checked)}\r\n className=\"peer absolute left-0 top-1/2 -translate-y-1/2 w-5 h-5 opacity-0 cursor-pointer\"\r\n />\r\n <span className=\"\r\n absolute left-0 top-1/2 -translate-y-1/2 w-5 h-5 rounded-full\r\n border-2 border-gray-300 bg-background\r\n flex items-center justify-center\r\n transition-colors\r\n pointer-events-none\r\n \">\r\n <span className={`w-3 h-3 ${checked ? 'bg-primary' : 'bg-transparent'} rounded-full transition-all`} />\r\n </span>\r\n <span className=\"text-sm\">{label}</span>\r\n </label>\r\n );\r\n}","import { HiOutlineMagnifyingGlass } from \"react-icons/hi2\";\r\n\r\ninterface SearchFieldProps {\r\n value: string;\r\n onChange: (value: string) => void;\r\n placeholder?: string;\r\n className?: string;\r\n}\r\n\r\nexport default function SearchField({\r\n value,\r\n onChange,\r\n placeholder = \"Search...\",\r\n className = \"\"\r\n}: SearchFieldProps) {\r\n return (\r\n <div className={`relative w-full lg:w-96 ${className}`}>\r\n <div className=\"relative\">\r\n <span className=\"absolute left-4 top-1/2 transform -translate-y-1/2 text-muted-secondary/60 text-lg\">\r\n <HiOutlineMagnifyingGlass />\r\n </span>\r\n <input\r\n type=\"text\"\r\n value={value}\r\n onChange={(e) => onChange(e.target.value)}\r\n placeholder={placeholder}\r\n className=\"w-full bg-background/50 rounded-3xl border-contrast pl-12 pr-4 py-2 text-[14px] md:text-[15px] lg:text-[16px] border focus:border-primary focus:outline-none transition-all duration-300 ease-in-out placeholder:text-muted-secondary\"\r\n />\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { useState, useRef } from \"react\";\r\nimport React from 'react';\r\n\r\nexport default function TextAreaField({\r\n label,\r\n value,\r\n placeholder,\r\n onChange,\r\n error,\r\n maxLength,\r\n id,\r\n}: {\r\n label: string;\r\n id: string;\r\n value: string;\r\n placeholder: string;\r\n maxLength?: number;\r\n onChange: (newValue: React.ChangeEvent<HTMLTextAreaElement>) => void;\r\n error?: string;\r\n}) {\r\n const [lengthError, setLengthError] = useState<string | null>(null);\r\n const textareaRef = useRef<HTMLTextAreaElement>(null);\r\n function handleChange(e: React.ChangeEvent<HTMLTextAreaElement>) {\r\n const inputValue = e.target.value;\r\n if (maxLength && inputValue.length > maxLength) {\r\n setLengthError(`Maximum length of ${maxLength} characters exceeded.`);\r\n return;\r\n }\r\n lengthError && setLengthError(null);\r\n if (textareaRef.current) {\r\n textareaRef.current.style.height = \"auto\";\r\n textareaRef.current.style.height =\r\n textareaRef.current.scrollHeight + \"px\";\r\n }\r\n onChange(e);\r\n }\r\n return (\r\n <div className=\"flex flex-col w-full\">\r\n <label className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\">\r\n {label}\r\n </label>\r\n <textarea\r\n ref={textareaRef}\r\n id={id}\r\n onChange={handleChange}\r\n value={value}\r\n placeholder={placeholder}\r\n rows={4}\r\n className={`border-gray-400 rounded-xl px-3 py-2 md:px-4 md:py-3 border outline-none ${\r\n error || lengthError\r\n ? \"border-red-300 focus:border-red-500 focus:ring-red-500/30\"\r\n : \"focus:border-primary\"\r\n } transition-all duration-300 ease-in-out text-sm`}\r\n />\r\n {maxLength && (\r\n <p className=\"text-[9px] md:text-[10px] lg:text-[11px] p-1 text-inactive-tab-text\">\r\n {value.length}/{maxLength}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import { HiMiniXMark } from \"react-icons/hi2\";\r\n\r\nexport default function UnauthorizedPage() {\r\n return (\r\n <div className=\"w-screen h-screen flex flex-col justify-center items-center bg-background\">\r\n <div className=\"w-fit rounded-2xl bg-background p-8 shadow-[0_0px_20px_rgba(0,0,0,0.2)] flex flex-col items-center\">\r\n <div className=\"rounded-full bg-muted-primary md:p-4 p-2 mb-4 md:mb-6 lg:mb-8 w-fit\">\r\n <span className=\"text-[52px] md:text-[56px] lg:text-[60px] text-primary\">\r\n <HiMiniXMark />\r\n </span>\r\n </div>\r\n <p className=\"text-[24px] md:text-[28px] lg:text-[32px] font-bold mb-2 md:mb-4\">Unauthorized Access</p>\r\n <p className=\"text-[14px] md:text-[16px] text-center max-w-md text-inactive-tab-text font-medium\">\r\n Sorry, you do not have the necessary permissions to view this page .\r\n </p>\r\n </div>\r\n </div>\r\n )\r\n}"],"mappings":"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","names":["import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lu","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_hi2","import_jsx_runtime"]}
package/dist/index.mjs CHANGED
@@ -323,7 +323,9 @@ function LazyImageLoader({
323
323
  var TCCD_logo_default = "./TCCD_logo-65HFB2NY.svg";
324
324
 
325
325
  // src/components/LoadingPage.tsx
326
+ var import_meta = {};
326
327
  import { Fragment, jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
328
+ var tccd_logo = new URL(TCCD_logo_default, import_meta.url).href;
327
329
  var LoadingPage = () => {
328
330
  return /* @__PURE__ */ jsxs8(Fragment, { children: [
329
331
  /* @__PURE__ */ jsx8("style", { children: `
@@ -476,7 +478,7 @@ var LoadingPage = () => {
476
478
  /* @__PURE__ */ jsx8(
477
479
  "img",
478
480
  {
479
- src: TCCD_logo_default,
481
+ src: tccd_logo,
480
482
  alt: "TCCD logo",
481
483
  className: "relative z-10 animate-logo-luxury drop-shadow-2xl lg:w-[160px] md:w-[135px] w-[110px]"
482
484
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/index.ts","../src/components/Button.tsx","../src/components/Checkbox.tsx","../src/components/DatePicker.tsx","../src/components/DropdownMenu.tsx","../src/components/ErrorScreen.tsx","../src/components/InputField.tsx","../src/components/LazyImageLoader.tsx","../src/components/LoadingPage.tsx","../src/components/Modal.tsx","../src/components/NumberField.tsx","../src/components/PasswordField.tsx","../src/components/RadioButton.tsx","../src/components/SearchField.tsx","../src/components/TextAreaField.tsx","../src/components/UnauthorizedPage.tsx"],"sourcesContent":["export const ButtonTypes = {\r\n PRIMARY: \"primary\",\r\n SECONDARY: \"secondary\",\r\n TERTIARY: \"tertiary\",\r\n DANGER: \"danger\",\r\n GHOST: \"ghost\",\r\n BASIC: \"basic\"\r\n} as const;\r\n\r\nexport type ButtonTypes = typeof ButtonTypes[keyof typeof ButtonTypes];\r\n\r\nexport const ButtonWidths = {\r\n AUTO: \"auto\",\r\n SMALL: \"small\",\r\n MEDIUM: \"medium\",\r\n LARGE: \"large\",\r\n XL: \"xl\",\r\n FULL: \"full\"\r\n} as const;\r\n\r\nexport type ButtonWidths = typeof ButtonWidths[keyof typeof ButtonWidths];\r\n\r\nexport interface DropdownOption {\r\n value: string;\r\n label: string;\r\n disabled?: boolean;\r\n}\r\n","import { ButtonTypes, ButtonWidths } from \"../types\";\r\nimport { AiOutlineLoading3Quarters } from \"react-icons/ai\";\r\nimport React from \"react\";\r\n\r\ninterface ButtonProps {\r\n buttonText?: string;\r\n buttonIcon?: React.ReactNode;\r\n onClick: () => void;\r\n type: ButtonTypes;\r\n disabled?: boolean;\r\n loading?: boolean;\r\n width?: ButtonWidths;\r\n}\r\n\r\nconst Button = ({ buttonText, buttonIcon, onClick, type, disabled = false, loading = false, width = ButtonWidths.AUTO }: ButtonProps) => {\r\n const isDisabled = disabled || loading;\r\n\r\n const stylePresets: Record<ButtonTypes, string> = {\r\n primary: \"bg-primary text-text border-primary\",\r\n secondary: \"bg-secondary text-text border-secondary\",\r\n tertiary: \"bg-contrast text-text border-contrast\",\r\n danger: \"border-primary text-primary\",\r\n ghost: \"text-secondary border-secondary\",\r\n basic: \"border-contrast\"\r\n }\r\n\r\n const hoverStyles: Record<ButtonTypes, string> = {\r\n primary: \"hover:bg-background hover:border-primary hover:text-primary\",\r\n secondary: \"hover:bg-background hover:border-secondary hover:text-secondary\",\r\n tertiary: \"hover:bg-background hover:border-tertiary hover:text-black\",\r\n danger: \"hover:bg-primary hover:text-text\",\r\n ghost: \"hover:bg-secondary/30\",\r\n basic: \"hover:bg-contrast/30\",\r\n }\r\n\r\n const disabledStyles = \"opacity-50\";\r\n\r\n const widthStyles: Record<ButtonWidths, string> = {\r\n auto: \"w-auto\",\r\n small: \"w-24\",\r\n medium: \"w-32\",\r\n large: \"w-48\",\r\n xl: \"w-64\",\r\n full: \"w-full\"\r\n }\r\n\r\n const handleClick = () => {\r\n if (!isDisabled) {\r\n onClick();\r\n }\r\n };\r\n\r\n return (\r\n <button\r\n onClick={handleClick}\r\n disabled={isDisabled}\r\n className={`\r\n ${stylePresets[type]} \r\n ${!isDisabled ? hoverStyles[type] : ''} \r\n ${isDisabled ? disabledStyles : ''} \r\n ${widthStyles[width]}\r\n rounded-full px-6 py-2 border font-bold text-[11px] lg:text-[12px] whitespace-nowrap\r\n transition-all duration-200 ease-in-out flex items-center justify-center h-fit\r\n ${isDisabled ? 'cursor-not-allowed' : 'cursor-pointer'}\r\n `}\r\n >\r\n {loading && (\r\n <span className=\"animate-spin -ml-1 mr-2 h-4 w-4 inline-block\">\r\n <AiOutlineLoading3Quarters />\r\n </span>\r\n )}\r\n {loading ? 'Loading...' : buttonText}\r\n {buttonIcon && !loading && (\r\n <span className=\"ml-2 inline-block\">\r\n {buttonIcon}\r\n </span>\r\n )}\r\n </button>\r\n )\r\n}\r\n\r\nexport default Button;","export default function Checkbox({label, checked, onChange}: {label: string, checked: boolean, onChange: () => void}) {\r\n return (\r\n <label className=\"inline-flex items-center cursor-pointer relative pl-7 select-none\">\r\n <input\r\n type=\"checkbox\"\r\n checked={checked}\r\n onChange={() => onChange()}\r\n className=\"peer absolute left-0 top-1/2 -translate-y-1/2 w-5 h-5 opacity-0 cursor-pointer\"\r\n />\r\n <span className=\"\r\n absolute left-0 top-1/2 -translate-y-1/2 w-5 h-5 rounded-md\r\n border-2 border-gray-300 bg-white\r\n peer-checked:bg-primary peer-checked:border-primary\r\n flex items-center justify-center\r\n transition-colors\r\n pointer-events-none\r\n \">\r\n <svg\r\n className=\"w-4 h-4 text-white\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"3\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\r\n </svg>\r\n </span>\r\n <span className=\"text-sm\">{label}</span>\r\n </label>\r\n );\r\n}","import React from 'react';\r\nimport { MdCalendarToday } from 'react-icons/md';\r\n\r\ninterface DatePickerProps {\r\n label: string;\r\n id: string;\r\n value: string;\r\n onChange: (date: string) => void;\r\n error?: string;\r\n disabled?: boolean;\r\n minDate?: string;\r\n maxDate?: string;\r\n}\r\n\r\nexport default function DatePicker({\r\n label,\r\n id,\r\n value,\r\n onChange,\r\n error,\r\n disabled = false,\r\n minDate,\r\n maxDate,\r\n}: DatePickerProps) {\r\n const handleDateChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(e.target.value.toString());\r\n };\r\n\r\n return (\r\n <div className=\"flex flex-col w-full\">\r\n <label className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\">\r\n {label}\r\n </label>\r\n\r\n <div className=\"relative\">\r\n <input\r\n id={id}\r\n type=\"date\"\r\n value={value}\r\n onChange={handleDateChange}\r\n disabled={disabled}\r\n min={minDate}\r\n max={maxDate}\r\n className={`w-full border-contrast rounded-xl px-3 py-2 md:px-4 md:py-3 border outline-none ${error\r\n ? \"border-red-300 focus:border-red-500 focus:ring-red-500/30\"\r\n : \"focus:border-primary\"\r\n } ${disabled ? \"bg-gray-100 cursor-not-allowed opacity-60\" : \"bg-white\"\r\n } transition-all duration-300 ease-in-out text-sm pr-10 [&::-webkit-calendar-picker-indicator]:opacity-0 [&::-webkit-calendar-picker-indicator]:absolute [&::-webkit-calendar-picker-indicator]:right-3 [&::-webkit-calendar-picker-indicator]:w-5 [&::-webkit-calendar-picker-indicator]:h-5 [&::-webkit-calendar-picker-indicator]:cursor-pointer`}\r\n />\r\n\r\n <div className=\"absolute right-3 top-1/2 transform -translate-y-1/2 pointer-events-none\">\r\n <span className={`w-5 h-5 ${disabled ? \"text-gray-400\" : \"text-secondary\"}`}>\r\n <MdCalendarToday />\r\n </span>\r\n </div>\r\n </div>\r\n\r\n {error && (\r\n <span className=\"text-red-500 text-sm font-medium mt-1\">{error}</span>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import { useState, useRef, useEffect } from \"react\";\r\nimport { IoChevronDown } from \"react-icons/io5\";\r\nimport Button from \"./Button\";\r\nimport { ButtonTypes, ButtonWidths } from \"../types\";\r\nimport type { DropdownOption } from \"../types\";\r\n\r\ninterface DropdownMenuProps {\r\n label?: string;\r\n placeholder?: string;\r\n options: DropdownOption[];\r\n value?: string;\r\n onChange: (value: string) => void;\r\n error?: string;\r\n disabled?: boolean;\r\n className?: string;\r\n id?: string;\r\n}\r\n\r\nexport default function DropdownMenu({\r\n label,\r\n placeholder = \"Select an option\",\r\n options,\r\n value,\r\n onChange,\r\n error,\r\n disabled = false,\r\n className = \"\",\r\n id,\r\n}: DropdownMenuProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const dropdownRef = useRef<HTMLDivElement>(null);\r\n\r\n const selectedOption = options.find((option) => option.value === value);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (\r\n dropdownRef.current &&\r\n !dropdownRef.current.contains(event.target as Node)\r\n ) {\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\r\n const handleOptionClick = (optionValue: string) => {\r\n if (!disabled) {\r\n onChange(optionValue);\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n return (\r\n <div className={`flex flex-col w-full ${className}`}>\r\n {label && (\r\n <label\r\n htmlFor={id}\r\n className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\"\r\n >\r\n {label}\r\n </label>\r\n )}\r\n\r\n <div className=\"relative\" ref={dropdownRef}>\r\n <div className=\"relative\">\r\n <Button\r\n buttonText={selectedOption ? selectedOption.label : placeholder}\r\n onClick={() => !disabled && setIsOpen(!isOpen)}\r\n type={ButtonTypes.BASIC}\r\n disabled={disabled}\r\n width={ButtonWidths.FULL}\r\n />\r\n <span\r\n className={`absolute right-3 top-1/2 transform -translate-y-1/2 w-5 h-5 text-secondary transition-transform duration-200 pointer-events-none ${\r\n isOpen ? \"rotate-180\" : \"\"\r\n }`}\r\n >\r\n <IoChevronDown />\r\n </span>\r\n </div>\r\n\r\n {isOpen && !disabled && (\r\n <div className=\"absolute z-50 w-full mt-1 bg-white border border-secondary/30 rounded-xl shadow-lg max-h-60 overflow-y-auto\">\r\n {options.length === 0 ? (\r\n <div className=\"px-3 py-2 text-sm text-muted-secondary\">\r\n No options available\r\n </div>\r\n ) : (\r\n options.map((option) => (\r\n <button\r\n key={option.value}\r\n type=\"button\"\r\n onClick={() => handleOptionClick(option.value)}\r\n disabled={option.disabled}\r\n className={`\r\n w-full px-3 py-2 text-left text-sm transition-colors duration-150\r\n ${\r\n option.disabled\r\n ? \"text-gray-400 cursor-not-allowed\"\r\n : \"text-gray-900 hover:bg-secondary/10 hover:text-secondary cursor-pointer\"\r\n }\r\n ${\r\n value === option.value\r\n ? \"bg-secondary/20 text-secondary font-medium\"\r\n : \"\"\r\n }\r\n first:rounded-t-xl last:rounded-b-xl\r\n `}\r\n >\r\n {option.label}\r\n </button>\r\n ))\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {error && <p className=\"mt-1 text-sm text-red-600\">{error}</p>}\r\n </div>\r\n );\r\n}\r\n","import { FaExclamationTriangle } from \"react-icons/fa\";\r\n\r\ninterface ErrorComponentProps {\r\n title: string;\r\n message: string;\r\n}\r\n\r\nexport default function ErrorComponent({\r\n title,\r\n message,\r\n}: ErrorComponentProps) {\r\n return (\r\n <div className=\"min-h-screen bg-background\">\r\n <div className=\"w-full md:w-3/4 lg:w-10/12 m-auto rounded-xl shadow-md p-5 flex flex-col gap-4\">\r\n {/* Error Container */}\r\n <div className=\"flex flex-col items-center justify-center py-16 px-4\">\r\n {/* Error Icon */}\r\n <div className=\"mb-6\">\r\n <div className=\"w-20 h-20 bg-red-100 rounded-full flex items-center justify-center\">\r\n <span className=\"text-error text-3xl\">\r\n <FaExclamationTriangle />\r\n </span>\r\n </div>\r\n </div>\r\n\r\n {/* Error Title */}\r\n <h1 className=\"text-2xl md:text-3xl lg:text-4xl font-bold text-error mb-4 text-center\">\r\n {title}\r\n </h1>\r\n\r\n {/* Error Message */}\r\n <p className=\"text-base md:text-lg text-center mb-8 max-w-md\">\r\n {message}\r\n </p>\r\n </div>\r\n\r\n <div className=\"mt-8 bg-red-50 border border-red-200 rounded-xl p-4\">\r\n <h3 className=\"font-semibold text-red-800 mb-2\">\r\n Technical Details\r\n </h3>\r\n <div className=\"text-red-700 text-sm space-y-1\">\r\n <p>• Check your internet connection</p>\r\n <p>• The page may be temporarily unavailable</p>\r\n <p>• Contact support if the problem persists</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\n\r\nexport default function InputField({\r\n label,\r\n value,\r\n placeholder,\r\n onChange,\r\n error,\r\n id,\r\n}: {\r\n label: string;\r\n id: string;\r\n value: string;\r\n placeholder: string;\r\n onChange: (newValue: React.ChangeEvent<HTMLInputElement>) => void;\r\n error?: string;\r\n}) {\r\n return (\r\n <div className=\"flex flex-col w-full\">\r\n <label className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\">\r\n {label}\r\n </label>\r\n <input\r\n id={id}\r\n value={value}\r\n placeholder={placeholder}\r\n onChange={(e) => onChange(e)}\r\n className={`border-gray-400 rounded-xl px-3 py-2 md:px-4 md:py-3 border outline-none ${\r\n error\r\n ? \"border-red-300 focus:border-red-500 focus:ring-red-500/30\"\r\n : \"focus:border-primary\"\r\n } transition-all duration-300 ease-in-out text-sm`}\r\n />\r\n </div>\r\n );\r\n}\r\n","import { useState } from \"react\";\r\nimport { HiOutlinePhotograph } from \"react-icons/hi\";\r\n\r\ninterface LazyImageLoaderProps {\r\n src: string;\r\n alt: string;\r\n className?: string;\r\n width?: string | number;\r\n height?: string | number;\r\n}\r\n\r\nexport default function LazyImageLoader({ \r\n src, \r\n alt, \r\n className = \"\", \r\n width = \"100%\", \r\n height = \"200px\" \r\n}: LazyImageLoaderProps) {\r\n const [imageLoaded, setImageLoaded] = useState(false);\r\n const [imageError, setImageError] = useState(false);\r\n\r\n const handleImageLoad = () => {\r\n setImageLoaded(true);\r\n };\r\n\r\n const handleImageError = () => {\r\n setImageError(true);\r\n setImageLoaded(true);\r\n };\r\n\r\n return (\r\n <div \r\n className={`relative overflow-hidden ${className}`}\r\n style={{ width, height }}\r\n >\r\n {!imageLoaded && (\r\n <div className=\"absolute inset-0 bg-gray-200 animate-pulse\">\r\n <div className=\"absolute inset-0 bg-gradient-to-r from-gray-200 via-gray-100 to-gray-200 animate-shimmer\"></div>\r\n </div>\r\n )}\r\n\r\n {imageError && (\r\n <div className=\"absolute inset-0 bg-gray-100 flex items-center justify-center\">\r\n <div className=\"text-center text-gray-400\">\r\n <span className=\"w-12 h-12 mx-auto mb-2\">\r\n <HiOutlinePhotograph />\r\n </span>\r\n <p className=\"text-sm\">Failed to load</p>\r\n </div>\r\n </div>\r\n )}\r\n\r\n <img\r\n src={src}\r\n alt={alt}\r\n onLoad={handleImageLoad}\r\n onError={handleImageError}\r\n className={`w-full h-full object-cover transition-opacity duration-300 ${\r\n imageLoaded ? \"opacity-100\" : \"opacity-0\"\r\n }`}\r\n />\r\n </div>\r\n );\r\n}\r\n","import tccd_logo from \"../assets/TCCD_logo.svg\";\r\n\r\nconst LoadingPage = () => {\r\n return (\r\n <>\r\n <style>{`\r\n @keyframes custom-bounce {\r\n 0%, 100% {\r\n transform: translateY(0);\r\n animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\r\n }\r\n 50% {\r\n transform: translateY(-8px);\r\n animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\r\n }\r\n }\r\n\r\n @keyframes logoLuxury {\r\n 0% {\r\n filter: brightness(1) contrast(1) drop-shadow(0 0 15px rgba(205, 58, 56, 0.3)) saturate(1);\r\n transform: scale(1) rotate(0deg);\r\n }\r\n 25% {\r\n filter: brightness(1.2) contrast(1.2) drop-shadow(0 0 25px rgba(41, 94, 126, 0.5)) saturate(1.2);\r\n transform: scale(1.05) rotate(2deg);\r\n }\r\n 50% {\r\n filter: brightness(1.4) contrast(1.3) drop-shadow(0 0 35px rgba(205, 58, 56, 0.7)) saturate(1.4);\r\n transform: scale(1.08) rotate(0deg);\r\n }\r\n 75% {\r\n filter: brightness(1.2) contrast(1.2) drop-shadow(0 0 25px rgba(41, 94, 126, 0.5)) saturate(1.2);\r\n transform: scale(1.05) rotate(-2deg);\r\n }\r\n 100% {\r\n filter: brightness(1) contrast(1) drop-shadow(0 0 15px rgba(205, 58, 56, 0.3)) saturate(1);\r\n transform: scale(1) rotate(0deg);\r\n }\r\n }\r\n\r\n @keyframes float {\r\n 0%, 100% {\r\n transform: translateY(0px) translateX(0px) scale(1);\r\n opacity: 0.3;\r\n }\r\n 50% {\r\n transform: translateY(-20px) translateX(10px) scale(1.2);\r\n opacity: 0.8;\r\n }\r\n }\r\n\r\n @keyframes spinSlow {\r\n from {\r\n transform: rotate(0deg);\r\n }\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n\r\n @keyframes rotateSlow {\r\n from {\r\n transform: rotate(0deg);\r\n }\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n\r\n @keyframes gradientShift {\r\n 0%, 100% {\r\n background-position: 0% 50%;\r\n }\r\n 50% {\r\n background-position: 100% 50%;\r\n }\r\n }\r\n\r\n @keyframes progressWave {\r\n 0% {\r\n transform: translateX(-100%) scaleX(1);\r\n opacity: 0.8;\r\n }\r\n 50% {\r\n transform: translateX(0%) scaleX(1.5);\r\n opacity: 1;\r\n }\r\n 100% {\r\n transform: translateX(100%) scaleX(1);\r\n opacity: 0.8;\r\n }\r\n }\r\n\r\n .animate-custom-bounce {\r\n animation-name: custom-bounce;\r\n animation-duration: 2s;\r\n animation-iteration-count: infinite;\r\n }\r\n\r\n .animate-logo-luxury {\r\n animation: logoLuxury 4s ease-in-out infinite;\r\n }\r\n\r\n .animate-float {\r\n animation: float 6s ease-in-out infinite;\r\n }\r\n\r\n .animate-spin-slow {\r\n animation: spinSlow 8s linear infinite;\r\n }\r\n\r\n .animate-rotate-slow {\r\n animation: rotateSlow 12s linear infinite;\r\n }\r\n\r\n .animate-gradient-shift {\r\n background-size: 300% 300%;\r\n animation: gradientShift 3s ease infinite;\r\n }\r\n\r\n .animate-progress-wave {\r\n animation: progressWave 2s ease-in-out infinite;\r\n }\r\n\r\n .dot-container .dot:nth-child(1) { animation-delay: 0s; }\r\n .dot-container .dot:nth-child(2) { animation-delay: 0.15s; }\r\n .dot-container .dot:nth-child(3) { animation-delay: 0.3s; }\r\n .dot-container .dot:nth-child(4) { animation-delay: 0.45s; }\r\n .dot-container .dot:nth-child(5) { animation-delay: 0.6s; }\r\n .dot-container .dot:nth-child(6) { animation-delay: 0.75s; }\r\n .dot-container .dot:nth-child(7) { animation-delay: 0.9s; }\r\n .dot-container .dot:nth-child(8) { animation-delay: 1.05s; }\r\n `}</style>\r\n <div className=\"relative min-h-screen bg-gradient-to-br from-background via-dashboard-welcome-bg to-muted-secondary overflow-hidden\">\r\n <div className=\"absolute inset-0\">\r\n {[...Array(25)].map((_, i) => (\r\n <div\r\n key={i}\r\n className=\"absolute w-2 h-2 bg-primary/20 rounded-full animate-float\"\r\n style={{\r\n left: `${Math.random() * 100}%`,\r\n top: `${Math.random() * 100}%`,\r\n animationDelay: `${Math.random() * 5}s`,\r\n animationDuration: `${3 + Math.random() * 4}s`,\r\n }}\r\n />\r\n ))}\r\n </div>\r\n\r\n <div className=\"relative z-10 flex flex-col items-center justify-center min-h-screen px-4\">\r\n\r\n <div className=\"relative mb-5 md:mb-10\">\r\n <div className=\"absolute inset-0 rounded-full bg-gradient-to-r from-primary via-secondary to-primary opacity-30 blur-2xl animate-spin-slow scale-150\"></div>\r\n\r\n <div className=\"absolute inset-4 rounded-full bg-gradient-to-r from-secondary via-primary to-secondary opacity-40 blur-xl animate-pulse\"></div>\r\n\r\n <div className=\"relative bg-white/10 backdrop-blur-sm rounded-full p-8 border border-white/20 shadow-2xl\">\r\n <div className=\"relative\">\r\n <img\r\n src={tccd_logo}\r\n alt=\"TCCD logo\"\r\n className=\"relative z-10 animate-logo-luxury drop-shadow-2xl lg:w-[160px] md:w-[135px] w-[110px]\"\r\n />\r\n\r\n <div className=\"absolute inset-0 bg-gradient-to-tr from-transparent via-white/40 to-transparent animate-rotate-slow opacity-60\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"text-center mb-4\">\r\n <h1 className=\"lg:text-3xl md:text-2xl text-xl font-bold bg-gradient-to-r from-primary via-secondary to-primary bg-clip-text text-transparent animate-gradient-shift mb-4\">\r\n Loading your experience...\r\n </h1>\r\n\r\n <p className=\"text-dashboard-description lg:text-lg md:text-md text-sm font-medium opacity-80\">\r\n Please wait while we prepare everything for you\r\n </p>\r\n </div>\r\n\r\n <div className=\"relative w-80 mb-8\">\r\n <div className=\"h-2 bg-muted-secondary/30 rounded-full overflow-hidden backdrop-blur-sm\">\r\n <div className=\"h-full bg-gradient-to-r from-primary via-secondary to-primary animate-progress-wave\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"absolute top-8 left-8 w-16 h-16 border-l-2 border-t-2 border-primary/30 rounded-tl-lg\"></div>\r\n <div className=\"absolute top-8 right-8 w-16 h-16 border-r-2 border-t-2 border-secondary/30 rounded-tr-lg\"></div>\r\n <div className=\"absolute bottom-8 left-8 w-16 h-16 border-l-2 border-b-2 border-secondary/30 rounded-bl-lg\"></div>\r\n <div className=\"absolute bottom-8 right-8 w-16 h-16 border-r-2 border-b-2 border-primary/30 rounded-br-lg\"></div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default LoadingPage;\r\n","import { useEffect, useRef } from \"react\";\r\nimport type { ReactNode } from \"react\";\r\nimport { LuX } from \"react-icons/lu\";\r\nimport React from 'react';\r\n\r\nconst Modal = ({\r\n title,\r\n isOpen,\r\n onClose,\r\n children,\r\n}: {\r\n title: string;\r\n isOpen: boolean;\r\n onClose: () => void;\r\n children: ReactNode;\r\n}) => {\r\n const modalRef = useRef<HTMLDivElement>(null);\r\n const previousFocusRef = useRef<HTMLElement | null>(null);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n // Store the previously focused element\r\n previousFocusRef.current = document.activeElement as HTMLElement;\r\n\r\n // Focus the modal\r\n modalRef.current?.focus();\r\n\r\n // Prevent body scroll\r\n document.body.style.overflow = \"hidden\";\r\n } else {\r\n // Restore body scroll\r\n document.body.style.overflow = \"unset\";\r\n\r\n // Restore focus to previously focused element\r\n previousFocusRef.current?.focus();\r\n }\r\n\r\n return () => {\r\n document.body.style.overflow = \"unset\";\r\n };\r\n }, [isOpen]);\r\n\r\n useEffect(() => {\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\" && isOpen) {\r\n onClose();\r\n }\r\n };\r\n\r\n document.addEventListener(\"keydown\", handleEscape);\r\n return () => document.removeEventListener(\"keydown\", handleEscape);\r\n }, [isOpen, onClose]);\r\n\r\n const handleBackdropClick = (e: React.MouseEvent<HTMLDivElement>) => {\r\n if (e.target === e.currentTarget) {\r\n onClose();\r\n }\r\n };\r\n\r\n if (!isOpen) return null;\r\n\r\n return (\r\n <div\r\n className=\"fixed inset-0 bg-black/30 backdrop-blur-sm flex items-center justify-center z-50\"\r\n onClick={handleBackdropClick}\r\n >\r\n <div\r\n ref={modalRef}\r\n className=\"bg-background rounded-lg shadow-xl w-full mx-4 sm:max-w-lg xl:max-w-xl max-h-[90vh] flex flex-col overflow-y-auto\"\r\n tabIndex={-1}\r\n >\r\n <div className=\"p-4 sm:p-6 flex-1 flex flex-col\">\r\n <div className=\"flex justify-between items-center mb-4\">\r\n <h2\r\n id=\"modal-title\"\r\n className=\"text-lg sm:text-xl md:text-2xl font-bold text-primary\"\r\n >\r\n {title}\r\n </h2>\r\n <span\r\n onClick={onClose}\r\n className=\"text-gray-400 hover:text-gray-600 transition-colors duration-300 p-1 text-xl sm:text-2xl md:text-3xl cursor-pointer\"\r\n >\r\n <LuX />\r\n </span>\r\n </div>\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Modal;\r\n","import { useState } from \"react\";\r\nimport React from 'react';\r\n\r\nexport default function NumberField({\r\n label,\r\n value,\r\n placeholder,\r\n onChange,\r\n error,\r\n maxLength,\r\n id,\r\n}: {\r\n label: string;\r\n id: string;\r\n value: string;\r\n placeholder: string;\r\n maxLength?: number;\r\n onChange: (newValue: React.ChangeEvent<HTMLInputElement>) => void;\r\n error?: string;\r\n}) {\r\n const [lengthError, setLengthError] = useState<string | null>(null);\r\n function handleChange(e: React.ChangeEvent<HTMLInputElement>) {\r\n const inputValue = e.target.value;\r\n if (maxLength && inputValue.length > maxLength) {\r\n setLengthError(`Maximum length of ${maxLength} characters exceeded.`);\r\n return;\r\n }\r\n lengthError && setLengthError(null);\r\n onChange(e);\r\n }\r\n return (\r\n <div className=\"flex flex-col w-full\">\r\n <label className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\">\r\n {label}\r\n </label>\r\n <input\r\n id={id}\r\n value={value}\r\n type=\"number\"\r\n placeholder={placeholder}\r\n onChange={handleChange}\r\n className={`border-gray-400 rounded-xl px-3 py-2 md:px-4 md:py-3 border outline-none ${\r\n error || lengthError\r\n ? \"border-red-300 focus:border-red-500 focus:ring-red-500/30\"\r\n : \"focus:border-primary\"\r\n } transition-all duration-300 ease-in-out text-sm`}\r\n />\r\n </div>\r\n );\r\n}\r\n","import { useState } from \"react\";\r\nimport { LuEye, LuEyeOff } from \"react-icons/lu\";\r\nimport React from 'react';\r\n\r\nexport default function PasswordField({\r\n value,\r\n onChange,\r\n error,\r\n}: {\r\n value: string;\r\n onChange: (newValue: React.ChangeEvent<HTMLInputElement>) => void;\r\n error?: string;\r\n}) {\r\n const [show, setShow] = useState(false);\r\n\r\n return (\r\n <div className=\"flex flex-col w-full\">\r\n <label className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\">\r\n Password\r\n </label>\r\n <div className=\"relative\">\r\n <input\r\n id=\"password\"\r\n value={value}\r\n placeholder=\"Enter your Password\"\r\n onChange={(e) => onChange(e)}\r\n type={show ? \"text\" : \"password\"}\r\n className={`border-gray-400 rounded-xl px-3 py-2 md:px-4 md:py-3 border outline-none ${\r\n error\r\n ? \"border-red-300 focus:border-red-500 focus:ring-red-500/30\"\r\n : \"focus:border-primary\"\r\n } transition-all duration-300 ease-in-out text-sm w-full pr-10 `}\r\n />\r\n <button\r\n type=\"button\"\r\n className=\"absolute right-3 top-1/2 -translate-y-1/2 contrast-50 cursor-pointer transition duration-300 ease-in-out hover:contrast-100\"\r\n onClick={() => setShow(!show)}\r\n tabIndex={-1}\r\n >\r\n {show ? <LuEyeOff size={20} /> : <LuEye size={20} />}\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","\r\n\r\nexport default function Radiobutton({label, checked, onChange}: {label: string, checked: boolean, onChange: (newValue: boolean) => void}) {\r\n return (\r\n <label className=\"inline-flex items-center cursor-pointer relative pl-7 select-none\">\r\n <input\r\n type=\"radio\"\r\n checked={checked}\r\n onChange={(e) => onChange(e.target.checked)}\r\n className=\"peer absolute left-0 top-1/2 -translate-y-1/2 w-5 h-5 opacity-0 cursor-pointer\"\r\n />\r\n <span className=\"\r\n absolute left-0 top-1/2 -translate-y-1/2 w-5 h-5 rounded-full\r\n border-2 border-gray-300 bg-background\r\n flex items-center justify-center\r\n transition-colors\r\n pointer-events-none\r\n \">\r\n <span className={`w-3 h-3 ${checked ? 'bg-primary' : 'bg-transparent'} rounded-full transition-all`} />\r\n </span>\r\n <span className=\"text-sm\">{label}</span>\r\n </label>\r\n );\r\n}","import { HiOutlineMagnifyingGlass } from \"react-icons/hi2\";\r\n\r\ninterface SearchFieldProps {\r\n value: string;\r\n onChange: (value: string) => void;\r\n placeholder?: string;\r\n className?: string;\r\n}\r\n\r\nexport default function SearchField({\r\n value,\r\n onChange,\r\n placeholder = \"Search...\",\r\n className = \"\"\r\n}: SearchFieldProps) {\r\n return (\r\n <div className={`relative w-full lg:w-96 ${className}`}>\r\n <div className=\"relative\">\r\n <span className=\"absolute left-4 top-1/2 transform -translate-y-1/2 text-muted-secondary/60 text-lg\">\r\n <HiOutlineMagnifyingGlass />\r\n </span>\r\n <input\r\n type=\"text\"\r\n value={value}\r\n onChange={(e) => onChange(e.target.value)}\r\n placeholder={placeholder}\r\n className=\"w-full bg-background/50 rounded-3xl border-contrast pl-12 pr-4 py-2 text-[14px] md:text-[15px] lg:text-[16px] border focus:border-primary focus:outline-none transition-all duration-300 ease-in-out placeholder:text-muted-secondary\"\r\n />\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { useState, useRef } from \"react\";\r\nimport React from 'react';\r\n\r\nexport default function TextAreaField({\r\n label,\r\n value,\r\n placeholder,\r\n onChange,\r\n error,\r\n maxLength,\r\n id,\r\n}: {\r\n label: string;\r\n id: string;\r\n value: string;\r\n placeholder: string;\r\n maxLength?: number;\r\n onChange: (newValue: React.ChangeEvent<HTMLTextAreaElement>) => void;\r\n error?: string;\r\n}) {\r\n const [lengthError, setLengthError] = useState<string | null>(null);\r\n const textareaRef = useRef<HTMLTextAreaElement>(null);\r\n function handleChange(e: React.ChangeEvent<HTMLTextAreaElement>) {\r\n const inputValue = e.target.value;\r\n if (maxLength && inputValue.length > maxLength) {\r\n setLengthError(`Maximum length of ${maxLength} characters exceeded.`);\r\n return;\r\n }\r\n lengthError && setLengthError(null);\r\n if (textareaRef.current) {\r\n textareaRef.current.style.height = \"auto\";\r\n textareaRef.current.style.height =\r\n textareaRef.current.scrollHeight + \"px\";\r\n }\r\n onChange(e);\r\n }\r\n return (\r\n <div className=\"flex flex-col w-full\">\r\n <label className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\">\r\n {label}\r\n </label>\r\n <textarea\r\n ref={textareaRef}\r\n id={id}\r\n onChange={handleChange}\r\n value={value}\r\n placeholder={placeholder}\r\n rows={4}\r\n className={`border-gray-400 rounded-xl px-3 py-2 md:px-4 md:py-3 border outline-none ${\r\n error || lengthError\r\n ? \"border-red-300 focus:border-red-500 focus:ring-red-500/30\"\r\n : \"focus:border-primary\"\r\n } transition-all duration-300 ease-in-out text-sm`}\r\n />\r\n {maxLength && (\r\n <p className=\"text-[9px] md:text-[10px] lg:text-[11px] p-1 text-inactive-tab-text\">\r\n {value.length}/{maxLength}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import { HiMiniXMark } from \"react-icons/hi2\";\r\n\r\nexport default function UnauthorizedPage() {\r\n return (\r\n <div className=\"w-screen h-screen flex flex-col justify-center items-center bg-background\">\r\n <div className=\"w-fit rounded-2xl bg-background p-8 shadow-[0_0px_20px_rgba(0,0,0,0.2)] flex flex-col items-center\">\r\n <div className=\"rounded-full bg-muted-primary md:p-4 p-2 mb-4 md:mb-6 lg:mb-8 w-fit\">\r\n <span className=\"text-[52px] md:text-[56px] lg:text-[60px] text-primary\">\r\n <HiMiniXMark />\r\n </span>\r\n </div>\r\n <p className=\"text-[24px] md:text-[28px] lg:text-[32px] font-bold mb-2 md:mb-4\">Unauthorized Access</p>\r\n <p className=\"text-[14px] md:text-[16px] text-center max-w-md text-inactive-tab-text font-medium\">\r\n Sorry, you do not have the necessary permissions to view this page .\r\n </p>\r\n </div>\r\n </div>\r\n )\r\n}"],"mappings":"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","names":["jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","useState","jsx","jsxs","jsx","jsxs","useEffect","useRef","jsx","jsxs","useState","jsx","jsxs","useState","jsx","jsxs","jsx","jsxs","jsx","jsxs","useState","useRef","jsx","jsxs","jsx","jsxs"]}
1
+ {"version":3,"sources":["../src/types/index.ts","../src/components/Button.tsx","../src/components/Checkbox.tsx","../src/components/DatePicker.tsx","../src/components/DropdownMenu.tsx","../src/components/ErrorScreen.tsx","../src/components/InputField.tsx","../src/components/LazyImageLoader.tsx","../src/components/LoadingPage.tsx","../src/components/Modal.tsx","../src/components/NumberField.tsx","../src/components/PasswordField.tsx","../src/components/RadioButton.tsx","../src/components/SearchField.tsx","../src/components/TextAreaField.tsx","../src/components/UnauthorizedPage.tsx"],"sourcesContent":["export const ButtonTypes = {\r\n PRIMARY: \"primary\",\r\n SECONDARY: \"secondary\",\r\n TERTIARY: \"tertiary\",\r\n DANGER: \"danger\",\r\n GHOST: \"ghost\",\r\n BASIC: \"basic\"\r\n} as const;\r\n\r\nexport type ButtonTypes = typeof ButtonTypes[keyof typeof ButtonTypes];\r\n\r\nexport const ButtonWidths = {\r\n AUTO: \"auto\",\r\n SMALL: \"small\",\r\n MEDIUM: \"medium\",\r\n LARGE: \"large\",\r\n XL: \"xl\",\r\n FULL: \"full\"\r\n} as const;\r\n\r\nexport type ButtonWidths = typeof ButtonWidths[keyof typeof ButtonWidths];\r\n\r\nexport interface DropdownOption {\r\n value: string;\r\n label: string;\r\n disabled?: boolean;\r\n}\r\n","import { ButtonTypes, ButtonWidths } from \"../types\";\r\nimport { AiOutlineLoading3Quarters } from \"react-icons/ai\";\r\nimport React from \"react\";\r\n\r\ninterface ButtonProps {\r\n buttonText?: string;\r\n buttonIcon?: React.ReactNode;\r\n onClick: () => void;\r\n type: ButtonTypes;\r\n disabled?: boolean;\r\n loading?: boolean;\r\n width?: ButtonWidths;\r\n}\r\n\r\nconst Button = ({ buttonText, buttonIcon, onClick, type, disabled = false, loading = false, width = ButtonWidths.AUTO }: ButtonProps) => {\r\n const isDisabled = disabled || loading;\r\n\r\n const stylePresets: Record<ButtonTypes, string> = {\r\n primary: \"bg-primary text-text border-primary\",\r\n secondary: \"bg-secondary text-text border-secondary\",\r\n tertiary: \"bg-contrast text-text border-contrast\",\r\n danger: \"border-primary text-primary\",\r\n ghost: \"text-secondary border-secondary\",\r\n basic: \"border-contrast\"\r\n }\r\n\r\n const hoverStyles: Record<ButtonTypes, string> = {\r\n primary: \"hover:bg-background hover:border-primary hover:text-primary\",\r\n secondary: \"hover:bg-background hover:border-secondary hover:text-secondary\",\r\n tertiary: \"hover:bg-background hover:border-tertiary hover:text-black\",\r\n danger: \"hover:bg-primary hover:text-text\",\r\n ghost: \"hover:bg-secondary/30\",\r\n basic: \"hover:bg-contrast/30\",\r\n }\r\n\r\n const disabledStyles = \"opacity-50\";\r\n\r\n const widthStyles: Record<ButtonWidths, string> = {\r\n auto: \"w-auto\",\r\n small: \"w-24\",\r\n medium: \"w-32\",\r\n large: \"w-48\",\r\n xl: \"w-64\",\r\n full: \"w-full\"\r\n }\r\n\r\n const handleClick = () => {\r\n if (!isDisabled) {\r\n onClick();\r\n }\r\n };\r\n\r\n return (\r\n <button\r\n onClick={handleClick}\r\n disabled={isDisabled}\r\n className={`\r\n ${stylePresets[type]} \r\n ${!isDisabled ? hoverStyles[type] : ''} \r\n ${isDisabled ? disabledStyles : ''} \r\n ${widthStyles[width]}\r\n rounded-full px-6 py-2 border font-bold text-[11px] lg:text-[12px] whitespace-nowrap\r\n transition-all duration-200 ease-in-out flex items-center justify-center h-fit\r\n ${isDisabled ? 'cursor-not-allowed' : 'cursor-pointer'}\r\n `}\r\n >\r\n {loading && (\r\n <span className=\"animate-spin -ml-1 mr-2 h-4 w-4 inline-block\">\r\n <AiOutlineLoading3Quarters />\r\n </span>\r\n )}\r\n {loading ? 'Loading...' : buttonText}\r\n {buttonIcon && !loading && (\r\n <span className=\"ml-2 inline-block\">\r\n {buttonIcon}\r\n </span>\r\n )}\r\n </button>\r\n )\r\n}\r\n\r\nexport default Button;","export default function Checkbox({label, checked, onChange}: {label: string, checked: boolean, onChange: () => void}) {\r\n return (\r\n <label className=\"inline-flex items-center cursor-pointer relative pl-7 select-none\">\r\n <input\r\n type=\"checkbox\"\r\n checked={checked}\r\n onChange={() => onChange()}\r\n className=\"peer absolute left-0 top-1/2 -translate-y-1/2 w-5 h-5 opacity-0 cursor-pointer\"\r\n />\r\n <span className=\"\r\n absolute left-0 top-1/2 -translate-y-1/2 w-5 h-5 rounded-md\r\n border-2 border-gray-300 bg-white\r\n peer-checked:bg-primary peer-checked:border-primary\r\n flex items-center justify-center\r\n transition-colors\r\n pointer-events-none\r\n \">\r\n <svg\r\n className=\"w-4 h-4 text-white\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"3\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\r\n </svg>\r\n </span>\r\n <span className=\"text-sm\">{label}</span>\r\n </label>\r\n );\r\n}","import React from 'react';\r\nimport { MdCalendarToday } from 'react-icons/md';\r\n\r\ninterface DatePickerProps {\r\n label: string;\r\n id: string;\r\n value: string;\r\n onChange: (date: string) => void;\r\n error?: string;\r\n disabled?: boolean;\r\n minDate?: string;\r\n maxDate?: string;\r\n}\r\n\r\nexport default function DatePicker({\r\n label,\r\n id,\r\n value,\r\n onChange,\r\n error,\r\n disabled = false,\r\n minDate,\r\n maxDate,\r\n}: DatePickerProps) {\r\n const handleDateChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n onChange(e.target.value.toString());\r\n };\r\n\r\n return (\r\n <div className=\"flex flex-col w-full\">\r\n <label className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\">\r\n {label}\r\n </label>\r\n\r\n <div className=\"relative\">\r\n <input\r\n id={id}\r\n type=\"date\"\r\n value={value}\r\n onChange={handleDateChange}\r\n disabled={disabled}\r\n min={minDate}\r\n max={maxDate}\r\n className={`w-full border-contrast rounded-xl px-3 py-2 md:px-4 md:py-3 border outline-none ${error\r\n ? \"border-red-300 focus:border-red-500 focus:ring-red-500/30\"\r\n : \"focus:border-primary\"\r\n } ${disabled ? \"bg-gray-100 cursor-not-allowed opacity-60\" : \"bg-white\"\r\n } transition-all duration-300 ease-in-out text-sm pr-10 [&::-webkit-calendar-picker-indicator]:opacity-0 [&::-webkit-calendar-picker-indicator]:absolute [&::-webkit-calendar-picker-indicator]:right-3 [&::-webkit-calendar-picker-indicator]:w-5 [&::-webkit-calendar-picker-indicator]:h-5 [&::-webkit-calendar-picker-indicator]:cursor-pointer`}\r\n />\r\n\r\n <div className=\"absolute right-3 top-1/2 transform -translate-y-1/2 pointer-events-none\">\r\n <span className={`w-5 h-5 ${disabled ? \"text-gray-400\" : \"text-secondary\"}`}>\r\n <MdCalendarToday />\r\n </span>\r\n </div>\r\n </div>\r\n\r\n {error && (\r\n <span className=\"text-red-500 text-sm font-medium mt-1\">{error}</span>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import { useState, useRef, useEffect } from \"react\";\r\nimport { IoChevronDown } from \"react-icons/io5\";\r\nimport Button from \"./Button\";\r\nimport { ButtonTypes, ButtonWidths } from \"../types\";\r\nimport type { DropdownOption } from \"../types\";\r\n\r\ninterface DropdownMenuProps {\r\n label?: string;\r\n placeholder?: string;\r\n options: DropdownOption[];\r\n value?: string;\r\n onChange: (value: string) => void;\r\n error?: string;\r\n disabled?: boolean;\r\n className?: string;\r\n id?: string;\r\n}\r\n\r\nexport default function DropdownMenu({\r\n label,\r\n placeholder = \"Select an option\",\r\n options,\r\n value,\r\n onChange,\r\n error,\r\n disabled = false,\r\n className = \"\",\r\n id,\r\n}: DropdownMenuProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const dropdownRef = useRef<HTMLDivElement>(null);\r\n\r\n const selectedOption = options.find((option) => option.value === value);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (\r\n dropdownRef.current &&\r\n !dropdownRef.current.contains(event.target as Node)\r\n ) {\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\r\n const handleOptionClick = (optionValue: string) => {\r\n if (!disabled) {\r\n onChange(optionValue);\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n return (\r\n <div className={`flex flex-col w-full ${className}`}>\r\n {label && (\r\n <label\r\n htmlFor={id}\r\n className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\"\r\n >\r\n {label}\r\n </label>\r\n )}\r\n\r\n <div className=\"relative\" ref={dropdownRef}>\r\n <div className=\"relative\">\r\n <Button\r\n buttonText={selectedOption ? selectedOption.label : placeholder}\r\n onClick={() => !disabled && setIsOpen(!isOpen)}\r\n type={ButtonTypes.BASIC}\r\n disabled={disabled}\r\n width={ButtonWidths.FULL}\r\n />\r\n <span\r\n className={`absolute right-3 top-1/2 transform -translate-y-1/2 w-5 h-5 text-secondary transition-transform duration-200 pointer-events-none ${\r\n isOpen ? \"rotate-180\" : \"\"\r\n }`}\r\n >\r\n <IoChevronDown />\r\n </span>\r\n </div>\r\n\r\n {isOpen && !disabled && (\r\n <div className=\"absolute z-50 w-full mt-1 bg-white border border-secondary/30 rounded-xl shadow-lg max-h-60 overflow-y-auto\">\r\n {options.length === 0 ? (\r\n <div className=\"px-3 py-2 text-sm text-muted-secondary\">\r\n No options available\r\n </div>\r\n ) : (\r\n options.map((option) => (\r\n <button\r\n key={option.value}\r\n type=\"button\"\r\n onClick={() => handleOptionClick(option.value)}\r\n disabled={option.disabled}\r\n className={`\r\n w-full px-3 py-2 text-left text-sm transition-colors duration-150\r\n ${\r\n option.disabled\r\n ? \"text-gray-400 cursor-not-allowed\"\r\n : \"text-gray-900 hover:bg-secondary/10 hover:text-secondary cursor-pointer\"\r\n }\r\n ${\r\n value === option.value\r\n ? \"bg-secondary/20 text-secondary font-medium\"\r\n : \"\"\r\n }\r\n first:rounded-t-xl last:rounded-b-xl\r\n `}\r\n >\r\n {option.label}\r\n </button>\r\n ))\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {error && <p className=\"mt-1 text-sm text-red-600\">{error}</p>}\r\n </div>\r\n );\r\n}\r\n","import { FaExclamationTriangle } from \"react-icons/fa\";\r\n\r\ninterface ErrorComponentProps {\r\n title: string;\r\n message: string;\r\n}\r\n\r\nexport default function ErrorComponent({\r\n title,\r\n message,\r\n}: ErrorComponentProps) {\r\n return (\r\n <div className=\"min-h-screen bg-background\">\r\n <div className=\"w-full md:w-3/4 lg:w-10/12 m-auto rounded-xl shadow-md p-5 flex flex-col gap-4\">\r\n {/* Error Container */}\r\n <div className=\"flex flex-col items-center justify-center py-16 px-4\">\r\n {/* Error Icon */}\r\n <div className=\"mb-6\">\r\n <div className=\"w-20 h-20 bg-red-100 rounded-full flex items-center justify-center\">\r\n <span className=\"text-error text-3xl\">\r\n <FaExclamationTriangle />\r\n </span>\r\n </div>\r\n </div>\r\n\r\n {/* Error Title */}\r\n <h1 className=\"text-2xl md:text-3xl lg:text-4xl font-bold text-error mb-4 text-center\">\r\n {title}\r\n </h1>\r\n\r\n {/* Error Message */}\r\n <p className=\"text-base md:text-lg text-center mb-8 max-w-md\">\r\n {message}\r\n </p>\r\n </div>\r\n\r\n <div className=\"mt-8 bg-red-50 border border-red-200 rounded-xl p-4\">\r\n <h3 className=\"font-semibold text-red-800 mb-2\">\r\n Technical Details\r\n </h3>\r\n <div className=\"text-red-700 text-sm space-y-1\">\r\n <p>• Check your internet connection</p>\r\n <p>• The page may be temporarily unavailable</p>\r\n <p>• Contact support if the problem persists</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React from 'react';\r\n\r\nexport default function InputField({\r\n label,\r\n value,\r\n placeholder,\r\n onChange,\r\n error,\r\n id,\r\n}: {\r\n label: string;\r\n id: string;\r\n value: string;\r\n placeholder: string;\r\n onChange: (newValue: React.ChangeEvent<HTMLInputElement>) => void;\r\n error?: string;\r\n}) {\r\n return (\r\n <div className=\"flex flex-col w-full\">\r\n <label className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\">\r\n {label}\r\n </label>\r\n <input\r\n id={id}\r\n value={value}\r\n placeholder={placeholder}\r\n onChange={(e) => onChange(e)}\r\n className={`border-gray-400 rounded-xl px-3 py-2 md:px-4 md:py-3 border outline-none ${\r\n error\r\n ? \"border-red-300 focus:border-red-500 focus:ring-red-500/30\"\r\n : \"focus:border-primary\"\r\n } transition-all duration-300 ease-in-out text-sm`}\r\n />\r\n </div>\r\n );\r\n}\r\n","import { useState } from \"react\";\r\nimport { HiOutlinePhotograph } from \"react-icons/hi\";\r\n\r\ninterface LazyImageLoaderProps {\r\n src: string;\r\n alt: string;\r\n className?: string;\r\n width?: string | number;\r\n height?: string | number;\r\n}\r\n\r\nexport default function LazyImageLoader({ \r\n src, \r\n alt, \r\n className = \"\", \r\n width = \"100%\", \r\n height = \"200px\" \r\n}: LazyImageLoaderProps) {\r\n const [imageLoaded, setImageLoaded] = useState(false);\r\n const [imageError, setImageError] = useState(false);\r\n\r\n const handleImageLoad = () => {\r\n setImageLoaded(true);\r\n };\r\n\r\n const handleImageError = () => {\r\n setImageError(true);\r\n setImageLoaded(true);\r\n };\r\n\r\n return (\r\n <div \r\n className={`relative overflow-hidden ${className}`}\r\n style={{ width, height }}\r\n >\r\n {!imageLoaded && (\r\n <div className=\"absolute inset-0 bg-gray-200 animate-pulse\">\r\n <div className=\"absolute inset-0 bg-gradient-to-r from-gray-200 via-gray-100 to-gray-200 animate-shimmer\"></div>\r\n </div>\r\n )}\r\n\r\n {imageError && (\r\n <div className=\"absolute inset-0 bg-gray-100 flex items-center justify-center\">\r\n <div className=\"text-center text-gray-400\">\r\n <span className=\"w-12 h-12 mx-auto mb-2\">\r\n <HiOutlinePhotograph />\r\n </span>\r\n <p className=\"text-sm\">Failed to load</p>\r\n </div>\r\n </div>\r\n )}\r\n\r\n <img\r\n src={src}\r\n alt={alt}\r\n onLoad={handleImageLoad}\r\n onError={handleImageError}\r\n className={`w-full h-full object-cover transition-opacity duration-300 ${\r\n imageLoaded ? \"opacity-100\" : \"opacity-0\"\r\n }`}\r\n />\r\n </div>\r\n );\r\n}\r\n","import logoFile from \"../assets/TCCD_logo.svg\";\r\nconst tccd_logo = new URL(logoFile, import.meta.url).href;\r\n\r\nconst LoadingPage = () => {\r\n return (\r\n <>\r\n <style>{`\r\n @keyframes custom-bounce {\r\n 0%, 100% {\r\n transform: translateY(0);\r\n animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\r\n }\r\n 50% {\r\n transform: translateY(-8px);\r\n animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\r\n }\r\n }\r\n\r\n @keyframes logoLuxury {\r\n 0% {\r\n filter: brightness(1) contrast(1) drop-shadow(0 0 15px rgba(205, 58, 56, 0.3)) saturate(1);\r\n transform: scale(1) rotate(0deg);\r\n }\r\n 25% {\r\n filter: brightness(1.2) contrast(1.2) drop-shadow(0 0 25px rgba(41, 94, 126, 0.5)) saturate(1.2);\r\n transform: scale(1.05) rotate(2deg);\r\n }\r\n 50% {\r\n filter: brightness(1.4) contrast(1.3) drop-shadow(0 0 35px rgba(205, 58, 56, 0.7)) saturate(1.4);\r\n transform: scale(1.08) rotate(0deg);\r\n }\r\n 75% {\r\n filter: brightness(1.2) contrast(1.2) drop-shadow(0 0 25px rgba(41, 94, 126, 0.5)) saturate(1.2);\r\n transform: scale(1.05) rotate(-2deg);\r\n }\r\n 100% {\r\n filter: brightness(1) contrast(1) drop-shadow(0 0 15px rgba(205, 58, 56, 0.3)) saturate(1);\r\n transform: scale(1) rotate(0deg);\r\n }\r\n }\r\n\r\n @keyframes float {\r\n 0%, 100% {\r\n transform: translateY(0px) translateX(0px) scale(1);\r\n opacity: 0.3;\r\n }\r\n 50% {\r\n transform: translateY(-20px) translateX(10px) scale(1.2);\r\n opacity: 0.8;\r\n }\r\n }\r\n\r\n @keyframes spinSlow {\r\n from {\r\n transform: rotate(0deg);\r\n }\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n\r\n @keyframes rotateSlow {\r\n from {\r\n transform: rotate(0deg);\r\n }\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n\r\n @keyframes gradientShift {\r\n 0%, 100% {\r\n background-position: 0% 50%;\r\n }\r\n 50% {\r\n background-position: 100% 50%;\r\n }\r\n }\r\n\r\n @keyframes progressWave {\r\n 0% {\r\n transform: translateX(-100%) scaleX(1);\r\n opacity: 0.8;\r\n }\r\n 50% {\r\n transform: translateX(0%) scaleX(1.5);\r\n opacity: 1;\r\n }\r\n 100% {\r\n transform: translateX(100%) scaleX(1);\r\n opacity: 0.8;\r\n }\r\n }\r\n\r\n .animate-custom-bounce {\r\n animation-name: custom-bounce;\r\n animation-duration: 2s;\r\n animation-iteration-count: infinite;\r\n }\r\n\r\n .animate-logo-luxury {\r\n animation: logoLuxury 4s ease-in-out infinite;\r\n }\r\n\r\n .animate-float {\r\n animation: float 6s ease-in-out infinite;\r\n }\r\n\r\n .animate-spin-slow {\r\n animation: spinSlow 8s linear infinite;\r\n }\r\n\r\n .animate-rotate-slow {\r\n animation: rotateSlow 12s linear infinite;\r\n }\r\n\r\n .animate-gradient-shift {\r\n background-size: 300% 300%;\r\n animation: gradientShift 3s ease infinite;\r\n }\r\n\r\n .animate-progress-wave {\r\n animation: progressWave 2s ease-in-out infinite;\r\n }\r\n\r\n .dot-container .dot:nth-child(1) { animation-delay: 0s; }\r\n .dot-container .dot:nth-child(2) { animation-delay: 0.15s; }\r\n .dot-container .dot:nth-child(3) { animation-delay: 0.3s; }\r\n .dot-container .dot:nth-child(4) { animation-delay: 0.45s; }\r\n .dot-container .dot:nth-child(5) { animation-delay: 0.6s; }\r\n .dot-container .dot:nth-child(6) { animation-delay: 0.75s; }\r\n .dot-container .dot:nth-child(7) { animation-delay: 0.9s; }\r\n .dot-container .dot:nth-child(8) { animation-delay: 1.05s; }\r\n `}</style>\r\n <div className=\"relative min-h-screen bg-gradient-to-br from-background via-dashboard-welcome-bg to-muted-secondary overflow-hidden\">\r\n <div className=\"absolute inset-0\">\r\n {[...Array(25)].map((_, i) => (\r\n <div\r\n key={i}\r\n className=\"absolute w-2 h-2 bg-primary/20 rounded-full animate-float\"\r\n style={{\r\n left: `${Math.random() * 100}%`,\r\n top: `${Math.random() * 100}%`,\r\n animationDelay: `${Math.random() * 5}s`,\r\n animationDuration: `${3 + Math.random() * 4}s`,\r\n }}\r\n />\r\n ))}\r\n </div>\r\n\r\n <div className=\"relative z-10 flex flex-col items-center justify-center min-h-screen px-4\">\r\n\r\n <div className=\"relative mb-5 md:mb-10\">\r\n <div className=\"absolute inset-0 rounded-full bg-gradient-to-r from-primary via-secondary to-primary opacity-30 blur-2xl animate-spin-slow scale-150\"></div>\r\n\r\n <div className=\"absolute inset-4 rounded-full bg-gradient-to-r from-secondary via-primary to-secondary opacity-40 blur-xl animate-pulse\"></div>\r\n\r\n <div className=\"relative bg-white/10 backdrop-blur-sm rounded-full p-8 border border-white/20 shadow-2xl\">\r\n <div className=\"relative\">\r\n <img\r\n src={tccd_logo}\r\n alt=\"TCCD logo\"\r\n className=\"relative z-10 animate-logo-luxury drop-shadow-2xl lg:w-[160px] md:w-[135px] w-[110px]\"\r\n />\r\n\r\n <div className=\"absolute inset-0 bg-gradient-to-tr from-transparent via-white/40 to-transparent animate-rotate-slow opacity-60\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"text-center mb-4\">\r\n <h1 className=\"lg:text-3xl md:text-2xl text-xl font-bold bg-gradient-to-r from-primary via-secondary to-primary bg-clip-text text-transparent animate-gradient-shift mb-4\">\r\n Loading your experience...\r\n </h1>\r\n\r\n <p className=\"text-dashboard-description lg:text-lg md:text-md text-sm font-medium opacity-80\">\r\n Please wait while we prepare everything for you\r\n </p>\r\n </div>\r\n\r\n <div className=\"relative w-80 mb-8\">\r\n <div className=\"h-2 bg-muted-secondary/30 rounded-full overflow-hidden backdrop-blur-sm\">\r\n <div className=\"h-full bg-gradient-to-r from-primary via-secondary to-primary animate-progress-wave\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"absolute top-8 left-8 w-16 h-16 border-l-2 border-t-2 border-primary/30 rounded-tl-lg\"></div>\r\n <div className=\"absolute top-8 right-8 w-16 h-16 border-r-2 border-t-2 border-secondary/30 rounded-tr-lg\"></div>\r\n <div className=\"absolute bottom-8 left-8 w-16 h-16 border-l-2 border-b-2 border-secondary/30 rounded-bl-lg\"></div>\r\n <div className=\"absolute bottom-8 right-8 w-16 h-16 border-r-2 border-b-2 border-primary/30 rounded-br-lg\"></div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default LoadingPage;\r\n","import { useEffect, useRef } from \"react\";\r\nimport type { ReactNode } from \"react\";\r\nimport { LuX } from \"react-icons/lu\";\r\nimport React from 'react';\r\n\r\nconst Modal = ({\r\n title,\r\n isOpen,\r\n onClose,\r\n children,\r\n}: {\r\n title: string;\r\n isOpen: boolean;\r\n onClose: () => void;\r\n children: ReactNode;\r\n}) => {\r\n const modalRef = useRef<HTMLDivElement>(null);\r\n const previousFocusRef = useRef<HTMLElement | null>(null);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n // Store the previously focused element\r\n previousFocusRef.current = document.activeElement as HTMLElement;\r\n\r\n // Focus the modal\r\n modalRef.current?.focus();\r\n\r\n // Prevent body scroll\r\n document.body.style.overflow = \"hidden\";\r\n } else {\r\n // Restore body scroll\r\n document.body.style.overflow = \"unset\";\r\n\r\n // Restore focus to previously focused element\r\n previousFocusRef.current?.focus();\r\n }\r\n\r\n return () => {\r\n document.body.style.overflow = \"unset\";\r\n };\r\n }, [isOpen]);\r\n\r\n useEffect(() => {\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\" && isOpen) {\r\n onClose();\r\n }\r\n };\r\n\r\n document.addEventListener(\"keydown\", handleEscape);\r\n return () => document.removeEventListener(\"keydown\", handleEscape);\r\n }, [isOpen, onClose]);\r\n\r\n const handleBackdropClick = (e: React.MouseEvent<HTMLDivElement>) => {\r\n if (e.target === e.currentTarget) {\r\n onClose();\r\n }\r\n };\r\n\r\n if (!isOpen) return null;\r\n\r\n return (\r\n <div\r\n className=\"fixed inset-0 bg-black/30 backdrop-blur-sm flex items-center justify-center z-50\"\r\n onClick={handleBackdropClick}\r\n >\r\n <div\r\n ref={modalRef}\r\n className=\"bg-background rounded-lg shadow-xl w-full mx-4 sm:max-w-lg xl:max-w-xl max-h-[90vh] flex flex-col overflow-y-auto\"\r\n tabIndex={-1}\r\n >\r\n <div className=\"p-4 sm:p-6 flex-1 flex flex-col\">\r\n <div className=\"flex justify-between items-center mb-4\">\r\n <h2\r\n id=\"modal-title\"\r\n className=\"text-lg sm:text-xl md:text-2xl font-bold text-primary\"\r\n >\r\n {title}\r\n </h2>\r\n <span\r\n onClick={onClose}\r\n className=\"text-gray-400 hover:text-gray-600 transition-colors duration-300 p-1 text-xl sm:text-2xl md:text-3xl cursor-pointer\"\r\n >\r\n <LuX />\r\n </span>\r\n </div>\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Modal;\r\n","import { useState } from \"react\";\r\nimport React from 'react';\r\n\r\nexport default function NumberField({\r\n label,\r\n value,\r\n placeholder,\r\n onChange,\r\n error,\r\n maxLength,\r\n id,\r\n}: {\r\n label: string;\r\n id: string;\r\n value: string;\r\n placeholder: string;\r\n maxLength?: number;\r\n onChange: (newValue: React.ChangeEvent<HTMLInputElement>) => void;\r\n error?: string;\r\n}) {\r\n const [lengthError, setLengthError] = useState<string | null>(null);\r\n function handleChange(e: React.ChangeEvent<HTMLInputElement>) {\r\n const inputValue = e.target.value;\r\n if (maxLength && inputValue.length > maxLength) {\r\n setLengthError(`Maximum length of ${maxLength} characters exceeded.`);\r\n return;\r\n }\r\n lengthError && setLengthError(null);\r\n onChange(e);\r\n }\r\n return (\r\n <div className=\"flex flex-col w-full\">\r\n <label className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\">\r\n {label}\r\n </label>\r\n <input\r\n id={id}\r\n value={value}\r\n type=\"number\"\r\n placeholder={placeholder}\r\n onChange={handleChange}\r\n className={`border-gray-400 rounded-xl px-3 py-2 md:px-4 md:py-3 border outline-none ${\r\n error || lengthError\r\n ? \"border-red-300 focus:border-red-500 focus:ring-red-500/30\"\r\n : \"focus:border-primary\"\r\n } transition-all duration-300 ease-in-out text-sm`}\r\n />\r\n </div>\r\n );\r\n}\r\n","import { useState } from \"react\";\r\nimport { LuEye, LuEyeOff } from \"react-icons/lu\";\r\nimport React from 'react';\r\n\r\nexport default function PasswordField({\r\n value,\r\n onChange,\r\n error,\r\n}: {\r\n value: string;\r\n onChange: (newValue: React.ChangeEvent<HTMLInputElement>) => void;\r\n error?: string;\r\n}) {\r\n const [show, setShow] = useState(false);\r\n\r\n return (\r\n <div className=\"flex flex-col w-full\">\r\n <label className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\">\r\n Password\r\n </label>\r\n <div className=\"relative\">\r\n <input\r\n id=\"password\"\r\n value={value}\r\n placeholder=\"Enter your Password\"\r\n onChange={(e) => onChange(e)}\r\n type={show ? \"text\" : \"password\"}\r\n className={`border-gray-400 rounded-xl px-3 py-2 md:px-4 md:py-3 border outline-none ${\r\n error\r\n ? \"border-red-300 focus:border-red-500 focus:ring-red-500/30\"\r\n : \"focus:border-primary\"\r\n } transition-all duration-300 ease-in-out text-sm w-full pr-10 `}\r\n />\r\n <button\r\n type=\"button\"\r\n className=\"absolute right-3 top-1/2 -translate-y-1/2 contrast-50 cursor-pointer transition duration-300 ease-in-out hover:contrast-100\"\r\n onClick={() => setShow(!show)}\r\n tabIndex={-1}\r\n >\r\n {show ? <LuEyeOff size={20} /> : <LuEye size={20} />}\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","\r\n\r\nexport default function Radiobutton({label, checked, onChange}: {label: string, checked: boolean, onChange: (newValue: boolean) => void}) {\r\n return (\r\n <label className=\"inline-flex items-center cursor-pointer relative pl-7 select-none\">\r\n <input\r\n type=\"radio\"\r\n checked={checked}\r\n onChange={(e) => onChange(e.target.checked)}\r\n className=\"peer absolute left-0 top-1/2 -translate-y-1/2 w-5 h-5 opacity-0 cursor-pointer\"\r\n />\r\n <span className=\"\r\n absolute left-0 top-1/2 -translate-y-1/2 w-5 h-5 rounded-full\r\n border-2 border-gray-300 bg-background\r\n flex items-center justify-center\r\n transition-colors\r\n pointer-events-none\r\n \">\r\n <span className={`w-3 h-3 ${checked ? 'bg-primary' : 'bg-transparent'} rounded-full transition-all`} />\r\n </span>\r\n <span className=\"text-sm\">{label}</span>\r\n </label>\r\n );\r\n}","import { HiOutlineMagnifyingGlass } from \"react-icons/hi2\";\r\n\r\ninterface SearchFieldProps {\r\n value: string;\r\n onChange: (value: string) => void;\r\n placeholder?: string;\r\n className?: string;\r\n}\r\n\r\nexport default function SearchField({\r\n value,\r\n onChange,\r\n placeholder = \"Search...\",\r\n className = \"\"\r\n}: SearchFieldProps) {\r\n return (\r\n <div className={`relative w-full lg:w-96 ${className}`}>\r\n <div className=\"relative\">\r\n <span className=\"absolute left-4 top-1/2 transform -translate-y-1/2 text-muted-secondary/60 text-lg\">\r\n <HiOutlineMagnifyingGlass />\r\n </span>\r\n <input\r\n type=\"text\"\r\n value={value}\r\n onChange={(e) => onChange(e.target.value)}\r\n placeholder={placeholder}\r\n className=\"w-full bg-background/50 rounded-3xl border-contrast pl-12 pr-4 py-2 text-[14px] md:text-[15px] lg:text-[16px] border focus:border-primary focus:outline-none transition-all duration-300 ease-in-out placeholder:text-muted-secondary\"\r\n />\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { useState, useRef } from \"react\";\r\nimport React from 'react';\r\n\r\nexport default function TextAreaField({\r\n label,\r\n value,\r\n placeholder,\r\n onChange,\r\n error,\r\n maxLength,\r\n id,\r\n}: {\r\n label: string;\r\n id: string;\r\n value: string;\r\n placeholder: string;\r\n maxLength?: number;\r\n onChange: (newValue: React.ChangeEvent<HTMLTextAreaElement>) => void;\r\n error?: string;\r\n}) {\r\n const [lengthError, setLengthError] = useState<string | null>(null);\r\n const textareaRef = useRef<HTMLTextAreaElement>(null);\r\n function handleChange(e: React.ChangeEvent<HTMLTextAreaElement>) {\r\n const inputValue = e.target.value;\r\n if (maxLength && inputValue.length > maxLength) {\r\n setLengthError(`Maximum length of ${maxLength} characters exceeded.`);\r\n return;\r\n }\r\n lengthError && setLengthError(null);\r\n if (textareaRef.current) {\r\n textareaRef.current.style.height = \"auto\";\r\n textareaRef.current.style.height =\r\n textareaRef.current.scrollHeight + \"px\";\r\n }\r\n onChange(e);\r\n }\r\n return (\r\n <div className=\"flex flex-col w-full\">\r\n <label className=\"text-label text-[14px] md:text-[15px] lg:text-[16px] mb-2 font-semibold\">\r\n {label}\r\n </label>\r\n <textarea\r\n ref={textareaRef}\r\n id={id}\r\n onChange={handleChange}\r\n value={value}\r\n placeholder={placeholder}\r\n rows={4}\r\n className={`border-gray-400 rounded-xl px-3 py-2 md:px-4 md:py-3 border outline-none ${\r\n error || lengthError\r\n ? \"border-red-300 focus:border-red-500 focus:ring-red-500/30\"\r\n : \"focus:border-primary\"\r\n } transition-all duration-300 ease-in-out text-sm`}\r\n />\r\n {maxLength && (\r\n <p className=\"text-[9px] md:text-[10px] lg:text-[11px] p-1 text-inactive-tab-text\">\r\n {value.length}/{maxLength}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import { HiMiniXMark } from \"react-icons/hi2\";\r\n\r\nexport default function UnauthorizedPage() {\r\n return (\r\n <div className=\"w-screen h-screen flex flex-col justify-center items-center bg-background\">\r\n <div className=\"w-fit rounded-2xl bg-background p-8 shadow-[0_0px_20px_rgba(0,0,0,0.2)] flex flex-col items-center\">\r\n <div className=\"rounded-full bg-muted-primary md:p-4 p-2 mb-4 md:mb-6 lg:mb-8 w-fit\">\r\n <span className=\"text-[52px] md:text-[56px] lg:text-[60px] text-primary\">\r\n <HiMiniXMark />\r\n </span>\r\n </div>\r\n <p className=\"text-[24px] md:text-[28px] lg:text-[32px] font-bold mb-2 md:mb-4\">Unauthorized Access</p>\r\n <p className=\"text-[14px] md:text-[16px] text-center max-w-md text-inactive-tab-text font-medium\">\r\n Sorry, you do not have the necessary permissions to view this page .\r\n </p>\r\n </div>\r\n </div>\r\n )\r\n}"],"mappings":"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","names":["jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","useState","jsx","jsxs","jsx","jsxs","useEffect","useRef","jsx","jsxs","useState","jsx","jsxs","useState","jsx","jsxs","jsx","jsxs","jsx","jsxs","useState","useRef","jsx","jsxs","jsx","jsxs"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tccd-ui",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "description": "Reusable React + Tailwind components",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -27,6 +27,7 @@
27
27
  },
28
28
  "devDependencies": {
29
29
  "autoprefixer": "^10.4.20",
30
+ "esbuild-plugin-copy": "^2.1.1",
30
31
  "esbuild-plugin-svgr": "^3.1.1",
31
32
  "postcss": "^8.4.40",
32
33
  "react-icons": "^5.5.0",
package/dist/react.svg DELETED
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="35.93" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 228"><path fill="#00D8FF" d="M210.483 73.824a171.49 171.49 0 0 0-8.24-2.597c.465-1.9.893-3.777 1.273-5.621c6.238-30.281 2.16-54.676-11.769-62.708c-13.355-7.7-35.196.329-57.254 19.526a171.23 171.23 0 0 0-6.375 5.848a155.866 155.866 0 0 0-4.241-3.917C100.759 3.829 77.587-4.822 63.673 3.233C50.33 10.957 46.379 33.89 51.995 62.588a170.974 170.974 0 0 0 1.892 8.48c-3.28.932-6.445 1.924-9.474 2.98C17.309 83.498 0 98.307 0 113.668c0 15.865 18.582 31.778 46.812 41.427a145.52 145.52 0 0 0 6.921 2.165a167.467 167.467 0 0 0-2.01 9.138c-5.354 28.2-1.173 50.591 12.134 58.266c13.744 7.926 36.812-.22 59.273-19.855a145.567 145.567 0 0 0 5.342-4.923a168.064 168.064 0 0 0 6.92 6.314c21.758 18.722 43.246 26.282 56.54 18.586c13.731-7.949 18.194-32.003 12.4-61.268a145.016 145.016 0 0 0-1.535-6.842c1.62-.48 3.21-.974 4.76-1.488c29.348-9.723 48.443-25.443 48.443-41.52c0-15.417-17.868-30.326-45.517-39.844Zm-6.365 70.984c-1.4.463-2.836.91-4.3 1.345c-3.24-10.257-7.612-21.163-12.963-32.432c5.106-11 9.31-21.767 12.459-31.957c2.619.758 5.16 1.557 7.61 2.4c23.69 8.156 38.14 20.213 38.14 29.504c0 9.896-15.606 22.743-40.946 31.14Zm-10.514 20.834c2.562 12.94 2.927 24.64 1.23 33.787c-1.524 8.219-4.59 13.698-8.382 15.893c-8.067 4.67-25.32-1.4-43.927-17.412a156.726 156.726 0 0 1-6.437-5.87c7.214-7.889 14.423-17.06 21.459-27.246c12.376-1.098 24.068-2.894 34.671-5.345a134.17 134.17 0 0 1 1.386 6.193ZM87.276 214.515c-7.882 2.783-14.16 2.863-17.955.675c-8.075-4.657-11.432-22.636-6.853-46.752a156.923 156.923 0 0 1 1.869-8.499c10.486 2.32 22.093 3.988 34.498 4.994c7.084 9.967 14.501 19.128 21.976 27.15a134.668 134.668 0 0 1-4.877 4.492c-9.933 8.682-19.886 14.842-28.658 17.94ZM50.35 144.747c-12.483-4.267-22.792-9.812-29.858-15.863c-6.35-5.437-9.555-10.836-9.555-15.216c0-9.322 13.897-21.212 37.076-29.293c2.813-.98 5.757-1.905 8.812-2.773c3.204 10.42 7.406 21.315 12.477 32.332c-5.137 11.18-9.399 22.249-12.634 32.792a134.718 134.718 0 0 1-6.318-1.979Zm12.378-84.26c-4.811-24.587-1.616-43.134 6.425-47.789c8.564-4.958 27.502 2.111 47.463 19.835a144.318 144.318 0 0 1 3.841 3.545c-7.438 7.987-14.787 17.08-21.808 26.988c-12.04 1.116-23.565 2.908-34.161 5.309a160.342 160.342 0 0 1-1.76-7.887Zm110.427 27.268a347.8 347.8 0 0 0-7.785-12.803c8.168 1.033 15.994 2.404 23.343 4.08c-2.206 7.072-4.956 14.465-8.193 22.045a381.151 381.151 0 0 0-7.365-13.322Zm-45.032-43.861c5.044 5.465 10.096 11.566 15.065 18.186a322.04 322.04 0 0 0-30.257-.006c4.974-6.559 10.069-12.652 15.192-18.18ZM82.802 87.83a323.167 323.167 0 0 0-7.227 13.238c-3.184-7.553-5.909-14.98-8.134-22.152c7.304-1.634 15.093-2.97 23.209-3.984a321.524 321.524 0 0 0-7.848 12.897Zm8.081 65.352c-8.385-.936-16.291-2.203-23.593-3.793c2.26-7.3 5.045-14.885 8.298-22.6a321.187 321.187 0 0 0 7.257 13.246c2.594 4.48 5.28 8.868 8.038 13.147Zm37.542 31.03c-5.184-5.592-10.354-11.779-15.403-18.433c4.902.192 9.899.29 14.978.29c5.218 0 10.376-.117 15.453-.343c-4.985 6.774-10.018 12.97-15.028 18.486Zm52.198-57.817c3.422 7.8 6.306 15.345 8.596 22.52c-7.422 1.694-15.436 3.058-23.88 4.071a382.417 382.417 0 0 0 7.859-13.026a347.403 347.403 0 0 0 7.425-13.565Zm-16.898 8.101a358.557 358.557 0 0 1-12.281 19.815a329.4 329.4 0 0 1-23.444.823c-7.967 0-15.716-.248-23.178-.732a310.202 310.202 0 0 1-12.513-19.846h.001a307.41 307.41 0 0 1-10.923-20.627a310.278 310.278 0 0 1 10.89-20.637l-.001.001a307.318 307.318 0 0 1 12.413-19.761c7.613-.576 15.42-.876 23.31-.876H128c7.926 0 15.743.303 23.354.883a329.357 329.357 0 0 1 12.335 19.695a358.489 358.489 0 0 1 11.036 20.54a329.472 329.472 0 0 1-11 20.722Zm22.56-122.124c8.572 4.944 11.906 24.881 6.52 51.026c-.344 1.668-.73 3.367-1.15 5.09c-10.622-2.452-22.155-4.275-34.23-5.408c-7.034-10.017-14.323-19.124-21.64-27.008a160.789 160.789 0 0 1 5.888-5.4c18.9-16.447 36.564-22.941 44.612-18.3ZM128 90.808c12.625 0 22.86 10.235 22.86 22.86s-10.235 22.86-22.86 22.86s-22.86-10.235-22.86-22.86s10.235-22.86 22.86-22.86Z"></path></svg>
File without changes