kya-validator 0.2.3

Rust core KYA (Know Your Agent) validator with Python bindings, TEE support, and blockchain integration
Documentation
import React from 'react';
import { useEditorStore } from '../store';
import { policyPresets } from '../presets';
import { PolicyPreset } from '../types';
import { Shield, Clock, DollarSign, Building, FileCode } from 'lucide-react';

interface PresetSelectorProps {
  onClose: () => void;
}

function PresetSelector({ onClose }: PresetSelectorProps) {
  const { loadPreset } = useEditorStore();

  const presetInfo: Record<string, { icon: React.ReactNode; color: string; description: string }> = {
    basic: {
      icon: <FileCode className="w-6 h-6" />,
      color: 'blue',
      description: 'Essential validation rules for standard use cases',
    },
    strict: {
      icon: <Shield className="w-6 h-6" />,
      color: 'red',
      description: 'Enhanced security with TEE verification',
    },
    financial: {
      icon: <DollarSign className="w-6 h-6" />,
      color: 'green',
      description: 'Includes blockchain solvency checks',
    },
    enterprise: {
      icon: <Building className="w-6 h-6" />,
      color: 'purple',
      description: 'Comprehensive validation with audit trails',
    },
    development: {
      icon: <Clock className="w-6 h-6" />,
      color: 'orange',
      description: 'Minimal checks for rapid testing',
    },
  };

  const colorClasses: Record<string, { bg: string; text: string; border: string; hover: string }> = {
    blue: {
      bg: 'bg-blue-50',
      text: 'text-blue-600',
      border: 'border-blue-200',
      hover: 'hover:bg-blue-100 hover:border-blue-300',
    },
    red: {
      bg: 'bg-red-50',
      text: 'text-red-600',
      border: 'border-red-200',
      hover: 'hover:bg-red-100 hover:border-red-300',
    },
    green: {
      bg: 'bg-green-50',
      text: 'text-green-600',
      border: 'border-green-200',
      hover: 'hover:bg-green-100 hover:border-green-300',
    },
    purple: {
      bg: 'bg-purple-50',
      text: 'text-purple-600',
      border: 'border-purple-200',
      hover: 'hover:bg-purple-100 hover:border-purple-300',
    },
    orange: {
      bg: 'bg-orange-50',
      text: 'text-orange-600',
      border: 'border-orange-200',
      hover: 'hover:bg-orange-100 hover:border-orange-300',
    },
  };

  return (
    <div className="p-6">
      <div className="grid gap-4 md:grid-cols-2">
        {policyPresets.map((presetPreset: PolicyPreset) => {
          const info = presetInfo[presetPreset.id];
          const colors = colorClasses[info.color];
          
          return (
            <button
              key={presetPreset.id}
              onClick={() => {
                loadPreset(presetPreset.policy);
                onClose();
              }}
              className={`text-left p-5 rounded-xl border-2 transition-all cursor-pointer ${colors.bg} ${colors.border} ${colors.hover}`}
            >
              <div className="flex items-start gap-4">
                <div className={`p-3 rounded-lg ${info.color === 'blue' ? 'bg-blue-500' : info.color === 'red' ? 'bg-red-500' : info.color === 'green' ? 'bg-green-500' : info.color === 'purple' ? 'bg-purple-500' : 'bg-orange-500'}`}>
                  <div className="text-white">
                    {info.icon}
                  </div>
                </div>
                
                <div className="flex-1 min-w-0">
                  <div className="flex items-start justify-between gap-2 mb-1">
                    <h3 className="text-lg font-semibold text-slate-900">
                      {presetPreset.name}
                    </h3>
                    <span className={`px-2 py-0.5 rounded text-xs font-medium ${colors.text} ${info.color === 'blue' ? 'bg-blue-100' : info.color === 'red' ? 'bg-red-100' : info.color === 'green' ? 'bg-green-100' : info.color === 'purple' ? 'bg-purple-100' : 'bg-orange-100'}`}>
                      {presetPreset.policy.rules.length} rules
                    </span>
                  </div>
                  
                  <p className="text-sm text-slate-600 mb-3">
                    {info.description}
                  </p>
                  
                  <div className="flex flex-wrap gap-1">
                    {presetPreset.policy.rules.slice(0, 3).map((rule: { id: string; type: string }) => (
                      <span
                        key={rule.id}
                        className="px-2 py-1 bg-white/60 rounded text-xs text-slate-600"
                      >
                        {rule.type}
                      </span>
                    ))}
                    {presetPreset.policy.rules.length > 3 && (
                      <span className="px-2 py-1 bg-white/60 rounded text-xs text-slate-600">
                        +{presetPreset.policy.rules.length - 3} more
                      </span>
                    )}
                  </div>
                </div>
              </div>
            </button>
          );
        })}
      </div>
    </div>
  );
}

export default PresetSelector;