@proveanything/smartlinks-utils-ui 0.1.6 → 0.1.8

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ConditionsEditor/conditionMeta.ts","../src/components/ConditionsEditor/ConditionTypePicker.tsx","../src/components/ConditionsEditor/countries.ts","../src/components/ConditionsEditor/CountryPicker.tsx","../src/components/ConditionsEditor/ConditionConfig.tsx","../src/components/ConditionsEditor/ConditionCard.tsx","../src/components/ConditionsEditor/ConditionsEditor.tsx"],"names":["jsxs","jsx","useState","ChevronDown","ChevronRight","X","GitBranch"],"mappings":"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","file":"chunk-ILQNQN27.js","sourcesContent":["// =============================================================================\r\n// CONDITIONS EDITOR — Condition Type Metadata\r\n// =============================================================================\r\n\r\nimport type { ConditionTypeMeta, ConditionType, Condition, SelectOption } from './types';\r\nimport {\r\n Tags,\r\n Globe,\r\n Hash,\r\n User,\r\n Calendar,\r\n Monitor,\r\n Tag,\r\n MapPin,\r\n Package,\r\n ToggleLeft,\r\n GitBranch,\r\n} from 'lucide-react';\r\nimport React from 'react';\r\n\r\nexport const CONDITION_TYPES: ConditionTypeMeta[] = [\r\n { value: 'version', title: 'Version', description: 'Match specific versions', icon: 'tags', color: '#7c3aed', helpText: 'Limit by specific versions of your application or product.' },\r\n { value: 'country', title: 'Country', description: 'Filter by geographic location', icon: 'globe', color: '#2563eb', helpText: \"Limit by the user's country or region.\" },\r\n { value: 'value', title: 'Value', description: 'Match custom field values', icon: 'hash', color: '#ea580c', helpText: 'Compare text, numbers, or boolean values using various operators.' },\r\n { value: 'user', title: 'User', description: 'Filter by auth & permissions', icon: 'user', color: '#16a34a', helpText: 'Limit by authentication status, ownership, group membership, or admin privileges.' },\r\n { value: 'date', title: 'Date', description: 'Time-based conditions', icon: 'calendar', color: '#dc2626', helpText: 'Limit by specific dates or date ranges.' },\r\n { value: 'device', title: 'Device', description: 'Filter by device type', icon: 'monitor', color: '#0891b2', helpText: 'Limit by the type of device or operating system.' },\r\n { value: 'tag', title: 'Label', description: 'Match by tags or labels', icon: 'tag', color: '#db2777', helpText: 'Limit by assigned labels or tags.' },\r\n { value: 'geofence', title: 'Geofence', description: 'Geographic boundary', icon: 'map-pin', color: '#0d9488', helpText: 'Limit by geographic boundaries (rectangular area).' },\r\n { value: 'product', title: 'Product ID', description: 'Match specific items', icon: 'package', color: '#d97706', helpText: 'Limit by specific product IDs.' },\r\n { value: 'itemStatus', title: 'Item Status', description: 'Filter by item state', icon: 'toggle-left', color: '#ea580c', helpText: 'Limit by item status such as proof, claimable, owner, or virtual.' },\r\n { value: 'condition', title: 'Condition', description: 'Reference another condition', icon: 'git-branch', color: '#4f46e5', helpText: 'Reference another saved condition and check if it passes or fails.' },\r\n];\r\n\r\nconst iconMap: Record<string, React.FC<{ className?: string }>> = {\r\n tags: Tags,\r\n globe: Globe,\r\n hash: Hash,\r\n user: User,\r\n calendar: Calendar,\r\n monitor: Monitor,\r\n tag: Tag,\r\n 'map-pin': MapPin,\r\n package: Package,\r\n 'toggle-left': ToggleLeft,\r\n 'git-branch': GitBranch,\r\n};\r\n\r\nexport function getConditionMeta(type: ConditionType | null | undefined): ConditionTypeMeta | undefined {\r\n if (!type) return undefined;\r\n return CONDITION_TYPES.find(t => t.value === type);\r\n}\r\n\r\nexport function getConditionIcon(type: ConditionType | null | undefined): React.FC<{ className?: string }> {\r\n const meta = getConditionMeta(type);\r\n return (meta && iconMap[meta.icon]) || Hash;\r\n}\r\n\r\nexport function getConditionSummary(cond: Condition, options?: {\r\n savedConditions?: SelectOption[];\r\n regionOptions?: { title: string; value: string }[];\r\n}): string {\r\n if (!cond.type) return 'No condition type selected';\r\n const meta = getConditionMeta(cond.type);\r\n let summary = meta?.title || cond.type;\r\n\r\n switch (cond.type) {\r\n case 'version':\r\n if (cond.versions?.length) {\r\n const verb = cond.contains ? 'is' : 'is not';\r\n summary += ` ${verb} ${cond.versions.map(v => typeof v === 'string' ? v : (v.title || v.value || '')).join(', ')}`;\r\n }\r\n break;\r\n case 'country':\r\n if (cond.useRegions && cond.regions?.length) {\r\n const verb = cond.contains ? 'is in' : 'is not in';\r\n const names = cond.regions.map(r => {\r\n const reg = REGION_OPTIONS.find(o => o.value === r);\r\n return reg?.title || r;\r\n });\r\n summary += ` ${verb} ${names.join(', ')}`;\r\n } else if (cond.countries?.length) {\r\n const verb = cond.contains ? 'is' : 'is not';\r\n summary += ` ${verb} ${cond.countries.join(', ')}`;\r\n }\r\n break;\r\n case 'value':\r\n if (cond.field) {\r\n const ops: Record<string, string> = { equal: '=', not: '≠', greater: '>', less: '<' };\r\n summary += `: ${cond.field} ${ops[cond.validationType || ''] || ''} ${cond.value ?? '?'}`;\r\n }\r\n break;\r\n case 'tag':\r\n if (cond.tags?.length) {\r\n const verb = cond.contains ? 'has' : 'does not have';\r\n summary += ` ${verb} ${cond.tags.length} label(s)`;\r\n }\r\n break;\r\n case 'device':\r\n if (cond.displays?.length) {\r\n const verb = cond.contains ? 'is' : 'is not';\r\n summary += ` ${verb} ${cond.displays.join(', ')}`;\r\n }\r\n break;\r\n case 'user': {\r\n const userTypes: Record<string, string> = {\r\n valid: 'is logged in', invalid: 'is logged out', owner: 'is item owner',\r\n group: cond.groupIds?.length ? `in ${cond.groupIds.length} group(s)` : 'in groups',\r\n admin: 'is admin',\r\n };\r\n summary += ` ${userTypes[cond.userType || ''] || ''}`;\r\n break;\r\n }\r\n case 'product':\r\n if (cond.productIds?.length) {\r\n const verb = cond.contains ? 'is' : 'is not';\r\n summary += ` ${verb} ${cond.productIds.length} item(s)`;\r\n }\r\n break;\r\n case 'condition':\r\n if (cond.conditionId) {\r\n const condRef = options?.savedConditions?.find(c => c.value === cond.conditionId);\r\n summary += `: ${condRef?.title || cond.conditionId} ${cond.passes ? 'passes' : 'fails'}`;\r\n }\r\n break;\r\n case 'date': {\r\n const dateTests: Record<string, string> = { before: 'before', after: 'after', between: 'between' };\r\n summary += ` is ${dateTests[cond.dateTest || ''] || ''}`;\r\n if (cond.beforeDate) summary += ` ${cond.beforeDate}`;\r\n if (cond.afterDate) summary += ` ${cond.afterDate}`;\r\n if (cond.rangeDate) summary += ` ${cond.rangeDate}`;\r\n break;\r\n }\r\n case 'geofence': {\r\n const verb = cond.contains ? 'inside' : 'outside';\r\n summary += ` ${verb} bounds`;\r\n break;\r\n }\r\n case 'itemStatus': {\r\n const statusTypes: Record<string, string> = {\r\n hasProof: 'has proof', noProof: 'has no proof', isClaimable: 'is claimable',\r\n notClaimable: 'is not claimable', hasOwner: 'has owner', isVirtual: 'is virtual',\r\n };\r\n summary += ` ${statusTypes[cond.statusType || ''] || ''}`;\r\n break;\r\n }\r\n }\r\n\r\n return summary;\r\n}\r\n\r\nexport const DISPLAY_OPTIONS: SelectOption[] = [\r\n { title: 'Desktop', value: 'desktop' },\r\n { title: 'Mobile', value: 'mobile' },\r\n { title: 'Android', value: 'android' },\r\n { title: 'iOS', value: 'ios' },\r\n { title: 'Apple Mac', value: 'mac' },\r\n { title: 'Microsoft Windows', value: 'win' },\r\n];\r\n\r\nexport const REGION_OPTIONS: (SelectOption & { description?: string })[] = [\r\n { title: 'European Union (EU)', value: 'eu', description: 'All 27 EU member states' },\r\n { title: 'European Economic Area (EEA)', value: 'eea', description: 'EU + Iceland, Liechtenstein, Norway' },\r\n { title: 'United Kingdom', value: 'uk', description: 'England, Scotland, Wales, Northern Ireland' },\r\n { title: 'North America', value: 'northamerica', description: 'USA, Canada, Mexico' },\r\n { title: 'Asia Pacific', value: 'asiapacific', description: 'Major Asia-Pacific markets' },\r\n];\r\n\r\nexport const USER_TYPE_OPTIONS: SelectOption[] = [\r\n { title: 'Is Logged In', value: 'valid' },\r\n { title: 'Is Logged Out', value: 'invalid' },\r\n { title: 'Is Item Owner', value: 'owner' },\r\n { title: 'Is Group Member', value: 'group' },\r\n { title: 'Is Admin', value: 'admin' },\r\n];\r\n\r\nexport const ITEM_STATUS_OPTIONS: SelectOption[] = [\r\n { title: 'Is Product (Not Item)', value: 'hasProof' },\r\n { title: 'Is Single Item', value: 'noProof' },\r\n { title: 'Is Item & Claimable', value: 'isClaimable' },\r\n { title: 'Is Item & Claimed', value: 'notClaimable' },\r\n { title: 'Is Virtual Item', value: 'isVirtual' },\r\n { title: 'Is Not A Virtual Item', value: 'notVirtual' },\r\n];\r\n\r\nexport const VALUE_OPERATORS: SelectOption[] = [\r\n { title: 'Equal to', value: 'equal' },\r\n { title: 'Not Equal', value: 'not' },\r\n { title: 'Greater Than', value: 'greater' },\r\n { title: 'Less Than', value: 'less' },\r\n];\r\n\r\nexport const FIELD_TYPES: SelectOption[] = [\r\n { title: 'Boolean', value: 'boolean' },\r\n { title: 'Integer', value: 'integer' },\r\n { title: 'Text', value: 'text' },\r\n];\r\n","// =============================================================================\r\n// CONDITIONS EDITOR — Condition Type Picker Grid\r\n// =============================================================================\r\n\r\nimport React from 'react';\r\nimport { CONDITION_TYPES } from './conditionMeta';\r\nimport { getConditionIcon } from './conditionMeta';\r\nimport type { ConditionType } from './types';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface ConditionTypePickerProps {\r\n onSelect: (type: ConditionType) => void;\r\n}\r\n\r\nexport const ConditionTypePicker: React.FC<ConditionTypePickerProps> = ({ onSelect }) => {\r\n return (\r\n <div className=\"p-4\">\r\n <p className=\"text-xs font-medium text-gray-500 dark:text-gray-400 mb-3\">Choose a condition type:</p>\r\n <div className=\"grid grid-cols-3 sm:grid-cols-4 gap-2\">\r\n {CONDITION_TYPES.map(ct => {\r\n const Icon = getConditionIcon(ct.value);\r\n return (\r\n <button\r\n key={ct.value}\r\n onClick={() => onSelect(ct.value)}\r\n className={cn(\r\n 'flex flex-col items-center gap-1.5 p-3 rounded-lg border-2 border-gray-200 dark:border-gray-700',\r\n 'hover:border-blue-400 dark:hover:border-blue-500 hover:bg-blue-50/50 dark:hover:bg-blue-950/20',\r\n 'transition-all text-center cursor-pointer'\r\n )}\r\n >\r\n <div\r\n className=\"w-8 h-8 rounded-full flex items-center justify-center\"\r\n style={{ backgroundColor: `${ct.color}18`, color: ct.color }}\r\n >\r\n <Icon className=\"w-4 h-4\" />\r\n </div>\r\n <span className=\"text-[11px] font-medium text-gray-700 dark:text-gray-300\">{ct.title}</span>\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n};\r\n","// =============================================================================\r\n// ISO 3166-1 alpha-2 country list\r\n// =============================================================================\r\n\r\nexport interface CountryOption {\r\n code: string;\r\n name: string;\r\n}\r\n\r\nexport const COUNTRIES: CountryOption[] = [\r\n { code: 'AF', name: 'Afghanistan' },\r\n { code: 'AL', name: 'Albania' },\r\n { code: 'DZ', name: 'Algeria' },\r\n { code: 'AD', name: 'Andorra' },\r\n { code: 'AO', name: 'Angola' },\r\n { code: 'AG', name: 'Antigua and Barbuda' },\r\n { code: 'AR', name: 'Argentina' },\r\n { code: 'AM', name: 'Armenia' },\r\n { code: 'AU', name: 'Australia' },\r\n { code: 'AT', name: 'Austria' },\r\n { code: 'AZ', name: 'Azerbaijan' },\r\n { code: 'BS', name: 'Bahamas' },\r\n { code: 'BH', name: 'Bahrain' },\r\n { code: 'BD', name: 'Bangladesh' },\r\n { code: 'BB', name: 'Barbados' },\r\n { code: 'BY', name: 'Belarus' },\r\n { code: 'BE', name: 'Belgium' },\r\n { code: 'BZ', name: 'Belize' },\r\n { code: 'BJ', name: 'Benin' },\r\n { code: 'BT', name: 'Bhutan' },\r\n { code: 'BO', name: 'Bolivia' },\r\n { code: 'BA', name: 'Bosnia and Herzegovina' },\r\n { code: 'BW', name: 'Botswana' },\r\n { code: 'BR', name: 'Brazil' },\r\n { code: 'BN', name: 'Brunei' },\r\n { code: 'BG', name: 'Bulgaria' },\r\n { code: 'BF', name: 'Burkina Faso' },\r\n { code: 'BI', name: 'Burundi' },\r\n { code: 'CV', name: 'Cabo Verde' },\r\n { code: 'KH', name: 'Cambodia' },\r\n { code: 'CM', name: 'Cameroon' },\r\n { code: 'CA', name: 'Canada' },\r\n { code: 'CF', name: 'Central African Republic' },\r\n { code: 'TD', name: 'Chad' },\r\n { code: 'CL', name: 'Chile' },\r\n { code: 'CN', name: 'China' },\r\n { code: 'CO', name: 'Colombia' },\r\n { code: 'KM', name: 'Comoros' },\r\n { code: 'CG', name: 'Congo' },\r\n { code: 'CD', name: 'Congo (DRC)' },\r\n { code: 'CR', name: 'Costa Rica' },\r\n { code: 'CI', name: \"Côte d'Ivoire\" },\r\n { code: 'HR', name: 'Croatia' },\r\n { code: 'CU', name: 'Cuba' },\r\n { code: 'CY', name: 'Cyprus' },\r\n { code: 'CZ', name: 'Czechia' },\r\n { code: 'DK', name: 'Denmark' },\r\n { code: 'DJ', name: 'Djibouti' },\r\n { code: 'DM', name: 'Dominica' },\r\n { code: 'DO', name: 'Dominican Republic' },\r\n { code: 'EC', name: 'Ecuador' },\r\n { code: 'EG', name: 'Egypt' },\r\n { code: 'SV', name: 'El Salvador' },\r\n { code: 'GQ', name: 'Equatorial Guinea' },\r\n { code: 'ER', name: 'Eritrea' },\r\n { code: 'EE', name: 'Estonia' },\r\n { code: 'SZ', name: 'Eswatini' },\r\n { code: 'ET', name: 'Ethiopia' },\r\n { code: 'FJ', name: 'Fiji' },\r\n { code: 'FI', name: 'Finland' },\r\n { code: 'FR', name: 'France' },\r\n { code: 'GA', name: 'Gabon' },\r\n { code: 'GM', name: 'Gambia' },\r\n { code: 'GE', name: 'Georgia' },\r\n { code: 'DE', name: 'Germany' },\r\n { code: 'GH', name: 'Ghana' },\r\n { code: 'GR', name: 'Greece' },\r\n { code: 'GD', name: 'Grenada' },\r\n { code: 'GT', name: 'Guatemala' },\r\n { code: 'GN', name: 'Guinea' },\r\n { code: 'GW', name: 'Guinea-Bissau' },\r\n { code: 'GY', name: 'Guyana' },\r\n { code: 'HT', name: 'Haiti' },\r\n { code: 'HN', name: 'Honduras' },\r\n { code: 'HU', name: 'Hungary' },\r\n { code: 'IS', name: 'Iceland' },\r\n { code: 'IN', name: 'India' },\r\n { code: 'ID', name: 'Indonesia' },\r\n { code: 'IR', name: 'Iran' },\r\n { code: 'IQ', name: 'Iraq' },\r\n { code: 'IE', name: 'Ireland' },\r\n { code: 'IL', name: 'Israel' },\r\n { code: 'IT', name: 'Italy' },\r\n { code: 'JM', name: 'Jamaica' },\r\n { code: 'JP', name: 'Japan' },\r\n { code: 'JO', name: 'Jordan' },\r\n { code: 'KZ', name: 'Kazakhstan' },\r\n { code: 'KE', name: 'Kenya' },\r\n { code: 'KI', name: 'Kiribati' },\r\n { code: 'KP', name: 'North Korea' },\r\n { code: 'KR', name: 'South Korea' },\r\n { code: 'KW', name: 'Kuwait' },\r\n { code: 'KG', name: 'Kyrgyzstan' },\r\n { code: 'LA', name: 'Laos' },\r\n { code: 'LV', name: 'Latvia' },\r\n { code: 'LB', name: 'Lebanon' },\r\n { code: 'LS', name: 'Lesotho' },\r\n { code: 'LR', name: 'Liberia' },\r\n { code: 'LY', name: 'Libya' },\r\n { code: 'LI', name: 'Liechtenstein' },\r\n { code: 'LT', name: 'Lithuania' },\r\n { code: 'LU', name: 'Luxembourg' },\r\n { code: 'MG', name: 'Madagascar' },\r\n { code: 'MW', name: 'Malawi' },\r\n { code: 'MY', name: 'Malaysia' },\r\n { code: 'MV', name: 'Maldives' },\r\n { code: 'ML', name: 'Mali' },\r\n { code: 'MT', name: 'Malta' },\r\n { code: 'MH', name: 'Marshall Islands' },\r\n { code: 'MR', name: 'Mauritania' },\r\n { code: 'MU', name: 'Mauritius' },\r\n { code: 'MX', name: 'Mexico' },\r\n { code: 'FM', name: 'Micronesia' },\r\n { code: 'MD', name: 'Moldova' },\r\n { code: 'MC', name: 'Monaco' },\r\n { code: 'MN', name: 'Mongolia' },\r\n { code: 'ME', name: 'Montenegro' },\r\n { code: 'MA', name: 'Morocco' },\r\n { code: 'MZ', name: 'Mozambique' },\r\n { code: 'MM', name: 'Myanmar' },\r\n { code: 'NA', name: 'Namibia' },\r\n { code: 'NR', name: 'Nauru' },\r\n { code: 'NP', name: 'Nepal' },\r\n { code: 'NL', name: 'Netherlands' },\r\n { code: 'NZ', name: 'New Zealand' },\r\n { code: 'NI', name: 'Nicaragua' },\r\n { code: 'NE', name: 'Niger' },\r\n { code: 'NG', name: 'Nigeria' },\r\n { code: 'MK', name: 'North Macedonia' },\r\n { code: 'NO', name: 'Norway' },\r\n { code: 'OM', name: 'Oman' },\r\n { code: 'PK', name: 'Pakistan' },\r\n { code: 'PW', name: 'Palau' },\r\n { code: 'PS', name: 'Palestine' },\r\n { code: 'PA', name: 'Panama' },\r\n { code: 'PG', name: 'Papua New Guinea' },\r\n { code: 'PY', name: 'Paraguay' },\r\n { code: 'PE', name: 'Peru' },\r\n { code: 'PH', name: 'Philippines' },\r\n { code: 'PL', name: 'Poland' },\r\n { code: 'PT', name: 'Portugal' },\r\n { code: 'QA', name: 'Qatar' },\r\n { code: 'RO', name: 'Romania' },\r\n { code: 'RU', name: 'Russia' },\r\n { code: 'RW', name: 'Rwanda' },\r\n { code: 'KN', name: 'Saint Kitts and Nevis' },\r\n { code: 'LC', name: 'Saint Lucia' },\r\n { code: 'VC', name: 'Saint Vincent and the Grenadines' },\r\n { code: 'WS', name: 'Samoa' },\r\n { code: 'SM', name: 'San Marino' },\r\n { code: 'ST', name: 'São Tomé and Príncipe' },\r\n { code: 'SA', name: 'Saudi Arabia' },\r\n { code: 'SN', name: 'Senegal' },\r\n { code: 'RS', name: 'Serbia' },\r\n { code: 'SC', name: 'Seychelles' },\r\n { code: 'SL', name: 'Sierra Leone' },\r\n { code: 'SG', name: 'Singapore' },\r\n { code: 'SK', name: 'Slovakia' },\r\n { code: 'SI', name: 'Slovenia' },\r\n { code: 'SB', name: 'Solomon Islands' },\r\n { code: 'SO', name: 'Somalia' },\r\n { code: 'ZA', name: 'South Africa' },\r\n { code: 'SS', name: 'South Sudan' },\r\n { code: 'ES', name: 'Spain' },\r\n { code: 'LK', name: 'Sri Lanka' },\r\n { code: 'SD', name: 'Sudan' },\r\n { code: 'SR', name: 'Suriname' },\r\n { code: 'SE', name: 'Sweden' },\r\n { code: 'CH', name: 'Switzerland' },\r\n { code: 'SY', name: 'Syria' },\r\n { code: 'TW', name: 'Taiwan' },\r\n { code: 'TJ', name: 'Tajikistan' },\r\n { code: 'TZ', name: 'Tanzania' },\r\n { code: 'TH', name: 'Thailand' },\r\n { code: 'TL', name: 'Timor-Leste' },\r\n { code: 'TG', name: 'Togo' },\r\n { code: 'TO', name: 'Tonga' },\r\n { code: 'TT', name: 'Trinidad and Tobago' },\r\n { code: 'TN', name: 'Tunisia' },\r\n { code: 'TR', name: 'Turkey' },\r\n { code: 'TM', name: 'Turkmenistan' },\r\n { code: 'TV', name: 'Tuvalu' },\r\n { code: 'UG', name: 'Uganda' },\r\n { code: 'UA', name: 'Ukraine' },\r\n { code: 'AE', name: 'United Arab Emirates' },\r\n { code: 'GB', name: 'United Kingdom' },\r\n { code: 'US', name: 'United States' },\r\n { code: 'UY', name: 'Uruguay' },\r\n { code: 'UZ', name: 'Uzbekistan' },\r\n { code: 'VU', name: 'Vanuatu' },\r\n { code: 'VA', name: 'Vatican City' },\r\n { code: 'VE', name: 'Venezuela' },\r\n { code: 'VN', name: 'Vietnam' },\r\n { code: 'YE', name: 'Yemen' },\r\n { code: 'ZM', name: 'Zambia' },\r\n { code: 'ZW', name: 'Zimbabwe' },\r\n];\r\n\r\nexport function getCountryName(code: string): string {\r\n return COUNTRIES.find(c => c.code === code.toUpperCase())?.name || code;\r\n}\r\n","// =============================================================================\r\n// CONDITIONS EDITOR — Searchable Country Multi-Select\r\n// =============================================================================\r\n\r\nimport React, { useState, useRef, useEffect, useMemo } from 'react';\r\nimport { COUNTRIES, getCountryName } from './countries';\r\nimport { cn } from '../../utils/cn';\r\nimport { X, Search, ChevronDown } from 'lucide-react';\r\n\r\ninterface CountryPickerProps {\r\n selected: string[];\r\n onChange: (codes: string[]) => void;\r\n disabled?: boolean;\r\n placeholder?: string;\r\n}\r\n\r\nexport const CountryPicker: React.FC<CountryPickerProps> = ({\r\n selected,\r\n onChange,\r\n disabled,\r\n placeholder = 'Search countries…',\r\n}) => {\r\n const [open, setOpen] = useState(false);\r\n const [search, setSearch] = useState('');\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n const filtered = useMemo(() => {\r\n if (!search) return COUNTRIES;\r\n const q = search.toLowerCase();\r\n return COUNTRIES.filter(\r\n c => c.name.toLowerCase().includes(q) || c.code.toLowerCase().includes(q)\r\n );\r\n }, [search]);\r\n\r\n // Close on outside click\r\n useEffect(() => {\r\n if (!open) return;\r\n const handler = (e: MouseEvent) => {\r\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\r\n setOpen(false);\r\n setSearch('');\r\n }\r\n };\r\n document.addEventListener('mousedown', handler);\r\n return () => document.removeEventListener('mousedown', handler);\r\n }, [open]);\r\n\r\n const toggle = (code: string) => {\r\n if (disabled) return;\r\n onChange(\r\n selected.includes(code)\r\n ? selected.filter(c => c !== code)\r\n : [...selected, code]\r\n );\r\n };\r\n\r\n const remove = (code: string) => {\r\n if (disabled) return;\r\n onChange(selected.filter(c => c !== code));\r\n };\r\n\r\n return (\r\n <div ref={containerRef} className=\"relative\">\r\n {/* Selected chips + trigger */}\r\n <div\r\n className={cn(\r\n 'min-h-[38px] w-full flex flex-wrap items-center gap-1.5 px-2.5 py-1.5',\r\n 'rounded-md border border-gray-300 dark:border-gray-600 bg-transparent',\r\n 'cursor-pointer transition-colors',\r\n open && 'ring-1 ring-blue-500 border-blue-500',\r\n disabled && 'opacity-50 cursor-not-allowed'\r\n )}\r\n onClick={() => {\r\n if (disabled) return;\r\n setOpen(true);\r\n setTimeout(() => inputRef.current?.focus(), 0);\r\n }}\r\n >\r\n {selected.map(code => (\r\n <span\r\n key={code}\r\n className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-blue-100 dark:bg-blue-900/40 text-blue-700 dark:text-blue-300 border border-blue-200 dark:border-blue-800\"\r\n >\r\n {getCountryName(code)} ({code})\r\n {!disabled && (\r\n <button\r\n onClick={(e) => { e.stopPropagation(); remove(code); }}\r\n className=\"hover:text-blue-900 dark:hover:text-blue-100\"\r\n >\r\n <X className=\"w-3 h-3\" />\r\n </button>\r\n )}\r\n </span>\r\n ))}\r\n {selected.length === 0 && !open && (\r\n <span className=\"text-sm text-gray-400\">{placeholder}</span>\r\n )}\r\n {open && (\r\n <input\r\n ref={inputRef}\r\n value={search}\r\n onChange={e => setSearch(e.target.value)}\r\n className=\"flex-1 min-w-[120px] text-sm bg-transparent outline-none text-gray-900 dark:text-gray-100 placeholder:text-gray-400\"\r\n placeholder={placeholder}\r\n onClick={e => e.stopPropagation()}\r\n />\r\n )}\r\n <ChevronDown className={cn('w-4 h-4 text-gray-400 ml-auto flex-shrink-0 transition-transform', open && 'rotate-180')} />\r\n </div>\r\n\r\n {/* Dropdown */}\r\n {open && (\r\n <div className=\"absolute z-50 mt-1 w-full max-h-[200px] overflow-y-auto rounded-md border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 shadow-lg\">\r\n {filtered.length === 0 ? (\r\n <div className=\"px-3 py-2 text-sm text-gray-400\">No countries found</div>\r\n ) : (\r\n filtered.map(country => {\r\n const isSelected = selected.includes(country.code);\r\n return (\r\n <button\r\n key={country.code}\r\n onClick={() => toggle(country.code)}\r\n className={cn(\r\n 'w-full flex items-center gap-2 px-3 py-1.5 text-sm text-left transition-colors',\r\n isSelected\r\n ? 'bg-blue-50 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300'\r\n : 'text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800'\r\n )}\r\n >\r\n <span className={cn(\r\n 'w-4 h-4 rounded border flex items-center justify-center flex-shrink-0 transition-colors',\r\n isSelected\r\n ? 'bg-blue-500 border-blue-500 text-white'\r\n : 'border-gray-300 dark:border-gray-600'\r\n )}>\r\n {isSelected && (\r\n <svg className=\"w-3 h-3\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M2 6l3 3 5-5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n </svg>\r\n )}\r\n </span>\r\n <span className=\"flex-1\">{country.name}</span>\r\n <span className=\"text-xs text-gray-400 font-mono\">{country.code}</span>\r\n </button>\r\n );\r\n })\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n","// =============================================================================\r\n// CONDITIONS EDITOR — Per-type configuration UI\r\n// =============================================================================\r\n// Uses inline styles for toggle/pill elements to ensure visibility regardless\r\n// of the host app's Tailwind configuration.\r\n\r\nimport React from 'react';\r\nimport type { Condition, ConditionsEditorProps } from './types';\r\nimport { CountryPicker } from './CountryPicker';\r\nimport {\r\n DISPLAY_OPTIONS, REGION_OPTIONS, USER_TYPE_OPTIONS,\r\n ITEM_STATUS_OPTIONS, VALUE_OPERATORS, FIELD_TYPES,\r\n} from './conditionMeta';\r\n\r\ninterface ConditionConfigProps {\r\n condition: Condition;\r\n onChange: (updated: Condition) => void;\r\n editorProps: Pick<ConditionsEditorProps, 'versions' | 'tags' | 'products' | 'savedConditions' | 'userGroups'>;\r\n readOnly?: boolean;\r\n}\r\n\r\n// Reusable pill-toggle for contains/notContains — uses inline styles\r\nconst ContainsToggle: React.FC<{\r\n value: boolean | undefined;\r\n onChange: (v: boolean) => void;\r\n trueLabel?: string;\r\n falseLabel?: string;\r\n disabled?: boolean;\r\n}> = ({ value = true, onChange, trueLabel = 'Is One Of', falseLabel = 'Is Not One Of', disabled }) => (\r\n <div style={{ display: 'flex', gap: 4, backgroundColor: '#f3f4f6', borderRadius: 6, padding: 4, width: 'fit-content' }}>\r\n {[{ v: true, label: trueLabel }, { v: false, label: falseLabel }].map(opt => (\r\n <button\r\n key={String(opt.v)}\r\n type=\"button\"\r\n onClick={() => onChange(opt.v)}\r\n disabled={disabled}\r\n style={{\r\n padding: '6px 12px',\r\n fontSize: 12,\r\n fontWeight: 600,\r\n borderRadius: 4,\r\n border: 'none',\r\n cursor: disabled ? 'default' : 'pointer',\r\n transition: 'all 0.15s',\r\n ...(value === opt.v\r\n ? { backgroundColor: '#3b82f6', color: '#ffffff', boxShadow: '0 1px 2px rgba(0,0,0,0.1)' }\r\n : { backgroundColor: 'transparent', color: '#6b7280' }\r\n ),\r\n }}\r\n >\r\n {opt.label}\r\n </button>\r\n ))}\r\n </div>\r\n);\r\n\r\n// Toggle switch — uses inline styles\r\nconst ToggleSwitch: React.FC<{\r\n checked: boolean;\r\n onChange: (v: boolean) => void;\r\n label: string;\r\n disabled?: boolean;\r\n}> = ({ checked, onChange, label, disabled }) => (\r\n <label style={{ display: 'flex', alignItems: 'center', gap: 8, fontSize: 12, fontWeight: 500, color: '#4b5563', cursor: 'pointer', userSelect: 'none' }}>\r\n <button\r\n type=\"button\"\r\n onClick={() => onChange(!checked)}\r\n disabled={disabled}\r\n style={{\r\n width: 36,\r\n height: 20,\r\n borderRadius: 10,\r\n border: 'none',\r\n cursor: disabled ? 'default' : 'pointer',\r\n position: 'relative',\r\n flexShrink: 0,\r\n transition: 'background-color 0.2s',\r\n backgroundColor: checked ? '#3b82f6' : '#d1d5db',\r\n }}\r\n >\r\n <span style={{\r\n position: 'absolute',\r\n top: 2,\r\n width: 16,\r\n height: 16,\r\n borderRadius: '50%',\r\n backgroundColor: '#ffffff',\r\n boxShadow: '0 1px 3px rgba(0,0,0,0.2)',\r\n transition: 'transform 0.2s',\r\n transform: checked ? 'translateX(18px)' : 'translateX(2px)',\r\n }} />\r\n </button>\r\n {label}\r\n </label>\r\n);\r\n\r\n// Multi-select chip picker — uses inline styles\r\nconst ChipSelect: React.FC<{\r\n options: { title: string; value: string; description?: string }[];\r\n selected: string[];\r\n onChange: (values: string[]) => void;\r\n disabled?: boolean;\r\n}> = ({ options, selected, onChange, disabled }) => (\r\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 6 }}>\r\n {options.map(opt => {\r\n const isSelected = selected.includes(opt.value);\r\n return (\r\n <button\r\n key={opt.value}\r\n type=\"button\"\r\n onClick={() => {\r\n if (disabled) return;\r\n onChange(isSelected ? selected.filter(v => v !== opt.value) : [...selected, opt.value]);\r\n }}\r\n disabled={disabled}\r\n title={opt.description}\r\n style={{\r\n padding: '4px 10px',\r\n fontSize: 12,\r\n borderRadius: 9999,\r\n border: '1px solid',\r\n cursor: disabled ? 'default' : 'pointer',\r\n transition: 'all 0.15s',\r\n ...(isSelected\r\n ? { backgroundColor: '#dbeafe', borderColor: '#93c5fd', color: '#1d4ed8' }\r\n : { backgroundColor: 'transparent', borderColor: '#e5e7eb', color: '#6b7280' }\r\n ),\r\n }}\r\n >\r\n {opt.title}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n);\r\n\r\nconst inputStyle: React.CSSProperties = {\r\n width: '100%',\r\n padding: '6px 10px',\r\n fontSize: 14,\r\n borderRadius: 6,\r\n border: '1px solid #d1d5db',\r\n backgroundColor: 'transparent',\r\n outline: 'none',\r\n};\r\n\r\nconst labelStyle: React.CSSProperties = {\r\n fontSize: 10,\r\n color: '#9ca3af',\r\n marginBottom: 2,\r\n display: 'block',\r\n};\r\n\r\n// Pill group for date/pass-fail style selectors — inline styles\r\nconst PillGroup: React.FC<{\r\n options: { value: string; label: string }[];\r\n selected: string | undefined;\r\n onChange: (v: string) => void;\r\n disabled?: boolean;\r\n}> = ({ options, selected, onChange, disabled }) => (\r\n <div style={{ display: 'flex', gap: 4, backgroundColor: '#f3f4f6', borderRadius: 6, padding: 4, width: 'fit-content' }}>\r\n {options.map(opt => (\r\n <button\r\n key={opt.value}\r\n type=\"button\"\r\n onClick={() => onChange(opt.value)}\r\n disabled={disabled}\r\n style={{\r\n padding: '6px 12px',\r\n fontSize: 12,\r\n fontWeight: 600,\r\n borderRadius: 4,\r\n border: 'none',\r\n cursor: disabled ? 'default' : 'pointer',\r\n transition: 'all 0.15s',\r\n ...(selected === opt.value\r\n ? { backgroundColor: '#3b82f6', color: '#ffffff', boxShadow: '0 1px 2px rgba(0,0,0,0.1)' }\r\n : { backgroundColor: 'transparent', color: '#6b7280' }\r\n ),\r\n }}\r\n >\r\n {opt.label}\r\n </button>\r\n ))}\r\n </div>\r\n);\r\n\r\nexport const ConditionConfig: React.FC<ConditionConfigProps> = ({\r\n condition: cond,\r\n onChange,\r\n editorProps,\r\n readOnly,\r\n}) => {\r\n const update = (patch: Partial<Condition>) => onChange({ ...cond, ...patch });\r\n\r\n switch (cond.type) {\r\n // ─── VERSION ──────────────────────────────────\r\n case 'version':\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\r\n <ContainsToggle value={cond.contains} onChange={v => update({ contains: v })} disabled={readOnly} />\r\n {editorProps.versions?.length ? (\r\n <ChipSelect\r\n options={editorProps.versions.map(v => ({ title: v.title, value: v.value || '' }))}\r\n selected={(cond.versions || []).map(v => typeof v === 'string' ? v : (v.value || ''))}\r\n onChange={vals => update({ versions: vals.map(v => ({ value: v, title: editorProps.versions?.find(o => o.value === v)?.title || v })) })}\r\n disabled={readOnly}\r\n />\r\n ) : (\r\n <p style={{ fontSize: 12, color: '#9ca3af', fontStyle: 'italic' }}>No versions available</p>\r\n )}\r\n </div>\r\n );\r\n\r\n // ─── COUNTRY ──────────────────────────────────\r\n case 'country':\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\r\n <ContainsToggle value={cond.contains} onChange={v => update({ contains: v })} disabled={readOnly} />\r\n <ToggleSwitch\r\n checked={!!cond.useRegions}\r\n onChange={v => update({ useRegions: v })}\r\n label=\"Use regions\"\r\n disabled={readOnly}\r\n />\r\n {cond.useRegions ? (\r\n <ChipSelect\r\n options={REGION_OPTIONS}\r\n selected={cond.regions || []}\r\n onChange={vals => update({ regions: vals })}\r\n disabled={readOnly}\r\n />\r\n ) : (\r\n <CountryPicker\r\n selected={cond.countries || []}\r\n onChange={codes => update({ countries: codes })}\r\n disabled={readOnly}\r\n />\r\n )}\r\n </div>\r\n );\r\n\r\n // ─── VALUE ────────────────────────────────────\r\n case 'value':\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\r\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 8 }}>\r\n <div>\r\n <label style={labelStyle}>Field Name</label>\r\n <input style={inputStyle} value={cond.field || ''} onChange={e => update({ field: e.target.value })} placeholder=\"field_name\" disabled={readOnly} />\r\n </div>\r\n <div>\r\n <label style={labelStyle}>Field Type</label>\r\n <select style={inputStyle} value={cond.fieldType || 'text'} onChange={e => update({ fieldType: e.target.value as any })} disabled={readOnly}>\r\n {FIELD_TYPES.map(ft => <option key={ft.value} value={ft.value}>{ft.title}</option>)}\r\n </select>\r\n </div>\r\n </div>\r\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 8 }}>\r\n <div>\r\n <label style={labelStyle}>Operator</label>\r\n <select style={inputStyle} value={cond.validationType || 'equal'} onChange={e => update({ validationType: e.target.value as any })} disabled={readOnly}>\r\n {VALUE_OPERATORS.map(op => <option key={op.value} value={op.value}>{op.title}</option>)}\r\n </select>\r\n </div>\r\n <div>\r\n <label style={labelStyle}>Value</label>\r\n <input style={inputStyle} value={String(cond.value ?? '')} onChange={e => update({ value: e.target.value })} placeholder=\"value\" disabled={readOnly} />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n\r\n // ─── USER ─────────────────────────────────────\r\n case 'user':\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\r\n <ChipSelect\r\n options={USER_TYPE_OPTIONS}\r\n selected={cond.userType ? [cond.userType] : []}\r\n onChange={vals => update({ userType: (vals[vals.length - 1] || undefined) as any })}\r\n disabled={readOnly}\r\n />\r\n {cond.userType === 'group' && editorProps.userGroups?.length ? (\r\n <ChipSelect\r\n options={editorProps.userGroups}\r\n selected={cond.groupIds || []}\r\n onChange={vals => update({ groupIds: vals })}\r\n disabled={readOnly}\r\n />\r\n ) : null}\r\n </div>\r\n );\r\n\r\n // ─── DATE ─────────────────────────────────────\r\n case 'date':\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\r\n <PillGroup\r\n options={[\r\n { value: 'before', label: 'Is Before' },\r\n { value: 'after', label: 'Is After' },\r\n { value: 'between', label: 'Is Between' },\r\n ]}\r\n selected={cond.dateTest}\r\n onChange={v => update({ dateTest: v as any })}\r\n disabled={readOnly}\r\n />\r\n {(cond.dateTest === 'before' || cond.dateTest === 'between') && (\r\n <div>\r\n <label style={labelStyle}>{cond.dateTest === 'between' ? 'Start Date' : 'Before Date'}</label>\r\n <input type=\"date\" style={inputStyle} value={cond.beforeDate || ''} onChange={e => update({ beforeDate: e.target.value })} disabled={readOnly} />\r\n </div>\r\n )}\r\n {(cond.dateTest === 'after' || cond.dateTest === 'between') && (\r\n <div>\r\n <label style={labelStyle}>{cond.dateTest === 'between' ? 'End Date' : 'After Date'}</label>\r\n <input type=\"date\" style={inputStyle} value={cond.afterDate || ''} onChange={e => update({ afterDate: e.target.value })} disabled={readOnly} />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n\r\n // ─── DEVICE ───────────────────────────────────\r\n case 'device':\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\r\n <ContainsToggle value={cond.contains} onChange={v => update({ contains: v })} disabled={readOnly} />\r\n <ChipSelect\r\n options={DISPLAY_OPTIONS}\r\n selected={cond.displays || []}\r\n onChange={vals => update({ displays: vals })}\r\n disabled={readOnly}\r\n />\r\n </div>\r\n );\r\n\r\n // ─── TAG ──────────────────────────────────────\r\n case 'tag':\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\r\n <ContainsToggle value={cond.contains} onChange={v => update({ contains: v })} disabled={readOnly} />\r\n {editorProps.tags?.length ? (\r\n <ChipSelect\r\n options={editorProps.tags.map(t => ({ title: t, value: t }))}\r\n selected={cond.tags || []}\r\n onChange={vals => update({ tags: vals })}\r\n disabled={readOnly}\r\n />\r\n ) : (\r\n <input style={inputStyle} value={(cond.tags || []).join(', ')} onChange={e => update({ tags: e.target.value.split(',').map(s => s.trim()).filter(Boolean) })} placeholder=\"tag1, tag2, …\" disabled={readOnly} />\r\n )}\r\n </div>\r\n );\r\n\r\n // ─── GEOFENCE ─────────────────────────────────\r\n case 'geofence':\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\r\n <ContainsToggle value={cond.contains} onChange={v => update({ contains: v })} trueLabel=\"Is Inside Of\" falseLabel=\"Is Outside Of\" disabled={readOnly} />\r\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 8 }}>\r\n {[\r\n { label: 'Latitude 1 (NW)', key: 'lat1' as const },\r\n { label: 'Longitude 1 (NW)', key: 'lng1' as const },\r\n { label: 'Latitude 2 (SE)', key: 'lat2' as const },\r\n { label: 'Longitude 2 (SE)', key: 'lng2' as const },\r\n ].map(f => (\r\n <div key={f.key}>\r\n <label style={labelStyle}>{f.label}</label>\r\n <input\r\n type=\"number\"\r\n step=\"any\"\r\n style={inputStyle}\r\n value={cond[f.key] ?? ''}\r\n onChange={e => update({ [f.key]: e.target.value ? parseFloat(e.target.value) : undefined })}\r\n disabled={readOnly}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n\r\n // ─── PRODUCT ──────────────────────────────────\r\n case 'product':\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\r\n <ContainsToggle value={cond.contains} onChange={v => update({ contains: v })} disabled={readOnly} />\r\n {editorProps.products?.length ? (\r\n <ChipSelect\r\n options={editorProps.products}\r\n selected={cond.productIds || []}\r\n onChange={vals => update({ productIds: vals })}\r\n disabled={readOnly}\r\n />\r\n ) : (\r\n <input style={inputStyle} value={(cond.productIds || []).join(', ')} onChange={e => update({ productIds: e.target.value.split(',').map(s => s.trim()).filter(Boolean) })} placeholder=\"product-id-1, product-id-2, …\" disabled={readOnly} />\r\n )}\r\n </div>\r\n );\r\n\r\n // ─── ITEM STATUS ──────────────────────────────\r\n case 'itemStatus':\r\n return (\r\n <ChipSelect\r\n options={ITEM_STATUS_OPTIONS}\r\n selected={cond.statusType ? [cond.statusType] : []}\r\n onChange={vals => update({ statusType: (vals[vals.length - 1] || undefined) as any })}\r\n disabled={readOnly}\r\n />\r\n );\r\n\r\n // ─── CONDITION REFERENCE ──────────────────────\r\n case 'condition':\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\r\n {editorProps.savedConditions?.length ? (\r\n <select style={inputStyle} value={cond.conditionId || ''} onChange={e => update({ conditionId: e.target.value })} disabled={readOnly}>\r\n <option value=\"\">Select a condition…</option>\r\n {editorProps.savedConditions.map(c => <option key={c.value} value={c.value}>{c.title}</option>)}\r\n </select>\r\n ) : (\r\n <input style={inputStyle} value={cond.conditionId || ''} onChange={e => update({ conditionId: e.target.value })} placeholder=\"Condition ID\" disabled={readOnly} />\r\n )}\r\n <PillGroup\r\n options={[\r\n { value: 'true', label: 'Passes' },\r\n { value: 'false', label: 'Fails' },\r\n ]}\r\n selected={cond.passes === true ? 'true' : cond.passes === false ? 'false' : undefined}\r\n onChange={v => update({ passes: v === 'true' })}\r\n disabled={readOnly}\r\n />\r\n </div>\r\n );\r\n\r\n default:\r\n return <p style={{ fontSize: 12, color: '#9ca3af', fontStyle: 'italic' }}>Unknown condition type</p>;\r\n }\r\n};\r\n","// =============================================================================\r\n// CONDITIONS EDITOR — Single Condition Card\r\n// =============================================================================\r\n\r\nimport React, { useState } from 'react';\r\nimport type { Condition, ConditionType, ConditionsEditorProps } from './types';\r\nimport { getConditionMeta, getConditionIcon, getConditionSummary } from './conditionMeta';\r\nimport { ConditionTypePicker } from './ConditionTypePicker';\r\nimport { ConditionConfig } from './ConditionConfig';\r\nimport { cn } from '../../utils/cn';\r\nimport { ChevronDown, ChevronRight, Trash2, RefreshCw } from 'lucide-react';\r\n\r\ninterface ConditionCardProps {\r\n condition: Condition;\r\n index: number;\r\n onChange: (updated: Condition) => void;\r\n onDelete: () => void;\r\n editorProps: Pick<ConditionsEditorProps, 'versions' | 'tags' | 'products' | 'savedConditions' | 'userGroups'>;\r\n readOnly?: boolean;\r\n}\r\n\r\nexport const ConditionCard: React.FC<ConditionCardProps> = ({\r\n condition,\r\n index,\r\n onChange,\r\n onDelete,\r\n editorProps,\r\n readOnly,\r\n}) => {\r\n const [expanded, setExpanded] = useState(!condition.type);\r\n const meta = getConditionMeta(condition.type);\r\n const Icon = getConditionIcon(condition.type);\r\n const summary = getConditionSummary(condition, { savedConditions: editorProps.savedConditions });\r\n\r\n const handleSelectType = (type: ConditionType) => {\r\n onChange({ ...condition, type });\r\n setExpanded(true);\r\n };\r\n\r\n return (\r\n <div className=\"rounded-lg border border-gray-200 dark:border-gray-700 overflow-hidden shadow-sm transition-shadow hover:shadow-md\">\r\n {/* Header */}\r\n <div\r\n className={cn(\r\n 'flex items-center gap-3 px-4 py-3 cursor-pointer select-none transition-colors',\r\n 'hover:bg-gray-50 dark:hover:bg-gray-800/50'\r\n )}\r\n style={meta ? {\r\n background: `linear-gradient(90deg, ${meta.color}08 0%, transparent 100%)`,\r\n } : undefined}\r\n onClick={() => setExpanded(!expanded)}\r\n >\r\n {/* Icon */}\r\n <div\r\n className=\"w-8 h-8 rounded-full flex items-center justify-center flex-shrink-0\"\r\n style={meta ? { backgroundColor: `${meta.color}18`, color: meta.color } : { backgroundColor: '#e5e7eb' }}\r\n >\r\n <Icon className=\"w-4 h-4\" />\r\n </div>\r\n\r\n {/* Title & summary */}\r\n <div className=\"flex-1 min-w-0\">\r\n <p className=\"text-sm font-medium text-gray-800 dark:text-gray-200 truncate\">\r\n {meta?.title || 'Select Condition Type'}\r\n </p>\r\n <p className=\"text-[11px] text-gray-500 dark:text-gray-400 truncate\">{summary}</p>\r\n </div>\r\n\r\n {/* Actions */}\r\n <div className=\"flex items-center gap-1 flex-shrink-0\">\r\n {condition.type && !readOnly && (\r\n <button\r\n onClick={(e) => { e.stopPropagation(); onChange({ type: null }); }}\r\n className=\"p-1 rounded hover:bg-gray-200 dark:hover:bg-gray-700 transition-colors\"\r\n title=\"Change type\"\r\n >\r\n <RefreshCw className=\"w-3.5 h-3.5 text-gray-400\" />\r\n </button>\r\n )}\r\n {!readOnly && (\r\n <button\r\n onClick={(e) => { e.stopPropagation(); onDelete(); }}\r\n className=\"p-1 rounded hover:bg-red-100 dark:hover:bg-red-900/30 transition-colors\"\r\n title=\"Delete\"\r\n >\r\n <Trash2 className=\"w-3.5 h-3.5 text-red-400\" />\r\n </button>\r\n )}\r\n {expanded ? <ChevronDown className=\"w-4 h-4 text-gray-400\" /> : <ChevronRight className=\"w-4 h-4 text-gray-400\" />}\r\n </div>\r\n </div>\r\n\r\n {/* Body */}\r\n {expanded && (\r\n <div className=\"border-t border-gray-100 dark:border-gray-800 px-4 py-3\">\r\n {!condition.type ? (\r\n <ConditionTypePicker onSelect={handleSelectType} />\r\n ) : (\r\n <div className=\"space-y-3\">\r\n {meta?.helpText && (\r\n <p className=\"text-[11px] text-gray-400 dark:text-gray-500 italic\">{meta.helpText}</p>\r\n )}\r\n <ConditionConfig\r\n condition={condition}\r\n onChange={onChange}\r\n editorProps={editorProps}\r\n readOnly={readOnly}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n","// =============================================================================\r\n// CONDITIONS EDITOR — Main Component\r\n// =============================================================================\r\n// Supports inline and dialog modes. Dialog mode shows a summary trigger and\r\n// opens a modal with the full editor.\r\n\r\nimport React, { useCallback, useState } from 'react';\r\nimport type { Condition, ConditionGroup, ConditionsEditorProps } from './types';\r\nimport { ConditionCard } from './ConditionCard';\r\nimport { getConditionMeta, getConditionSummary } from './conditionMeta';\r\nimport { cn } from '../../utils/cn';\r\nimport { Plus, GitBranch, Filter, X, ChevronRight } from 'lucide-react';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Summary badge for dialog trigger\r\n// ---------------------------------------------------------------------------\r\nconst ConditionsSummary: React.FC<{ value: ConditionGroup; savedConditions?: { title: string; value: string }[] }> = ({\r\n value,\r\n savedConditions,\r\n}) => {\r\n const count = value.conditions.filter(c => c.type).length;\r\n if (count === 0) {\r\n return (\r\n <div className=\"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400\">\r\n <Filter className=\"w-4 h-4\" />\r\n <span>No conditions set</span>\r\n <ChevronRight className=\"w-4 h-4 ml-auto\" />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"space-y-1\">\r\n <div className=\"flex items-center gap-2 text-xs font-medium text-gray-500 dark:text-gray-400\">\r\n <Filter className=\"w-3.5 h-3.5\" />\r\n {count} condition{count !== 1 ? 's' : ''} · {value.type === 'and' ? 'Match ALL' : 'Match ANY'}\r\n <ChevronRight className=\"w-4 h-4 ml-auto\" />\r\n </div>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {value.conditions.filter(c => c.type).slice(0, 5).map((cond, i) => {\r\n const meta = getConditionMeta(cond.type);\r\n return (\r\n <span\r\n key={i}\r\n className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-[11px] font-medium\"\r\n style={{\r\n backgroundColor: meta ? `${meta.color}15` : '#e5e7eb',\r\n color: meta?.color || '#6b7280',\r\n }}\r\n >\r\n {getConditionSummary(cond, { savedConditions })}\r\n </span>\r\n );\r\n })}\r\n {count > 5 && (\r\n <span className=\"inline-flex items-center px-2 py-0.5 rounded-full text-[11px] font-medium bg-gray-100 dark:bg-gray-800 text-gray-500\">\r\n +{count - 5} more\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n// ---------------------------------------------------------------------------\r\n// Lightweight dialog\r\n// ---------------------------------------------------------------------------\r\nconst EditorDialog: React.FC<{\r\n open: boolean;\r\n onClose: () => void;\r\n children: React.ReactNode;\r\n}> = ({ open, onClose, children }) => {\r\n if (!open) return null;\r\n return (\r\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\r\n <div className=\"absolute inset-0 bg-black/50 backdrop-blur-sm\" onClick={onClose} />\r\n <div className=\"relative z-10 w-full max-w-2xl max-h-[80vh] bg-white dark:bg-gray-900 rounded-xl shadow-2xl border border-gray-200 dark:border-gray-700 flex flex-col overflow-hidden mx-4\">\r\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700\">\r\n <h3 className=\"text-sm font-semibold text-gray-900 dark:text-gray-100\">\r\n Edit Conditions\r\n </h3>\r\n <button\r\n onClick={onClose}\r\n className=\"p-1 rounded hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors\"\r\n >\r\n <X className=\"w-4 h-4 text-gray-500\" />\r\n </button>\r\n </div>\r\n <div className=\"flex-1 overflow-y-auto p-4\">\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n// ---------------------------------------------------------------------------\r\n// Inner editor content (shared by both modes)\r\n// ---------------------------------------------------------------------------\r\nconst ConditionsEditorContent: React.FC<Omit<ConditionsEditorProps, 'mode' | 'trigger' | 'open' | 'onClose'>> = ({\r\n value,\r\n onChange,\r\n isGlobal,\r\n versions,\r\n tags,\r\n products,\r\n savedConditions,\r\n userGroups,\r\n readOnly = false,\r\n className,\r\n}) => {\r\n const editorProps = { versions, tags, products, savedConditions, userGroups };\r\n\r\n const updateCondition = useCallback((index: number, updated: Condition) => {\r\n const next = { ...value, conditions: [...value.conditions] };\r\n next.conditions[index] = updated;\r\n onChange(next);\r\n }, [value, onChange]);\r\n\r\n const deleteCondition = useCallback((index: number) => {\r\n const next = { ...value, conditions: value.conditions.filter((_, i) => i !== index) };\r\n onChange(next);\r\n }, [value, onChange]);\r\n\r\n const addCondition = useCallback(() => {\r\n const next = { ...value, conditions: [...value.conditions, {} as Condition] };\r\n onChange(next);\r\n }, [value, onChange]);\r\n\r\n const toggleLogic = useCallback((logic: 'and' | 'or') => {\r\n onChange({ ...value, type: logic });\r\n }, [value, onChange]);\r\n\r\n return (\r\n <div className={cn('smartlinks-ui-conditions-editor space-y-4', className)}>\r\n {/* Global settings */}\r\n {isGlobal && (\r\n <div className=\"rounded-lg border border-gray-200 dark:border-gray-700 p-4 space-y-3\">\r\n <input\r\n className=\"w-full px-3 py-2 text-sm rounded-md border border-gray-300 dark:border-gray-600 bg-transparent focus:outline-none focus:ring-1 focus:ring-blue-500\"\r\n value={value.title || ''}\r\n onChange={e => onChange({ ...value, title: e.target.value })}\r\n placeholder=\"Condition Title\"\r\n disabled={readOnly}\r\n />\r\n <label className=\"flex items-center gap-2 text-sm text-gray-600 dark:text-gray-400 cursor-pointer\">\r\n <button\r\n onClick={() => onChange({ ...value, disabled: !value.disabled })}\r\n disabled={readOnly}\r\n className={cn(\r\n 'w-9 h-5 rounded-full transition-colors relative',\r\n value.disabled ? 'bg-blue-500' : 'bg-gray-300 dark:bg-gray-600'\r\n )}\r\n >\r\n <span className={cn(\r\n 'absolute top-0.5 w-4 h-4 rounded-full bg-white shadow transition-transform',\r\n value.disabled ? 'translate-x-4' : 'translate-x-0.5'\r\n )} />\r\n </button>\r\n Disabled / Hidden\r\n </label>\r\n </div>\r\n )}\r\n\r\n {/* Logic type toggle */}\r\n <div style={{ borderRadius: 8, border: '1px solid #e5e7eb', padding: 16 }}>\r\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, fontSize: 12, fontWeight: 500, color: '#6b7280', marginBottom: 12 }}>\r\n <GitBranch className=\"w-3.5 h-3.5\" />\r\n Logic Type\r\n </div>\r\n <div style={{ display: 'flex', gap: 4, backgroundColor: '#f3f4f6', borderRadius: 6, padding: 4 }}>\r\n {([{ v: 'and' as const, l: 'Match ALL (AND)' }, { v: 'or' as const, l: 'Match ANY (OR)' }]).map(opt => (\r\n <button\r\n key={opt.v}\r\n type=\"button\"\r\n onClick={() => toggleLogic(opt.v)}\r\n disabled={readOnly}\r\n style={{\r\n flex: 1,\r\n padding: '8px 12px',\r\n fontSize: 14,\r\n fontWeight: 600,\r\n borderRadius: 4,\r\n border: 'none',\r\n cursor: readOnly ? 'default' : 'pointer',\r\n transition: 'all 0.15s',\r\n ...(value.type === opt.v\r\n ? { backgroundColor: '#3b82f6', color: '#ffffff', boxShadow: '0 1px 2px rgba(0,0,0,0.1)' }\r\n : { backgroundColor: 'transparent', color: '#6b7280' }\r\n ),\r\n }}\r\n >\r\n {opt.l}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Conditions header */}\r\n <div className=\"flex items-center gap-2\">\r\n <p className=\"text-sm font-semibold text-gray-700 dark:text-gray-300\">Conditions</p>\r\n <span className=\"px-2 py-0.5 text-[10px] font-medium rounded-full bg-blue-100 dark:bg-blue-900/40 text-blue-700 dark:text-blue-300\">\r\n {value.conditions.length}\r\n </span>\r\n </div>\r\n\r\n {/* Condition cards */}\r\n <div className=\"space-y-3\">\r\n {value.conditions.map((cond, idx) => (\r\n <ConditionCard\r\n key={idx}\r\n condition={cond}\r\n index={idx}\r\n onChange={(updated) => updateCondition(idx, updated)}\r\n onDelete={() => deleteCondition(idx)}\r\n editorProps={editorProps}\r\n readOnly={readOnly}\r\n />\r\n ))}\r\n </div>\r\n\r\n {/* Add button */}\r\n {!readOnly && (\r\n <button\r\n onClick={addCondition}\r\n className={cn(\r\n 'w-full flex items-center justify-center gap-2 py-3 rounded-lg',\r\n 'border-2 border-dashed border-gray-300 dark:border-gray-600',\r\n 'text-sm text-gray-500 dark:text-gray-400',\r\n 'hover:border-blue-400 dark:hover:border-blue-500 hover:text-blue-500 dark:hover:text-blue-400',\r\n 'transition-colors cursor-pointer'\r\n )}\r\n >\r\n <Plus className=\"w-4 h-4\" />\r\n Add New Condition\r\n </button>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\n// ---------------------------------------------------------------------------\r\n// Public API\r\n// ---------------------------------------------------------------------------\r\nexport const ConditionsEditor: React.FC<ConditionsEditorProps> = (props) => {\r\n const { mode = 'inline', trigger, open: controlledOpen, onClose, value, savedConditions, className, ...rest } = props;\r\n\r\n const [internalOpen, setInternalOpen] = useState(false);\r\n const isOpen = controlledOpen ?? internalOpen;\r\n\r\n const handleClose = useCallback(() => {\r\n setInternalOpen(false);\r\n onClose?.();\r\n }, [onClose]);\r\n\r\n // Inline mode — render editor directly\r\n if (mode === 'inline') {\r\n return <ConditionsEditorContent value={value} savedConditions={savedConditions} className={className} {...rest} />;\r\n }\r\n\r\n // Dialog mode\r\n const triggerElement = trigger || (\r\n <div className={cn(\r\n 'rounded-lg border border-gray-200 dark:border-gray-700 p-3 cursor-pointer',\r\n 'hover:border-gray-300 dark:hover:border-gray-600 transition-colors',\r\n className,\r\n )}>\r\n <ConditionsSummary value={value} savedConditions={savedConditions} />\r\n </div>\r\n );\r\n\r\n return (\r\n <>\r\n <span onClick={() => setInternalOpen(true)} className=\"cursor-pointer\">\r\n {triggerElement}\r\n </span>\r\n <EditorDialog open={isOpen} onClose={handleClose}>\r\n <ConditionsEditorContent value={value} savedConditions={savedConditions} {...rest} />\r\n </EditorDialog>\r\n </>\r\n );\r\n};\r\n"]}
@@ -13,7 +13,7 @@ var ASSET_MIME_FILTERS = [
13
13
  { value: "document", label: "Documents", prefix: "application/" },
14
14
  { value: "pdf", label: "PDFs", prefix: "application/pdf" }
15
15
  ];
