Изоляция стилей между появлениями / группами вариантов (react-native-ui-kitten)

#react-native-ui-kitten

#react-native-ui-kitten

Вопрос:

Поправьте меня, если я ошибаюсь (или неправильно использую отображение), но у меня возник вопрос о том, как / почему стили группы вариантов объединяются между появлениями?

Я не смог найти много документации по этому конкретному поведению и еще не углубился в исходный код, но я бы предположил, что изоляция стилей между представлениями / вариантами будет означать меньшее количество повторений и более компактные, более простые в обслуживании определения стилей.

Возьмем, к примеру, отображение кнопок по умолчанию

 const theme = {
  appearances: {
    // The amount of code in filled.status is nice and compact
    filled: {
      mapping: { // ⬅ if i understand this correctly, mapping is like a "parent" style that applies to all variants?
        textFontFamily: "text-font-family",
        borderColor: 'transparent',
        textColor: '$color-text-basic',
        iconTintColor: '$color-text-basic',
      },
      variantGroups: {
        status: {
          primary: {
            backgroundColor: '$color-primary-500',
            state: {
              hover: {
                backgroundColor: '$color-primary-400',
              },
              focused: {
                backgroundColor: '$color-primary-600',
              },
              active: {
                backgroundColor: '$color-primary-600',
              },
              disabled: {
                backgroundColor: '$color-primary-transparent-300',
              },
            },
          }
        },
        size: { // ⬅ this is applied to all other appearances which is nice but ...
          tiny: { ...tinyStyles },
          small: { ...smallStyles },
          medium: { ...medStyles },
          large: { ...largeStyles },
        },
      },
    },
    outline: {
      mapping: {
        backgroundColor: 'transparent', // ⬅ I expected this be applied to all variantGroups under outline.*
      },
      variantGroups: {
        status: {
          primary: {
            backgroundColor: 'transparent', // ⬅ or even here, I expected this to be applied to all states under outline.primary
            borderColor: '$color-primary-500',
            textColor: '$color-primary-500',
            iconTintColor: '$color-primary-500',
            state: {
              hover: {
                backgroundColor: 'transparent', // ⬅ Instead, I have to repeatedly define them to override it from filled.primary
                borderColor: '$color-primary-400',
                textColor: '$color-primary-400',
                iconTintColor: '$color-primary-400',
              },
              focused: {
                backgroundColor: 'transparent', // ⬅ Instead, I have to repeatedly define them to override it from filled.primary
                borderColor: '$color-primary-600',
                textColor: '$color-primary-600',
                iconTintColor: '$color-primary-600',
              },
              active: {
                backgroundColor: 'transparent', // ⬅ Instead, I have to repeatedly define them to override it from filled.primary
                borderColor: '$color-primary-600',
                textColor: '$color-primary-600',
                iconTintColor: '$color-primary-600',
              },
              disabled: {
                backgroundColor: 'transparent', // ⬅ Instead, I have to repeatedly define them to override it from filled.primary
                borderColor: '$color-primary-transparent-300',
                textColor: '$color-primary-300',
                iconTintColor: '$color-primary-300',
              },
            },
          },
        },
      },
    },
  },
}

  

Если это из соображений производительности, я могу обойтись, но в целом мне просто любопытно такое поведение.

Версия UI Kitten и Eva

@eva-design/eva@5.0.0

@ui-kitten/components@5.0.0