45.0.0-alpha.14 • Published 12 days ago

@sima-land/ui-nucleons v45.0.0-alpha.14

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
12 days ago

UI-nucleons

В этом проекте собраны UI-компоненты, реализующие правила дизайн-системы, а также компоненты и утилиты, которые помогают решать распространенные задачи разработки UI.

Использование

Установка

# с помощью npm
npm i -S @sima-land/ui-nucleons

# или с помощью yarn
yarn add @sima-land/ui-nucleons

Настройка среды

В библиотеке используются:

  • импорты изображений (jpg, png...) как url/base64
  • импорты стилей
  • импорты стилей как css-модулей (каждый такой файл промаркирован в виде %filename%.m.scss)

Для работы с Webpack

Необходимо сконфигурировать сборку подобным образом:

// webpack.config.js
module.exports = {
  module: {
    rules: [
      // стили
      {
        test: /\.(css|scss)$/,
        use: [
          'style-loader',
          {
            loader: 'css-loader',
            options: {
              modules: {
                auto: /\.(module|m)\.(css|scss)$/,
                localIdentName: '[name]__[local]--[hash:hex:3]',
              },
            },
          },
          'sass-loader',
        ],
      },

      // картинки
      {
        test: /\.(apng|avif|gif|jpg|jpeg|png|webp)$/,
        type: 'asset/resource',
      },
    ],
  },
};

Для работы с Jest

Необходимо сконфигурировать среду Jest подобно тому как это сделано в данном репозитории:

export default {
  // ...прочее

  transform: {
    // css-модули
    '\\.(module|m)\\.(css|scss)$': 'jest-css-modules-transform',

    // обычные стили
    '(?<!(.+\\.(module|m)))(\\.css|\\.scss)$': '<rootDir>/.jest/transforms/empty.js',

    // asset'ы
    '\\.(apng|avif|gif|jpg|jpeg|png|webp)$': '<rootDir>/.jest/transforms/asset.js',
  },
  transformIgnorePatterns: [
    // из некоторых пакетов мы берем стили так что игнорируем только скрипты
    '/node_modules/.+js$',
  ],
};

Декларации типов для TypeScript

в src/custom.d.ts необходимо указать:

// css-модули
declare module '*.module.css' {
  const classes: { [key: string]: string };
  export default classes;
}
declare module '*.m.css' {
  const classes: { [key: string]: string };
  export default classes;
}

// css-модули с синтаксисом SCSS
declare module '*.module.scss' {
  const classes: { [key: string]: string };
  export default classes;
}
declare module '*.m.scss' {
  const classes: { [key: string]: string };
  export default classes;
}

Разработка и поддержка

Принципы библиотеки

  • в библиотеке не должно быть HOC (компонентов высшего порядка - функций, возвращающих компонент)
  • компонент интерфейса не должен иметь внешних отступов по умолчанию

Структура библиотеки

src
├── something # директория с компонентом
│   ├── index.ts # точка входа с публичными экспортами
│   ├── something.tsx # исходный код компонента
│   ├── something.m.scss # стили компонента (при наличии)
│   ├── something-util.scss # scss-утилиты для кастомизации (при наличии)
│   ├── types.ts # типы (при наличии)
│   ├── __test__
│   │   └── something.test.tsx
│   └── __stories__
│       └── something.stories.tsx
├── helpers # общие утилиты (для использования вне библиотеки)
├── hooks # общие react-хуки (для использования вне библиотеки)
├── test-utils # утилиты для упрощения unit-тестирования составляющих данной библиотеки
└── _internal # внутренние скрипты для использования только в рамках данной библиотеки
45.0.0-alpha.14

12 days ago

45.0.0-alpha.13

1 month ago

45.0.0-alpha.12

3 months ago

45.0.0-alpha.11

3 months ago

45.0.0-alpha.10

7 months ago

45.0.0-alpha.6

10 months ago

45.0.0-alpha.7

9 months ago

45.0.0-alpha.5

10 months ago

45.0.0-alpha.8

8 months ago

45.0.0-alpha.9

8 months ago

45.0.0-alpha.4

10 months ago

45.0.0-alpha.3

12 months ago

45.0.0-alpha.2

1 year ago

45.0.0-alpha.0

1 year ago

45.0.0-alpha.1

1 year ago

44.2.9

2 years ago

44.2.10

2 years ago

44.2.3

2 years ago

44.2.2

2 years ago

44.2.5

2 years ago

44.2.4

2 years ago

44.2.7

2 years ago

44.2.6

2 years ago

44.2.8

2 years ago

44.2.1

2 years ago

44.2.0

2 years ago

44.1.0

2 years ago

44.0.1

2 years ago

44.0.0

2 years ago

43.1.1

2 years ago

43.0.2

2 years ago

43.1.0

2 years ago

43.0.1

2 years ago

43.0.0

2 years ago

42.2.0

2 years ago

42.1.1

2 years ago

42.1.0

2 years ago

42.0.0

2 years ago

41.2.0

2 years ago

41.2.2

2 years ago

41.3.0

2 years ago

41.2.1

2 years ago

40.3.0

2 years ago

40.2.2

2 years ago

41.1.0

2 years ago

41.0.0

2 years ago

40.2.1

3 years ago

40.1.0

3 years ago

40.2.0

3 years ago

40.0.0

3 years ago

39.1.0

3 years ago

39.0.1

3 years ago

39.0.0

3 years ago

38.1.2

3 years ago

38.1.1

3 years ago

38.1.0

3 years ago

38.0.0

3 years ago

37.3.1

3 years ago

37.3.0

3 years ago

37.2.2

3 years ago

0.0.0

3 years ago