UNPKG

wix-style-react

Version:
282 lines (237 loc) • 6.38 kB
@st-import [ --wds-thumbnail-border-radius, --wds-color-border-standard-secondary, --wds-color-border-standard-secondary-hover, --wds-color-border-standard-secondary-active, --wds-color-border-standard-secondary-disabled, --wds-color-fill-standard-primary, --wds-color-fill-standard-primary-disabled, --wds-color-fill-standard-tertiary, --wds-color-blue-250, --wds-space-100, --wds-space-250, --wds-space-300, ] from '@wix/design-system-tokens/all.st.css'; :import { -st-from: "../common/Focusable/Focusable.st.css"; -st-default: Focusable; } :import { -st-from: '../Foundation/stylable/colors.st.css'; -st-named: B00-24, B10-18, THEME-COLOR-10, THEME-COLOR-20, D50, D80, D10-30, F00; } :import { -st-from: "../Foundation/stylable/spacing.st.css"; -st-named: spacing06; } :import { -st-from: "../Text/Text.st.css"; -st-default: Text; } :vars { borderRadius: var(--wds-thumbnail-border-radius, 6px); } .root { -st-extends: Focusable; -st-states: disabled; } .root:not(:disabled) { cursor: pointer; } .root:disabled { cursor: not-allowed; } .thumbnail { -st-states: selected, disabled, size(enum(tiny, small, medium)), hasBackground, hasChildren, contentAlignment(enum(top, center)), newColorsBranding, textPosition(enum(outside, inside)), noPadding; position: relative; display: flex; margin: 0 auto; padding: var(--wds-space-300, 18px); flex-direction: column; align-items: center; width: 100%; height: 100%; background: transparent; border: 0; border-radius: value(borderRadius); box-sizing: border-box; outline: none; } .thumbnail:textPosition(outside) { position: relative; display: flex; padding: 0; } .thumbnail:textPosition(inside):size(tiny) { padding: var(--wds-space-250, 15px); } .thumbnail:textPosition(inside):noPadding{ padding: 0; } .thumbnail::after { pointer-events: none; position: absolute; top: 0; right: 0; bottom: 0; left: 0; box-shadow: 0 0 0 1px var(--wds-color-border-standard-secondary, value(B00-24)) inset; border-radius: value(borderRadius); content: ' '; } .thumbnail:newColorsBranding:not(:disabled):not(:selected):not(:hover)::after { box-shadow: 0 0 0 1px var(--wds-color-border-standard-secondary, value(B10-18)) inset; } .thumbnail:hover::after { box-shadow: 0 0 0 1px var(--wds-color-border-standard-secondary-hover, value(THEME-COLOR-20)) inset; } .thumbnail:focus-visible::before { position: absolute; top: 0; right: 0; bottom: 0; left: 0; box-shadow: 0 0 0 3px var(--wds-color-blue-250, value(F00)); border-radius: value(borderRadius); content: ' '; } .thumbnail:contentAlignment(center) { justify-content: center; } .thumbnail:contentAlignment(top) { justify-content: flex-start; } .thumbnail:selected::after { box-shadow: 0 0 0 2px var(--wds-color-border-standard-secondary-active, value(THEME-COLOR-10)) inset; } .thumbnail:selected:disabled::after { box-shadow: 0 0 0 2px var(--wds-color-border-standard-secondary-disabled, value(D10-30)) inset; } .thumbnail:disabled::after { box-shadow: 0 0 0 1px var(--wds-color-border-standard-secondary-disabled, value(D10-30)) inset; cursor: default; } .thumbnail:disabled .imageContainer { opacity: .42; } .thumbnail:disabled .selectedIcon { color: var(--wds-color-fill-standard-tertiary, value(D80)); /* Since the token has an opacity applied to it, border gets seen through the icon. Therefore to replicate figma, a layer of white background is applied through linear gradients*/ background: linear-gradient(to right, var(--wds-color-fill-standard-primary-disabled, value(D50)) 0%, var(--wds-color-fill-standard-primary-disabled, value(D50)) 100%), linear-gradient(to right, var(--wds-color-fill-standard-tertiary, #FFF) 0%, var(--wds-color-fill-standard-tertiary, #FFF) 100%); } .thumbnail:hasChildren { padding: 0; align-items: stretch; } .thumbnail:hasBackground, .thumbnail:hasChildren { padding: 0; background-color: value(D80); } .customChild { -st-states: disabled; overflow: auto; /* is required to make thumbnail border be always on top of custom child */ border-radius: value(borderRadius); } .customChild:disabled { opacity: 0.3; } .contentContainer { -st-states: textPosition(enum(inside, outside)); min-height: 0; min-width: 0; max-width: 100%; display: flex; flex-direction: column; } .contentContainer:textPosition(outside) { height: 100%; width: 100%; } .thumbnailTextContent { -st-states: textPosition(enum(inside, outside)), size(enum(tiny, small, medium)); width: 100%; text-align: center; display: flex; flex-direction: column; gap: var(--wds-space-100, value(spacing06)); } .thumbnailTextContent:textPosition(outside) { margin-top: var(--wds-space-100, 6px); } .thumbnailTextContent:textPosition(outside):size(tiny) { gap: 0px; } .title, .description, .imageContainer { word-break: break-word; text-align: center; } .title:last-child, .description:last-child, .imageContainer:last-child { padding: 0; } .bottomTitle { -st-extends: Text; -st-states: selected, disabled; text-align: center; padding-top: 6px; } .bottomTitle:skin(standard):selected { color: value(THEME-COLOR-10); } .bottomTitle:skin(standard):disabled { color: value(D10-30); } .imageContainer { -st-states: textPosition(enum(outside, inside)); min-height: 0; min-width: 0; padding-bottom: 12px; } .imageContainer:textPosition(outside) { line-height: 0; width: 100%; height: 100%; overflow: hidden; } .image { height: 100%; width: 100%; object-fit: cover; border-radius: value(borderRadius); } .backgroundImage { -st-states: disabled; width: 100%; height: 100%; background-size: cover; background-position: center; background-repeat: no-repeat; border-radius: value(borderRadius); } .backgroundImage:disabled { opacity: 0.3; } .selectedIcon { position: absolute; top: -4px; right: -4px; background: var(--wds-color-fill-standard-primary, value(THEME-COLOR-10)); width: 18px; height: 18px; border-radius: 50%; color: var(--wds-color-fill-standard-tertiary, value(D80)); z-index: 1; display: flex; align-items: center; justify-content: center; } :global([dir="rtl"]) .selectedIcon { left: -10px; right: auto; } /* st-namespace-reference="../../../src/Thumbnail/Thumbnail.st.css" */