react-country-kit 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +258 -0
  2. package/dist/components/CountryMultiSelect/CountryMultiSelect.d.ts +3 -0
  3. package/dist/components/CountryPicker/CountryPicker.d.ts +3 -0
  4. package/dist/components/CurrencyMultiSelect/CurrencyMultiSelect.d.ts +3 -0
  5. package/dist/components/CurrencyPicker/CurrencyPicker.d.ts +3 -0
  6. package/dist/components/DivisionPicker/DivisionPicker.d.ts +3 -0
  7. package/dist/components/LanguagePicker/LanguagePicker.d.ts +3 -0
  8. package/dist/components/PhoneInput/PhoneInput.d.ts +3 -0
  9. package/dist/components/TimezonePicker/TimezonePicker.d.ts +3 -0
  10. package/dist/components/shared/PickerBase.d.ts +14 -0
  11. package/dist/components/shared/SearchInput.d.ts +8 -0
  12. package/dist/data/countries.d.ts +10 -0
  13. package/dist/data/languages.d.ts +3 -0
  14. package/dist/hooks/useBasePicker.d.ts +6 -0
  15. package/dist/hooks/useCountryPicker.d.ts +2 -0
  16. package/dist/hooks/useCurrencyPicker.d.ts +2 -0
  17. package/dist/hooks/useDivisionPicker.d.ts +2 -0
  18. package/dist/hooks/useLanguagePicker.d.ts +2 -0
  19. package/dist/hooks/useMultiSelect.d.ts +6 -0
  20. package/dist/hooks/usePhoneInput.d.ts +17 -0
  21. package/dist/hooks/useTimezonePicker.d.ts +2 -0
  22. package/dist/index.d.ts +21 -0
  23. package/dist/react-country-kit.cjs.js +2 -0
  24. package/dist/react-country-kit.cjs.js.map +1 -0
  25. package/dist/react-country-kit.d.ts +354 -0
  26. package/dist/react-country-kit.es.js +841 -0
  27. package/dist/react-country-kit.es.js.map +1 -0
  28. package/dist/style.css +1 -0
  29. package/dist/types/index.d.ts +185 -0
  30. package/dist/ui/components/CountryMultiSelect.d.ts +2 -0
  31. package/dist/ui/components/CountryPicker.d.ts +2 -0
  32. package/dist/ui/components/CurrencyMultiSelect.d.ts +2 -0
  33. package/dist/ui/components/CurrencyPicker.d.ts +2 -0
  34. package/dist/ui/components/DivisionPicker.d.ts +2 -0
  35. package/dist/ui/components/LanguagePicker.d.ts +2 -0
  36. package/dist/ui/components/PhoneInput.d.ts +3 -0
  37. package/dist/ui/components/TimezonePicker.d.ts +2 -0
  38. package/dist/ui/components/primitives.d.ts +73 -0
  39. package/dist/ui/index.d.ts +38 -0
  40. package/dist/ui/lib/utils.d.ts +6 -0
  41. package/dist/ui.cjs.js +2 -0
  42. package/dist/ui.cjs.js.map +1 -0
  43. package/dist/ui.d.ts +413 -0
  44. package/dist/ui.es.js +1141 -0
  45. package/dist/ui.es.js.map +1 -0
  46. package/dist/useTimezonePicker-BMFPsn3E.mjs +36086 -0
  47. package/dist/useTimezonePicker-BMFPsn3E.mjs.map +1 -0
  48. package/dist/useTimezonePicker-zHCM2pUC.js +2 -0
  49. package/dist/useTimezonePicker-zHCM2pUC.js.map +1 -0
  50. package/dist/utils/countries.d.ts +46 -0
  51. package/dist/utils/currencies.d.ts +13 -0
  52. package/dist/utils/languages.d.ts +13 -0
  53. package/dist/utils/timezones.d.ts +13 -0
  54. package/package.json +88 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-country-kit.es.js","sources":["../src/components/shared/SearchInput.tsx","../src/components/CountryMultiSelect/CountryMultiSelect.tsx","../src/components/shared/PickerBase.tsx","../src/components/CountryPicker/CountryPicker.tsx","../src/components/CurrencyMultiSelect/CurrencyMultiSelect.tsx","../src/components/CurrencyPicker/CurrencyPicker.tsx","../src/components/DivisionPicker/DivisionPicker.tsx","../src/components/LanguagePicker/LanguagePicker.tsx","../src/components/PhoneInput/PhoneInput.tsx","../src/components/TimezonePicker/TimezonePicker.tsx"],"sourcesContent":["import React, { useRef, useEffect } from 'react';\n\ninterface SearchInputProps {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n autoFocus?: boolean;\n}\n\nexport function SearchInput({ value, onChange, placeholder = 'Search...', autoFocus = true }: SearchInputProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (autoFocus) {\n setTimeout(() => inputRef.current?.focus(), 50);\n }\n }, [autoFocus]);\n\n return (\n <div className=\"rck-search-wrapper\">\n <div className=\"rck-search\">\n <svg className=\"rck-search-icon\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"8.5\" cy=\"8.5\" r=\"5.5\" />\n <path d=\"M17 17l-4-4\" strokeLinecap=\"round\" />\n </svg>\n <input\n ref={inputRef}\n type=\"text\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n aria-label=\"Search\"\n />\n {value && (\n <button\n style={{ background: 'none', border: 'none', cursor: 'pointer', color: 'var(--rck-text-placeholder)', padding: 0, display: 'flex' }}\n onClick={() => onChange('')}\n aria-label=\"Clear search\"\n type=\"button\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path d=\"M6 6l8 8M14 6l-8 8\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" fill=\"none\" />\n </svg>\n </button>\n )}\n </div>\n </div>\n );\n}\n","import React, { useRef, useEffect } from 'react';\nimport type { CountryMultiSelectProps, Country } from '../../types';\nimport { useMultiSelect } from '../../hooks/useMultiSelect';\nimport { getAllCountries, searchCountries } from '../../utils/countries';\nimport { SearchInput } from '../shared/SearchInput';\nimport '../../styles/picker.css';\n\nconst MAX_VISIBLE_CHIPS = 3;\n\nfunction ChipCheckIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"4 10 8 14 16 6\" />\n </svg>\n );\n}\n\nexport function CountryMultiSelect({\n value,\n onChange,\n placeholder = 'Select countries...',\n maxItems,\n showFlags = true,\n searchable = true,\n disabled = false,\n className,\n label,\n}: CountryMultiSelectProps) {\n const multi = useMultiSelect<Country>(\n getAllCountries(),\n (items, q) => q ? searchCountries(q) : items,\n (c) => c.iso2,\n value,\n onChange,\n maxItems\n );\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!multi.isOpen) return;\n const handler = (e: MouseEvent) => {\n if (wrapperRef.current && !wrapperRef.current.contains(e.target as Node)) multi.close();\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [multi.isOpen, multi.close]);\n\n useEffect(() => {\n if (!multi.isOpen) return;\n const handler = (e: KeyboardEvent) => { if (e.key === 'Escape') multi.close(); };\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [multi.isOpen, multi.close]);\n\n const visibleChips = value.slice(0, MAX_VISIBLE_CHIPS);\n const overflow = value.length - MAX_VISIBLE_CHIPS;\n\n return (\n <div ref={wrapperRef} className={`rck-picker${className ? ` ${className}` : ''}`}>\n {label && <span className=\"rck-label\">{label}</span>}\n\n <button\n type=\"button\"\n className={`rck-multiselect-trigger${multi.isOpen ? ' rck-open' : ''}`}\n disabled={disabled}\n onClick={multi.toggle}\n aria-haspopup=\"listbox\"\n aria-expanded={multi.isOpen}\n >\n <div className=\"rck-chips-area\">\n {value.length === 0 ? (\n <span style={{ color: 'var(--rck-text-placeholder)', fontSize: '0.9375rem' }}>{placeholder}</span>\n ) : (\n <>\n {visibleChips.map((c) => (\n <span key={c.iso2} className=\"rck-chip\">\n {showFlags && <span>{c.flag}</span>}\n <span className=\"rck-chip-label\">{c.name}</span>\n <button\n type=\"button\"\n className=\"rck-chip-remove\"\n onClick={(e) => { e.stopPropagation(); multi.removeItem(c); onChange(value.filter((x) => x.iso2 !== c.iso2)); }}\n aria-label={`Remove ${c.name}`}\n >\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\">\n <line x1=\"5\" y1=\"5\" x2=\"15\" y2=\"15\" /><line x1=\"15\" y1=\"5\" x2=\"5\" y2=\"15\" />\n </svg>\n </button>\n </span>\n ))}\n {overflow > 0 && (\n <span className=\"rck-chip-overflow\">+{overflow} more</span>\n )}\n </>\n )}\n </div>\n {value.length > 0 && (\n <button\n type=\"button\"\n className=\"rck-multiselect-clear\"\n onClick={(e) => { e.stopPropagation(); multi.clearAll(); onChange([]); }}\n aria-label=\"Clear all\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <line x1=\"5\" y1=\"5\" x2=\"15\" y2=\"15\" /><line x1=\"15\" y1=\"5\" x2=\"5\" y2=\"15\" />\n </svg>\n </button>\n )}\n <svg className=\"rck-chevron\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <polyline points=\"5 8 10 13 15 8\" />\n </svg>\n </button>\n\n {multi.isOpen && (\n <div className=\"rck-dropdown\" role=\"listbox\" aria-multiselectable=\"true\">\n {searchable && (\n <SearchInput value={multi.searchQuery} onChange={multi.setSearchQuery} placeholder=\"Search countries...\" />\n )}\n <ul className=\"rck-list\">\n {multi.filteredItems.length === 0 ? (\n <li className=\"rck-empty\"><span className=\"rck-empty-icon\">🌍</span><span>No countries found</span></li>\n ) : (\n multi.filteredItems.map((country) => {\n const selected = multi.isSelected(country);\n return (\n <li\n key={country.iso2}\n role=\"option\"\n aria-selected={selected}\n className={`rck-item${selected ? ' rck-item-selected' : ''}`}\n onClick={() => multi.toggleItem(country)}\n tabIndex={0}\n onKeyDown={(e) => e.key === 'Enter' && multi.toggleItem(country)}\n >\n <div className={selected ? 'rck-item-check-multi' : 'rck-item-check-empty'}>\n {selected && <ChipCheckIcon />}\n </div>\n {showFlags && <span className=\"rck-item-flag\">{country.flag}</span>}\n <div className=\"rck-item-main\">\n <span className=\"rck-item-name\">{country.name}</span>\n <span className=\"rck-item-sub\">{country.iso3} Β· +{country.phone_code}</span>\n </div>\n </li>\n );\n })\n )}\n </ul>\n </div>\n )}\n </div>\n );\n}\n","import React, { useEffect, useRef } from 'react';\n\ninterface PickerBaseProps {\n isOpen: boolean;\n onClose: () => void;\n onToggle: () => void;\n label?: string;\n disabled?: boolean;\n className?: string;\n triggerContent: React.ReactNode;\n children: React.ReactNode;\n id?: string;\n}\n\nconst ChevronIcon = () => (\n <svg\n className=\"rck-chevron\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"5 8 10 13 15 8\" />\n </svg>\n);\n\nexport function PickerBase({\n isOpen,\n onClose,\n onToggle,\n label,\n disabled,\n className,\n triggerContent,\n children,\n id,\n}: PickerBaseProps) {\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n // Close on outside click\n useEffect(() => {\n if (!isOpen) return;\n const handler = (e: MouseEvent) => {\n if (wrapperRef.current && !wrapperRef.current.contains(e.target as Node)) {\n onClose();\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [isOpen, onClose]);\n\n // Close on Escape\n useEffect(() => {\n if (!isOpen) return;\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [isOpen, onClose]);\n\n return (\n <div ref={wrapperRef} className={`rck-picker${className ? ` ${className}` : ''}`}>\n {label && (\n <span className=\"rck-label\" id={id ? `${id}-label` : undefined}>\n {label}\n </span>\n )}\n <button\n type=\"button\"\n className={`rck-trigger${isOpen ? ' rck-open' : ''}`}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-labelledby={id && label ? `${id}-label` : undefined}\n id={id}\n onClick={onToggle}\n >\n {triggerContent}\n <ChevronIcon />\n </button>\n\n {isOpen && (\n <div className=\"rck-dropdown\" role=\"listbox\">\n {children}\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport type { CountryPickerProps } from '../../types';\nimport { useCountryPicker } from '../../hooks/useCountryPicker';\nimport { PickerBase } from '../shared/PickerBase';\nimport { SearchInput } from '../shared/SearchInput';\nimport '../../styles/picker.css';\n\nconst CheckIcon = () => (\n <svg className=\"rck-item-check\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"4 10 8 14 16 6\" />\n </svg>\n);\n\nexport function CountryPicker({\n value,\n onChange,\n placeholder = 'Select a country',\n searchable = true,\n showFlag = true,\n showPhoneCode = false,\n disabled = false,\n className,\n label,\n}: CountryPickerProps) {\n const picker = useCountryPicker(value, onChange);\n\n const triggerContent = (\n <div className=\"rck-trigger-content\">\n {value ? (\n <>\n {showFlag && <span className=\"rck-flag\">{value.flag}</span>}\n <span className=\"rck-trigger-text\">{value.name}</span>\n {showPhoneCode && <span className=\"rck-badge\">+{value.phone_code}</span>}\n </>\n ) : (\n <span className=\"rck-trigger-text rck-placeholder\">{placeholder}</span>\n )}\n </div>\n );\n\n return (\n <PickerBase\n isOpen={picker.isOpen}\n onClose={picker.close}\n onToggle={picker.toggle}\n label={label}\n disabled={disabled}\n className={className}\n triggerContent={triggerContent}\n id=\"rck-country-picker\"\n >\n {searchable && (\n <SearchInput\n value={picker.searchQuery}\n onChange={picker.setSearchQuery}\n placeholder=\"Search country...\"\n />\n )}\n <ul className=\"rck-list\" role=\"listbox\" aria-label=\"Countries\">\n {picker.filteredItems.length === 0 ? (\n <li className=\"rck-empty\">\n <span className=\"rck-empty-icon\">🌍</span>\n <span>No countries found</span>\n </li>\n ) : (\n picker.filteredItems.map((country) => {\n const isSelected = value?.iso2 === country.iso2;\n return (\n <li\n key={country.iso2}\n role=\"option\"\n aria-selected={isSelected}\n className={`rck-item${isSelected ? ' rck-item-selected' : ''}`}\n onClick={() => picker.selectItem(country)}\n tabIndex={0}\n onKeyDown={(e) => e.key === 'Enter' && picker.selectItem(country)}\n >\n {showFlag && <span className=\"rck-item-flag\">{country.flag}</span>}\n <div className=\"rck-item-main\">\n <span className=\"rck-item-name\">{country.name}</span>\n <span className=\"rck-item-sub\">{country.iso3} Β· {country.division_type}</span>\n </div>\n <div className=\"rck-item-right\">\n {showPhoneCode && (\n <span className=\"rck-item-phone\">+{country.phone_code}</span>\n )}\n {isSelected && <CheckIcon />}\n </div>\n </li>\n );\n })\n )}\n </ul>\n </PickerBase>\n );\n}\n","import React, { useRef, useEffect } from 'react';\nimport type { CurrencyMultiSelectProps, Currency } from '../../types';\nimport { useMultiSelect } from '../../hooks/useMultiSelect';\nimport { getAllCurrencies, searchCurrencies } from '../../utils/currencies';\nimport { SearchInput } from '../shared/SearchInput';\nimport '../../styles/picker.css';\n\nconst MAX_VISIBLE_CHIPS = 3;\n\nfunction ChipCheckIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"4 10 8 14 16 6\" />\n </svg>\n );\n}\n\nexport function CurrencyMultiSelect({\n value,\n onChange,\n placeholder = 'Select currencies...',\n maxItems,\n showSymbol = true,\n searchable = true,\n disabled = false,\n className,\n label,\n}: CurrencyMultiSelectProps) {\n const multi = useMultiSelect<Currency>(\n getAllCurrencies(),\n (items, q) => q ? searchCurrencies(q) : items,\n (c) => c.code,\n value,\n onChange,\n maxItems\n );\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!multi.isOpen) return;\n const handler = (e: MouseEvent) => {\n if (wrapperRef.current && !wrapperRef.current.contains(e.target as Node)) multi.close();\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [multi.isOpen, multi.close]);\n\n useEffect(() => {\n if (!multi.isOpen) return;\n const handler = (e: KeyboardEvent) => { if (e.key === 'Escape') multi.close(); };\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [multi.isOpen, multi.close]);\n\n const visibleChips = value.slice(0, MAX_VISIBLE_CHIPS);\n const overflow = value.length - MAX_VISIBLE_CHIPS;\n\n return (\n <div ref={wrapperRef} className={`rck-picker${className ? ` ${className}` : ''}`}>\n {label && <span className=\"rck-label\">{label}</span>}\n\n <button\n type=\"button\"\n className={`rck-multiselect-trigger${multi.isOpen ? ' rck-open' : ''}`}\n disabled={disabled}\n onClick={multi.toggle}\n aria-haspopup=\"listbox\"\n aria-expanded={multi.isOpen}\n >\n <div className=\"rck-chips-area\">\n {value.length === 0 ? (\n <span style={{ color: 'var(--rck-text-placeholder)', fontSize: '0.9375rem' }}>{placeholder}</span>\n ) : (\n <>\n {visibleChips.map((c) => (\n <span key={c.code} className=\"rck-chip\">\n {showSymbol && <span>{c.symbol}</span>}\n <span className=\"rck-chip-label\">{c.code}</span>\n <button\n type=\"button\"\n className=\"rck-chip-remove\"\n onClick={(e) => { e.stopPropagation(); onChange(value.filter((x) => x.code !== c.code)); }}\n aria-label={`Remove ${c.code}`}\n >\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\">\n <line x1=\"5\" y1=\"5\" x2=\"15\" y2=\"15\" /><line x1=\"15\" y1=\"5\" x2=\"5\" y2=\"15\" />\n </svg>\n </button>\n </span>\n ))}\n {overflow > 0 && <span className=\"rck-chip-overflow\">+{overflow} more</span>}\n </>\n )}\n </div>\n {value.length > 0 && (\n <button\n type=\"button\"\n className=\"rck-multiselect-clear\"\n onClick={(e) => { e.stopPropagation(); multi.clearAll(); onChange([]); }}\n aria-label=\"Clear all\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <line x1=\"5\" y1=\"5\" x2=\"15\" y2=\"15\" /><line x1=\"15\" y1=\"5\" x2=\"5\" y2=\"15\" />\n </svg>\n </button>\n )}\n <svg className=\"rck-chevron\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <polyline points=\"5 8 10 13 15 8\" />\n </svg>\n </button>\n\n {multi.isOpen && (\n <div className=\"rck-dropdown\" role=\"listbox\" aria-multiselectable=\"true\">\n {searchable && (\n <SearchInput value={multi.searchQuery} onChange={multi.setSearchQuery} placeholder=\"Search currencies...\" />\n )}\n <ul className=\"rck-list\">\n {multi.filteredItems.length === 0 ? (\n <li className=\"rck-empty\"><span className=\"rck-empty-icon\">πŸ’°</span><span>No currencies found</span></li>\n ) : (\n multi.filteredItems.map((currency) => {\n const selected = multi.isSelected(currency);\n return (\n <li\n key={currency.code}\n role=\"option\"\n aria-selected={selected}\n className={`rck-item${selected ? ' rck-item-selected' : ''}`}\n onClick={() => multi.toggleItem(currency)}\n tabIndex={0}\n onKeyDown={(e) => e.key === 'Enter' && multi.toggleItem(currency)}\n >\n <div className={selected ? 'rck-item-check-multi' : 'rck-item-check-empty'}>\n {selected && <ChipCheckIcon />}\n </div>\n {showSymbol && <span className=\"rck-item-symbol\">{currency.symbol}</span>}\n <div className=\"rck-item-main\">\n <span className=\"rck-item-name\">{currency.name}</span>\n <span className=\"rck-item-sub\">{currency.code}</span>\n </div>\n </li>\n );\n })\n )}\n </ul>\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport type { CurrencyPickerProps } from '../../types';\nimport { useCurrencyPicker } from '../../hooks/useCurrencyPicker';\nimport { PickerBase } from '../shared/PickerBase';\nimport { SearchInput } from '../shared/SearchInput';\nimport '../../styles/picker.css';\n\nconst CheckIcon = () => (\n <svg className=\"rck-item-check\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"4 10 8 14 16 6\" />\n </svg>\n);\n\nexport function CurrencyPicker({\n value,\n onChange,\n placeholder = 'Select a currency',\n searchable = true,\n showSymbol = true,\n disabled = false,\n className,\n label,\n}: CurrencyPickerProps) {\n const picker = useCurrencyPicker(value, onChange);\n\n const triggerContent = (\n <div className=\"rck-trigger-content\">\n {value ? (\n <>\n {showSymbol && <span className=\"rck-item-symbol\">{value.symbol}</span>}\n <span className=\"rck-trigger-text\">{value.code} β€” {value.name}</span>\n </>\n ) : (\n <span className=\"rck-trigger-text rck-placeholder\">{placeholder}</span>\n )}\n </div>\n );\n\n return (\n <PickerBase\n isOpen={picker.isOpen}\n onClose={picker.close}\n onToggle={picker.toggle}\n label={label}\n disabled={disabled}\n className={className}\n triggerContent={triggerContent}\n id=\"rck-currency-picker\"\n >\n {searchable && (\n <SearchInput\n value={picker.searchQuery}\n onChange={picker.setSearchQuery}\n placeholder=\"Search currency...\"\n />\n )}\n <ul className=\"rck-list\" role=\"listbox\" aria-label=\"Currencies\">\n {picker.filteredItems.length === 0 ? (\n <li className=\"rck-empty\">\n <span className=\"rck-empty-icon\">πŸ’°</span>\n <span>No currencies found</span>\n </li>\n ) : (\n picker.filteredItems.map((currency) => {\n const isSelected = value?.code === currency.code;\n return (\n <li\n key={currency.code}\n role=\"option\"\n aria-selected={isSelected}\n className={`rck-item${isSelected ? ' rck-item-selected' : ''}`}\n onClick={() => picker.selectItem(currency)}\n tabIndex={0}\n onKeyDown={(e) => e.key === 'Enter' && picker.selectItem(currency)}\n >\n {showSymbol && <span className=\"rck-item-symbol\">{currency.symbol}</span>}\n <div className=\"rck-item-main\">\n <span className=\"rck-item-name\">{currency.name}</span>\n <span className=\"rck-item-sub\">{currency.code}</span>\n </div>\n {isSelected && <CheckIcon />}\n </li>\n );\n })\n )}\n </ul>\n </PickerBase>\n );\n}\n","import React from 'react';\nimport type { DivisionPickerProps } from '../../types';\nimport { useDivisionPicker } from '../../hooks/useDivisionPicker';\nimport { PickerBase } from '../shared/PickerBase';\nimport { SearchInput } from '../shared/SearchInput';\nimport '../../styles/picker.css';\n\nconst CheckIcon = () => (\n <svg className=\"rck-item-check\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"4 10 8 14 16 6\" />\n </svg>\n);\n\nexport function DivisionPicker({\n countryIso2,\n value,\n onChange,\n placeholder = 'Select a division',\n searchable = true,\n disabled = false,\n className,\n label,\n}: DivisionPickerProps) {\n const picker = useDivisionPicker(countryIso2, value, onChange);\n\n const triggerContent = (\n <div className=\"rck-trigger-content\">\n {value ? (\n <>\n <span className=\"rck-trigger-text\">{value.name}</span>\n <span className=\"rck-badge\">{value.iso2}</span>\n </>\n ) : (\n <span className=\"rck-trigger-text rck-placeholder\">{placeholder}</span>\n )}\n </div>\n );\n\n const isDisabled = disabled || !countryIso2;\n\n return (\n <PickerBase\n isOpen={picker.isOpen}\n onClose={picker.close}\n onToggle={picker.toggle}\n label={label}\n disabled={isDisabled}\n className={className}\n triggerContent={triggerContent}\n id=\"rck-division-picker\"\n >\n {searchable && (\n <SearchInput\n value={picker.searchQuery}\n onChange={picker.setSearchQuery}\n placeholder=\"Search division...\"\n />\n )}\n <ul className=\"rck-list\" role=\"listbox\" aria-label=\"Divisions\">\n {picker.filteredItems.length === 0 ? (\n <li className=\"rck-empty\">\n <span className=\"rck-empty-icon\">πŸ—ΊοΈ</span>\n <span>No divisions found</span>\n </li>\n ) : (\n picker.filteredItems.map((division) => {\n const isSelected = value?.iso2 === division.iso2 && value?.name === division.name;\n return (\n <li\n key={`${division.iso2}-${division.name}`}\n role=\"option\"\n aria-selected={isSelected}\n className={`rck-item${isSelected ? ' rck-item-selected' : ''}`}\n onClick={() => picker.selectItem(division)}\n tabIndex={0}\n onKeyDown={(e) => e.key === 'Enter' && picker.selectItem(division)}\n >\n <div className=\"rck-item-main\">\n <span className=\"rck-item-name\">{division.name}</span>\n <span className=\"rck-item-sub\">{division.timezone}</span>\n </div>\n <div className=\"rck-item-right\">\n <span className=\"rck-badge\">{division.iso2}</span>\n {isSelected && <CheckIcon />}\n </div>\n </li>\n );\n })\n )}\n </ul>\n </PickerBase>\n );\n}\n","import React from 'react';\nimport type { LanguagePickerProps } from '../../types';\nimport { useLanguagePicker } from '../../hooks/useLanguagePicker';\nimport { PickerBase } from '../shared/PickerBase';\nimport { SearchInput } from '../shared/SearchInput';\nimport '../../styles/picker.css';\n\nconst CheckIcon = () => (\n <svg className=\"rck-item-check\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"4 10 8 14 16 6\" />\n </svg>\n);\n\nexport function LanguagePicker({\n value,\n onChange,\n placeholder = 'Select a language',\n searchable = true,\n showNativeName = true,\n disabled = false,\n className,\n label,\n}: LanguagePickerProps) {\n const picker = useLanguagePicker(value, onChange);\n\n const triggerContent = (\n <div className=\"rck-trigger-content\">\n {value ? (\n <>\n <span className=\"rck-trigger-text\">{value.english_name}</span>\n {showNativeName && value.native_name !== value.english_name && (\n <span className=\"rck-native-name\">{value.native_name}</span>\n )}\n </>\n ) : (\n <span className=\"rck-trigger-text rck-placeholder\">{placeholder}</span>\n )}\n </div>\n );\n\n return (\n <PickerBase\n isOpen={picker.isOpen}\n onClose={picker.close}\n onToggle={picker.toggle}\n label={label}\n disabled={disabled}\n className={className}\n triggerContent={triggerContent}\n id=\"rck-language-picker\"\n >\n {searchable && (\n <SearchInput\n value={picker.searchQuery}\n onChange={picker.setSearchQuery}\n placeholder=\"Search language...\"\n />\n )}\n <ul className=\"rck-list\" role=\"listbox\" aria-label=\"Languages\">\n {picker.filteredItems.length === 0 ? (\n <li className=\"rck-empty\">\n <span className=\"rck-empty-icon\">🌐</span>\n <span>No languages found</span>\n </li>\n ) : (\n picker.filteredItems.map((lang) => {\n const isSelected = value?.code === lang.code;\n return (\n <li\n key={lang.code}\n role=\"option\"\n aria-selected={isSelected}\n className={`rck-item${isSelected ? ' rck-item-selected' : ''}`}\n onClick={() => picker.selectItem(lang)}\n tabIndex={0}\n onKeyDown={(e) => e.key === 'Enter' && picker.selectItem(lang)}\n >\n <div className=\"rck-item-main\">\n <span className=\"rck-item-name\">{lang.english_name}</span>\n {showNativeName && lang.native_name !== lang.english_name && (\n <span className=\"rck-item-sub\">{lang.native_name}</span>\n )}\n </div>\n <div className=\"rck-item-right\">\n <span className=\"rck-badge\" style={{ fontSize: '0.68rem' }}>{lang.code}</span>\n {isSelected && <CheckIcon />}\n </div>\n </li>\n );\n })\n )}\n </ul>\n </PickerBase>\n );\n}\n","import React, { useRef, useEffect } from 'react';\nimport type { PhoneInputProps } from '../../types';\nimport { usePhoneInput } from '../../hooks/usePhoneInput';\nimport { SearchInput } from '../shared/SearchInput';\nimport '../../styles/picker.css';\n\nexport function PhoneInput({\n value,\n onChange,\n defaultCountryIso2 = 'US',\n placeholder = 'Phone number',\n showFlag = true,\n disabled = false,\n className,\n label,\n}: PhoneInputProps) {\n const phone = usePhoneInput(value, onChange, defaultCountryIso2);\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n // Close dropdown on outside click\n useEffect(() => {\n if (!phone.isOpen) return;\n const handler = (e: MouseEvent) => {\n if (wrapperRef.current && !wrapperRef.current.contains(e.target as Node)) {\n phone.close();\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [phone.isOpen, phone.close]);\n\n // Close on Escape\n useEffect(() => {\n if (!phone.isOpen) return;\n const handler = (e: KeyboardEvent) => { if (e.key === 'Escape') phone.close(); };\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [phone.isOpen, phone.close]);\n\n return (\n <div ref={wrapperRef} className={`rck-phone-wrapper${className ? ` ${className}` : ''}`}>\n {label && <span className=\"rck-label\">{label}</span>}\n\n <div className={`rck-phone-field${disabled ? ' rck-phone-disabled' : ''}`}>\n {/* Country selector */}\n <button\n type=\"button\"\n className=\"rck-phone-country-btn\"\n onClick={phone.toggle}\n aria-expanded={phone.isOpen}\n aria-label=\"Select country code\"\n disabled={disabled}\n >\n {showFlag && phone.country && (\n <span className=\"rck-phone-flag\">{phone.country.flag}</span>\n )}\n <span className=\"rck-phone-dial\">\n {phone.country ? `+${phone.country.phone_code}` : '+?'}\n </span>\n <svg className=\"rck-phone-chevron\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <polyline points=\"5 8 10 13 15 8\" />\n </svg>\n </button>\n\n {/* Phone number input */}\n <input\n type=\"tel\"\n className=\"rck-phone-input\"\n value={phone.number}\n onChange={(e) => phone.setNumber(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n inputMode=\"numeric\"\n autoComplete=\"tel-national\"\n />\n\n {/* Country dropdown */}\n {phone.isOpen && (\n <div className=\"rck-phone-dropdown\">\n <SearchInput\n value={phone.searchQuery}\n onChange={phone.setSearchQuery}\n placeholder=\"Search country or dial code...\"\n />\n <ul className=\"rck-list\" role=\"listbox\" aria-label=\"Countries\">\n {phone.filteredCountries.length === 0 ? (\n <li className=\"rck-empty\">\n <span className=\"rck-empty-icon\">🌍</span>\n <span>No countries found</span>\n </li>\n ) : (\n phone.filteredCountries.map((country) => {\n const isSelected = phone.country?.iso2 === country.iso2;\n return (\n <li\n key={country.iso2}\n role=\"option\"\n aria-selected={isSelected}\n className={`rck-item${isSelected ? ' rck-item-selected' : ''}`}\n onClick={() => phone.selectCountry(country)}\n tabIndex={0}\n onKeyDown={(e) => e.key === 'Enter' && phone.selectCountry(country)}\n >\n <span className=\"rck-item-flag\">{country.flag}</span>\n <div className=\"rck-item-main\">\n <span className=\"rck-item-name\">{country.name}</span>\n <span className=\"rck-item-sub\">{country.iso2}</span>\n </div>\n <span className=\"rck-item-phone\">+{country.phone_code}</span>\n </li>\n );\n })\n )}\n </ul>\n </div>\n )}\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport type { TimezonePickerProps } from '../../types';\nimport { useTimezonePicker } from '../../hooks/useTimezonePicker';\nimport { PickerBase } from '../shared/PickerBase';\nimport { SearchInput } from '../shared/SearchInput';\nimport '../../styles/picker.css';\n\nconst CheckIcon = () => (\n <svg className=\"rck-item-check\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"4 10 8 14 16 6\" />\n </svg>\n);\n\nexport function TimezonePicker({\n value,\n onChange,\n placeholder = 'Select a timezone',\n searchable = true,\n countryIso2,\n disabled = false,\n className,\n label,\n}: TimezonePickerProps) {\n const picker = useTimezonePicker(value, onChange, countryIso2);\n\n const triggerContent = (\n <div className=\"rck-trigger-content\">\n {value ? (\n <>\n <span className=\"rck-trigger-text\">{value.name}</span>\n <span className=\"rck-badge\">{value.offset_name}</span>\n </>\n ) : (\n <span className=\"rck-trigger-text rck-placeholder\">{placeholder}</span>\n )}\n </div>\n );\n\n return (\n <PickerBase\n isOpen={picker.isOpen}\n onClose={picker.close}\n onToggle={picker.toggle}\n label={label}\n disabled={disabled}\n className={className}\n triggerContent={triggerContent}\n id=\"rck-timezone-picker\"\n >\n {searchable && (\n <SearchInput\n value={picker.searchQuery}\n onChange={picker.setSearchQuery}\n placeholder=\"Search timezone...\"\n />\n )}\n <ul className=\"rck-list\" role=\"listbox\" aria-label=\"Timezones\">\n {picker.filteredItems.length === 0 ? (\n <li className=\"rck-empty\">\n <span className=\"rck-empty-icon\">πŸ•</span>\n <span>No timezones found</span>\n </li>\n ) : (\n picker.filteredItems.map((tz) => {\n const isSelected = value?.name === tz.name;\n return (\n <li\n key={tz.name}\n role=\"option\"\n aria-selected={isSelected}\n className={`rck-item${isSelected ? ' rck-item-selected' : ''}`}\n onClick={() => picker.selectItem(tz)}\n tabIndex={0}\n onKeyDown={(e) => e.key === 'Enter' && picker.selectItem(tz)}\n >\n <div className=\"rck-item-main\">\n <span className=\"rck-item-name\">{tz.name}</span>\n <span className=\"rck-item-sub\">{tz.tzName} Β· {tz.abbreviation}</span>\n </div>\n <div className=\"rck-item-right\">\n <span className=\"rck-offset-badge\">{tz.offset_name}</span>\n {isSelected && <CheckIcon />}\n </div>\n </li>\n );\n })\n )}\n </ul>\n </PickerBase>\n );\n}\n"],"names":["SearchInput","value","onChange","placeholder","autoFocus","inputRef","useRef","useEffect","_a","jsxs","jsx","e","MAX_VISIBLE_CHIPS","ChipCheckIcon","CountryMultiSelect","maxItems","showFlags","searchable","disabled","className","label","multi","useMultiSelect","getAllCountries","items","q","searchCountries","c","wrapperRef","handler","visibleChips","overflow","Fragment","x","country","selected","ChevronIcon","PickerBase","isOpen","onClose","onToggle","triggerContent","children","id","CheckIcon","CountryPicker","showFlag","showPhoneCode","picker","useCountryPicker","isSelected","CurrencyMultiSelect","showSymbol","getAllCurrencies","searchCurrencies","currency","CurrencyPicker","useCurrencyPicker","DivisionPicker","countryIso2","useDivisionPicker","isDisabled","division","LanguagePicker","showNativeName","useLanguagePicker","lang","PhoneInput","defaultCountryIso2","phone","usePhoneInput","TimezonePicker","useTimezonePicker","tz"],"mappings":"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"}
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ @import"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap";:root{--rck-font: "Inter", system-ui, -apple-system, sans-serif;--rck-bg: #ffffff;--rck-surface: #f8fafc;--rck-surface-hover: #f1f5f9;--rck-border: #e2e8f0;--rck-border-focus: #6366f1;--rck-text-primary: #0f172a;--rck-text-secondary: #64748b;--rck-text-placeholder: #94a3b8;--rck-accent: #6366f1;--rck-accent-light: #eef2ff;--rck-accent-dark: #4f46e5;--rck-selected-bg: #eef2ff;--rck-selected-text: #4f46e5;--rck-shadow-sm: 0 1px 3px rgba(0, 0, 0, .08), 0 1px 2px rgba(0, 0, 0, .05);--rck-shadow-md: 0 4px 16px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .06);--rck-shadow-lg: 0 10px 30px rgba(0, 0, 0, .12), 0 4px 10px rgba(0, 0, 0, .07);--rck-radius-sm: 8px;--rck-radius-md: 12px;--rck-radius-lg: 16px;--rck-transition: .18s cubic-bezier(.4, 0, .2, 1);--rck-dropdown-max-height: 320px;--rck-z-index: 9999}[data-theme=dark]{--rck-bg: #1e293b;--rck-surface: #0f172a;--rck-surface-hover: #1e293b;--rck-border: #334155;--rck-border-focus: #818cf8;--rck-text-primary: #f8fafc;--rck-text-secondary: #94a3b8;--rck-text-placeholder: #64748b;--rck-accent: #818cf8;--rck-accent-light: #1e1b4b;--rck-accent-dark: #6366f1;--rck-selected-bg: #1e1b4b;--rck-selected-text: #a5b4fc;--rck-shadow-sm: 0 1px 3px rgba(0, 0, 0, .3);--rck-shadow-md: 0 4px 16px rgba(0, 0, 0, .4);--rck-shadow-lg: 0 10px 30px rgba(0, 0, 0, .5)}.rck-picker{position:relative;display:inline-flex;flex-direction:column;font-family:var(--rck-font);width:100%}.rck-label{display:block;font-size:.8125rem;font-weight:600;color:var(--rck-text-secondary);margin-bottom:6px;letter-spacing:.02em;text-transform:uppercase}.rck-trigger{display:flex;align-items:center;gap:10px;width:100%;padding:11px 14px;background:var(--rck-bg);border:1.5px solid var(--rck-border);border-radius:var(--rck-radius-md);cursor:pointer;font-family:var(--rck-font);font-size:.9375rem;color:var(--rck-text-primary);text-align:left;transition:border-color var(--rck-transition),box-shadow var(--rck-transition),background var(--rck-transition);outline:none;box-shadow:var(--rck-shadow-sm);min-height:46px;-webkit-user-select:none;user-select:none}.rck-trigger:hover:not(:disabled){border-color:var(--rck-accent);box-shadow:var(--rck-shadow-md)}.rck-trigger:focus-visible{border-color:var(--rck-border-focus);box-shadow:0 0 0 3px color-mix(in srgb,var(--rck-accent) 20%,transparent)}.rck-trigger.rck-open{border-color:var(--rck-border-focus);box-shadow:0 0 0 3px color-mix(in srgb,var(--rck-accent) 20%,transparent)}.rck-trigger:disabled{opacity:.5;cursor:not-allowed;background:var(--rck-surface)}.rck-trigger-content{flex:1;display:flex;align-items:center;gap:8px;min-width:0;overflow:hidden}.rck-trigger-text{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rck-placeholder{color:var(--rck-text-placeholder)}.rck-badge{display:inline-flex;align-items:center;padding:2px 8px;background:var(--rck-accent-light);color:var(--rck-accent-dark);border-radius:100px;font-size:.75rem;font-weight:600;letter-spacing:.03em;flex-shrink:0}.rck-flag{font-size:1.375rem;line-height:1;flex-shrink:0}.rck-chevron{flex-shrink:0;width:18px;height:18px;color:var(--rck-text-secondary);transition:transform var(--rck-transition),color var(--rck-transition)}.rck-trigger.rck-open .rck-chevron{transform:rotate(180deg);color:var(--rck-accent)}.rck-dropdown{position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:var(--rck-z-index);background:var(--rck-bg);border:1.5px solid var(--rck-border);border-radius:var(--rck-radius-lg);box-shadow:var(--rck-shadow-lg);overflow:hidden;display:flex;flex-direction:column;animation:rck-dropdown-in var(--rck-transition) both;transform-origin:top}@keyframes rck-dropdown-in{0%{opacity:0;transform:scaleY(.92) translateY(-6px)}to{opacity:1;transform:scaleY(1) translateY(0)}}.rck-search-wrapper{padding:12px 12px 8px;border-bottom:1px solid var(--rck-border)}.rck-search{display:flex;align-items:center;gap:8px;background:var(--rck-surface);border:1.5px solid var(--rck-border);border-radius:var(--rck-radius-sm);padding:8px 12px;transition:border-color var(--rck-transition),box-shadow var(--rck-transition)}.rck-search:focus-within{border-color:var(--rck-border-focus);box-shadow:0 0 0 3px color-mix(in srgb,var(--rck-accent) 15%,transparent)}.rck-search-icon{width:15px;height:15px;color:var(--rck-text-placeholder);flex-shrink:0}.rck-search input{flex:1;border:none;background:transparent;font-family:var(--rck-font);font-size:.875rem;color:var(--rck-text-primary);outline:none;min-width:0}.rck-search input::placeholder{color:var(--rck-text-placeholder)}.rck-list{overflow-y:auto;max-height:var(--rck-dropdown-max-height);padding:6px;scrollbar-width:thin;scrollbar-color:var(--rck-border) transparent}.rck-list::-webkit-scrollbar{width:4px}.rck-list::-webkit-scrollbar-track{background:transparent}.rck-list::-webkit-scrollbar-thumb{background:var(--rck-border);border-radius:99px}.rck-item{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:var(--rck-radius-sm);cursor:pointer;transition:background var(--rck-transition),color var(--rck-transition);font-family:var(--rck-font);font-size:.9rem;color:var(--rck-text-primary);border:none;background:transparent;width:100%;text-align:left;-webkit-user-select:none;user-select:none;outline:none}.rck-item:hover,.rck-item:focus-visible{background:var(--rck-surface-hover)}.rck-item.rck-item-selected{background:var(--rck-selected-bg);color:var(--rck-selected-text);font-weight:600}.rck-item-flag{font-size:1.25rem;line-height:1;flex-shrink:0}.rck-item-main{flex:1;display:flex;flex-direction:column;gap:1px;min-width:0}.rck-item-name{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rck-item-sub{font-size:.76rem;color:var(--rck-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rck-item-selected .rck-item-sub{color:var(--rck-accent-dark);opacity:.8}.rck-item-right{display:flex;align-items:center;gap:6px;flex-shrink:0}.rck-item-phone{font-size:.78rem;color:var(--rck-text-secondary);font-variant-numeric:tabular-nums;background:var(--rck-surface);padding:2px 6px;border-radius:4px}.rck-item-symbol{font-size:1rem;font-weight:600;color:var(--rck-accent);min-width:24px;text-align:center}.rck-item-check{width:16px;height:16px;color:var(--rck-accent);flex-shrink:0}.rck-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:28px 16px;gap:8px;color:var(--rck-text-secondary);font-size:.875rem}.rck-empty-icon{font-size:2rem;opacity:.4}.rck-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:calc(var(--rck-z-index) - 1)}.rck-offset-badge{font-size:.72rem;font-weight:600;padding:2px 6px;border-radius:4px;background:var(--rck-accent-light);color:var(--rck-accent-dark);font-variant-numeric:tabular-nums;letter-spacing:-.01em}.rck-native-name{font-size:.78rem;color:var(--rck-text-secondary);font-style:italic}.rck-phone-wrapper{display:flex;flex-direction:column;gap:6px;font-family:var(--rck-font);width:100%;position:relative}.rck-phone-field{display:flex;align-items:stretch;border:1.5px solid var(--rck-border);border-radius:var(--rck-radius-md);background:var(--rck-bg);box-shadow:var(--rck-shadow-sm);overflow:visible;position:relative;transition:border-color var(--rck-transition),box-shadow var(--rck-transition);min-height:46px}.rck-phone-field:focus-within{border-color:var(--rck-border-focus);box-shadow:0 0 0 3px color-mix(in srgb,var(--rck-accent) 20%,transparent)}.rck-phone-field.rck-phone-disabled{opacity:.5;pointer-events:none;background:var(--rck-surface)}.rck-phone-country-btn{display:flex;align-items:center;gap:5px;padding:0 12px;border:none;border-right:1.5px solid var(--rck-border);border-radius:var(--rck-radius-md) 0 0 var(--rck-radius-md);background:var(--rck-surface);cursor:pointer;font-family:var(--rck-font);font-size:.875rem;font-weight:600;color:var(--rck-text-primary);white-space:nowrap;flex-shrink:0;transition:background var(--rck-transition);outline:none}.rck-phone-country-btn:hover:not(:disabled){background:var(--rck-surface-hover)}.rck-phone-flag{font-size:1.25rem;line-height:1}.rck-phone-dial{font-size:.875rem;font-weight:600;color:var(--rck-accent);font-variant-numeric:tabular-nums;letter-spacing:.01em}.rck-phone-chevron{width:14px;height:14px;color:var(--rck-text-secondary);transition:transform var(--rck-transition)}.rck-phone-country-btn[aria-expanded=true] .rck-phone-chevron{transform:rotate(180deg)}.rck-phone-input{flex:1;border:none;background:transparent;font-family:var(--rck-font);font-size:.9375rem;color:var(--rck-text-primary);padding:0 14px;outline:none;min-width:0}.rck-phone-input::placeholder{color:var(--rck-text-placeholder)}.rck-phone-dropdown{position:absolute;top:calc(100% + 6px);left:0;min-width:280px;z-index:var(--rck-z-index);background:var(--rck-bg);border:1.5px solid var(--rck-border);border-radius:var(--rck-radius-lg);box-shadow:var(--rck-shadow-lg);overflow:hidden;animation:rck-dropdown-in var(--rck-transition) both}.rck-multiselect-trigger{display:flex;align-items:center;gap:6px;width:100%;min-height:46px;padding:7px 14px;background:var(--rck-bg);border:1.5px solid var(--rck-border);border-radius:var(--rck-radius-md);cursor:pointer;font-family:var(--rck-font);text-align:left;transition:border-color var(--rck-transition),box-shadow var(--rck-transition);outline:none;box-shadow:var(--rck-shadow-sm)}.rck-multiselect-trigger:hover:not(:disabled){border-color:var(--rck-accent);box-shadow:var(--rck-shadow-md)}.rck-multiselect-trigger:focus-visible,.rck-multiselect-trigger.rck-open{border-color:var(--rck-border-focus);box-shadow:0 0 0 3px color-mix(in srgb,var(--rck-accent) 20%,transparent)}.rck-multiselect-trigger:disabled{opacity:.5;cursor:not-allowed}.rck-chips-area{flex:1;display:flex;flex-wrap:wrap;gap:5px;min-width:0;align-items:center}.rck-chip{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;background:var(--rck-accent-light);color:var(--rck-accent-dark);border-radius:100px;font-size:.8rem;font-weight:600;white-space:nowrap;max-width:140px;overflow:hidden}.rck-chip-label{overflow:hidden;text-overflow:ellipsis}.rck-chip-remove{display:inline-flex;align-items:center;justify-content:center;border:none;background:none;cursor:pointer;padding:0;color:var(--rck-accent-dark);opacity:.6;transition:opacity .15s;flex-shrink:0}.rck-chip-remove:hover{opacity:1}.rck-chip-overflow{display:inline-flex;align-items:center;padding:3px 8px;background:var(--rck-surface-hover);color:var(--rck-text-secondary);border-radius:100px;font-size:.78rem;font-weight:600;white-space:nowrap}.rck-multiselect-clear{display:inline-flex;align-items:center;justify-content:center;border:none;background:none;cursor:pointer;color:var(--rck-text-secondary);padding:2px;border-radius:4px;transition:color .15s,background .15s;flex-shrink:0}.rck-multiselect-clear:hover{color:var(--rck-text-primary);background:var(--rck-surface-hover)}.rck-item-check-multi{width:16px;height:16px;background:var(--rck-accent);border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}.rck-item-check-multi svg{width:10px;height:10px;stroke:#fff}.rck-item-check-empty{width:16px;height:16px;border:1.5px solid var(--rck-border);border-radius:50%;flex-shrink:0}
@@ -0,0 +1,185 @@
1
+ export interface PhoneFormat {
2
+ countryCode?: string;
3
+ iso2: string;
4
+ dialCode: string;
5
+ patterns: string;
6
+ possibleLengths: string;
7
+ example: string | number;
8
+ }
9
+ export interface Currency {
10
+ code: string;
11
+ name: string;
12
+ symbol: string;
13
+ }
14
+ export interface Timezone {
15
+ name: string;
16
+ offset: number;
17
+ offset_name: string;
18
+ abbreviation: string;
19
+ tzName: string;
20
+ }
21
+ export interface Division {
22
+ name: string;
23
+ iso2: string;
24
+ timezone: string;
25
+ }
26
+ export interface Country {
27
+ name: string;
28
+ iso2: string;
29
+ iso3: string;
30
+ phone_code: string;
31
+ phone_format: PhoneFormat;
32
+ currency: Currency;
33
+ division_type: string;
34
+ divisions: Division[];
35
+ timezones: Timezone[];
36
+ /** Emoji flag computed from iso2 */
37
+ flag: string;
38
+ }
39
+ export interface Language {
40
+ code: string;
41
+ english_name: string;
42
+ native_name: string;
43
+ }
44
+ export interface CountryPickerProps {
45
+ /** Currently selected country */
46
+ value?: Country | null;
47
+ /** Callback when user selects a country */
48
+ onChange: (country: Country) => void;
49
+ placeholder?: string;
50
+ /** Enable search input */
51
+ searchable?: boolean;
52
+ /** Show emoji flag next to country name */
53
+ showFlag?: boolean;
54
+ /** Show phone dial code */
55
+ showPhoneCode?: boolean;
56
+ /** Disable the picker */
57
+ disabled?: boolean;
58
+ /** Additional wrapper class */
59
+ className?: string;
60
+ /** aria-label */
61
+ label?: string;
62
+ }
63
+ export interface CurrencyPickerProps {
64
+ value?: Currency | null;
65
+ onChange: (currency: Currency) => void;
66
+ placeholder?: string;
67
+ searchable?: boolean;
68
+ /** Filter currencies to a specific country (iso2) and enable auto-selection */
69
+ countryIso2?: string;
70
+ /** Auto-select the first currency if countryIso2 is provided. Defaults to true if countryIso2 is present and value is empty. */
71
+ autoSelect?: boolean;
72
+ /** Show currency symbol alongside code */
73
+ showSymbol?: boolean;
74
+ disabled?: boolean;
75
+ className?: string;
76
+ label?: string;
77
+ }
78
+ export interface TimezonePickerProps {
79
+ value?: Timezone | null;
80
+ onChange: (timezone: Timezone) => void;
81
+ placeholder?: string;
82
+ searchable?: boolean;
83
+ /** Filter timezones to a specific country (iso2) and enable auto-selection */
84
+ countryIso2?: string;
85
+ /** Auto-select the first timezone if countryIso2 is provided. Defaults to true if countryIso2 is present and value is empty. */
86
+ autoSelect?: boolean;
87
+ disabled?: boolean;
88
+ className?: string;
89
+ label?: string;
90
+ }
91
+ export interface LanguagePickerProps {
92
+ value?: Language | null;
93
+ onChange: (language: Language) => void;
94
+ placeholder?: string;
95
+ searchable?: boolean;
96
+ /** Show native language name alongside english name */
97
+ showNativeName?: boolean;
98
+ disabled?: boolean;
99
+ className?: string;
100
+ label?: string;
101
+ }
102
+ export interface DivisionPickerProps {
103
+ /** ISO2 code of the parent country (required) */
104
+ countryIso2: string;
105
+ value?: Division | null;
106
+ onChange: (division: Division) => void;
107
+ placeholder?: string;
108
+ searchable?: boolean;
109
+ disabled?: boolean;
110
+ className?: string;
111
+ label?: string;
112
+ }
113
+ export interface UsePickerReturn<T> {
114
+ isOpen: boolean;
115
+ searchQuery: string;
116
+ filteredItems: T[];
117
+ selectedItem: T | null;
118
+ open: () => void;
119
+ close: () => void;
120
+ toggle: () => void;
121
+ setSearchQuery: (query: string) => void;
122
+ selectItem: (item: T) => void;
123
+ clearSelection: () => void;
124
+ }
125
+ /**
126
+ * Value object returned by PhoneInput.
127
+ */
128
+ export interface PhoneValue {
129
+ /** Full Country object of the selected country */
130
+ country: Country;
131
+ /** Dial code with + prefix, e.g. "+1" */
132
+ dialCode: string;
133
+ /** Raw phone number without dial code, e.g. "4155551234" */
134
+ number: string;
135
+ /** Full number with dial code, e.g. "+14155551234" */
136
+ full: string;
137
+ }
138
+ export interface PhoneInputProps {
139
+ value?: PhoneValue | null;
140
+ onChange: (value: PhoneValue) => void;
141
+ /** Pre-select a country by ISO2 on first render */
142
+ defaultCountryIso2?: string;
143
+ placeholder?: string;
144
+ showFlag?: boolean;
145
+ disabled?: boolean;
146
+ className?: string;
147
+ label?: string;
148
+ }
149
+ export interface CountryMultiSelectProps {
150
+ value: Country[];
151
+ onChange: (countries: Country[]) => void;
152
+ placeholder?: string;
153
+ /** Maximum number of selections (undefined = unlimited) */
154
+ maxItems?: number;
155
+ showFlags?: boolean;
156
+ searchable?: boolean;
157
+ disabled?: boolean;
158
+ className?: string;
159
+ label?: string;
160
+ }
161
+ export interface CurrencyMultiSelectProps {
162
+ value: Currency[];
163
+ onChange: (currencies: Currency[]) => void;
164
+ placeholder?: string;
165
+ maxItems?: number;
166
+ showSymbol?: boolean;
167
+ searchable?: boolean;
168
+ disabled?: boolean;
169
+ className?: string;
170
+ label?: string;
171
+ }
172
+ export interface UseMultiSelectReturn<T> {
173
+ isOpen: boolean;
174
+ searchQuery: string;
175
+ filteredItems: T[];
176
+ selectedItems: T[];
177
+ open: () => void;
178
+ close: () => void;
179
+ toggle: () => void;
180
+ setSearchQuery: (query: string) => void;
181
+ toggleItem: (item: T) => void;
182
+ isSelected: (item: T) => boolean;
183
+ removeItem: (item: T) => void;
184
+ clearAll: () => void;
185
+ }
@@ -0,0 +1,2 @@
1
+ import type { CountryMultiSelectProps } from '../../types';
2
+ export declare function CountryMultiSelect({ value, onChange, placeholder, maxItems, showFlags, searchable, disabled, className, label, }: CountryMultiSelectProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import type { CountryPickerProps } from '../../types';
2
+ export declare function CountryPicker({ value, onChange, placeholder, searchable, showFlag, showPhoneCode, disabled, className, label, }: CountryPickerProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import type { CurrencyMultiSelectProps } from '../../types';
2
+ export declare function CurrencyMultiSelect({ value, onChange, placeholder, maxItems, showSymbol, searchable, disabled, className, label, }: CurrencyMultiSelectProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import type { CurrencyPickerProps } from '../../types';
2
+ export declare function CurrencyPicker({ value, onChange, placeholder, searchable, showSymbol, countryIso2, autoSelect, disabled, className, label, }: CurrencyPickerProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import type { DivisionPickerProps } from '../../types';
2
+ export declare function DivisionPicker({ countryIso2, value, onChange, placeholder, searchable, disabled, className, label, }: DivisionPickerProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import type { LanguagePickerProps } from '../../types';
2
+ export declare function LanguagePicker({ value, onChange, placeholder, searchable, showNativeName, disabled, className, label, }: LanguagePickerProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ import type { PhoneInputProps } from '../../types';
3
+ export declare const PhoneInput: React.ForwardRefExoticComponent<PhoneInputProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,2 @@
1
+ import type { TimezonePickerProps } from '../../types';
2
+ export declare function TimezonePicker({ value, onChange, placeholder, searchable, countryIso2, autoSelect, disabled, className, label, }: TimezonePickerProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,73 @@
1
+ import React from 'react';
2
+ import * as PopoverPrimitive from '@radix-ui/react-popover';
3
+ export declare const Popover: React.FC<PopoverPrimitive.PopoverProps>;
4
+ export declare const PopoverTrigger: React.ForwardRefExoticComponent<PopoverPrimitive.PopoverTriggerProps & React.RefAttributes<HTMLButtonElement>>;
5
+ export declare const CheckIcon: {
6
+ ({ className }: {
7
+ className?: string;
8
+ }): import("react/jsx-runtime").JSX.Element;
9
+ displayName: string;
10
+ };
11
+ export declare const FieldLabel: {
12
+ ({ children, className, }: {
13
+ children: React.ReactNode;
14
+ className?: string;
15
+ }): import("react/jsx-runtime").JSX.Element;
16
+ displayName: string;
17
+ };
18
+ export declare const Badge: {
19
+ ({ children, className }: {
20
+ children: React.ReactNode;
21
+ className?: string;
22
+ }): import("react/jsx-runtime").JSX.Element;
23
+ displayName: string;
24
+ };
25
+ export interface PopoverContentProps extends React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> {
26
+ }
27
+ export declare const PopoverContent: React.ForwardRefExoticComponent<PopoverContentProps & React.RefAttributes<HTMLDivElement>>;
28
+ /** Wrapper that groups search input + scrollable list. */
29
+ export declare const CommandRoot: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
30
+ export interface CommandInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> {
31
+ onValueChange?: (value: string) => void;
32
+ }
33
+ export declare const CommandInput: React.ForwardRefExoticComponent<CommandInputProps & React.RefAttributes<HTMLInputElement>>;
34
+ export declare const CommandList: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
35
+ export declare const CommandEmpty: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
36
+ export interface CommandItemProps extends React.HTMLAttributes<HTMLDivElement> {
37
+ /** Called when the item is clicked or activated via keyboard Enter. */
38
+ onSelect?: () => void;
39
+ disabled?: boolean;
40
+ selected?: boolean;
41
+ /** Kept for API compatibility; not used internally. */
42
+ value?: string;
43
+ }
44
+ export declare const CommandItem: React.ForwardRefExoticComponent<CommandItemProps & React.RefAttributes<HTMLDivElement>>;
45
+ export interface PickerTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
46
+ isOpen?: boolean;
47
+ hasValue?: boolean;
48
+ placeholder?: string;
49
+ }
50
+ export declare const PickerTrigger: React.ForwardRefExoticComponent<PickerTriggerProps & React.RefAttributes<HTMLButtonElement>>;
51
+ export interface BasePickerProps {
52
+ label?: string;
53
+ trigger: React.ReactNode;
54
+ children: React.ReactNode;
55
+ open: boolean;
56
+ onOpenChange: (open: boolean) => void;
57
+ className?: string;
58
+ }
59
+ export declare const BasePicker: React.ForwardRefExoticComponent<BasePickerProps & React.RefAttributes<HTMLDivElement>>;
60
+ export interface MultiSelectTriggerProps<T> extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'value'> {
61
+ value: T[];
62
+ onRemove: (item: T, e: React.MouseEvent) => void;
63
+ onClear: (e: React.MouseEvent) => void;
64
+ isOpen: boolean;
65
+ placeholder?: string;
66
+ renderChip: (item: T) => React.ReactNode;
67
+ maxVisible?: number;
68
+ }
69
+ export declare const MultiSelectTrigger: (<T>(props: MultiSelectTriggerProps<T> & {
70
+ ref?: React.Ref<HTMLButtonElement>;
71
+ }) => React.ReactElement) & {
72
+ displayName?: string;
73
+ };
@@ -0,0 +1,38 @@
1
+ /**
2
+ * react-country-kit/ui
3
+ *
4
+ * shadcn/Tailwind CSS variants of all pickers.
5
+ * Built on @radix-ui/react-popover with native search/list primitives (no cmdk).
6
+ *
7
+ * Requirements:
8
+ * - Tailwind CSS configured in your project
9
+ * - CSS variables from shadcn/ui (or compatible theme):
10
+ * --background, --foreground, --primary, --border, --input,
11
+ * --accent, --accent-foreground, --muted, --muted-foreground,
12
+ * --popover, --popover-foreground, --ring, --radius
13
+ *
14
+ * Peer dependencies:
15
+ * @radix-ui/react-popover, tailwind-merge, clsx, class-variance-authority
16
+ */
17
+ export { CountryPicker } from './components/CountryPicker';
18
+ export { CurrencyPicker } from './components/CurrencyPicker';
19
+ export { TimezonePicker } from './components/TimezonePicker';
20
+ export { LanguagePicker } from './components/LanguagePicker';
21
+ export { DivisionPicker } from './components/DivisionPicker';
22
+ export { PhoneInput } from './components/PhoneInput';
23
+ export { CountryMultiSelect } from './components/CountryMultiSelect';
24
+ export { CurrencyMultiSelect } from './components/CurrencyMultiSelect';
25
+ export { Popover, PopoverTrigger, PopoverContent, CommandRoot, CommandInput, CommandList, CommandEmpty, CommandItem, PickerTrigger, CheckIcon, Badge, } from './components/primitives';
26
+ export { cn } from './lib/utils';
27
+ export { useCountryPicker } from '../hooks/useCountryPicker';
28
+ export { useCurrencyPicker } from '../hooks/useCurrencyPicker';
29
+ export { useTimezonePicker } from '../hooks/useTimezonePicker';
30
+ export { useLanguagePicker } from '../hooks/useLanguagePicker';
31
+ export { useDivisionPicker } from '../hooks/useDivisionPicker';
32
+ export { usePhoneInput } from '../hooks/usePhoneInput';
33
+ export { useMultiSelect } from '../hooks/useMultiSelect';
34
+ export { getAllCountries, getCountryByIso2, getCountryByIso3, getCountryByName, searchCountries, getDivisionsByCountry, getTimezonesByCountry, getCurrencyByCountry, iso2ToFlag, } from '../utils/countries';
35
+ export { getAllCurrencies, getCurrencyByCode, searchCurrencies, } from '../utils/currencies';
36
+ export { getAllTimezones, getTimezoneByName, searchTimezones, } from '../utils/timezones';
37
+ export { getAllLanguages, getLanguageByCode, searchLanguages, } from '../utils/languages';
38
+ export type { Country, Currency, Timezone, Division, Language, PhoneFormat, PhoneValue, PhoneInputProps, CountryPickerProps, CurrencyPickerProps, TimezonePickerProps, LanguagePickerProps, DivisionPickerProps, CountryMultiSelectProps, CurrencyMultiSelectProps, UsePickerReturn, UseMultiSelectReturn, } from '../types';
@@ -0,0 +1,6 @@
1
+ import { type ClassValue } from 'clsx';
2
+ /**
3
+ * Merges Tailwind CSS classes safely, resolving conflicts.
4
+ * Re-exported from react-country-kit/ui for consumer convenience.
5
+ */
6
+ export declare function cn(...inputs: ClassValue[]): string;
package/dist/ui.cjs.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),b=require("react"),W=require("@radix-ui/react-popover"),F=require("clsx"),$=require("tailwind-merge"),o=require("./useTimezonePicker-zHCM2pUC.js");function X(s){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(s){for(const c in s)if(c!=="default"){const a=Object.getOwnPropertyDescriptor(s,c);Object.defineProperty(t,c,a.get?a:{enumerable:!0,get:()=>s[c]})}}return t.default=s,Object.freeze(t)}const _=X(W);function N(...s){return $.twMerge(F.clsx(s))}const q=_.Root,M=_.Trigger,O=({className:s})=>e.jsx("svg",{className:N("h-4 w-4 text-primary",s),viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:e.jsx("polyline",{points:"4 10 8 14 16 6"})});O.displayName="CheckIcon";const D=({children:s,className:t})=>e.jsx("label",{className:N("text-[0.65rem] font-bold uppercase tracking-[0.12em] text-muted-foreground/80 ml-1 mb-1.5 block",t),children:s});D.displayName="FieldLabel";const w=({children:s,className:t})=>e.jsx("span",{className:N("inline-flex items-center rounded-full bg-primary/20 px-2.5 py-0.5 text-[0.7rem] font-bold text-primary tracking-tight",t),children:s});w.displayName="Badge";const A=b.forwardRef(({className:s,align:t="start",sideOffset:c=6,onCloseAutoFocus:a,...l},x)=>e.jsx(_.Portal,{children:e.jsx(_.Content,{ref:x,align:t,sideOffset:c,onCloseAutoFocus:f=>{f.preventDefault(),a==null||a(f)},className:N("z-50 w-[var(--radix-popover-trigger-width)] rounded-xl border border-border bg-popover p-0 shadow-lg","data-[state=open]:animate-in data-[state=closed]:animate-out","data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0","data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95","data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2",s),...l})}));A.displayName="PopoverContent";const P=b.forwardRef(({className:s,...t},c)=>e.jsx("div",{ref:c,className:N("flex h-full w-full flex-col overflow-hidden rounded-xl bg-popover text-popover-foreground",s),...t}));P.displayName="CommandRoot";const S=b.forwardRef(({className:s,onValueChange:t,...c},a)=>e.jsx("div",{className:"px-3 pt-3 pb-2 border-b border-border",children:e.jsxs("div",{className:N("flex items-center gap-2 px-3 py-1.5 rounded-lg border border-border bg-muted/40 transition-colors","focus-within:border-primary/50 focus-within:ring-2 focus-within:ring-primary/10"),children:[e.jsxs("svg",{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground",viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("circle",{cx:"8.5",cy:"8.5",r:"5.5"}),e.jsx("path",{d:"M17 17l-4-4",strokeLinecap:"round"})]}),e.jsx("input",{ref:a,type:"text",autoComplete:"off",autoCorrect:"off",spellCheck:!1,className:N("flex h-8 w-full bg-transparent text-sm outline-none","placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",s),onChange:l=>t==null?void 0:t(l.target.value),...c})]})}));S.displayName="CommandInput";const v=b.forwardRef(({className:s,...t},c)=>e.jsx("div",{ref:c,role:"listbox",className:N("max-h-72 overflow-y-auto overflow-x-hidden p-1",s),...t}));v.displayName="CommandList";const L=b.forwardRef((s,t)=>e.jsx("div",{ref:t,className:"flex flex-col items-center justify-center gap-1 py-8 text-sm text-muted-foreground",...s}));L.displayName="CommandEmpty";const B=b.forwardRef(({className:s,onSelect:t,onMouseDown:c,onKeyDown:a,disabled:l,selected:x,value:f,...k},g)=>e.jsx("div",{ref:g,role:"option","aria-disabled":l||void 0,"aria-selected":x,"data-disabled":l||void 0,"data-selected":x||void 0,tabIndex:l?void 0:0,className:N("relative flex cursor-pointer select-none items-center gap-2 rounded-lg px-2 py-2 text-sm outline-none","focus:bg-accent focus:text-accent-foreground","data-[disabled]:pointer-events-none data-[disabled]:opacity-50","hover:bg-accent/50 transition-colors",x&&"bg-accent text-accent-foreground font-semibold",s),onMouseDown:r=>{r.preventDefault(),c==null||c(r)},onClick:l?void 0:()=>t==null?void 0:t(),onKeyDown:r=>{!l&&r.key==="Enter"&&(r.preventDefault(),t==null||t()),a==null||a(r)},...k}));B.displayName="CommandItem";const z=b.forwardRef(({className:s,isOpen:t,children:c,placeholder:a,hasValue:l,...x},f)=>e.jsxs("button",{ref:f,type:"button",role:"combobox","aria-expanded":t,"aria-haspopup":"listbox",className:N("flex h-12 w-full items-center justify-between gap-3 rounded-xl border border-input bg-background px-4 py-2 text-sm ring-offset-background","placeholder:text-muted-foreground","focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2","disabled:cursor-not-allowed disabled:opacity-50","hover:bg-accent/10 transition-all",!l&&"text-muted-foreground",s),...x,children:[e.jsx("span",{className:"flex min-w-0 flex-1 items-center gap-2 truncate",children:c||e.jsx("span",{children:a})}),e.jsx("svg",{className:N("h-4 w-4 shrink-0 text-muted-foreground/60 transition-transform duration-200",t&&"rotate-180"),viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:e.jsx("polyline",{points:"6 8 10 12 14 8"})})]}));z.displayName="PickerTrigger";const T=b.forwardRef(({label:s,trigger:t,children:c,open:a,onOpenChange:l,className:x},f)=>e.jsxs("div",{ref:f,className:N("flex flex-col gap-0",x),children:[s&&e.jsx(D,{children:s}),e.jsxs(q,{open:a,onOpenChange:l,children:[e.jsx(M,{asChild:!0,children:t}),e.jsx(A,{className:"p-0",children:c})]})]}));T.displayName="BasePicker";const E=b.forwardRef(({value:s,onRemove:t,onClear:c,isOpen:a,placeholder:l,renderChip:x,maxVisible:f=3,className:k,disabled:g,...r},d)=>{const h=s.slice(0,f),j=s.length-f;return e.jsxs("button",{ref:d,type:"button","aria-haspopup":"listbox","aria-expanded":a,disabled:g,className:N("flex min-h-[3rem] w-full items-center gap-3 rounded-xl border border-input bg-background px-4 py-2","text-sm ring-offset-background focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2","disabled:cursor-not-allowed disabled:opacity-50 hover:bg-accent/10 transition-all text-start",a&&"ring-2 ring-ring ring-offset-2",k),...r,children:[e.jsx("div",{className:"flex flex-1 flex-wrap gap-1.5 min-w-0 items-center",children:s.length===0?e.jsx("span",{className:"text-muted-foreground",children:l}):e.jsxs(e.Fragment,{children:[h.map((u,y)=>e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-primary/10 px-2 py-0.5 text-[0.75rem] font-semibold text-primary",children:[x(u),e.jsx("span",{role:"button",tabIndex:g?-1:0,onClick:m=>{m.stopPropagation(),g||t(u,m)},onKeyDown:m=>{(m.key==="Enter"||m.key===" ")&&(m.preventDefault(),m.stopPropagation(),g||t(u,m))},className:"ml-0.5 rounded-full text-primary/60 hover:text-primary transition-colors cursor-pointer","aria-label":"Remove",children:e.jsxs("svg",{width:"9",height:"9",viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",children:[e.jsx("line",{x1:"5",y1:"5",x2:"15",y2:"15"}),e.jsx("line",{x1:"15",y1:"5",x2:"5",y2:"15"})]})})]},y)),j>0&&e.jsxs(w,{className:"bg-muted text-muted-foreground/80 px-2",children:["+",j]})]})}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1 ml-auto",children:[s.length>0&&e.jsx("span",{role:"button",tabIndex:g?-1:0,onClick:u=>{u.stopPropagation(),g||c(u)},onKeyDown:u=>{(u.key==="Enter"||u.key===" ")&&(u.preventDefault(),u.stopPropagation(),g||c(u))},className:"rounded p-0.5 text-muted-foreground hover:text-foreground hover:bg-accent/30 transition-colors cursor-pointer","aria-label":"Clear all",children:e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[e.jsx("line",{x1:"5",y1:"5",x2:"15",y2:"15"}),e.jsx("line",{x1:"15",y1:"5",x2:"5",y2:"15"})]})}),e.jsx("svg",{className:N("h-4 w-4 text-muted-foreground/60 transition-transform duration-200",a&&"rotate-180"),viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:e.jsx("polyline",{points:"6 8 10 12 14 8"})})]})]})});E.displayName="MultiSelectTrigger";function U({value:s,onChange:t,placeholder:c="Select a country...",searchable:a=!0,showFlag:l=!0,showPhoneCode:x=!1,disabled:f=!1,className:k,label:g}){const[r,d]=b.useState(!1),[h,j]=b.useState(""),u=h?o.searchCountries(h):o.getAllCountries(),y=m=>{const i=o.getAllCountries().find(p=>p.iso2.toLowerCase()===m.toLowerCase());i&&(t(i),d(!1),j(""))};return e.jsx(T,{label:g,className:k,open:r,onOpenChange:d,trigger:e.jsx(z,{isOpen:r,hasValue:!!s,placeholder:c,disabled:f,children:s&&e.jsxs(e.Fragment,{children:[l&&e.jsx("span",{className:"text-lg leading-none",children:s.flag}),e.jsx("span",{className:"flex-1 text-start truncate",children:s.name}),x&&e.jsxs(w,{children:["+",s.phone_code]})]})}),children:e.jsxs(P,{children:[a&&e.jsx(S,{placeholder:"Search country...",value:h,onValueChange:j}),e.jsxs(v,{children:[u.length===0&&e.jsxs(L,{children:[e.jsx("span",{className:"text-2xl opacity-40",children:"🌍"}),e.jsx("span",{children:"No countries found"})]}),u.map(m=>{const i=(s==null?void 0:s.iso2)===m.iso2;return e.jsxs(B,{onSelect:()=>y(m.iso2),selected:i,children:[l&&e.jsx("span",{className:"text-lg leading-none",children:m.flag}),e.jsxs("div",{className:"flex flex-1 flex-col gap-0 min-w-0",children:[e.jsx("span",{className:"truncate font-medium",children:m.name}),e.jsxs("span",{className:"text-[0.7rem] text-muted-foreground",children:[m.iso3," Β· ",m.division_type]})]}),e.jsxs("div",{className:"flex items-center gap-1.5 ml-auto shrink-0",children:[x&&e.jsxs("span",{className:"text-[0.7rem] text-muted-foreground tabular-nums bg-muted px-1.5 py-0.5 rounded",children:["+",m.phone_code]}),i&&e.jsx(O,{})]})]},m.iso2)})]})]})})}function G({value:s,onChange:t,placeholder:c="Select a currency...",searchable:a=!0,showSymbol:l=!0,countryIso2:x,autoSelect:f=!0,disabled:k=!1,className:g,label:r}){const[d,h]=b.useState(!1),[j,u]=b.useState("");b.useEffect(()=>{if(x&&f&&!s){const p=o.getCurrencyByCountry(x);p&&t(p)}},[x,f,s,t]);const m=j?o.searchCurrencies(j,x):(()=>{if(x){const p=o.getCurrencyByCountry(x);return p?[p]:[]}return o.getAllCurrencies()})(),i=p=>{const n=o.getAllCurrencies().find(C=>C.code.toLowerCase()===p.toLowerCase());n&&(t(n),h(!1),u(""))};return e.jsx(T,{label:r,className:g,open:d,onOpenChange:h,trigger:e.jsx(z,{isOpen:d,hasValue:!!s,placeholder:c,disabled:k,children:s&&e.jsxs(e.Fragment,{children:[l&&e.jsx("span",{className:"min-w-[1.5rem] text-center font-bold text-primary text-base",children:s.symbol}),e.jsxs("span",{className:"flex-1 text-start truncate",children:[s.code," β€” ",s.name]})]})}),children:e.jsxs(P,{children:[a&&e.jsx(S,{placeholder:"Search currency...",value:j,onValueChange:u}),e.jsxs(v,{children:[m.length===0&&e.jsxs(L,{children:[e.jsx("span",{className:"text-2xl opacity-40",children:"πŸ’°"}),e.jsx("span",{children:"No currencies found"})]}),m.map(p=>{const n=(s==null?void 0:s.code)===p.code;return e.jsxs(B,{onSelect:()=>i(p.code),selected:n,children:[l&&e.jsx("span",{className:"min-w-[1.5rem] text-center font-bold text-primary",children:p.symbol}),e.jsxs("div",{className:"flex flex-1 flex-col gap-0 min-w-0",children:[e.jsx("span",{className:"truncate font-medium",children:p.name}),e.jsx("span",{className:"text-[0.7rem] text-muted-foreground",children:p.code})]}),n&&e.jsx(O,{className:"ml-auto shrink-0"})]},p.code)})]})]})})}function H({value:s,onChange:t,placeholder:c="Select a timezone...",searchable:a=!0,countryIso2:l,autoSelect:x=!0,disabled:f=!1,className:k,label:g}){const[r,d]=b.useState(!1),[h,j]=b.useState("");b.useEffect(()=>{if(l&&x&&!s){const i=o.getTimezonesByCountry(l);i&&i.length>0&&t(i[0])}},[l,x,s,t]);const u=l?o.getTimezonesByCountry(l):o.getAllTimezones(),y=h?o.searchTimezones(h,l):u,m=i=>{const p=u.find(n=>n.name===i);p&&(t(p),d(!1),j(""))};return e.jsx(T,{label:g,className:k,open:r,onOpenChange:d,trigger:e.jsx(z,{isOpen:r,hasValue:!!s,placeholder:c,disabled:f,children:s&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"flex-1 text-start truncate",children:s.name}),e.jsx(w,{children:s.offset_name})]})}),children:e.jsxs(P,{children:[a&&e.jsx(S,{placeholder:"Search timezone...",value:h,onValueChange:j}),e.jsxs(v,{children:[y.length===0&&e.jsxs(L,{children:[e.jsx("span",{className:"text-2xl opacity-40",children:"πŸ•"}),e.jsx("span",{children:"No timezones found"})]}),y.map(i=>{const p=(s==null?void 0:s.name)===i.name;return e.jsxs(B,{onSelect:()=>m(i.name),selected:p,children:[e.jsxs("div",{className:"flex flex-1 flex-col gap-0 min-w-0",children:[e.jsx("span",{className:"truncate font-medium",children:i.name}),e.jsxs("span",{className:"text-[0.7rem] text-muted-foreground",children:[i.tzName," Β· ",i.abbreviation]})]}),e.jsxs("div",{className:"flex items-center gap-1.5 ml-auto shrink-0",children:[e.jsx(w,{className:"tabular-nums text-[0.65rem]",children:i.offset_name}),p&&e.jsx(O,{})]})]},i.name)})]})]})})}function J({value:s,onChange:t,placeholder:c="Select a language...",searchable:a=!0,showNativeName:l=!0,disabled:x=!1,className:f,label:k}){const[g,r]=b.useState(!1),[d,h]=b.useState(""),j=d?o.searchLanguages(d):o.getAllLanguages(),u=y=>{const m=o.getAllLanguages().find(i=>i.code.toLowerCase()===y.toLowerCase());m&&(t(m),r(!1),h(""))};return e.jsx(T,{label:k,className:f,open:g,onOpenChange:r,trigger:e.jsx(z,{isOpen:g,hasValue:!!s,placeholder:c,disabled:x,children:s&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"flex-1 text-start truncate",children:s.english_name}),l&&s.native_name!==s.english_name&&e.jsx("span",{className:"text-xs italic text-muted-foreground shrink-0",children:s.native_name})]})}),children:e.jsxs(P,{children:[a&&e.jsx(S,{placeholder:"Search language...",value:d,onValueChange:h}),e.jsxs(v,{children:[j.length===0&&e.jsxs(L,{children:[e.jsx("span",{className:"text-2xl opacity-40",children:"🌐"}),e.jsx("span",{children:"No languages found"})]}),j.map(y=>{const m=(s==null?void 0:s.code)===y.code;return e.jsxs(B,{onSelect:()=>u(y.code),selected:m,children:[e.jsxs("div",{className:"flex flex-1 flex-col gap-0 min-w-0",children:[e.jsx("span",{className:"truncate font-medium",children:y.english_name}),l&&y.native_name!==y.english_name&&e.jsx("span",{className:"text-[0.7rem] text-muted-foreground italic",children:y.native_name})]}),e.jsxs("div",{className:"flex items-center gap-1.5 ml-auto shrink-0",children:[e.jsx(w,{className:"text-[0.6rem]",children:y.code}),m&&e.jsx(O,{})]})]},y.code)})]})]})})}function Y({countryIso2:s,value:t,onChange:c,placeholder:a="Select a division...",searchable:l=!0,disabled:x=!1,className:f,label:k}){const[g,r]=b.useState(!1),[d,h]=b.useState(""),j=o.getDivisionsByCountry(s),u=d?j.filter(i=>i.name.toLowerCase().includes(d.toLowerCase())||i.iso2.toLowerCase().includes(d.toLowerCase())||i.timezone.toLowerCase().includes(d.toLowerCase())):j,y=x||!s||j.length===0,m=i=>{const p=j.find(n=>n.name===i);p&&(c(p),r(!1),h(""))};return e.jsx(T,{label:k,className:f,open:g,onOpenChange:i=>!y&&r(i),trigger:e.jsx(z,{isOpen:g,hasValue:!!t,placeholder:s?a:"Select a country first",disabled:y,children:t&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"flex-1 text-start truncate",children:t.name}),e.jsx(w,{children:t.iso2})]})}),children:e.jsxs(P,{children:[l&&e.jsx(S,{placeholder:"Search division...",value:d,onValueChange:h}),e.jsxs(v,{children:[u.length===0&&e.jsxs(L,{children:[e.jsx("span",{className:"text-2xl opacity-40",children:"πŸ—ΊοΈ"}),e.jsx("span",{children:"No divisions found"})]}),u.map(i=>{const p=(t==null?void 0:t.iso2)===i.iso2&&(t==null?void 0:t.name)===i.name;return e.jsxs(B,{onSelect:()=>m(i.name),selected:p,children:[e.jsxs("div",{className:"flex flex-1 flex-col gap-0 min-w-0",children:[e.jsx("span",{className:"truncate font-medium",children:i.name}),e.jsx("span",{className:"text-[0.7rem] text-muted-foreground truncate",children:i.timezone})]}),e.jsxs("div",{className:"flex items-center gap-1.5 ml-auto shrink-0",children:[e.jsx(w,{children:i.iso2}),p&&e.jsx(O,{})]})]},`${i.iso2}-${i.name}`)})]})]})})}const Q=b.forwardRef(({value:s,onChange:t,defaultCountryIso2:c="US",placeholder:a="Phone number",showFlag:l=!0,disabled:x=!1,className:f,label:k},g)=>{const r=o.usePhoneInput(s,t,c);return e.jsxs("div",{ref:g,className:N("flex flex-col gap-0",f),children:[k&&e.jsx(D,{children:k}),e.jsxs("div",{className:N("flex h-12 items-stretch overflow-hidden rounded-xl border border-input bg-background ring-offset-background","focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2","transition-shadow",x&&"opacity-50 pointer-events-none"),children:[e.jsxs(q,{open:r.isOpen,onOpenChange:d=>d?r.toggle():r.close(),children:[e.jsx(M,{asChild:!0,children:e.jsxs("button",{type:"button",disabled:x,className:N("flex h-full shrink-0 items-center gap-1.5 border-r border-input bg-muted px-3","text-sm font-semibold text-foreground transition-colors outline-none","hover:bg-accent/30 focus-visible:bg-accent/30"),children:[l&&r.country&&e.jsx("span",{className:"text-lg leading-none",children:r.country.flag}),e.jsx("span",{className:"tabular-nums text-primary",children:r.country?`+${r.country.phone_code}`:"+?"}),e.jsx("svg",{className:N("h-3.5 w-3.5 shrink-0 text-muted-foreground transition-transform duration-200",r.isOpen&&"rotate-180"),viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:e.jsx("polyline",{points:"5 8 10 13 15 8"})})]})}),e.jsx(A,{align:"start",side:"bottom",sideOffset:4,className:"w-72",children:e.jsxs(P,{children:[e.jsx(S,{placeholder:"Search country or code...",value:r.searchQuery,onValueChange:r.setSearchQuery}),e.jsxs(v,{children:[r.filteredCountries.length===0&&e.jsxs(L,{children:[e.jsx("span",{className:"text-2xl opacity-40",children:"🌍"}),e.jsx("span",{children:"No countries found"})]}),r.filteredCountries.map(d=>{var j;const h=((j=r.country)==null?void 0:j.iso2)===d.iso2;return e.jsxs(B,{onSelect:()=>r.selectCountry(d),selected:h,children:[e.jsx("span",{className:"text-lg leading-none",children:d.flag}),e.jsx("div",{className:"flex flex-1 flex-col min-w-0",children:e.jsx("span",{className:"truncate font-medium text-sm",children:d.name})}),e.jsxs(w,{className:"ml-auto tabular-nums text-[0.7rem]",children:["+",d.phone_code]})]},d.iso2)})]})]})})]}),e.jsx("input",{type:"tel",value:r.number,onChange:d=>r.setNumber(d.target.value),placeholder:a,disabled:x,minLength:r.minLength,maxLength:r.maxLength,inputMode:"numeric",autoComplete:"tel-national",className:N("flex-1 min-w-0 bg-transparent px-3 text-sm text-foreground","placeholder:text-muted-foreground","focus:outline-none")})]}),r.value&&e.jsxs("p",{className:"text-[0.7rem] text-muted-foreground tabular-nums pl-0.5",children:["Full:"," ",e.jsx("span",{className:"font-mono text-primary",children:r.value.full})]})]})});Q.displayName="PhoneInput";const I=3;function Z({value:s,onChange:t,placeholder:c="Select countries...",maxItems:a,showFlags:l=!0,searchable:x=!0,disabled:f=!1,className:k,label:g}){const[r,d]=b.useState(!1),[h,j]=b.useState(""),u=h?o.searchCountries(h):o.getAllCountries(),y=n=>s.some(C=>C.iso2===n.iso2),m=n=>{if(y(n))t(s.filter(C=>C.iso2!==n.iso2));else{if(a!==void 0&&s.length>=a)return;t([...s,n])}},i=(n,C)=>{C.stopPropagation(),t(s.filter(R=>R.iso2!==n.iso2))},p=n=>{n.stopPropagation(),t([])};return s.slice(0,I),s.length-I,e.jsxs(T,{label:g,className:k,open:r,onOpenChange:d,trigger:e.jsx(E,{value:s,onRemove:i,onClear:p,isOpen:r,placeholder:c,disabled:f,renderChip:n=>e.jsxs(e.Fragment,{children:[l&&e.jsx("span",{children:n.flag}),e.jsx("span",{className:"max-w-[80px] truncate",children:n.name})]})}),children:[e.jsxs(P,{children:[x&&e.jsx(S,{placeholder:"Search countries...",value:h,onValueChange:j}),e.jsxs(v,{children:[u.length===0&&e.jsxs(L,{children:[e.jsx("span",{className:"text-2xl opacity-40",children:"🌍"}),e.jsx("span",{children:"No countries found"})]}),u.map(n=>{const C=y(n);return e.jsxs(B,{onSelect:()=>m(n),selected:C,children:[e.jsx("div",{className:N("h-4 w-4 shrink-0 rounded-full border border-border flex items-center justify-center",C&&"bg-primary border-primary"),children:C&&e.jsx("svg",{className:"h-2.5 w-2.5 stroke-white",viewBox:"0 0 20 20",fill:"none",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",children:e.jsx("polyline",{points:"4 10 8 14 16 6"})})}),l&&e.jsx("span",{className:"text-lg leading-none",children:n.flag}),e.jsxs("div",{className:"flex flex-1 flex-col min-w-0",children:[e.jsx("span",{className:"truncate font-medium",children:n.name}),e.jsxs("span",{className:"text-[0.7rem] text-muted-foreground",children:[n.iso3," Β· +",n.phone_code]})]})]},n.iso2)})]})]}),s.length>0&&e.jsxs("div",{className:"flex items-center justify-between border-t border-border px-3 py-2 text-xs text-muted-foreground",children:[e.jsxs("span",{children:[s.length," selected",a?` / ${a}`:""]}),e.jsx("button",{type:"button",onClick:()=>{t([]),d(!1)},className:"text-destructive hover:underline font-medium",children:"Clear all"})]})]})}const V=3;function K({value:s,onChange:t,placeholder:c="Select currencies...",maxItems:a,showSymbol:l=!0,searchable:x=!0,disabled:f=!1,className:k,label:g}){const[r,d]=b.useState(!1),[h,j]=b.useState(""),u=h?o.searchCurrencies(h):o.getAllCurrencies(),y=n=>s.some(C=>C.code===n.code),m=n=>{if(y(n))t(s.filter(C=>C.code!==n.code));else{if(a!==void 0&&s.length>=a)return;t([...s,n])}},i=(n,C)=>{C.stopPropagation(),t(s.filter(R=>R.code!==n.code))},p=n=>{n.stopPropagation(),t([])};return s.slice(0,V),s.length-V,e.jsxs(T,{label:g,className:k,open:r,onOpenChange:d,trigger:e.jsx(E,{value:s,onRemove:i,onClear:p,isOpen:r,placeholder:c,disabled:f,renderChip:n=>e.jsxs(e.Fragment,{children:[l&&e.jsx("span",{className:"font-bold",children:n.symbol}),e.jsx("span",{children:n.code})]})}),children:[e.jsxs(P,{children:[x&&e.jsx(S,{placeholder:"Search currencies...",value:h,onValueChange:j}),e.jsxs(v,{children:[u.length===0&&e.jsxs(L,{children:[e.jsx("span",{className:"text-2xl opacity-40",children:"πŸ’°"}),e.jsx("span",{children:"No currencies found"})]}),u.map(n=>{const C=y(n);return e.jsxs(B,{onSelect:()=>m(n),selected:C,children:[e.jsx("div",{className:N("h-4 w-4 shrink-0 rounded-full border border-border flex items-center justify-center",C&&"bg-primary border-primary"),children:C&&e.jsx("svg",{className:"h-2.5 w-2.5 stroke-white",viewBox:"0 0 20 20",fill:"none",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round",children:e.jsx("polyline",{points:"4 10 8 14 16 6"})})}),l&&e.jsx("span",{className:"min-w-[1.5rem] text-center font-bold text-primary",children:n.symbol}),e.jsxs("div",{className:"flex flex-1 flex-col min-w-0",children:[e.jsx("span",{className:"truncate font-medium",children:n.name}),e.jsx("span",{className:"text-[0.7rem] text-muted-foreground",children:n.code})]})]},n.code)})]})]}),s.length>0&&e.jsxs("div",{className:"flex items-center justify-between border-t border-border px-3 py-2 text-xs text-muted-foreground",children:[e.jsxs("span",{children:[s.length," selected",a?` / ${a}`:""]}),e.jsx("button",{type:"button",onClick:()=>{t([]),d(!1)},className:"text-destructive hover:underline font-medium",children:"Clear all"})]})]})}exports.getAllCountries=o.getAllCountries;exports.getAllCurrencies=o.getAllCurrencies;exports.getAllLanguages=o.getAllLanguages;exports.getAllTimezones=o.getAllTimezones;exports.getCountryByIso2=o.getCountryByIso2;exports.getCountryByIso3=o.getCountryByIso3;exports.getCountryByName=o.getCountryByName;exports.getCurrencyByCode=o.getCurrencyByCode;exports.getCurrencyByCountry=o.getCurrencyByCountry;exports.getDivisionsByCountry=o.getDivisionsByCountry;exports.getLanguageByCode=o.getLanguageByCode;exports.getTimezoneByName=o.getTimezoneByName;exports.getTimezonesByCountry=o.getTimezonesByCountry;exports.iso2ToFlag=o.iso2ToFlag;exports.searchCountries=o.searchCountries;exports.searchCurrencies=o.searchCurrencies;exports.searchLanguages=o.searchLanguages;exports.searchTimezones=o.searchTimezones;exports.useCountryPicker=o.useCountryPicker;exports.useCurrencyPicker=o.useCurrencyPicker;exports.useDivisionPicker=o.useDivisionPicker;exports.useLanguagePicker=o.useLanguagePicker;exports.useMultiSelect=o.useMultiSelect;exports.usePhoneInput=o.usePhoneInput;exports.useTimezonePicker=o.useTimezonePicker;exports.Badge=w;exports.CheckIcon=O;exports.CommandEmpty=L;exports.CommandInput=S;exports.CommandItem=B;exports.CommandList=v;exports.CommandRoot=P;exports.CountryMultiSelect=Z;exports.CountryPicker=U;exports.CurrencyMultiSelect=K;exports.CurrencyPicker=G;exports.DivisionPicker=Y;exports.LanguagePicker=J;exports.PhoneInput=Q;exports.PickerTrigger=z;exports.Popover=q;exports.PopoverContent=A;exports.PopoverTrigger=M;exports.TimezonePicker=H;exports.cn=N;
2
+ //# sourceMappingURL=ui.cjs.js.map