UNPKG

protokit-ui

Version:

A comprehensive React component library with hand-drawn design system. Features 30+ beautiful, accessible components including buttons, forms, navigation, data display, and layout components. Built with TypeScript and styled with CSS for modern React appl

137 lines (118 loc) 2.9 kB
.paper-textarea-wrapper { position: relative; width: 100%; } .paper-textarea { font-family: var(--font-family); width: 100%; border: 2px solid var(--ink-black); border-radius: var(--radius-md); padding: var(--spacing-sm) var(--spacing-md); background: var(--paper-white); font-size: var(--font-size-base); transition: all var(--transition-normal); outline: none; color: var(--ink-black); position: relative; resize: vertical; min-height: 100px; line-height: 1.5; } .paper-textarea::placeholder { color: var(--ink-light); font-family: var(--font-family); } /* Focus state */ .paper-textarea:focus { border-style: dashed; border-width: 3px; box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.1); transform: translateY(-1px); } /* Error state */ .paper-textarea--error { border-color: var(--error-red); animation: shake 0.5s ease-in-out; } .paper-textarea--error:focus { border-color: var(--error-red); box-shadow: 0 0 0 2px rgba(255, 107, 107, 0.2); } /* Disabled state */ .paper-textarea--disabled { border-color: var(--pencil-gray); background: var(--paper-gray); color: var(--pencil-gray); cursor: not-allowed; resize: none; } .paper-textarea--disabled::placeholder { color: var(--pencil-gray); } /* Error message */ .paper-textarea__error { color: var(--error-red); font-size: var(--font-size-sm); margin-top: var(--spacing-xs); font-family: var(--font-family); position: relative; padding-left: var(--spacing-sm); } .paper-textarea__error::before { content: '⚠'; position: absolute; left: 0; top: 0; } /* Character counter */ .paper-textarea__counter { color: var(--ink-light); font-size: var(--font-size-sm); margin-top: var(--spacing-xs); font-family: var(--font-family); text-align: right; } /* Hand-drawn border effect */ .paper-textarea::before { content: ''; position: absolute; top: -1px; left: -1px; right: -1px; bottom: -1px; border: 1px solid var(--ink-black); border-radius: var(--radius-md); opacity: 0.3; pointer-events: none; transition: opacity var(--transition-normal); } .paper-textarea:focus::before { opacity: 0.1; } /* Shake animation for error state */ @keyframes shake { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(-2px); } 75% { transform: translateX(2px); } } /* Hover state */ .paper-textarea:hover:not(.paper-textarea--disabled) { border-color: var(--ink-gray); transform: translateY(-1px); } /* Success state */ .paper-textarea--success { border-color: var(--success-green); } .paper-textarea--success:focus { border-color: var(--success-green); box-shadow: 0 0 0 2px rgba(81, 207, 102, 0.2); } /* Warning state */ .paper-textarea--warning { border-color: var(--warning-yellow); } .paper-textarea--warning:focus { border-color: var(--warning-yellow); box-shadow: 0 0 0 2px rgba(255, 212, 59, 0.2); }