indicator-ui 0.0.8 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,6 +20,12 @@ export type FlexFieldPropsType = {
20
20
  value?: any;
21
21
  type?: string;
22
22
  onChange?: (value: any) => void;
23
+ /**
24
+ * Маска imask, можно засунуть, как строку (к примеру 000-000-000),
25
+ * так и регулярное выражение. Важно!!!: не ставить маску undefined,
26
+ * т.к. для перехвата ввода используется onAccept, поэтому если `mask === undefined`,
27
+ * то при изменение строка не пройдет валидацию и функция не будет вызвана.
28
+ */
23
29
  mask?: any;
24
30
  placeholder?: string;
25
31
  required?: boolean;
@@ -28,15 +34,31 @@ export type FlexFieldPropsType = {
28
34
  onFocus?: (e: any) => void;
29
35
  onBlur?: (e: any) => void;
30
36
  onClick?: (e: React.MouseEvent<HTMLDivElement>) => void;
37
+ /** Блокирует ввод без стиля `disabled`, просто показывает результат. */
31
38
  notInput?: boolean;
39
+ /** Компонент иконки.*/
32
40
  icon?: ReactNode;
41
+ /** Text Support. По умолчанию `'+7', можно передать свой компонент, он подставится без обертки, также можно передать строку, она подставится с оберткой`*/
33
42
  textSupport?: boolean | string | ReactNode;
43
+ /** Принимает url **Картинки пользователя**. Можно передать свой компонент **Картинки пользователя**.*/
34
44
  userPic?: string | ReactNode;
45
+ /** Подставляет **Help** при `help === true`. Можно передать свой компонент **Help**.*/
35
46
  help?: boolean | ReactNode;
47
+ /** Подставляет **Dropdown** при `dropdown === true`. Можно передать свой компонент **Dropdown**.*/
36
48
  dropdown?: boolean | ReactNode;
49
+ /** Подставляет кнопка при `button === true`. Можно передать свой компонент кнопки.*/
37
50
  button?: boolean | ReactNode;
38
- dropdownState?: boolean;
39
- buttonState?: 'gray' | 'red';
51
+ /**
52
+ * Если true иконка вверх, при false иконка вверх. Если dropdownState строка, то будет подставлено как className.
53
+ */
54
+ dropdownState?: boolean | string;
55
+ /**
56
+ * Серая и красные расцветки кнопок, по умолчанию - "gray". Если buttonState строка, то будет подставлено как className.
57
+ */
58
+ buttonState?: 'gray' | 'red' | string;
59
+ /**
60
+ * Событие нажатия на кнопку button.
61
+ */
40
62
  onButtonClick?: () => void;
41
63
  className?: FlexFieldClassNameType;
42
64
  };
@@ -0,0 +1,63 @@
1
+ [🔙 Назад](../../README.md)
2
+
3
+ # CSS Variables
4
+
5
+ В библиотеке используются **CSS-переменные** для цветов (в будущем, возможно, не только для них). Иногда может возникнуть необходимость изменить эти значения в вашем проекте.
6
+
7
+ ---
8
+
9
+ ## 🔧 Использование в разработке
10
+
11
+ Для задания переменных в библиотеке используются **CSS Variables**, все переменные лучше складировать в файлах по типу `*-var.scss`:
12
+
13
+ ```css
14
+ :root {
15
+ --var: #fff;
16
+ }
17
+ ```
18
+
19
+ При использовании в стилях:
20
+
21
+ ```scss
22
+ @use 'variables' as *;
23
+
24
+ background-color: var(--var);
25
+ ```
26
+
27
+ 📌 **Важно**: при разработке новых компонентов в библиотеке используйте **только** CSS-переменные, чтобы пользователи могли их переопределять в своих проектах.
28
+
29
+ ---
30
+
31
+ ## 🎨 Кастомизация в проекте
32
+
33
+ ### 1️⃣ Создайте файл с переопределением переменных
34
+
35
+ Рекомендуется создать отдельный файл (например, `indicator-ui-variables.scss`), в котором будут переопределены значения CSS-переменных библиотеки. Все новые переменные должны находиться в `:root {}`.
36
+
37
+ Пример:
38
+
39
+ ```scss
40
+ :root {
41
+ --base-black: #000000;
42
+ --base-white: #ffffff;
43
+ /* Другие цвета */
44
+ }
45
+ ```
46
+
47
+ 🔹 _(Автор не расист, все вопросы к [Rockstar](https://support.rockstargames.com/), так как цитата взята оттуда)_ 😁
48
+
49
+ ### 2️⃣ Импортируйте файл с переменными
50
+
51
+ Чтобы переопределенные переменные применились корректно, **импортируйте их после подключения библиотеки**:
52
+
53
+ ```scss
54
+ @import 'indicator-ui/dist/index.css';
55
+ @import 'indicator-ui-variables.scss';
56
+ ```
57
+
58
+ 🎉 **Ура, победа. Вы переопределили переменные в библиотеке.**
59
+
60
+
61
+ ## PS
62
+
63
+ [Если интересно, как выглядила бы документация, если ее автор был из Калифорнии](./CSSVariablesCalifornia.md)
@@ -0,0 +1,62 @@
1
+ [🔙 Назад](../../README.md)
2
+
3
+ # CSS Variables 🌴🌊
4
+
5
+ Йооо, чуваки, в этой библиотеке мы юзаем **CSS-переменные** для цветов (ну, возможно, в будущем не только для них, кто знает). Иногда захочешь немного покрутить их под свой проект, и вот тебе, как это сделать, если хочешь, чтобы всё было чётко! ✌️
6
+
7
+ ---
8
+
9
+ ## 🔧 Как это работает, чувак?
10
+
11
+ Мы задаем переменные в библиотеке через **CSS Variables**:
12
+
13
+ ```css
14
+ :root {
15
+ --var: #fff; /* Ну типа белый цвет, да */
16
+ }
17
+ ```
18
+
19
+ А когда хочешь использовать эту штуку, просто пиши так:
20
+
21
+ ```scss
22
+ @use 'variables' as *;
23
+
24
+ background-color: var(--var); /* Эй, хватит смотреть на меня, ты ж знаешь, что это делает */
25
+ ```
26
+
27
+ 📌 **Тупо важно**: Когда ты делаешь новые компоненты для библиотеки, **используй только** CSS-переменные, чтобы другие ребята могли под себя всё настроить. Просто чётко, понял? 😎
28
+
29
+ ---
30
+
31
+ ## 🎨 Как настроить свой проект, чувак?
32
+
33
+ ### 1️⃣ Создай файл, где ты всё переделаешь
34
+
35
+ Эй, не усложняй, просто создай отдельный файл (например, `indicator-ui-variables.scss`), где будешь переделывать эти переменные на свой вкус. Все твои новые переменные должны быть в `:root {}`. Это как твоя домашка, только тут можно реально кайфануть. 😁
36
+
37
+ Пример, ну типа так:
38
+
39
+ ```scss
40
+ :root {
41
+ --base-black: #000000; /* Ну ты понял, базовый чёрный */
42
+ --base-white: #ffffff; /* Базовый белый, чтоб не скучно было */
43
+ /* Добавь что хочешь — зелёный для своей ласточки или оранжевый для веселья */
44
+ }
45
+ ```
46
+
47
+ 🔹 _(Не переживай, я не расист, всё как-то так у Rockstar вон, если что 😜)_
48
+
49
+ ### 2️⃣ Импортируй файл с переменными
50
+
51
+ Чувак, вот тут важный момент — тебе нужно импортировать твой файл **после** подключения самой библиотеки, иначе, ну, как бы, не прокатит. Это как печеньки после молока, понял? 😋
52
+
53
+ ```scss
54
+ @import 'indicator-ui/dist/index.css';
55
+ @import 'indicator-ui-variables.scss'; /* И вот тут ты подключаешь свои переменные */
56
+ ```
57
+
58
+ 🎉 **Йо! Ты переопределил переменные в библиотеке, теперь ты как бог в своём проекте.** 🔥
59
+
60
+ ---
61
+
62
+ Теперь ты точно в игре! Не забывай — кастомизация это твоя фишка, а библиотека — твой инструмент. Давай, чувак, делай всё по-своему и кайфуй! 🌞🌴
package/docs/ForDev.md ADDED
@@ -0,0 +1,106 @@
1
+ [🔙 Назад](../README.md)
2
+
3
+ # 📌 Для разработки
4
+
5
+ ---
6
+
7
+ ## 🔥 Точки входа
8
+
9
+ В проекте есть два ключевых входа для модулей — **js/ts** и **scss**.
10
+
11
+ #### 📂 `src/index.ts` (js/ts модули)
12
+
13
+ Добавляем сюда все модули, которые должны быть доступны через:
14
+
15
+ ```ts
16
+ import {} from 'indicator-ui';
17
+ ```
18
+
19
+ #### 🎨 `src/index.scss` (scss модули)
20
+
21
+ Добавляем сюда все стили, которые должны быть доступны через:
22
+
23
+ ```scss
24
+ @use 'indicator-ui' as *;
25
+ ```
26
+
27
+ ---
28
+
29
+ ## ⚙️ Сборка проекта
30
+
31
+ Чтобы собрать проект, используйте:
32
+
33
+ ```sh
34
+ npm run lib:build
35
+ ```
36
+
37
+ Результаты сборки появятся в папке `dist`. Там, возможно, живёт магия. 🧙‍♂️✨
38
+
39
+ ---
40
+
41
+ ## 🧪 Тестирование во время разработки
42
+
43
+ Для быстрого тестирования и проверки работы библиотеки используйте **React приложение** в папке с исходным кодом. Оно
44
+ доступно по следующему пути:
45
+
46
+ **[Жмак](../src/test/index.tsx)**
47
+
48
+ В этом приложении настроен роутинг с несколькими страницами. Для тестирования просто добавляйте нужные элементы и
49
+ страницы, следуя шаблону.
50
+
51
+ Для добавления страниц в роутинг откройте и отредактируйте файл:
52
+
53
+ **[Жмyк](../src/test/App.tsx)**
54
+
55
+ ### 🏃‍♂️ Запуск dev-сервера
56
+
57
+ Чтобы запустить локальный сервер для разработки, выполните команду:
58
+
59
+ ```sh
60
+ npm run dev:dev
61
+ ```
62
+
63
+ **Важно:** Стремитесь создавать страницы, максимально приближенные к финальному дизайну, чтобы дизайнер мог проверить
64
+ вашу работу в реальном времени и удостовериться, что она соответствует его ожиданиям.
65
+
66
+ ## 🛠 Тестирование перед публикацией
67
+
68
+ Перед публикацией можно протестировать библиотеку на локальном **React**-проекте `test-project`. Для этого используется
69
+ **yalc** — аналог npm, но для локальных пакетов.
70
+
71
+ ### 🚀 Установка `yalc`
72
+
73
+ ```sh
74
+ npm install -g yalc
75
+ ```
76
+
77
+ ### 📦 Публикация в локальное хранилище
78
+
79
+ ```sh
80
+ yalc publish
81
+ ```
82
+
83
+ Есть вторая команда, которая по идее должна еще и обновлять библу, где она используется.
84
+
85
+ ```sh
86
+ yalc publish --push
87
+ ```
88
+
89
+ ### 📥 Установка библиотеки в проект
90
+
91
+ ```sh
92
+ yalc add indicator-ui
93
+ ```
94
+
95
+ ### 🔄 Обновление библиотеки
96
+
97
+ ```sh
98
+ yalc update
99
+ ```
100
+
101
+ Также советую делать удаление библы, так как `yalc` и `npm` очень странно работают и иногда могут добавлять изменения.
102
+
103
+ ```sh
104
+ npm uninstall indicator-ui
105
+ ```
106
+
@@ -0,0 +1,205 @@
1
+ [🔙 Назад](../README.md)
2
+
3
+ # `FormBuilder`
4
+
5
+ ### Важно
6
+
7
+ Для работы нужно установить библы: `npm install clsx react-imask`
8
+
9
+ ---
10
+
11
+ Клиентский компонент, созданный для облегчения создания полей. По большей части он был создан для имплементации хука
12
+ `useFormBuilder` (чья цель, создать гибкое состояние формы). В `FormBuilder` передается основной пропс - `schema`.
13
+
14
+ `schema` - словарь, в котором перечислены все поля и другие компоненты. Fообще в билдере можно написать обсалютно любую
15
+ логику компонента (или почти любую), в этом и была основная идея `FormBuilder`.
16
+
17
+ ---
18
+
19
+ ### Актуальные типы полей:
20
+
21
+ * `FORM_WRAPPER_SCHEMA`
22
+ * `REACT_NODE_SCHEMA`
23
+ * `INPUT_FIELD_SCHEMA`
24
+ * `ARRAY_FIELDS_SCHEMA`
25
+ * `BLOCK_WRAPPER_SCHEMA`
26
+
27
+ ### Неактуальные типы полей (ими лучше не пользоваться, они потихоньку будут выпиливаться из проекта)
28
+
29
+ * `BLOCK_SCHEMA`
30
+ * `CUSTOM_FIELD_WRAPPER_SCHEMA`
31
+ * `ADDITION_PROPS`
32
+
33
+ ---
34
+
35
+ ### `INPUT_FIELD_SCHEMA`
36
+
37
+ Самая используемая схема поля ввода.
38
+
39
+ ```ts
40
+ const schema: INPUT_FIELD_SCHEMA = {
41
+ type: 'input_field',
42
+ props: {
43
+ name: 'test',
44
+ labelText: 'label',
45
+ hintText: 'hint',
46
+ }
47
+ }
48
+ ```
49
+
50
+ Основной пропсы - это `name`, он отвечает за имя во вложенности формы
51
+
52
+ ###### В результате получим:
53
+
54
+ ```ts
55
+ const formData = {
56
+ test: 'data',
57
+ }
58
+ ```
59
+
60
+ #### Дополнительные поля, предоставляемые `FormBuilder`:
61
+
62
+ * `keyWay` - позволяет вручную задать вложенность поля
63
+
64
+ ```ts
65
+ const schema: INPUT_FIELD_SCHEMA = {
66
+ type: 'input_field',
67
+ props: {
68
+ keyWay: ['test1', 'test2', 'test3'],
69
+ labelText: 'label',
70
+ hintText: 'hint',
71
+ }
72
+ }
73
+ ```
74
+
75
+ ###### В результате получим:
76
+
77
+ ```ts
78
+ const formData = {
79
+ test1: {
80
+ test2: {
81
+ test3: 'data',
82
+ }
83
+ }
84
+ }
85
+ ```
86
+
87
+ * `onBlurValidation` - добавляет проверку на `onBlur`.
88
+
89
+ ```ts
90
+ type onBlurValidation = { required: boolean, fun: (data: any) => boolean }
91
+ ```
92
+
93
+ `required` - обязательное поле.
94
+
95
+ * `ownerInputComponent` - свое собственное `input` поле. Для работы оно должно принимать параметры `value` и `onChange`,
96
+ которые накидываются `FormBuilder`. Любые пропсы, переданные в `props` пойдут в компонент (можно накинуть на сам
97
+ компонент в `ownerInputComponent`, разницы нет, но `value`, `onChange`, `isError`, `isErrorMessage`, `onBlur` будут
98
+ перезаписаны).
99
+
100
+ ---
101
+
102
+ ### `ARRAY_FIELDS_SCHEMA`
103
+
104
+ Схема для создания массива в форме. Любой `input_field` будет класться в ячейку массива, а не в поле словаря.
105
+
106
+ ```ts
107
+ const schemes: ARRAY_FIELDS_SCHEMA = [
108
+ {
109
+ type: 'array_fields',
110
+ props: {
111
+ name: 'test_arr',
112
+ children: [
113
+ {
114
+ type: 'input_field',
115
+ props: {
116
+ name: 'test',
117
+ labelText: 'label',
118
+ hintText: 'hint',
119
+ placeholder: 'placeholder',
120
+ }
121
+ }
122
+ ]
123
+ }
124
+ },
125
+ ]
126
+ ```
127
+
128
+ ###### В результате получим:
129
+
130
+ ```ts
131
+ const formData = {
132
+ test_arr: [
133
+ {
134
+ test: "123213"
135
+ },
136
+ ]
137
+ }
138
+ ```
139
+
140
+ ###### Если не указать `name` в `input_field`, то получим:
141
+
142
+ ```ts
143
+ const formData = {
144
+ test_arr: [
145
+ "123123123123"
146
+ ]
147
+ }
148
+ ```
149
+
150
+ В зависимости от того, в каком порядке написаны поля ввода в массиве схемы, в том же порядке будет идти запись в форму.
151
+
152
+ ---
153
+
154
+ ### `FORM_WRAPPER_SCHEMA`
155
+
156
+ Используется для обертки формы, сбрасывает счетчик `ARRAY_FIELDS_SCHEMA` (это значит, что поля внутри `FORM_WAPPER`
157
+ **_не пойдут_** в массив).
158
+
159
+ ```ts
160
+ const schemes: ARRAY_FIELDS_SCHEMA = [
161
+ {
162
+ type: 'form_wrapper',
163
+ props: {
164
+ name: 'test_arr',
165
+ children: [
166
+ {
167
+ type: 'input_field',
168
+ props: {
169
+ name: 'test',
170
+ labelText: 'label',
171
+ hintText: 'hint',
172
+ placeholder: 'placeholder',
173
+ }
174
+ }
175
+ ]
176
+ }
177
+ },
178
+ ]
179
+ ```
180
+
181
+ ###### В результате получим:
182
+
183
+ ```ts
184
+ const formData = {
185
+ test_arr: {
186
+ test: "123123132132"
187
+ }
188
+ }
189
+ ```
190
+
191
+ ---
192
+
193
+ ### `BLOCK_WRAPPER_SCHEMA`
194
+
195
+ Используется для обертки чего-то, не сбрасывает счетчик `ARRAY_FIELDS_SCHEMA`, но и прописать ключ значения в словаре
196
+ тоже нельзя (это значит, что поля внутри `FORM_WAPPER` **_пойдут_** в массив). Было сделано для того, чтобы можно было в
197
+ массиве (или просто в схеме) сделать обертку, а в нее передать схему поля. К примеру, у вас посреди схемы надо сделать
198
+ обертку для `input_field`, писать новый компонент поля не хочется, поэтому мы можем сделать компонент обертки и передать
199
+ его в `BLOCK_WRAPPER_SCHEMA`.
200
+
201
+ ---
202
+
203
+ ### `REACT_NODE_SCHEMA`
204
+
205
+ Схема простого `React-компонента`. Можно посреди схемы вcтавить какой-нибудь `ReactNode`.
@@ -0,0 +1,28 @@
1
+ [🔙 Назад](../README.md)
2
+
3
+ ### SCSS Переменные
4
+
5
+ ---
6
+
7
+ #### 🚀 Для разработки
8
+
9
+ Для создания цветов в библиотеке, которые будут использованы в проекте, нужно создать переменные и убедиться, что они попадут в конечный экспорт. Это несложно. Чтобы можно было переопределить переменную, добавьте `!default` после значения:
10
+
11
+ ```scss
12
+ $color: #fff !default;
13
+ ```
14
+
15
+ **Заметка**: `!default` говорит, что если переменная не была определена ранее, то будет использовано значение, указанное в данный момент (`#fff`). Если же переменная была определена выше, то будет использовано именно это значение.
16
+
17
+ ---
18
+
19
+ #### 🔧 При использовании
20
+
21
+ Самое сложное — это переопределение значений переменных `scss`. Вот как это можно сделать по порядку:
22
+
23
+ 1. Как уже было сказано, `!default` подставит новое значение, если переменная не была определена раньше. Поэтому нужно указать это до использования миксинов или импорта.
24
+
25
+ 2. Можно создать отдельный файл, где будут переопределены переменные, а затем импортировать его везде, где это нужно.
26
+
27
+ 3. Возможно, придет мысль импортировать файл в условный `global.scss` и использовать переменные без дополнительного импорта. Но это **не работает** (по крайней мере у автора, но стоит учитывать, что автор тупой), скорее всего потому, что в итоговом CSS файл `global.scss` находится ниже, чем остальные стили.
28
+
Binary file
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "indicator-ui",
3
- "version": "0.0.08",
3
+ "version": "0.0.10",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/types/index.d.ts",
6
6
  "style": "dist/index.css",
7
7
  "sass": "dist/scss/index.scss",
8
8
  "scripts": {
9
- "dev:dev": "webpack serve --mode development",
9
+ "dev:dev": "webpack serve --mode=development",
10
10
  "dev:build": "webpack --mode=production && tsc --project tsconfig.json --outDir webpack",
11
11
  "lib:build": "webpack --config webpack.lib.config.js && tsc-alias"
12
12
  },
@@ -58,6 +58,7 @@
58
58
  "react-dom": "^18.3.1"
59
59
  },
60
60
  "files": [
61
- "dist"
61
+ "dist",
62
+ "docs"
62
63
  ]
63
64
  }