UNPKG

@dharshana333/react-ui-components

Version:

A collection of premium, customizable React UI components including Line and PriceLookup with animations, themes, and accessibility features

918 lines (792 loc) 16.9 kB
.dharshu-line { --line-color: #000000; --line-thickness: 2px; --line-length: 100%; --line-margin: 16px; --line-gradient: linear-gradient(to right, #ff6b6b, #4ecdc4); --animation-duration: 2s; --line-shadow: none; position: relative; display: inline-block; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); box-shadow: var(--line-shadow); } .dharshu-line--horizontal { width: var(--line-length); height: var(--line-thickness); margin: var(--line-margin) 0; } .dharshu-line--vertical { width: var(--line-thickness); height: var(--line-length); margin: 0 var(--line-margin); } .dharshu-line--solid { background-color: var(--line-color); } .dharshu-line--dashed { background: repeating-linear-gradient( to right, var(--line-color) 0, var(--line-color) 10px, transparent 10px, transparent 20px ); } .dharshu-line--dashed.dharshu-line--vertical { background: repeating-linear-gradient( to bottom, var(--line-color) 0, var(--line-color) 10px, transparent 10px, transparent 20px ); } .dharshu-line--dotted { background: repeating-linear-gradient( to right, var(--line-color) 0, var(--line-color) 4px, transparent 4px, transparent 12px ); } .dharshu-line--dotted.dharshu-line--vertical { background: repeating-linear-gradient( to bottom, var(--line-color) 0, var(--line-color) 4px, transparent 4px, transparent 12px ); } .dharshu-line--gradient { background: var(--line-gradient); position: relative; } .dharshu-line--gradient::after { content: ""; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: inherit; filter: blur(0.5px); opacity: 0.7; z-index: -1; } .dharshu-line--animated { background: var(--line-gradient); background-size: 200% 200%; animation: dharshu-line-move var(--animation-duration) infinite linear; position: relative; overflow: hidden; } .dharshu-line--animated::after { content: ""; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient( 90deg, transparent, rgba(255, 255, 255, 0.3), transparent ); animation: dharshu-shine 3s infinite; } @keyframes dharshu-line-move { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } @keyframes dharshu-shine { 0% { transform: translateX(-100%); } 100% { transform: translateX(300%); } } .dharshu-line--glow { background-color: var(--line-color); position: relative; } .dharshu-line--glow::before, .dharshu-line--glow::after { content: ""; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 100%; height: 100%; background-color: var(--line-color); z-index: -1; } .dharshu-line--glow::before { filter: blur(8px); opacity: 0.4; } .dharshu-line--glow::after { filter: blur(20px); opacity: 0.2; } .dharshu-line--glow-low::before { opacity: 0.2; filter: blur(4px); } .dharshu-line--glow-low::after { opacity: 0.1; filter: blur(10px); } .dharshu-line--glow-medium::before { opacity: 0.4; filter: blur(8px); } .dharshu-line--glow-medium::after { opacity: 0.2; filter: blur(20px); } .dharshu-line--glow-high::before { opacity: 0.6; filter: blur(12px); } .dharshu-line--glow-high::after { opacity: 0.3; filter: blur(30px); } .dharshu-line--wave { background: none; position: relative; overflow: hidden; } .dharshu-line--wave::before { content: ""; position: absolute; top: 0; left: -100%; width: 200%; height: 100%; background: repeating-linear-gradient( 90deg, transparent, transparent 8px, var(--line-color) 8px, var(--line-color) 16px ); animation: dharshu-wave var(--animation-duration) infinite linear; } .dharshu-line--wave::after { content: ""; position: absolute; top: 0; left: -100%; width: 200%; height: 100%; background: repeating-linear-gradient( 90deg, transparent, transparent 4px, rgba(255, 255, 255, 0.3) 4px, rgba(255, 255, 255, 0.3) 12px ); animation: dharshu-wave calc(var(--animation-duration) * 1.5) infinite linear reverse; } @keyframes dharshu-wave { 0% { transform: translateX(0); } 100% { transform: translateX(50%); } } .dharshu-line--pulse { background-color: var(--line-color); animation: dharshu-pulse var(--animation-duration) infinite ease-in-out alternate; position: relative; } .dharshu-line--pulse::after { content: ""; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 100%; height: 100%; background-color: var(--line-color); filter: blur(4px); opacity: 0.5; z-index: -1; animation: dharshu-pulse-glow var(--animation-duration) infinite ease-in-out alternate; } @keyframes dharshu-pulse { from { opacity: 0.6; transform: scaleY(0.8); } to { opacity: 1; transform: scaleY(1.2); filter: brightness(1.2); } } @keyframes dharshu-pulse-glow { from { opacity: 0.3; filter: blur(2px); } to { opacity: 0.7; filter: blur(8px); } } .dharshu-line--pattern-chevron { background: repeating-linear-gradient( 45deg, var(--line-color) 0, var(--line-color) 8px, transparent 8px, transparent 16px ); } .dharshu-line--pattern-zigzag { background: none; position: relative; overflow: hidden; } .dharshu-line--pattern-zigzag::before { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-image: linear-gradient( 45deg, transparent 40%, var(--line-color) 40%, var(--line-color) 60%, transparent 60% ), linear-gradient( -45deg, transparent 40%, var(--line-color) 40%, var(--line-color) 60%, transparent 60% ); background-size: 12px 100%; } .dharshu-line--pattern-dots { background: radial-gradient( circle at center, var(--line-color) 30%, transparent 30% ); background-size: 10px 10px; background-repeat: repeat-x; background-position: center; } .dharshu-line--pattern-arrows { background: none; position: relative; overflow: hidden; } .dharshu-line--pattern-arrows::before { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: repeating-linear-gradient( 90deg, var(--line-color) 0, var(--line-color) 3px, transparent 3px, transparent 6px, var(--line-color) 6px, var(--line-color) 9px, transparent 9px, transparent 15px ); } .dharshu-line--pattern-arrows::after { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: repeating-linear-gradient( 45deg, transparent 40%, var(--line-color) 40%, var(--line-color) 60%, transparent 60% ); background-size: 8px 100%; opacity: 0.7; } .dharshu-line--hover-scale:hover { transform: scale(1.05); filter: brightness(1.1); } .dharshu-line--hover-glow:hover { box-shadow: 0 0 10px var(--line-color), 0 0 20px var(--line-color), 0 0 30px var(--line-color); filter: brightness(1.2); } .dharshu-line--hover-color:hover { filter: hue-rotate(90deg) saturate(1.2); } .dharshu-line--hover-thickness:hover { height: calc(var(--line-thickness) * 1.5); } .dharshu-line--hover-thickness.dharshu-line--vertical:hover { width: calc(var(--line-thickness) * 1.5); height: var(--line-length); } .dharshu-line--hover-default:hover { opacity: 0.8; transform: translateY(-2px); filter: brightness(1.1); } .dharshu-line--clickable { cursor: pointer; user-select: none; } .dharshu-line--clickable:hover { transform: translateY(-1px); } .dharshu-line--clickable:active { transform: translateY(0px); filter: brightness(0.9); } .dharshu-line--clickable:focus { outline: 2px solid var(--line-color); outline-offset: 4px; border-radius: 2px; } .dharshu-line--clickable:focus:not(:focus-visible) { outline: none; } .dharshu-line--text-left, .dharshu-line--text-center, .dharshu-line--text-right { display: flex; align-items: center; gap: 16px; } .dharshu-line__text { white-space: nowrap; color: var(--line-color); font-size: 14px; font-weight: 500; } .dharshu-line__line { flex: 1; height: var(--line-thickness); background-color: var(--line-color); } @media (max-width: 768px) { .dharshu-line { --line-margin: 12px; } } @media (max-width: 480px) { .dharshu-line { --line-margin: 8px; } .dharshu-line--hover-scale:hover { transform: scale(1.02); } } @media (prefers-color-scheme: dark) { .dharshu-line--solid { filter: brightness(1.2); } .dharshu-line--gradient { filter: brightness(1.1); } } @media (prefers-reduced-motion: reduce) { .dharshu-line--animated, .dharshu-line--wave, .dharshu-line--pulse { animation: none; } .dharshu-line--animated::after { animation: none; } .dharshu-line { transition: none; } .dharshu-line--hover-scale:hover { transform: none; } } @media (prefers-contrast: high) { .dharshu-line { filter: contrast(2); } } /* PriceLookup Base Styles */ .price-lookup { font-family: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace; font-variant-numeric: tabular-nums; display: inline-block; transition: all 0.2s ease; } /* Container */ .price-lookup__container { display: flex; align-items: center; gap: 8px; } .price-lookup__content { display: flex; flex-direction: column; } .price-lookup__main { display: flex; align-items: baseline; gap: 4px; flex-wrap: wrap; } .price-lookup__secondary { display: flex; align-items: center; gap: 8px; margin-top: 4px; flex-wrap: wrap; } /* Size Variants */ .price-lookup--small { font-size: 0.875rem; line-height: 1.25rem; } .price-lookup--medium { font-size: 1.25rem; line-height: 1.75rem; } .price-lookup--large { font-size: 1.5rem; line-height: 2rem; } @media (min-width: 768px) { .price-lookup--large { font-size: 1.875rem; line-height: 2.25rem; } } .price-lookup--xlarge { font-size: 1.875rem; line-height: 2.25rem; } @media (min-width: 768px) { .price-lookup--xlarge { font-size: 2.25rem; line-height: 2.5rem; } } /* Style Variants */ .price-lookup--default { font-weight: 600; color: rgb(17 24 39); } .price-lookup--minimal { font-weight: 300; color: rgb(75 85 99); } .price-lookup--bold { font-weight: 700; color: rgb(17 24 39); } .price-lookup--highlight { font-weight: 600; color: rgb(37 99 235); } .price-lookup--gradient { font-weight: 700; background: linear-gradient(135deg, rgb(37 99 235) 0%, rgb(147 51 234) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; color: transparent; } /* Theme Variants */ .price-lookup--success { color: rgb(22 163 74); } .price-lookup--danger { color: rgb(220 38 38); } .price-lookup--warning { color: rgb(217 119 6); } .price-lookup--primary { color: rgb(37 99 235); } /* Price Elements */ .price-lookup__currency { font-weight: inherit; } .price-lookup__amount { font-weight: inherit; line-height: 1; } .price-lookup__decimal { font-size: 0.875em; opacity: 0.75; } .price-lookup__period { font-size: 0.875em; color: rgb(107 114 128); white-space: nowrap; } .price-lookup__prefix, .price-lookup__suffix { font-size: 0.875em; color: rgb(75 85 99); white-space: nowrap; } .price-lookup__label { font-size: 0.875rem; color: rgb(75 85 99); } /* Original Price */ .price-lookup__original-price { font-size: 0.875em; color: rgb(107 114 128); text-decoration: line-through; } /* Discount Badge */ .price-lookup__discount-badge { font-size: 0.75rem; background-color: rgb(220 252 231); color: rgb(22 101 52); padding: 4px 8px; border-radius: 9999px; font-weight: 500; white-space: nowrap; } /* Price Strikethrough */ .price-lookup__price--strikethrough { text-decoration: line-through; } /* Change Display */ .price-lookup__change { display: flex; align-items: center; gap: 4px; font-size: 0.875rem; } .price-lookup__change--positive { color: rgb(22 163 74); } .price-lookup__change--negative { color: rgb(220 38 38); } .price-lookup__change--neutral { color: rgb(107 114 128); } .price-lookup__change-value { font-weight: 500; } /* Trend Icons */ .price-lookup__trend-icon { width: 16px; height: 16px; transition: all 0.2s ease; } .price-lookup__trend-icon--up { color: rgb(22 163 74); } .price-lookup__trend-icon--down { color: rgb(220 38 38); } .price-lookup__trend-icon--neutral { color: rgb(107 114 128); } /* Status Indicators */ .price-lookup__status { width: 8px; height: 8px; border-radius: 50%; animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; } .price-lookup__status--live { background-color: rgb(34 197 94); } .price-lookup__status--delayed { background-color: rgb(245 158 11); } .price-lookup__status--error { background-color: rgb(239 68 68); } /* Interactive States */ .price-lookup--interactive { cursor: pointer; } .price-lookup--interactive:hover { opacity: 0.8; transform: scale(1.05); } .price-lookup--interactive:focus { outline: none; box-shadow: 0 0 0 2px rgb(59 130 246); border-radius: 4px; } /* Highlight State */ .price-lookup--highlighted { padding: 12px; border-radius: 8px; box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.5), 0 10px 25px rgba(59, 130, 246, 0.2); } /* Loading State */ .price-lookup--loading { opacity: 0.6; } .price-lookup__skeleton { display: flex; align-items: center; gap: 8px; } .price-lookup__skeleton-price { height: 24px; width: 80px; background-color: rgb(229 231 235); border-radius: 4px; animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; } .price-lookup__skeleton-period { height: 16px; width: 48px; background-color: rgb(229 231 235); border-radius: 4px; animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; } /* Keyframe Animations */ @keyframes slideIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes scaleIn { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } @keyframes bounceIn { 0% { opacity: 0; transform: scale(0.3); } 50% { opacity: 1; transform: scale(1.05); } 70% { transform: scale(0.9); } 100% { opacity: 1; transform: scale(1); } } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } /* Animation Classes */ .animate-slide-in { animation: slideIn 0.6s ease-out forwards; } .animate-fade-in { animation: fadeIn 0.8s ease-out forwards; } .animate-scale-in { animation: scaleIn 0.5s ease-out forwards; } .animate-bounce-in { animation: bounceIn 0.7s ease-out forwards; } /* Responsive Adjustments */ @media (max-width: 768px) { .price-lookup--interactive:hover { transform: none; } .price-lookup__main { justify-content: center; } } /* High Contrast Mode */ @media (prefers-contrast: high) { .price-lookup--gradient { background: none; -webkit-background-clip: unset; -webkit-text-fill-color: unset; background-clip: unset; color: rgb(0 0 0); } .price-lookup__status { border: 2px solid currentColor; } } /* Reduced Motion */ @media (prefers-reduced-motion: reduce) { .animate-slide-in, .animate-fade-in, .animate-scale-in, .animate-bounce-in { animation: none; } .price-lookup--interactive { transition: none; } .price-lookup--interactive:hover { transform: none; } .price-lookup__trend-icon { transition: none; } }