Closed Nelfimov closed 1 month ago
Статус?
в очереди
Статус?
в очереди
Статус?
в очереди
протестировать на одном компоненте, в том числе использовав в одном из наших проектов
Прочитав доку vanilla/extract, попробовал создать базовую версию кнопки из Candify ButtonElement
, получившейся код: vanilla-extract.zip.
Поэтапно:
next.config.js
плагин createVanillaExtractPlugin
apperience
и shape
стили по структуре напоминающие гиперионовские
const appearanceBlueDefaultStyles = createAppearanceStyles({
fontColor: vars.colors.button.blue.default.font,
backgroundColor: vars.colors.button.blue.default.background,
borderColor: vars.colors.button.blue.default.border,
})
const mediumStyles = createShapeStyles({ size: 40, rounding: vars.radii.f24, })
4. Воспользовался [`@vanilla-extract/recipes`](https://vanilla-extract.style/documentation/packages/recipes/) для создание разных вариантов состояния конпки:
```ts
export const buttonStyles = recipe({
base: baseStyles,
variants: {
variant: appearanceVariant,
hover: appearanceHover,
pressed: appearancePressed,
disabled: appearanceDisabled,
size: shapeStyles,
},
defaultVariants: {
variant: 'blue',
size: 'medium',
},
})
className
кнопки:
<button
className={buttonStyles({
size,
variant,
pressed: pressed ? `${variant}Pressed` : undefined,
hover: hover ? `${variant}Hover` : undefined,
disabled: disabled ? `${variant}Disabled` : undefined,
})}
...
По сути, вышел рабочий вариант ButtonElement
, который может автоматически генерировать типы для пропсов, указанных в variants
, благодаря RecipeVariants. Переписать гиперионовкий генератор стилей для кнопок, думаю, будет не сложно, тк по структуре почти тоже самое.
Для добавления локальных свойств у получившейся кнопки, например фиксированная ширина, нужно будет создавать локальный класс, либо же попробовать создать отдельный sprinkles для кнопки. В теории, можно будет ограничить доступные для редактирования свойства, и получать их через пропсы в runtime через Sprinkles.
Недостатки
type Tokens = {
[key: string]: string | Tokens;
};
switchProp
, явного такого функционала не нашел. Но, по идее, как замену можно использовать фунции обертки, либо же пакет @vanilla-extract/recipes
.@Amiditin теперь давай попробуем реализовать то же самое со stylex и сравним.
Нам важно следующее:
@Nelfimov И пожалуйста, делай пры, не надо прикреплять архивы
@Amiditin https://github.com/atls-lab/frontend
Статус?
в работе
Статус?
в работе
Статус?
в очереди
Статус?
В оереди
@aliceinapple @Amiditin обновите статус плиз
обновите статус плиз
Работаю в ветке feat/vanilla-extract, добавлена глобальная тема vanilla/extract
, Button
и Text
компоненты. В работе универсальные свойства, аналоги space
layout
typography
из styled-system
.
@Amiditin сориентируй пожалуйста над чем сейчас работаешь и что еще осталось?
@Amiditin сориентируй пожалуйста над чем сейчас работаешь и что еще осталось?
@aliceinapple работаю над нашими базовыми компонентами из hyperion
, переписывая на vanilla/extract
. Для этого нужно добавить аналоги space
layout
из styled-system
через @vanilla-extract/sprinkles
, пример typography
ссылка. В планах Box
, Layout
, Input
компоненты. Как промежуточный результат реализовать сложный компонент по типу Autocomplete
из hyperion
что сделано:
@aliceinapple FYI
@vanilla-extract/sprinkles
на rainbow-sprinkles
. Таким образом, решаем проблему с динамическими пропсами не завязанных на теме width
, height
и тд, и определением всех доступных свойств для пропса не через их перечисление flexDirection: ['row', 'column']
, а передавая булевое значение flexDirection: true
space
layout
flexbox
typography
Box
на основе перечисленных свойств выше
color
position
boxShadow
и тдBox
на основе новых универсальных свойствLayout
Column
Row
Grid
@Amiditin @aliceinapple обязательно в конце перехода проверьте сторибуки для компонентов.
link
image
scrollbar
@aliceinapple FYI
emotion
тема, теперь только vanilla/extract
border
, color
, grid
, position
, shadow
Layout
Column
Row
Grid
Text
и Button
компонентовSpace
и Currency
компоненты, аналоги @atls-ui-parts/text
компонентамlink
и image
(использование rainbow-sprinkles
)
select
Text
и Button
компонентыSpace
и Currency
компоненты для @ui/text
Condition
компонент
Autocompolete
из hyperionselect
select
switch
switch
select
и switch
modal
, divider
Autocompolete
Progress
и Tooltip
компонентыProgress
и Tooltip
компоненты
@vanilla/extract
docsstories
для Tooltip
stories
для компонентов@Nelfimov для нас важно, чтобы stories
лежали рядом с компонентами? или продолжать их в модуле storybook создавать ссылка? При первом варианте падают ошибки, когда пытаюсь выйти за пределы модуля, и мне не особо нравится, что в таком случае для некоторых модулей, например @atls-ui-parts/tooltip
, создаются дополнительные ненужные зависимости, например @atls-ui-parts/layout
@Nelfimov для нас важно, чтобы
stories
лежали рядом с компонентами?
Так нагляднее - компонент, а рядом история как использовать.
При первом варианте падают ошибки, когда пытаюсь выйти за пределы модуля, и мне не особо нравится, что в таком случае для некоторых модулей, например
@atls-ui-parts/tooltip
, создаются дополнительные ненужные зависимости, например@atls-ui-parts/layout
Ты же их добавляешь в дев зависимости, поэтому все норм.
Какие ошибки падают?
Какие ошибки падают?
В консоли такая, толком не разбирался ещё
ERROR in ../../.yarn/__virtual__/@ui-layout-virtual-f4b5a3b82e/1/ui/layout/src/box/box.css.ts
Module build failed (from ../../.yarn/__virtual__/@vanilla-extract-webpack-plugin-virtual-468c0998f7/0/cache/@vanilla-extract-webpack-plugin-npm-2.3.11-96bc4d2d50-b18b88d4dc.zip/node_modules/@vanilla-extract/webpack-plugin/loader/dist/vanilla-extract-webpack-plugin-loader.cjs.js):
ModuleNotFoundError: Module not found: Error: rainbow-sprinkles tried to access @vanilla-extract/dynamic (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound.
Required package: @vanilla-extract/dynamic
Required by: rainbow-sprinkles@virtual:ff71f372cc3486cd89139b4eb0299a0e09ec87afe363215d1cf0bec88448af55e5437e150b268a8c04ac7dec287bc7bcdc966d8a5f5241163b71aafe4e73c8d8#npm:0.17.2 (via /home/amiditin/React/frontend/.yarn/__virtual__/rainbow-sprinkles-virtual-f52254f2fa/0/cache/rainbow-sprinkles-npm-0.17.2-66dba8755c-9ca84affe2.zip/node_modules/rainbow-sprinkles/dist/)
Ancestor breaking the chain: @app/home-page@workspace:pages-router/pages/home
Ancestor breaking the chain: @ui/autocomplete@workspace:ui/autocomplete
Ancestor breaking the chain: @ui/button@workspace:ui/button
Ancestor breaking the chain: @ui/image@workspace:ui/image
Ancestor breaking the chain: @ui/input@workspace:ui/input
Ancestor breaking the chain: @ui/layout@workspace:ui/layout
Ancestor breaking the chain: @ui/link@workspace:ui/link
Ancestor breaking the chain: @ui/progress@workspace:ui/progress
Ancestor breaking the chain: @ui/scrollbar@workspace:ui/scrollbar
Ancestor breaking the chain: @ui/select@workspace:ui/select
Ancestor breaking the chain: @ui/switch@workspace:ui/switch
Ancestor breaking the chain: @ui/text@workspace:ui/text
Ancestor breaking the chain: @ui/tooltip@workspace:ui/tooltip
...tracers
@ ../../.yarn/__virtual__/@ui-layout-virtual-f4b5a3b82e/1/ui/layout/src/grid/grid.component.tsx 86:0-43 94:25-38
@ ../../.yarn/__virtual__/@ui-layout-virtual-f4b5a3b82e/1/ui/layout/src/grid/index.ts 1:0-33 1:0-33
@ ../../.yarn/__virtual__/@ui-layout-virtual-f4b5a3b82e/1/ui/layout/src/index.ts 5:0-23 5:0-23
@ ../tooltip/src/tooltip.stories.tsx 105:0-36 106:0-36 107:0-33 108:0-33 125:42-48 128:38-44 148:42-45 148:86-92 158:42-48 162:38-41 164:38-44 169:105-111 174:106-112 177:106-109 179:38-44 184:108-114 189:109-115 192:107-110 194:38-44 199:108-111 199:152-158 210:42-45 213:38-44 219:101-107 225:101-107 236:42-45 239:38-44 250:42-45 253:38-44 257:48-51 264:42-45 267:38-44 273:108-114 286:42-45 289:38-44 298:106-112
@ .././ lazy ^\.\/.*$ include: (?%21.*node_modules)(?:(?:^%7C\/%7C(?:(?:(?%21(?:^%7C\/)\.).)*?)\/)(?%21\.)(?=.)[^/]*?\.stories\.(js%7Cjsx%7Cmjs%7Cts%7Ctsx))$ chunkName: [request] namespace object ./tooltip/src/tooltip.stories.tsx ./tooltip/src/tooltip.stories
@ ./storybook-stories.js 10:11-14:5
@ ./storybook-config-entry.js 6:0-50 18:31-39 25:2-28:4 25:58-28:3 27:31-39
@Amiditin это возникает если что-то вынесено за src
? Похоже на типичную пробелму решаемую packageExtensions
в yarnrc.yml
divider
и modal
stories
для modal
stories
для select
, switch
, input
stories
в локальные папки для Autocomplete
, Button
, Input
, Progress
, Select
stories
для Button
, Input
Avatar
, Popover
@Amiditin @aliceinapple оформите пожалуйста план задач для полного завершения таски.
оформите пожалуйста план задач для полного завершения таски.
Сейчас переносим основные компоненты из hyperion
, прогресс примерно такой:
autocomplete
avatar
button
(генератор)card
carousel
checkbox
condition
datepicker
design
divider
hidden-input
image
input
layout
link
modal
next-image
parallax
placeholder
popover
progress
scalable-content
select
sidebar
swiper
switch
text
theme
tooltip
conditional-render
модуль без стилейdom
модуль без стилейevents-state
модуль без стилейmapbox
модуль без стилейportal
модуль без стилейtext-transform
модуль без стилейupload
модуль без стилей@aliceinapple может что-то пропустил, поставь галочки где не хватает
@Nelfimov есть смысл переносить все, либо какие на твой взгляд можно пропустить?
Как мы будем этому обучать
- через примеры использования. Разница между
emotion
иvanilla-extract
небольшая.
Правильно понимаю, нужно будет ещё написать про переход с emotion
на @vanilla/extract
с примерами?
@Nelfimov есть смысл переносить все, либо какие на твой взгляд можно пропустить?
Все
Правильно понимаю, нужно будет ещё написать про переход с
emotion
на@vanilla/extract
с примерами?
Если сделаем хорошие сториз, то в этом не будет необходимости.
stories
для switch
switch
и stories
для негоstories
для divider
checkbox
Avatar
и Popover
компонентыstories
, @aliceinapple обрати внимание на tags: ['autodocs']
docs
HiddenInput
, DividedFields
и Textarea
для @ui/input
GhostButton
и Content
для @ui/button
HiddenInput
и Textarea
для @ui/input
Textarea
, деструктуризация на компонентыDividedFields
для @ui/input
GhostButton
и Content
для @ui/button
checkbox
checkbox
, switch
и stories
для нихstories
для divider
Textarea
GhostButton
для @ui/button
DividedFields
для @ui/input
Content
для @ui/button
DividedFields
для @ui/input
story
для GhostButton
Content
для @ui/button
NextImage
, Placeholder
, ScalableContent
компонентыNextImage
, Placeholder
, ScalableContent
компоненты@atls-ui-parts/dom
в @ui/utils
stories
для Placeholder
Swiper
компонентSwiper
компонентstories
для Placeholder
Text
Currency
Swiper
Card
Sidebar
компоненты
Сводка
Новая библиотека
css-in-js
Мотивация
Библиотека позволяет уйти от операций в рантайме, но оставаясь в парадигме
css-in-js
Дизайн в деталях
Это основная часть RFC. Объясните дизайн достаточно подробно. Это должно касаться специфики и ключевых моментов, а также включать примеры того, как используется эта функция. Любая новая терминология должна быть определена здесь.
Недостатки
Альтернативы
stylex
Стратегия адаптации
Как мы будем этому обучать
emotion
иvanilla-extract
небольшая.