Style obiektów na literały szablonu — Numio
Przepisuje style obiektów css({...}) i styled.x({...}) na oznaczone literały szablonu dla styled-components, Emotion lub Linaria. Klucze camelCase stają się wielkością liter kebab, liczby otrzymują piksele, z wyjątkiem właściwości bez jednostek, a wyrażenia JS stają się interpolacjami ${}.
Migracja stylów obiektów Emotion lub Glamour do styled-components lub Linaria, które oczekują literału szablonu CSS.
Kiedy go używać
- Migracja stylów obiektów Emotion lub Glamour do styled-components lub Linaria, które oczekują literału szablonu CSS.
- Konwersja definicji styled(Component)({...}) na składnię szablonu, aby można ją było czytać i edytować jak zwykle CSS.
Jak używać
- Wklej JavaScript lub TypeScript (dozwolone JSX/TSX), które wywołują css({...}), styled.tag({...}) lub styled(Component)({...}) do edytora stylów obiektów.
- W ustawieniach pozostaw włączone opcje transpilacji tagów css i styled albo wyłącz jedną, aby pozostawić odpowiadające wywołania bez zmian. Wyłączenie opcji powoduje wyświetlenie ostrzeżenia.
- Skopiuj panel Dosłowność szablonu. Kod poza skonwertowanymi wywołaniami jest zachowywany, ale przeformatowany przez Prettier.
Style obiektów (JavaScript lub TypeScript)
const Button = styled.button({
padding: 8,
fontSize: '14px',
backgroundColor: theme.primary,
'&:hover': {
opacity: 0.8,
},
})
const card = css({
display: 'flex',
marginTop: 16,
})Oznaczony literał szablonu
const Button = styled.button`
padding: 8px;
font-size: 14px;
background-color: ${theme.primary};
&:hover {
opacity: 0.8;
}
`
const card = css`
display: flex;
margin-top: 16px;
`Szczegóły i ograniczenia
Konwersja przebiega w Twojej przeglądarce: pracownik sieciowy stosuje style-wtyczek babel do szablonu z samodzielnym Babelem (parsowanie składni TypeScript, gdy zwykłe JavaScript zawiedzie), a wynik jest formatowany przez Prettier bez średników.
Konwertowane są tylko wywołania z jednym argumentem zwykłego obiektu. styled("div")(obj, props => ...) z funkcją lub kilkoma argumentami oraz tablice css([...]) pozostawia się bez zmian.
Właściwości bezjednostkowe, takie jak zIndex, lineHeight i opacity, zachowują same liczby; inne liczby otrzymują px. Wartości tablicy nie są rozwijane i stają się interpolacją, taką jak ${[0, 4]}.
Prettier normalizuje również niezmieniony kod, na przykład pojedyncze cudzysłowy stają się podwójnymi cudzysłowami.
FAQ
Jakie nazwy połączeń są rozpoznawane?
Wtyczka przekształca wywołania css(...) i styled: styled.button(...), styled("div")(...) i styled(Link)(...). Inne funkcje z argumentami obiektowymi, takie jak someFn({ color: 'red' }), nie ulegają zmianie.
W jaki sposób obsługiwane są zmienne i wartości motywu?
Każda wartość niebędąca literałem, np. theme.primary lub colors.white, jest zachowywana jako wyrażenie JavaScript wewnątrz ${...} w szablonie, więc nadal jest obliczana podczas wykonywania.
Czy obsługiwane są zagnieżdżone selektory, takie jak &:hover?
Tak. Obiekt zagnieżdżony pod kluczem takim jak „&:hover” staje się zagnieżdżonym blokiem w szablonie, oddzielonym od deklaracji nadrzędnych pustą linią.
Czy to działa z TypeScript?
Tak. Jeśli kod nie jest analizowany jako JavaScript, jest analizowany ponownie ze składnią TypeScript Babela. Typy zostają zachowane: interfejsy pozostają, a styled.button<Props>({...}) staje się styled.button<Props>`...`.