16
- function useAssets({ scope, accept, admin, pageSize }) {
16
+ function useAssets({ scope, accept, pageSize }) {
17
17
  const [assets, setAssets] = useState([]);
18
18
  const [loading, setLoading] = useState(true);
19
19
  const [error, setError] = useState(null);
@@ -58,7 +58,7 @@ function useAssets({ scope, accept, admin, pageSize }) {
58
58
  file,
59
59
  scope,
60
60
  name: file.name,
61
- admin,
61
+ admin: true,
62
62
  onProgress: (pct) => {
63
63
  setUploadProgress(pct);
64
64
  onProgress?.(pct);
@@ -77,7 +77,7 @@ function useAssets({ scope, accept, admin, pageSize }) {
77
77
  setUploadProgress(0);
78
78
  }
79
79
  }
80
- }, [scope, admin]);
80
+ }, [scope]);
81
81
  const uploadFromUrl = useCallback(async (url, name) => {
82
82
  setUploading(true);
83
83
  setUploadProgress(0);
@@ -570,8 +570,8 @@ var UrlImport = ({
570
570
  error && /* @__PURE__ */ jsx("p", { className: "text-xs text-destructive mt-1 absolute", children: error })
571
571
  ] });
572
572
  };
573
- var ScopedAssetBrowser = ({ scope, accept, admin, pageSize, viewMode, search, selectedIds, onToggleSelect, onDelete, allowDelete, emptyText }) => {
574
- const { assets, loading, error, refresh } = useAssets({ scope, accept, admin, pageSize });
573
+ var ScopedAssetBrowser = ({ scope, accept, pageSize, viewMode, search, selectedIds, onToggleSelect, onDelete, allowDelete, emptyText }) => {
574
+ const { assets, loading, error, refresh } = useAssets({ scope, accept, pageSize });
575
575
  const filteredAssets = useMemo(() => {
576
576
  if (!search.trim()) return assets;
577
577
  const q = search.toLowerCase();
@@ -603,8 +603,8 @@ var ScopedAssetBrowser = ({ scope, accept, admin, pageSize, viewMode, search, se
603
603
  viewMode,
604
604
  selectedIds,
605
605
  onToggleSelect,
606
- onDelete: admin && allowDelete ? onDelete : void 0,
607
- allowDelete: admin && allowDelete
606
+ onDelete: allowDelete ? onDelete : void 0,
607
+ allowDelete
608
608
  }
609
609
  );
610
610
  };
@@ -618,7 +618,6 @@ var AssetPickerContent = ({
618
618
  showTypeFilter,
619
619
  value,
620
620
  onSelect,
621
- admin = false,
622
621
  allowDelete = false,
623
622
  defaultView = "grid",
624
623
  emptyText,
@@ -628,7 +627,6 @@ var AssetPickerContent = ({
628
627
  const { assets, upload, uploadFromUrl, uploading, uploadProgress } = useAssets({
629
628
  scope,
630
629
  accept: acceptProp,
631
- admin,
632
630
  pageSize
633
631
  });
634
632
  const [tab, setTab] = useState("browse");
@@ -811,7 +809,6 @@ var AssetPickerContent = ({
811
809
  {
812
810
  scope: activeScope,
813
811
  accept: effectiveAccept,
814
- admin,
815
812
  pageSize,
816
813
  viewMode,
817
814
  search,
@@ -916,5 +913,5 @@ var AssetPicker = (props) => {
916
913
  };
917
914
 
918
915
  export { ASSET_MIME_FILTERS, AssetPicker, useAssets };
919
- //# sourceMappingURL=chunk-WOCLZGRB.js.map
920
- //# sourceMappingURL=chunk-WOCLZGRB.js.map
916
+ //# sourceMappingURL=chunk-UXI5ZP3X.js.map
917
+ //# sourceMappingURL=chunk-UXI5ZP3X.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/AssetPicker/types.ts","../src/components/AssetPicker/useAssets.ts","../src/components/AssetPicker/AssetGrid.tsx","../src/components/AssetPicker/UploadZone.tsx","../src/components/AssetPicker/UrlImport.tsx","../src/components/AssetPicker/AssetPickerContent.tsx","../src/components/AssetPicker/AssetPicker.tsx"],"names":["asset","useState","useRef","useEffect","useCallback","jsx","jsxs","Check","Loader2","X"],"mappings":"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","file":"chunk-UXI5ZP3X.js","sourcesContent":["// =============================================================================\r\n// ASSET PICKER — Types\r\n// =============================================================================\r\n\r\n/** Where to scope asset operations */\r\nexport type AssetScope =\r\n | { type: 'collection'; collectionId: string }\r\n | { type: 'product'; collectionId: string; productId: string }\r\n | { type: 'proof'; collectionId: string; productId: string; proofId: string };\r\n\r\n/** How the picker presents itself */\r\nexport type AssetPickerMode = 'inline' | 'dialog';\r\n\r\n/** An asset returned from SmartLinks */\r\nexport interface AssetItem {\r\n id: string;\r\n url: string;\r\n name: string;\r\n mimeType?: string;\r\n size?: number;\r\n createdAt?: string;\r\n metadata?: Record<string, any>;\r\n assetType?: string;\r\n type?: string;\r\n collectionId?: string;\r\n hash?: string;\r\n thumbnails?: {\r\n x100?: string;\r\n x200?: string;\r\n x512?: string;\r\n [key: string]: string | undefined;\r\n };\r\n site?: string;\r\n cleanName?: string;\r\n}\r\n\r\n/** What the picker returns on selection */\r\nexport interface AssetPickerSelection {\r\n id: string;\r\n url: string;\r\n name: string;\r\n mimeType?: string;\r\n size?: number;\r\n metadata?: Record<string, any>;\r\n thumbnails?: AssetItem['thumbnails'];\r\n}\r\n\r\n/** View mode for the asset grid */\r\nexport type AssetViewMode = 'grid' | 'list';\r\n\r\n/** MIME type filter presets */\r\nexport type AssetMimeFilter = 'all' | 'image' | 'video' | 'audio' | 'document' | 'pdf';\r\n\r\nexport const ASSET_MIME_FILTERS: { value: AssetMimeFilter; label: string; prefix?: string }[] = [\r\n { value: 'all', label: 'All files' },\r\n { value: 'image', label: 'Images', prefix: 'image/' },\r\n { value: 'video', label: 'Videos', prefix: 'video/' },\r\n { value: 'audio', label: 'Audio', prefix: 'audio/' },\r\n { value: 'document', label: 'Documents', prefix: 'application/' },\r\n { value: 'pdf', label: 'PDFs', prefix: 'application/pdf' },\r\n];\r\n\r\nexport interface AssetPickerProps {\r\n /** Scope determines which assets are listed and where uploads go */\r\n scope: AssetScope;\r\n\r\n /**\r\n * Optional product scope — when provided alongside a collection scope,\r\n * shows tabs for \"Collection\" and \"Product\" assets.\r\n */\r\n productScope?: { collectionId: string; productId: string };\r\n\r\n /** Display mode — inline grid or dialog/modal popup */\r\n mode?: AssetPickerMode;\r\n\r\n /** Whether to allow uploading new assets */\r\n allowUpload?: boolean;\r\n\r\n /** Whether to allow importing from URL */\r\n allowUrlImport?: boolean;\r\n\r\n /** Whether to allow selecting multiple assets */\r\n multiple?: boolean;\r\n\r\n /** Filter by MIME type prefix, e.g. 'image/' */\r\n accept?: string;\r\n\r\n /** Show the MIME type filter dropdown (default: true when accept is not set) */\r\n showTypeFilter?: boolean;\r\n\r\n /** Currently selected asset ID(s) */\r\n value?: string | string[];\r\n\r\n /** Called when selection changes */\r\n onSelect?: (selection: AssetPickerSelection | AssetPickerSelection[]) => void;\r\n\r\n /** Called when picker is dismissed (dialog mode) */\r\n onClose?: () => void;\r\n\r\n /** Whether the dialog is open (dialog mode, controlled) */\r\n open?: boolean;\r\n\r\n /** Trigger element for dialog mode (renders as the button that opens it) */\r\n trigger?: React.ReactNode;\r\n\r\n /** Additional CSS class */\r\n className?: string;\r\n\r\n /** Max number of assets to load per page */\r\n pageSize?: number;\r\n\r\n /** Whether to allow deleting assets (admin only) */\r\n allowDelete?: boolean;\r\n\r\n /** Default view mode */\r\n defaultView?: AssetViewMode;\r\n\r\n /** Placeholder text for empty state */\r\n emptyText?: string;\r\n}\r\n","// =============================================================================\r\n// ASSET PICKER — useAssets hook\r\n// =============================================================================\r\n// Manages asset fetching, uploading, and deletion via the SmartLinks SDK.\r\n\r\nimport { useState, useCallback, useEffect, useRef } from 'react';\r\nimport * as SL from '@proveanything/smartlinks';\r\nimport type { AssetScope, AssetItem } from './types';\r\n\r\ninterface UseAssetsOptions {\r\n scope: AssetScope;\r\n accept?: string;\r\n pageSize?: number;\r\n}\r\n\r\ninterface UseAssetsReturn {\r\n assets: AssetItem[];\r\n loading: boolean;\r\n error: string | null;\r\n refresh: () => Promise<void>;\r\n upload: (file: File, onProgress?: (pct: number) => void) => Promise<AssetItem | null>;\r\n uploadFromUrl: (url: string, name?: string) => Promise<AssetItem | null>;\r\n remove: (assetId: string) => Promise<boolean>;\r\n uploading: boolean;\r\n uploadProgress: number;\r\n}\r\n\r\nexport function useAssets({ scope, accept, pageSize }: UseAssetsOptions): UseAssetsReturn {\r\n const [assets, setAssets] = useState<AssetItem[]>([]);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState<string | null>(null);\r\n const [uploading, setUploading] = useState(false);\r\n const [uploadProgress, setUploadProgress] = useState(0);\r\n const mountedRef = useRef(true);\r\n\r\n useEffect(() => {\r\n mountedRef.current = true;\r\n return () => { mountedRef.current = false; };\r\n }, []);\r\n\r\n const fetchAssets = useCallback(async () => {\r\n setLoading(true);\r\n setError(null);\r\n try {\r\n const result = await SL.asset.list({\r\n scope,\r\n mimeTypePrefix: accept,\r\n limit: pageSize,\r\n });\r\n if (mountedRef.current) {\r\n setAssets(result as AssetItem[]);\r\n }\r\n } catch (err: any) {\r\n if (mountedRef.current) {\r\n setError(err?.message || 'Failed to load assets');\r\n setAssets([]);\r\n }\r\n } finally {\r\n if (mountedRef.current) setLoading(false);\r\n }\r\n }, [scope.type, (scope as any).collectionId, (scope as any).productId, (scope as any).proofId, accept, pageSize]);\r\n\r\n useEffect(() => {\r\n fetchAssets();\r\n }, [fetchAssets]);\r\n\r\n const upload = useCallback(async (file: File, onProgress?: (pct: number) => void): Promise<AssetItem | null> => {\r\n setUploading(true);\r\n setUploadProgress(0);\r\n try {\r\n const result = await SL.asset.upload({\r\n file,\r\n scope,\r\n name: file.name,\r\n admin: true,\r\n onProgress: (pct: number) => {\r\n setUploadProgress(pct);\r\n onProgress?.(pct);\r\n },\r\n });\r\n if (mountedRef.current) {\r\n setAssets(prev => [result as AssetItem, ...prev]);\r\n }\r\n return result as AssetItem;\r\n } catch (err: any) {\r\n if (mountedRef.current) setError(err?.message || 'Upload failed');\r\n return null;\r\n } finally {\r\n if (mountedRef.current) {\r\n setUploading(false);\r\n setUploadProgress(0);\r\n }\r\n }\r\n }, [scope]);\r\n\r\n const uploadFromUrl = useCallback(async (url: string, name?: string): Promise<AssetItem | null> => {\r\n setUploading(true);\r\n setUploadProgress(0);\r\n try {\r\n // Fetch the file from URL first, then upload\r\n const response = await fetch(url);\r\n if (!response.ok) throw new Error(`Failed to fetch: ${response.statusText}`);\r\n const blob = await response.blob();\r\n const fileName = name || url.split('/').pop()?.split('?')[0] || 'imported-file';\r\n const file = new File([blob], fileName, { type: blob.type });\r\n return await upload(file);\r\n } catch (err: any) {\r\n if (mountedRef.current) setError(err?.message || 'URL import failed');\r\n return null;\r\n } finally {\r\n if (mountedRef.current) {\r\n setUploading(false);\r\n setUploadProgress(0);\r\n }\r\n }\r\n }, [upload]);\r\n\r\n const remove = useCallback(async (assetId: string): Promise<boolean> => {\r\n try {\r\n await SL.asset.remove({ assetId, scope });\r\n if (mountedRef.current) {\r\n setAssets(prev => prev.filter(a => a.id !== assetId));\r\n }\r\n return true;\r\n } catch (err: any) {\r\n if (mountedRef.current) setError(err?.message || 'Delete failed');\r\n return false;\r\n }\r\n }, [scope]);\r\n\r\n return {\r\n assets,\r\n loading,\r\n error,\r\n refresh: fetchAssets,\r\n upload,\r\n uploadFromUrl,\r\n remove,\r\n uploading,\r\n uploadProgress,\r\n };\r\n}\r\n","// =============================================================================\r\n// ASSET PICKER — Asset Grid / List View\r\n// =============================================================================\r\n\r\nimport React from 'react';\r\nimport type { AssetItem, AssetViewMode } from './types';\r\nimport { cn } from '../../utils/cn';\r\nimport { Trash2, Check, FileIcon, Image, Film, Music, FileText } from 'lucide-react';\r\n\r\ninterface AssetGridProps {\r\n assets: AssetItem[];\r\n viewMode: AssetViewMode;\r\n selectedIds: Set<string>;\r\n onToggleSelect: (asset: AssetItem) => void;\r\n onDelete?: (assetId: string) => void;\r\n allowDelete?: boolean;\r\n}\r\n\r\nfunction getIcon(mimeType?: string) {\r\n if (!mimeType) return FileIcon;\r\n if (mimeType.startsWith('image/')) return Image;\r\n if (mimeType.startsWith('video/')) return Film;\r\n if (mimeType.startsWith('audio/')) return Music;\r\n return FileText;\r\n}\r\n\r\nfunction formatSize(bytes?: number): string {\r\n if (!bytes) return '';\r\n if (bytes < 1024) return `${bytes} B`;\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\r\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\r\n}\r\n\r\nfunction getThumbnail(asset: AssetItem): string | null {\r\n if (asset.thumbnails?.x200) return asset.thumbnails.x200;\r\n if (asset.thumbnails?.x100) return asset.thumbnails.x100;\r\n if (asset.thumbnails?.x512) return asset.thumbnails.x512;\r\n if (asset.mimeType?.startsWith('image/')) return asset.url;\r\n return null;\r\n}\r\n\r\nconst AssetGridItem: React.FC<{\r\n asset: AssetItem;\r\n selected: boolean;\r\n onToggle: () => void;\r\n onDelete?: () => void;\r\n allowDelete?: boolean;\r\n}> = ({ asset, selected, onToggle, onDelete, allowDelete }) => {\r\n const thumb = getThumbnail(asset);\r\n const Icon = getIcon(asset.mimeType);\r\n\r\n return (\r\n <div\r\n className={cn(\r\n 'group relative rounded-lg border-2 cursor-pointer transition-all overflow-hidden',\r\n 'hover:shadow-md',\r\n selected\r\n ? 'border-primary bg-primary/10'\r\n : 'border-border hover:border-ring'\r\n )}\r\n onClick={onToggle}\r\n role=\"button\"\r\n tabIndex={0}\r\n onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onToggle(); } }}\r\n >\r\n {/* Thumbnail / Icon */}\r\n <div className=\"aspect-square bg-muted flex items-center justify-center overflow-hidden\">\r\n {thumb ? (\r\n <img\r\n src={thumb}\r\n alt={asset.name || asset.id}\r\n className=\"w-full h-full object-cover\"\r\n loading=\"lazy\"\r\n />\r\n ) : (\r\n <Icon className=\"w-8 h-8 text-muted-foreground\" />\r\n )}\r\n </div>\r\n\r\n {/* Name */}\r\n <div className=\"p-2\">\r\n <p className=\"text-xs font-medium truncate text-foreground\" title={asset.name}>\r\n {asset.cleanName || asset.name || asset.id}\r\n </p>\r\n <p className=\"text-[10px] text-muted-foreground mt-0.5\">\r\n {formatSize(asset.size)}\r\n {asset.mimeType && ` • ${asset.mimeType.split('/')[1]?.toUpperCase() || asset.mimeType}`}\r\n </p>\r\n </div>\r\n\r\n {/* Selection check */}\r\n {selected && (\r\n <div className=\"absolute top-2 right-2 w-5 h-5 rounded-full bg-primary flex items-center justify-center\">\r\n <Check className=\"w-3 h-3 text-primary-foreground\" />\r\n </div>\r\n )}\r\n\r\n {/* Delete button */}\r\n {allowDelete && onDelete && (\r\n <button\r\n className=\"absolute top-2 left-2 w-6 h-6 rounded-full bg-destructive/80 hover:bg-destructive text-destructive-foreground flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity\"\r\n onClick={(e) => { e.stopPropagation(); onDelete(); }}\r\n title=\"Delete asset\"\r\n >\r\n <Trash2 className=\"w-3 h-3\" />\r\n </button>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nconst AssetListItem: React.FC<{\r\n asset: AssetItem;\r\n selected: boolean;\r\n onToggle: () => void;\r\n onDelete?: () => void;\r\n allowDelete?: boolean;\r\n}> = ({ asset, selected, onToggle, onDelete, allowDelete }) => {\r\n const thumb = getThumbnail(asset);\r\n const Icon = getIcon(asset.mimeType);\r\n\r\n return (\r\n <div\r\n className={cn(\r\n 'group flex items-center gap-3 p-2 rounded-lg border cursor-pointer transition-all',\r\n 'hover:shadow-sm',\r\n selected\r\n ? 'border-primary bg-primary/10'\r\n : 'border-border hover:border-ring'\r\n )}\r\n onClick={onToggle}\r\n role=\"button\"\r\n tabIndex={0}\r\n onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onToggle(); } }}\r\n >\r\n {/* Thumbnail */}\r\n <div className=\"w-10 h-10 rounded bg-muted flex items-center justify-center overflow-hidden flex-shrink-0\">\r\n {thumb ? (\r\n <img src={thumb} alt={asset.name} className=\"w-full h-full object-cover\" loading=\"lazy\" />\r\n ) : (\r\n <Icon className=\"w-4 h-4 text-muted-foreground\" />\r\n )}\r\n </div>\r\n\r\n {/* Info */}\r\n <div className=\"flex-1 min-w-0\">\r\n <p className=\"text-sm font-medium truncate text-foreground\">\r\n {asset.cleanName || asset.name || asset.id}\r\n </p>\r\n <p className=\"text-xs text-muted-foreground\">\r\n {formatSize(asset.size)}\r\n {asset.mimeType && ` • ${asset.mimeType}`}\r\n </p>\r\n </div>\r\n\r\n {/* Selection */}\r\n {selected && (\r\n <div className=\"w-5 h-5 rounded-full bg-primary flex items-center justify-center flex-shrink-0\">\r\n <Check className=\"w-3 h-3 text-primary-foreground\" />\r\n </div>\r\n )}\r\n\r\n {/* Delete */}\r\n {allowDelete && onDelete && (\r\n <button\r\n className=\"w-6 h-6 rounded-full bg-destructive/80 hover:bg-destructive text-destructive-foreground flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity flex-shrink-0\"\r\n onClick={(e) => { e.stopPropagation(); onDelete(); }}\r\n title=\"Delete\"\r\n >\r\n <Trash2 className=\"w-3 h-3\" />\r\n </button>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport const AssetGrid: React.FC<AssetGridProps> = ({\r\n assets,\r\n viewMode,\r\n selectedIds,\r\n onToggleSelect,\r\n onDelete,\r\n allowDelete,\r\n}) => {\r\n if (assets.length === 0) return null;\r\n\r\n if (viewMode === 'list') {\r\n return (\r\n <div className=\"space-y-1\">\r\n {assets.map(asset => (\r\n <AssetListItem\r\n key={asset.id}\r\n asset={asset}\r\n selected={selectedIds.has(asset.id)}\r\n onToggle={() => onToggleSelect(asset)}\r\n onDelete={allowDelete && onDelete ? () => onDelete(asset.id) : undefined}\r\n allowDelete={allowDelete}\r\n />\r\n ))}\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"grid grid-cols-3 sm:grid-cols-4 md:grid-cols-5 gap-2\">\r\n {assets.map(asset => (\r\n <AssetGridItem\r\n key={asset.id}\r\n asset={asset}\r\n selected={selectedIds.has(asset.id)}\r\n onToggle={() => onToggleSelect(asset)}\r\n onDelete={allowDelete && onDelete ? () => onDelete(asset.id) : undefined}\r\n allowDelete={allowDelete}\r\n />\r\n ))}\r\n </div>\r\n );\r\n};\r\n","// =============================================================================\r\n// ASSET PICKER — Upload Zone (drag-and-drop + file picker + clipboard paste)\r\n// =============================================================================\r\n\r\nimport React, { useState, useCallback, useRef, useEffect } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Upload, Loader2, Clipboard, X, Check, Pencil } from 'lucide-react';\r\n\r\ninterface UploadZoneProps {\r\n onFiles: (files: File[]) => void;\r\n accept?: string;\r\n multiple?: boolean;\r\n uploading?: boolean;\r\n uploadProgress?: number;\r\n className?: string;\r\n}\r\n\r\ninterface PastedFile {\r\n file: File;\r\n previewUrl: string;\r\n name: string;\r\n}\r\n\r\nexport const UploadZone: React.FC<UploadZoneProps> = ({\r\n onFiles,\r\n accept,\r\n multiple,\r\n uploading,\r\n uploadProgress = 0,\r\n className,\r\n}) => {\r\n const [dragOver, setDragOver] = useState(false);\r\n const [pastedFile, setPastedFile] = useState<PastedFile | null>(null);\r\n const [editingName, setEditingName] = useState(false);\r\n const [fileName, setFileName] = useState('');\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n const nameInputRef = useRef<HTMLInputElement>(null);\r\n const zoneRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (pastedFile?.previewUrl) URL.revokeObjectURL(pastedFile.previewUrl);\r\n };\r\n }, [pastedFile]);\r\n\r\n useEffect(() => {\r\n if (editingName) nameInputRef.current?.select();\r\n }, [editingName]);\r\n\r\n useEffect(() => {\r\n const handlePaste = (e: ClipboardEvent) => {\r\n if (uploading) return;\r\n const items = e.clipboardData?.items;\r\n if (!items) return;\r\n\r\n for (const item of Array.from(items)) {\r\n if (item.kind === 'file') {\r\n const file = item.getAsFile();\r\n if (!file) continue;\r\n if (accept && !file.type.startsWith(accept.replace('*', ''))) continue;\r\n\r\n e.preventDefault();\r\n const previewUrl = file.type.startsWith('image/') ? URL.createObjectURL(file) : '';\r\n const defaultName = file.name === 'image.png'\r\n ? `pasted-${new Date().toISOString().slice(0, 19).replace(/[T:]/g, '-')}`\r\n : file.name.replace(/\\.[^.]+$/, '');\r\n setPastedFile({ file, previewUrl, name: defaultName });\r\n setFileName(defaultName);\r\n setEditingName(false);\r\n return;\r\n }\r\n }\r\n };\r\n\r\n document.addEventListener('paste', handlePaste);\r\n return () => document.removeEventListener('paste', handlePaste);\r\n }, [uploading, accept]);\r\n\r\n const handleConfirmPaste = useCallback(() => {\r\n if (!pastedFile) return;\r\n const ext = pastedFile.file.name.includes('.') ? pastedFile.file.name.split('.').pop() : 'png';\r\n const finalName = `${fileName.trim() || 'pasted-image'}.${ext}`;\r\n const renamedFile = new File([pastedFile.file], finalName, { type: pastedFile.file.type });\r\n onFiles([renamedFile]);\r\n if (pastedFile.previewUrl) URL.revokeObjectURL(pastedFile.previewUrl);\r\n setPastedFile(null);\r\n }, [pastedFile, fileName, onFiles]);\r\n\r\n const handleCancelPaste = useCallback(() => {\r\n if (pastedFile?.previewUrl) URL.revokeObjectURL(pastedFile.previewUrl);\r\n setPastedFile(null);\r\n setEditingName(false);\r\n }, [pastedFile]);\r\n\r\n const handleDrag = useCallback((e: React.DragEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }, []);\r\n\r\n const handleDragIn = useCallback((e: React.DragEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setDragOver(true);\r\n }, []);\r\n\r\n const handleDragOut = useCallback((e: React.DragEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setDragOver(false);\r\n }, []);\r\n\r\n const handleDrop = useCallback((e: React.DragEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setDragOver(false);\r\n const files = Array.from(e.dataTransfer.files);\r\n if (files.length > 0) {\r\n onFiles(multiple ? files : [files[0]]);\r\n }\r\n }, [onFiles, multiple]);\r\n\r\n const handleInputChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n const files = Array.from(e.target.files || []);\r\n if (files.length > 0) {\r\n onFiles(multiple ? files : [files[0]]);\r\n }\r\n e.target.value = '';\r\n }, [onFiles, multiple]);\r\n\r\n // Pasted file preview state\r\n if (pastedFile) {\r\n return (\r\n <div className={cn(\r\n 'border-2 border-solid border-primary rounded-lg p-4 transition-colors',\r\n className\r\n )}>\r\n <div className=\"flex flex-col items-center gap-3\">\r\n {pastedFile.previewUrl ? (\r\n <img\r\n src={pastedFile.previewUrl}\r\n alt=\"Pasted content\"\r\n className=\"max-h-32 max-w-full rounded-md object-contain border border-border\"\r\n />\r\n ) : (\r\n <div className=\"w-16 h-16 rounded-md bg-muted flex items-center justify-center\">\r\n <Clipboard className=\"w-6 h-6 text-muted-foreground\" />\r\n </div>\r\n )}\r\n\r\n {/* File name */}\r\n <div className=\"flex items-center gap-1.5 w-full max-w-xs\">\r\n {editingName ? (\r\n <input\r\n ref={nameInputRef}\r\n type=\"text\"\r\n value={fileName}\r\n onChange={(e) => setFileName(e.target.value)}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter') { setEditingName(false); handleConfirmPaste(); }\r\n if (e.key === 'Escape') setEditingName(false);\r\n }}\r\n onBlur={() => setEditingName(false)}\r\n className=\"flex-1 px-2 py-1 text-sm rounded border border-border bg-transparent focus:outline-none focus:ring-1 focus:ring-ring text-center\"\r\n placeholder=\"File name\"\r\n />\r\n ) : (\r\n <button\r\n onClick={() => setEditingName(true)}\r\n className=\"flex items-center gap-1 mx-auto px-2 py-1 text-sm text-muted-foreground hover:text-foreground rounded hover:bg-accent transition-colors\"\r\n title=\"Rename\"\r\n >\r\n <span className=\"truncate max-w-[200px]\">{fileName}</span>\r\n <Pencil className=\"w-3 h-3 flex-shrink-0 opacity-50\" />\r\n </button>\r\n )}\r\n </div>\r\n\r\n <p className=\"text-[10px] text-muted-foreground\">\r\n {pastedFile.file.type} · {(pastedFile.file.size / 1024).toFixed(1)} KB\r\n </p>\r\n\r\n <div className=\"flex gap-2\">\r\n <button\r\n onClick={handleCancelPaste}\r\n className=\"px-3 py-1.5 text-xs font-medium rounded-md border border-border text-muted-foreground hover:bg-accent transition-colors flex items-center gap-1\"\r\n >\r\n <X className=\"w-3 h-3\" /> Cancel\r\n </button>\r\n <button\r\n onClick={handleConfirmPaste}\r\n className=\"px-3 py-1.5 text-xs font-medium rounded-md bg-primary text-primary-foreground hover:bg-primary/90 transition-colors flex items-center gap-1\"\r\n >\r\n <Check className=\"w-3 h-3\" /> Upload\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div\r\n ref={zoneRef}\r\n className={cn(\r\n 'relative border-2 border-dashed rounded-lg p-4 text-center cursor-pointer transition-colors',\r\n dragOver\r\n ? 'border-primary bg-primary/5'\r\n : 'border-border hover:border-ring',\r\n uploading && 'pointer-events-none opacity-70',\r\n className\r\n )}\r\n onDrag={handleDrag}\r\n onDragOver={handleDragIn}\r\n onDragEnter={handleDragIn}\r\n onDragLeave={handleDragOut}\r\n onDrop={handleDrop}\r\n onClick={() => inputRef.current?.click()}\r\n role=\"button\"\r\n tabIndex={0}\r\n onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') inputRef.current?.click(); }}\r\n >\r\n <input\r\n ref={inputRef}\r\n type=\"file\"\r\n accept={accept}\r\n multiple={multiple}\r\n onChange={handleInputChange}\r\n className=\"hidden\"\r\n />\r\n\r\n {uploading ? (\r\n <div className=\"flex flex-col items-center gap-2 py-2\">\r\n <Loader2 className=\"w-6 h-6 text-primary animate-spin\" />\r\n <p className=\"text-sm text-muted-foreground\">\r\n Uploading… {uploadProgress > 0 ? `${Math.round(uploadProgress)}%` : ''}\r\n </p>\r\n {uploadProgress > 0 && (\r\n <div className=\"w-full max-w-xs h-1.5 bg-muted rounded-full overflow-hidden\">\r\n <div\r\n className=\"h-full bg-primary rounded-full transition-all duration-300\"\r\n style={{ width: `${uploadProgress}%` }}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n ) : (\r\n <div className=\"flex flex-col items-center gap-1 py-2\">\r\n <Upload className=\"w-6 h-6 text-muted-foreground\" />\r\n <p className=\"text-sm text-muted-foreground\">\r\n Drop files here, <span className=\"text-primary underline\">browse</span>, or paste from clipboard\r\n </p>\r\n <p className=\"text-[10px] text-muted-foreground flex items-center gap-1\">\r\n <Clipboard className=\"w-3 h-3\" /> Ctrl+V / ⌘V to paste\r\n </p>\r\n {accept && (\r\n <p className=\"text-[10px] text-muted-foreground\">\r\n Accepts: {accept}\r\n </p>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n","// =============================================================================\r\n// ASSET PICKER — URL Import Panel\r\n// =============================================================================\r\n\r\nimport React, { useState } from 'react';\r\nimport { cn } from '../../utils/cn';\r\nimport { Link, Loader2 } from 'lucide-react';\r\n\r\ninterface UrlImportProps {\r\n onImport: (url: string, name?: string) => Promise<any>;\r\n importing?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport const UrlImport: React.FC<UrlImportProps> = ({\r\n onImport,\r\n importing,\r\n className,\r\n}) => {\r\n const [url, setUrl] = useState('');\r\n const [error, setError] = useState('');\r\n\r\n const handleSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!url.trim()) return;\r\n\r\n try {\r\n new URL(url.trim());\r\n } catch {\r\n setError('Please enter a valid URL');\r\n return;\r\n }\r\n\r\n setError('');\r\n const result = await onImport(url.trim());\r\n if (result) setUrl('');\r\n };\r\n\r\n return (\r\n <form onSubmit={handleSubmit} className={cn('flex gap-2', className)}>\r\n <div className=\"relative flex-1\">\r\n <Link className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground\" />\r\n <input\r\n type=\"text\"\r\n value={url}\r\n onChange={(e) => { setUrl(e.target.value); setError(''); }}\r\n placeholder=\"https://example.com/image.png\"\r\n disabled={importing}\r\n className={cn(\r\n 'w-full pl-8 pr-3 py-2 text-sm rounded-md border bg-transparent',\r\n 'placeholder:text-muted-foreground',\r\n 'focus:outline-none focus:ring-2 focus:ring-ring',\r\n error\r\n ? 'border-destructive'\r\n : 'border-border'\r\n )}\r\n />\r\n </div>\r\n <button\r\n type=\"submit\"\r\n disabled={!url.trim() || importing}\r\n className={cn(\r\n 'px-3 py-2 text-sm font-medium rounded-md transition-colors',\r\n 'bg-primary text-primary-foreground hover:bg-primary/90',\r\n 'disabled:opacity-50 disabled:cursor-not-allowed',\r\n 'flex items-center gap-1.5'\r\n )}\r\n >\r\n {importing ? <Loader2 className=\"w-3.5 h-3.5 animate-spin\" /> : null}\r\n Import\r\n </button>\r\n {error && <p className=\"text-xs text-destructive mt-1 absolute\">{error}</p>}\r\n </form>\r\n );\r\n};\r\n","// =============================================================================\r\n// ASSET PICKER — Main Content (shared between inline and dialog modes)\r\n// =============================================================================\r\n\r\nimport React, { useState, useCallback, useMemo } from 'react';\r\nimport type { AssetPickerProps, AssetItem, AssetPickerSelection, AssetViewMode, AssetMimeFilter, AssetScope } from './types';\r\nimport { ASSET_MIME_FILTERS } from './types';\r\nimport { useAssets } from './useAssets';\r\nimport { AssetGrid } from './AssetGrid';\r\nimport { UploadZone } from './UploadZone';\r\nimport { UrlImport } from './UrlImport';\r\nimport { cn } from '../../utils/cn';\r\nimport {\r\n RefreshCw,\r\n LayoutGrid,\r\n List,\r\n Search,\r\n Link,\r\n Loader2,\r\n AlertCircle,\r\n ImageOff,\r\n Filter,\r\n} from 'lucide-react';\r\n\r\ntype Tab = 'browse' | 'upload' | 'url';\r\ntype ScopeTab = 'collection' | 'product';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Scope-specific asset panel (fetches & renders assets for one scope)\r\n// ---------------------------------------------------------------------------\r\nconst ScopedAssetBrowser: React.FC<{\r\n scope: AssetScope;\r\n accept?: string;\r\n pageSize: number;\r\n viewMode: AssetViewMode;\r\n search: string;\r\n selectedIds: Set<string>;\r\n onToggleSelect: (asset: AssetItem) => void;\r\n onDelete?: (assetId: string) => void;\r\n allowDelete: boolean;\r\n emptyText?: string;\r\n}> = ({ scope, accept, pageSize, viewMode, search, selectedIds, onToggleSelect, onDelete, allowDelete, emptyText }) => {\r\n const { assets, loading, error, refresh } = useAssets({ scope, accept, pageSize });\r\n\r\n const filteredAssets = useMemo(() => {\r\n if (!search.trim()) return assets;\r\n const q = search.toLowerCase();\r\n return assets.filter(a =>\r\n (a.name || '').toLowerCase().includes(q) ||\r\n (a.cleanName || '').toLowerCase().includes(q) ||\r\n (a.mimeType || '').toLowerCase().includes(q)\r\n );\r\n }, [assets, search]);\r\n\r\n if (loading && assets.length === 0) {\r\n return (\r\n <div className=\"flex items-center justify-center py-12\">\r\n <Loader2 className=\"w-6 h-6 text-muted-foreground animate-spin\" />\r\n </div>\r\n );\r\n }\r\n\r\n if (error) {\r\n return (\r\n <div className=\"flex items-center gap-2 p-3 rounded-md bg-destructive/10 text-destructive text-sm\">\r\n <AlertCircle className=\"w-4 h-4 flex-shrink-0\" />\r\n {error}\r\n <button onClick={refresh} className=\"ml-auto underline text-xs\">Retry</button>\r\n </div>\r\n );\r\n }\r\n\r\n if (filteredAssets.length === 0) {\r\n return (\r\n <div className=\"flex flex-col items-center justify-center py-12 text-muted-foreground\">\r\n <ImageOff className=\"w-8 h-8 mb-2\" />\r\n <p className=\"text-sm\">{emptyText || 'No assets found'}</p>\r\n {search && <p className=\"text-xs mt-1\">Try adjusting your search</p>}\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <AssetGrid\r\n assets={filteredAssets}\r\n viewMode={viewMode}\r\n selectedIds={selectedIds}\r\n onToggleSelect={onToggleSelect}\r\n onDelete={allowDelete ? onDelete : undefined}\r\n allowDelete={allowDelete}\r\n />\r\n );\r\n};\r\n\r\n// ---------------------------------------------------------------------------\r\n// Main content component\r\n// ---------------------------------------------------------------------------\r\nexport const AssetPickerContent: React.FC<AssetPickerProps & {\r\n onConfirm?: (selection: AssetPickerSelection[]) => void;\r\n}> = ({\r\n scope,\r\n productScope,\r\n allowUpload = true,\r\n allowUrlImport = true,\r\n multiple = false,\r\n accept: acceptProp,\r\n showTypeFilter,\r\n value,\r\n onSelect,\r\n allowDelete = false,\r\n defaultView = 'grid',\r\n emptyText,\r\n pageSize = 50,\r\n onConfirm,\r\n}) => {\r\n const { assets, upload, uploadFromUrl, uploading, uploadProgress } = useAssets({\r\n scope,\r\n accept: acceptProp,\r\n pageSize,\r\n });\r\n\r\n const [tab, setTab] = useState<Tab>('browse');\r\n const [viewMode, setViewMode] = useState<AssetViewMode>(defaultView);\r\n const [search, setSearch] = useState('');\r\n const [mimeFilter, setMimeFilter] = useState<AssetMimeFilter>('all');\r\n const [selectedIds, setSelectedIds] = useState<Set<string>>(() => {\r\n if (!value) return new Set();\r\n return new Set(Array.isArray(value) ? value : [value]);\r\n });\r\n\r\n const hasProductScope = !!productScope;\r\n const [scopeTab, setScopeTab] = useState<ScopeTab>('collection');\r\n\r\n const effectiveAccept = useMemo(() => {\r\n if (acceptProp) return acceptProp;\r\n const entry = ASSET_MIME_FILTERS.find(f => f.value === mimeFilter);\r\n return entry?.prefix;\r\n }, [acceptProp, mimeFilter]);\r\n\r\n const shouldShowFilter = showTypeFilter ?? !acceptProp;\r\n\r\n const activeScope: AssetScope = useMemo(() => {\r\n if (hasProductScope && scopeTab === 'product') {\r\n return { type: 'product', collectionId: productScope!.collectionId, productId: productScope!.productId };\r\n }\r\n return scope;\r\n }, [scope, productScope, scopeTab, hasProductScope]);\r\n\r\n const toSelection = useCallback((asset: AssetItem): AssetPickerSelection => ({\r\n id: asset.id,\r\n url: asset.url,\r\n name: asset.name,\r\n mimeType: asset.mimeType,\r\n size: asset.size,\r\n metadata: asset.metadata,\r\n thumbnails: asset.thumbnails,\r\n }), []);\r\n\r\n const handleToggleSelect = useCallback((asset: AssetItem) => {\r\n setSelectedIds(prev => {\r\n const next = new Set(prev);\r\n if (next.has(asset.id)) {\r\n next.delete(asset.id);\r\n } else {\r\n if (!multiple) next.clear();\r\n next.add(asset.id);\r\n }\r\n\r\n if (!onConfirm) {\r\n const sel = toSelection(asset);\r\n if (multiple) {\r\n if (next.has(asset.id)) {\r\n onSelect?.([sel]);\r\n }\r\n } else {\r\n onSelect?.(next.has(asset.id) ? sel : { id: '', url: '', name: '' });\r\n }\r\n }\r\n\r\n return next;\r\n });\r\n }, [multiple, onSelect, onConfirm, toSelection]);\r\n\r\n const handleUploadFiles = useCallback(async (files: File[]) => {\r\n for (const file of files) {\r\n const result = await upload(file);\r\n if (result && !multiple) {\r\n setSelectedIds(new Set([result.id]));\r\n onSelect?.(toSelection(result));\r\n }\r\n }\r\n setTab('browse');\r\n }, [upload, multiple, onSelect, toSelection]);\r\n\r\n const handleUrlImport = useCallback(async (url: string) => {\r\n const result = await uploadFromUrl(url);\r\n if (result) {\r\n setTab('browse');\r\n if (!multiple) {\r\n setSelectedIds(new Set([result.id]));\r\n onSelect?.(toSelection(result));\r\n }\r\n }\r\n return result;\r\n }, [uploadFromUrl, multiple, onSelect, toSelection]);\r\n\r\n const handleDelete = useCallback(async (assetId: string) => {\r\n setSelectedIds(prev => {\r\n const next = new Set(prev);\r\n next.delete(assetId);\r\n return next;\r\n });\r\n }, []);\r\n\r\n const handleConfirm = useCallback(() => {\r\n const selectedAssets = assets.filter(a => selectedIds.has(a.id)).map(toSelection);\r\n onConfirm?.(selectedAssets);\r\n }, [assets, selectedIds, onConfirm, toSelection]);\r\n\r\n const tabs: { key: Tab; label: string; show: boolean }[] = [\r\n { key: 'browse', label: 'Browse', show: true },\r\n { key: 'upload', label: 'Upload', show: allowUpload },\r\n { key: 'url', label: 'URL', show: allowUrlImport },\r\n ];\r\n\r\n return (\r\n <div className=\"smartlinks-ui-asset-picker-content flex flex-col gap-3\">\r\n {/* Toolbar */}\r\n <div className=\"flex items-center gap-2 flex-wrap\">\r\n {/* Tab buttons */}\r\n <div className=\"flex gap-1 bg-muted rounded-md p-0.5\">\r\n {tabs.filter(t => t.show).map(t => (\r\n <button\r\n key={t.key}\r\n onClick={() => setTab(t.key)}\r\n className={cn(\r\n 'px-2.5 py-1 text-xs font-medium rounded transition-colors flex items-center gap-1',\r\n tab === t.key\r\n ? 'bg-background text-foreground shadow-sm'\r\n : 'text-muted-foreground hover:text-foreground'\r\n )}\r\n >\r\n {t.label}\r\n </button>\r\n ))}\r\n </div>\r\n\r\n <div className=\"flex-1\" />\r\n\r\n {/* MIME type filter dropdown */}\r\n {tab === 'browse' && shouldShowFilter && (\r\n <div className=\"relative flex items-center gap-1\">\r\n <Filter className=\"w-3.5 h-3.5 text-muted-foreground\" />\r\n <select\r\n value={mimeFilter}\r\n onChange={(e) => setMimeFilter(e.target.value as AssetMimeFilter)}\r\n className=\"text-xs py-1 pl-1 pr-5 rounded-md border border-border bg-transparent text-foreground focus:outline-none focus:ring-1 focus:ring-ring appearance-none cursor-pointer\"\r\n >\r\n {ASSET_MIME_FILTERS.map(f => (\r\n <option key={f.value} value={f.value}>{f.label}</option>\r\n ))}\r\n </select>\r\n </div>\r\n )}\r\n\r\n {/* Search (browse mode) */}\r\n {tab === 'browse' && (\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-2 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-muted-foreground\" />\r\n <input\r\n type=\"text\"\r\n value={search}\r\n onChange={(e) => setSearch(e.target.value)}\r\n placeholder=\"Search…\"\r\n className=\"pl-7 pr-2 py-1 text-xs rounded-md border border-border bg-transparent focus:outline-none focus:ring-1 focus:ring-ring w-36\"\r\n />\r\n </div>\r\n )}\r\n\r\n {/* View toggle */}\r\n {tab === 'browse' && (\r\n <div className=\"flex gap-0.5 bg-muted rounded p-0.5\">\r\n <button\r\n onClick={() => setViewMode('grid')}\r\n className={cn('p-1 rounded', viewMode === 'grid' ? 'bg-background shadow-sm' : '')}\r\n title=\"Grid view\"\r\n >\r\n <LayoutGrid className=\"w-3.5 h-3.5 text-muted-foreground\" />\r\n </button>\r\n <button\r\n onClick={() => setViewMode('list')}\r\n className={cn('p-1 rounded', viewMode === 'list' ? 'bg-background shadow-sm' : '')}\r\n title=\"List view\"\r\n >\r\n <List className=\"w-3.5 h-3.5 text-muted-foreground\" />\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Scope tabs (collection vs product) */}\r\n {tab === 'browse' && hasProductScope && (\r\n <div className=\"flex gap-1 border-b border-border\">\r\n <button\r\n onClick={() => setScopeTab('collection')}\r\n className={cn(\r\n 'px-3 py-1.5 text-xs font-medium border-b-2 transition-colors -mb-px',\r\n scopeTab === 'collection'\r\n ? 'border-primary text-primary'\r\n : 'border-transparent text-muted-foreground hover:text-foreground'\r\n )}\r\n >\r\n Collection Assets\r\n </button>\r\n <button\r\n onClick={() => setScopeTab('product')}\r\n className={cn(\r\n 'px-3 py-1.5 text-xs font-medium border-b-2 transition-colors -mb-px',\r\n scopeTab === 'product'\r\n ? 'border-primary text-primary'\r\n : 'border-transparent text-muted-foreground hover:text-foreground'\r\n )}\r\n >\r\n Product Assets\r\n </button>\r\n </div>\r\n )}\r\n\r\n {/* Content */}\r\n {tab === 'browse' && (\r\n <ScopedAssetBrowser\r\n key={`${activeScope.type}-${(activeScope as any).productId || ''}-${effectiveAccept || 'all'}`}\r\n scope={activeScope}\r\n accept={effectiveAccept}\r\n pageSize={pageSize}\r\n viewMode={viewMode}\r\n search={search}\r\n selectedIds={selectedIds}\r\n onToggleSelect={handleToggleSelect}\r\n onDelete={handleDelete}\r\n allowDelete={allowDelete}\r\n emptyText={emptyText}\r\n />\r\n )}\r\n\r\n {tab === 'upload' && (\r\n <UploadZone\r\n onFiles={handleUploadFiles}\r\n accept={acceptProp}\r\n multiple={multiple}\r\n uploading={uploading}\r\n uploadProgress={uploadProgress}\r\n />\r\n )}\r\n\r\n {tab === 'url' && (\r\n <UrlImport\r\n onImport={handleUrlImport}\r\n importing={uploading}\r\n />\r\n )}\r\n\r\n {/* Confirm bar (dialog mode) */}\r\n {onConfirm && (\r\n <div className=\"flex items-center justify-between pt-2 border-t border-border\">\r\n <span className=\"text-xs text-muted-foreground\">\r\n {selectedIds.size} selected\r\n </span>\r\n <button\r\n onClick={handleConfirm}\r\n disabled={selectedIds.size === 0}\r\n className={cn(\r\n 'px-4 py-1.5 text-sm font-medium rounded-md transition-colors',\r\n 'bg-primary text-primary-foreground hover:bg-primary/90',\r\n 'disabled:opacity-50 disabled:cursor-not-allowed'\r\n )}\r\n >\r\n Confirm\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n","// =============================================================================\r\n// ASSET PICKER — Main Component\r\n// =============================================================================\r\n// Supports inline and dialog modes. Dialog mode renders a trigger element and\r\n// opens a modal with the picker content.\r\n\r\nimport React, { useState, useCallback } from 'react';\r\nimport type { AssetPickerProps, AssetPickerSelection } from './types';\r\nimport { AssetPickerContent } from './AssetPickerContent';\r\nimport { cn } from '../../utils/cn';\r\nimport { X } from 'lucide-react';\r\n\r\n// Lightweight built-in dialog — no dependency on shadcn or radix\r\nconst PickerDialog: React.FC<{\r\n open: boolean;\r\n onClose: () => void;\r\n children: React.ReactNode;\r\n}> = ({ open, onClose, children }) => {\r\n if (!open) return null;\r\n\r\n return (\r\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\r\n {/* Backdrop */}\r\n <div\r\n className=\"absolute inset-0 bg-black/50 backdrop-blur-sm\"\r\n onClick={onClose}\r\n />\r\n {/* Panel */}\r\n <div className=\"relative z-10 w-full max-w-2xl max-h-[80vh] bg-background rounded-xl shadow-2xl border border-border flex flex-col overflow-hidden mx-4\">\r\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-border\">\r\n <h3 className=\"text-sm font-semibold text-foreground\">\r\n Select Asset\r\n </h3>\r\n <button\r\n onClick={onClose}\r\n className=\"p-1 rounded hover:bg-accent transition-colors\"\r\n >\r\n <X className=\"w-4 h-4 text-muted-foreground\" />\r\n </button>\r\n </div>\r\n <div className=\"flex-1 overflow-y-auto p-4\">\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n/**\r\n * SmartLinks Asset Picker\r\n *\r\n * Browse, upload, and select media assets scoped to a collection, product, or proof.\r\n *\r\n * @example\r\n * ```tsx\r\n * // Inline mode\r\n * <AssetPicker\r\n * scope={{ type: 'collection', collectionId: 'abc123' }}\r\n * onSelect={(asset) => console.log('Selected:', asset)}\r\n * />\r\n *\r\n * // Dialog mode\r\n * <AssetPicker\r\n * scope={{ type: 'collection', collectionId: 'abc123' }}\r\n * mode=\"dialog\"\r\n * trigger={<button>Choose Image</button>}\r\n * onSelect={(asset) => console.log('Selected:', asset)}\r\n * />\r\n * ```\r\n */\r\nexport const AssetPicker: React.FC<AssetPickerProps> = (props) => {\r\n const { mode = 'inline', open: controlledOpen, onClose, trigger, onSelect, multiple, className } = props;\r\n\r\n const [internalOpen, setInternalOpen] = useState(false);\r\n const isOpen = controlledOpen ?? internalOpen;\r\n\r\n const handleOpen = useCallback(() => {\r\n setInternalOpen(true);\r\n }, []);\r\n\r\n const handleClose = useCallback(() => {\r\n setInternalOpen(false);\r\n onClose?.();\r\n }, [onClose]);\r\n\r\n const handleConfirm = useCallback((selections: AssetPickerSelection[]) => {\r\n if (multiple) {\r\n onSelect?.(selections);\r\n } else {\r\n onSelect?.(selections[0] || { id: '', url: '', name: '' });\r\n }\r\n handleClose();\r\n }, [onSelect, multiple, handleClose]);\r\n\r\n // Inline mode — render content directly\r\n if (mode === 'inline') {\r\n return (\r\n <div className={cn('smartlinks-ui-asset-picker', className)}>\r\n <AssetPickerContent {...props} />\r\n </div>\r\n );\r\n }\r\n\r\n // Dialog mode\r\n return (\r\n <>\r\n {trigger && (\r\n <span onClick={handleOpen} className=\"cursor-pointer\">\r\n {trigger}\r\n </span>\r\n )}\r\n <PickerDialog open={isOpen} onClose={handleClose}>\r\n <AssetPickerContent {...props} onConfirm={handleConfirm} />\r\n </PickerDialog>\r\n </>\r\n );\r\n};\r\n"]}
@@ -1,2 +1,2 @@
1
- export { a as AssetItem, c as AssetPicker, d as AssetPickerMode, e as AssetPickerProps, f as AssetPickerSelection, g as AssetScope, h as AssetViewMode, u as useAssets } from '../../index-B8GE7cLC.js';
1
+ export { a as AssetItem, c as AssetPicker, d as AssetPickerMode, e as AssetPickerProps, f as AssetPickerSelection, g as AssetScope, h as AssetViewMode, u as useAssets } from '../../index-D_LeS2OR.js';
2
2
  import 'react';
@@ -1,4 +1,4 @@
1
- export { AssetPicker, useAssets } from '../../chunk-WOCLZGRB.js';
1
+ export { AssetPicker, useAssets } from '../../chunk-UXI5ZP3X.js';
2
2
  import '../../chunk-L7FQ52F5.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- export { ConditionsEditor } from '../../chunk-IVUFK6SS.js';
1
+ export { ConditionsEditor } from '../../chunk-ILQNQN27.js';
2
2
  import '../../chunk-L7FQ52F5.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map