@koslibs/components 0.0.0 → 1.1.0

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.
Files changed (50) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +45 -14
  3. package/dist/components/Button/button.d.ts +67 -0
  4. package/dist/components/Button/button.js +88 -0
  5. package/dist/components/Button/colors.module.js +14 -0
  6. package/dist/components/Button/colors_module.css +164 -0
  7. package/dist/components/Button/index.d.ts +2 -0
  8. package/dist/components/Button/index.js +1 -0
  9. package/dist/components/Button/index.module.js +30 -0
  10. package/dist/components/Button/index_module.css +243 -0
  11. package/dist/components/Button/vars.css +24 -0
  12. package/dist/components/Spinner/colors.module.js +5 -0
  13. package/dist/components/Spinner/colors_module.css +6 -0
  14. package/dist/components/Spinner/index.d.ts +2 -0
  15. package/dist/components/Spinner/index.js +1 -0
  16. package/dist/components/Spinner/index.module.js +9 -0
  17. package/dist/components/Spinner/index_module.css +29 -0
  18. package/dist/components/Spinner/preset.module.js +7 -0
  19. package/dist/components/Spinner/preset_module.css +12 -0
  20. package/dist/components/Spinner/spinner.d.ts +31 -0
  21. package/dist/components/Spinner/spinner.js +80 -0
  22. package/dist/components/Spinner/vars.css +7 -0
  23. package/dist/components/Typography/colors.module.js +10 -0
  24. package/dist/components/Typography/colors_module.css +26 -0
  25. package/dist/components/Typography/index.d.ts +34 -0
  26. package/dist/components/Typography/index.js +7 -0
  27. package/dist/components/Typography/index.module.js +18 -0
  28. package/dist/components/Typography/index_module.css +57 -0
  29. package/dist/components/Typography/preset.module.js +30 -0
  30. package/dist/components/Typography/preset_module.css +54 -0
  31. package/dist/components/Typography/shared.d.ts +63 -0
  32. package/dist/components/Typography/shared.js +10 -0
  33. package/dist/components/Typography/text.d.ts +15 -0
  34. package/dist/components/Typography/text.js +18 -0
  35. package/dist/components/Typography/title.d.ts +15 -0
  36. package/dist/components/Typography/title.js +18 -0
  37. package/dist/components/Typography/vars.css +27 -0
  38. package/dist/index.d.ts +6 -1
  39. package/dist/index.js +3 -0
  40. package/dist/static/font/inter-cyrillic-ext-wght-normal.woff2 +0 -0
  41. package/dist/static/font/inter-cyrillic-wght-normal.woff2 +0 -0
  42. package/dist/static/font/inter-greek-ext-wght-normal.woff2 +0 -0
  43. package/dist/static/font/inter-greek-wght-normal.woff2 +0 -0
  44. package/dist/static/font/inter-latin-ext-wght-normal.woff2 +0 -0
  45. package/dist/static/font/inter-latin-wght-normal.woff2 +0 -0
  46. package/dist/static/font/inter-vietnamese-wght-normal.woff2 +0 -0
  47. package/dist/styles/fonts/inter/LICENSE.txt +93 -0
  48. package/dist/styles/fonts.css +63 -0
  49. package/dist/styles/theme.css +8 -0
  50. package/package.json +7 -2
package/CHANGELOG.md CHANGED
@@ -1,3 +1,45 @@
1
1
  # @koslibs/components
2
2
 
3
+ ## 1.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#2](https://github.com/koslibs/components/pull/2) [`b09aeff`](https://github.com/koslibs/components/commit/b09aeffe06d9267aad1f689deb91a19412ff8448) Thanks [@holypower777](https://github.com/holypower777)! - Добавлен публичный Typography из GullEye: Text и Title, типы, CSS Modules,
8
+ Docs и Playground. Импорт из `@koslibs/components/Typography` подключает
9
+ только Typography и его стили.
10
+
11
+ Исправлены отступы содержимого вкладок Docs и сдвиг страницы при появлении
12
+ или исчезновении полосы прокрутки.
13
+
14
+ Закреплены правила историй компонентов: запись добавляется только для изменённого
15
+ компонента; общие изменения инфраструктуры и Storybook описываются в истории пакета.
16
+
17
+ Добавлена общая тема с `--font-primary: 'Inter', sans-serif` и локальными
18
+ WOFF2-файлами Inter. Typography и подпись Button подключают её автоматически;
19
+ приложение может переопределить семейство шрифта через CSS.
20
+
21
+ ## 1.0.0
22
+
23
+ ### Major Changes
24
+
25
+ - [#1](https://github.com/koslibs/components/pull/1) [`8954b64`](https://github.com/koslibs/components/commit/8954b64becb19165000479731114463317438bcd) Thanks [@holypower777](https://github.com/holypower777)! - Первый стабильный выпуск 1.0.0 с Button и Spinner, перенесёнными из core-components GullEye.
26
+
27
+ Компонент доступен через `import { Button } from '@koslibs/components/Button'` вместе с типом ButtonProps. Поддерживает шесть вариантов оформления, размеры 32–72, формы rectangular и rounded, левый и правый аддоны, подпись, полную ширину, disabled и loading. Сохранены ref, стандартные HTML-атрибуты и минимальное время отображения загрузки 500 мс.
28
+
29
+ Spinner доступен отдельно через `import { Spinner } from '@koslibs/components/Spinner'` вместе с типом SpinnerProps. Поддерживает размеры 16, 24 и 48, управление видимостью, настройку цвета через style.color, className, id и dataTestId. Button использует этот же публичный Spinner для отображения загрузки.
30
+
31
+ CSS Modules подключаются вместе с используемыми компонентами. Добавлены значения по умолчанию для CSS-переменных размеров, скруглений и шрифтов, чтобы компоненты работали без глобальных стилей GullEye. Отдельный импорт Spinner не включает Button и его стили. Для обоих компонентов в Storybook доступны Docs и Playground.
32
+
33
+ Docs каждого компонента разделены на вкладки «Документация», «Разработчику» и «Обновления». Во вкладке разработчика доступны публичный импорт, Props и CSS-переменные из исходных стилей; обновления отображают CHANGELOG конкретного компонента.
34
+
35
+ Проверка отдельных импортов разделена на общий fixture и декларативные сценарии: JS и типы всех публичных компонентов проверяются автоматически, библиотека собирается один раз, а выбранные production-потребители — одним запуском builder в независимых environments с общей установленной копией пакета и отдельными выходными папками.
36
+
37
+ ## 0.1.0
38
+
39
+ ### Minor Changes
40
+
41
+ - [`ee39a5b`](https://github.com/koslibs/components/commit/ee39a5bb32f94a3a76e4367ec6b14d9cbe4d41b2) Thanks [@holypower777](https://github.com/holypower777)! - Подготовлен каркас @koslibs/components для React 18/19 и TypeScript: сборка ESM, деклараций и CSS Modules через @koslibs/builder@1.0.0, общие настройки и release-инструменты @koslibs/configs@1.0.0, Storybook и workflow деплоя на GitHub Pages.
42
+
43
+ Настроены отдельные импорты вида @koslibs/components/Button. Тест production-сборки проверяет, что в бандл потребителя входят выбранный компонент и его CSS, а независимые соседние компоненты исключаются. Добавлены CI, Changesets и документация по переносу компонентов и ведению их историй изменений. Runtime-компоненты будут перенесены отдельно.
44
+
3
45
  Опубликованных версий пока нет. После первого релиза Changesets добавит сюда историю пакета.
package/README.md CHANGED
@@ -1,5 +1,35 @@
1
1
  Демо: <https://koslibs.github.io/components/>
2
2
 
3
+ ## Основной шрифт
4
+
5
+ Библиотека задаёт `--font-primary: 'Inter', sans-serif` в общей теме. Компоненты,
6
+ использующие эту переменную, автоматически подключают тему и локальные WOFF2-файлы
7
+ Inter. Поддерживаются веса 100–900, латиница и кириллица; внешние CDN не используются.
8
+ Браузер загружает нужные языковые поднаборы по `unicode-range`, используется
9
+ `font-display: swap`. Лицензия Inter включена в npm-пакет.
10
+
11
+ Для использования темы в собственных элементах можно подключить её отдельно:
12
+
13
+ ```tsx
14
+ import '@koslibs/components/theme.css';
15
+ ```
16
+
17
+ Значение по умолчанию находится в CSS-слое `koslibs`, поэтому обычные стили приложения
18
+ переопределяют его независимо от порядка подключения. Например:
19
+
20
+ ```css
21
+ :root {
22
+ --font-primary: 'My App Font', sans-serif;
23
+ }
24
+
25
+ .alternate-font {
26
+ --font-primary: Georgia, serif;
27
+ }
28
+ ```
29
+
30
+ Файлы своего шрифта подключите в приложении. Тема задаёт только переменную и
31
+ `@font-face`; она не изменяет шрифт `body` или элементов, которые её не используют.
32
+
3
33
  ## Добавление компонента
4
34
 
5
35
  Рекомендуемая структура:
@@ -20,18 +50,18 @@ src/components/Button/
20
50
  также добавить реэкспорт в `src/index.ts`; отдельный импорт компонента его не использует.
21
51
  3. Общий шаблон в `package.json` → `exports` уже связывает каждый компонент с его файлами:
22
52
 
23
- ```json
24
- {
25
- "./*": {
26
- "types": "./dist/components/*/index.d.ts",
27
- "import": "./dist/components/*/index.js"
28
- }
29
- }
30
- ```
53
+ ```json
54
+ {
55
+ "./*": {
56
+ "types": "./dist/components/*/index.d.ts",
57
+ "import": "./dist/components/*/index.js"
58
+ }
59
+ }
60
+ ```
31
61
 
32
62
  4. Добавьте Docs, Playground и `CHANGELOG.md` по [примеру документации](https://github.com/koslibs/components/blob/main/docs/component-changelogs.md).
33
- 5. Добавьте тесты поведения. Unit-тесты можно запускать через `koslibs-builder lib:test`;
34
- в каркасе unit-suite отсутствует, потому что runtime-компонентов пока нет.
63
+ 5. Добавьте тесты поведения. `npm run test:unit` запускает unit-тесты через
64
+ `koslibs-builder lib:test`; `npm test` также проверяет отдельные импорты.
35
65
  6. Выполните сборку и проверьте реальные пути JS, деклараций и CSS в `dist`.
36
66
 
37
67
  После публикации предполагается такой импорт:
@@ -53,10 +83,11 @@ Builder сохраняет отдельные JS-модули и отдельн
53
83
 
54
84
  Тест `tests/component-imports.test.mjs` запускается через Node.js test runner командой
55
85
  `npm test` (или отдельно `npm run test:imports`) и проверяет схему через builder:
56
- собирает временную библиотеку с Button
57
- и Spinner, затем приложение с импортом только `@koslibs/components/Button`.
58
- Проверка подтверждает наличие Button и его CSS и отсутствие Spinner и его CSS
59
- в production-бандле. Временные компоненты находятся в `.cache` и не публикуются.
86
+ собирает временную библиотеку с настоящим Button и независимым тестовым Spinner,
87
+ затем приложение с импортом только `@koslibs/components/Button`.
88
+ Проверка подтверждает наличие Button, его внутреннего спиннера загрузки и их CSS
89
+ и отсутствие независимого Spinner в production-бандле.
90
+ Временная библиотека находится в `.cache` и не публикуется.
60
91
 
61
92
  Пакет выпускается в ESM. CSS помечен как side effect, чтобы оптимизация потребителя
62
93
  не удаляла стили. Builder сохраняет структуру модулей; Docs, stories и Markdown
@@ -0,0 +1,67 @@
1
+ import React, { type ButtonHTMLAttributes, type ReactNode } from 'react';
2
+ type ButtonOwnProps = {
3
+ /**
4
+ * Тип кнопки
5
+ * @default 'primary'
6
+ */
7
+ view?: 'primary' | 'secondary' | 'accent' | 'outlined' | 'transparent' | 'text';
8
+ /**
9
+ * Скругление кнопки
10
+ * @default 'rectangular'
11
+ */
12
+ shape?: 'rectangular' | 'rounded';
13
+ /**
14
+ * Размер кнопки
15
+ * @default 40
16
+ */
17
+ size?: 32 | 40 | 48 | 56 | 64 | 72;
18
+ /**
19
+ * Аддон слева от лейбла
20
+ */
21
+ leftAddon?: ReactNode;
22
+ /**
23
+ * Аддон справа от лейбла
24
+ */
25
+ rightAddon?: ReactNode;
26
+ /**
27
+ * Подпись под основным текстом
28
+ */
29
+ hint?: string;
30
+ /**
31
+ * Заставляет кнопку растянуться на ширину контейнера.
32
+ * @default false
33
+ */
34
+ block?: boolean;
35
+ /**
36
+ * Показать лоадер
37
+ * @default false
38
+ */
39
+ loading?: boolean;
40
+ /**
41
+ * Айди для автотестов.
42
+ */
43
+ dataTestId?: string;
44
+ /**
45
+ * Дополнительный класс
46
+ */
47
+ className?: string;
48
+ /**
49
+ * Дополнительный класс для label
50
+ */
51
+ labelClassName?: string;
52
+ /**
53
+ * Дополнительный класс для hint
54
+ */
55
+ hintClassName?: string;
56
+ /**
57
+ * Дополнительный класс для спиннера
58
+ */
59
+ spinnerClassName?: string;
60
+ /**
61
+ * Текст кнопки
62
+ */
63
+ children?: ReactNode;
64
+ };
65
+ export type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & ButtonOwnProps;
66
+ export declare const Button: React.ForwardRefExoticComponent<React.ButtonHTMLAttributes<HTMLButtonElement> & ButtonOwnProps & React.RefAttributes<HTMLButtonElement>>;
67
+ export {};
@@ -0,0 +1,88 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import classnames from "classnames";
3
+ import react, { forwardRef, useEffect, useRef, useState } from "react";
4
+ import { Spinner } from "../Spinner/index.js";
5
+ import colors_module from "./colors.module.js";
6
+ import index_module from "./index.module.js";
7
+ const Button = /*#__PURE__*/ forwardRef(({ view = 'primary', shape = 'rectangular', size = 40, leftAddon, rightAddon, hint, block = false, loading = false, dataTestId, className, labelClassName, hintClassName, spinnerClassName, children, onClick, ...restProps }, ref)=>{
8
+ const [loaderTimePassed, setLoaderTimePassed] = useState(true);
9
+ const timerId = useRef(0);
10
+ const showLoader = loading || !loaderTimePassed;
11
+ const showHint = hint && [
12
+ 56,
13
+ 64,
14
+ 72
15
+ ].includes(size);
16
+ const { disabled, type = 'button', ...restButtonProps } = restProps;
17
+ const buttonChildren = /*#__PURE__*/ jsxs(react.Fragment, {
18
+ children: [
19
+ leftAddon && /*#__PURE__*/ jsx("span", {
20
+ className: index_module.addons,
21
+ children: leftAddon
22
+ }),
23
+ children && /*#__PURE__*/ jsxs("span", {
24
+ className: classnames(index_module.label, labelClassName, {
25
+ [index_module.stretchText]: !(leftAddon || rightAddon)
26
+ }),
27
+ children: [
28
+ children,
29
+ showHint && /*#__PURE__*/ jsx("span", {
30
+ className: classnames(index_module.hint, colors_module.hint, hintClassName),
31
+ children: hint
32
+ })
33
+ ]
34
+ }),
35
+ showLoader && /*#__PURE__*/ jsx(Spinner, {
36
+ size: 24,
37
+ dataTestId: dataTestId ? `${dataTestId}-loader` : void 0,
38
+ visible: true,
39
+ className: classnames(index_module.loader, colors_module.loader, spinnerClassName)
40
+ }),
41
+ rightAddon && /*#__PURE__*/ jsx("span", {
42
+ className: index_module.addons,
43
+ children: rightAddon
44
+ })
45
+ ]
46
+ });
47
+ useEffect(()=>{
48
+ if (loading) {
49
+ window.clearTimeout(timerId.current);
50
+ setLoaderTimePassed(false);
51
+ timerId.current = window.setTimeout(()=>{
52
+ setLoaderTimePassed(true);
53
+ }, 500);
54
+ }
55
+ }, [
56
+ loading
57
+ ]);
58
+ useEffect(()=>()=>{
59
+ window.clearTimeout(timerId.current);
60
+ }, []);
61
+ const handleClick = (e)=>{
62
+ if (disabled || showLoader) {
63
+ e.preventDefault();
64
+ e.stopPropagation();
65
+ return;
66
+ }
67
+ onClick?.(e);
68
+ };
69
+ return /*#__PURE__*/ jsx("button", {
70
+ ...restButtonProps,
71
+ className: classnames(index_module.component, index_module[view], index_module[`size-${size}`], index_module[shape], colors_module.component, colors_module[view], {
72
+ [index_module.block]: block,
73
+ [index_module.loading]: showLoader,
74
+ [index_module.withRightAddon]: Boolean(rightAddon),
75
+ [index_module.withLeftAddon]: Boolean(leftAddon),
76
+ [colors_module.loading]: showLoader
77
+ }, className),
78
+ "data-test-id": dataTestId,
79
+ type: type,
80
+ disabled: disabled || showLoader,
81
+ "aria-busy": showLoader,
82
+ onClick: handleClick,
83
+ ref: ref,
84
+ children: buttonChildren
85
+ });
86
+ });
87
+ Button.displayName = 'Button';
88
+ export { Button };
@@ -0,0 +1,14 @@
1
+ import "./colors_module.css";
2
+ const colors_module = {
3
+ primary: "primary-jF1frT",
4
+ secondary: "secondary-em6CEW",
5
+ accent: "accent-cr9M8g",
6
+ transparent: "transparent-osSlaN",
7
+ text: "text-fLOhKS",
8
+ loader: "loader-wrwZSN",
9
+ hint: "hint-JAXcv5",
10
+ outlined: "outlined-xzRrKO",
11
+ component: "component-GmKJmC",
12
+ loading: "loading-LzTYPE"
13
+ };
14
+ export default colors_module;
@@ -0,0 +1,164 @@
1
+ @import "./vars.css";
2
+
3
+ .primary-jF1frT, .secondary-em6CEW, .accent-cr9M8g, .transparent-osSlaN, .text-fLOhKS {
4
+ box-shadow: none;
5
+ }
6
+
7
+ .primary-jF1frT {
8
+ color: var(--button-inverse-color);
9
+ background-color: var(--button-primary-background-color);
10
+
11
+ @media (hover: hover) {
12
+ &:hover {
13
+ background-color: var(--button-primary-hover-background-color);
14
+ }
15
+ }
16
+
17
+ &:active {
18
+ background-color: var(--button-primary-active-background-color);
19
+ }
20
+
21
+ & > .loader-wrwZSN {
22
+ color: var(--button-inverse-color);
23
+ }
24
+
25
+ &:not([disabled]) .hint-JAXcv5 {
26
+ color: var(--button-inverse-hint-color);
27
+ }
28
+ }
29
+
30
+ .secondary-em6CEW {
31
+ color: var(--button-default-color);
32
+ background-color: var(--button-secondary-background-color);
33
+
34
+ @media (hover: hover) {
35
+ &:hover {
36
+ background-color: var(--button-secondary-hover-background-color);
37
+ }
38
+ }
39
+
40
+ &:active {
41
+ background-color: var(--button-secondary-active-background-color);
42
+ }
43
+
44
+ & > .loader-wrwZSN {
45
+ color: var(--button-default-color);
46
+ }
47
+
48
+ &:not([disabled]) .hint-JAXcv5 {
49
+ color: var(--button-hint-color);
50
+ }
51
+ }
52
+
53
+ .accent-cr9M8g {
54
+ color: var(--button-inverse-color);
55
+ background-color: var(--button-accent-background-color);
56
+
57
+ @media (hover: hover) {
58
+ &:hover {
59
+ background-color: var(--button-accent-hover-background-color);
60
+ }
61
+ }
62
+
63
+ &:active {
64
+ background-color: var(--button-accent-active-background-color);
65
+ }
66
+
67
+ & > .loader-wrwZSN {
68
+ color: var(--button-inverse-color);
69
+ }
70
+
71
+ &:not([disabled]) .hint-JAXcv5 {
72
+ color: var(--button-inverse-hint-color);
73
+ }
74
+ }
75
+
76
+ .outlined-xzRrKO {
77
+ color: var(--button-default-color);
78
+ box-shadow: inset 0 0 0 1px var(--button-primary-background-color);
79
+ background: none;
80
+
81
+ @media (hover: hover) {
82
+ &:hover {
83
+ background-color: var(--button-subtle-hover-background-color);
84
+ box-shadow: inset 0 0 0 1px var(--button-primary-hover-background-color);
85
+ }
86
+ }
87
+
88
+ &:active {
89
+ background-color: var(--button-subtle-active-background-color);
90
+ box-shadow: inset 0 0 0 1px var(--button-primary-active-background-color);
91
+ }
92
+
93
+ & > .loader-wrwZSN {
94
+ color: var(--button-default-color);
95
+ }
96
+
97
+ &:not([disabled]) .hint-JAXcv5 {
98
+ color: var(--button-hint-color);
99
+ }
100
+ }
101
+
102
+ .transparent-osSlaN {
103
+ color: var(--button-default-color);
104
+ background-color: var(--button-transparent-background-color);
105
+
106
+ @media (hover: hover) {
107
+ &:hover {
108
+ background-color: var(--button-subtle-hover-background-color);
109
+ }
110
+ }
111
+
112
+ &:active {
113
+ background-color: var(--button-subtle-active-background-color);
114
+ }
115
+
116
+ & > .loader-wrwZSN {
117
+ color: var(--button-default-color);
118
+ }
119
+
120
+ &:not([disabled]) .hint-JAXcv5 {
121
+ color: var(--button-hint-color);
122
+ }
123
+ }
124
+
125
+ .text-fLOhKS {
126
+ background-color: var(--button-transparent-background-color);
127
+ color: var(--button-default-color);
128
+
129
+ @media (hover: hover) {
130
+ &:hover {
131
+ color: var(--button-text-hover-color);
132
+ }
133
+ }
134
+
135
+ &:active {
136
+ color: var(--button-text-active-color);
137
+ }
138
+
139
+ & > .loader-wrwZSN {
140
+ color: var(--button-default-color);
141
+ }
142
+
143
+ &:not([disabled]) .hint-JAXcv5 {
144
+ color: var(--button-hint-color);
145
+ }
146
+ }
147
+
148
+ .component-GmKJmC[disabled] {
149
+ &:not(.loading-LzTYPE) {
150
+ background-color: var(--button-disabled-background-color);
151
+ color: var(--button-disabled-color);
152
+ box-shadow: none;
153
+
154
+ &.hint-JAXcv5 {
155
+ color: var(--button-disabled-hint-color);
156
+ }
157
+ }
158
+
159
+ &.transparent-osSlaN, &.text-fLOhKS {
160
+ background-color: var(--button-transparent-background-color);
161
+ color: var(--button-disabled-color);
162
+ }
163
+ }
164
+
@@ -0,0 +1,2 @@
1
+ export { Button } from './button.js';
2
+ export type { ButtonProps } from './button.js';
@@ -0,0 +1 @@
1
+ export { Button } from "./button.js";
@@ -0,0 +1,30 @@
1
+ import "./index_module.css";
2
+ const index_module = {
3
+ component: "component-vxc0gC",
4
+ "size-32": "size-32-oD8MDp",
5
+ size32: "size-32-oD8MDp",
6
+ "size-40": "size-40-Pu2_h6",
7
+ size40: "size-40-Pu2_h6",
8
+ "size-48": "size-48-U3XIYx",
9
+ size48: "size-48-U3XIYx",
10
+ "size-56": "size-56-P_94sz",
11
+ size56: "size-56-P_94sz",
12
+ "size-64": "size-64-ZlQLt3",
13
+ size64: "size-64-ZlQLt3",
14
+ "size-72": "size-72-zkSrcs",
15
+ size72: "size-72-zkSrcs",
16
+ withRightAddon: "withRightAddon-TNcFTm",
17
+ text: "text-Ifdq0q",
18
+ withLeftAddon: "withLeftAddon-N3YDHw",
19
+ addons: "addons-NxGsiY",
20
+ block: "block-xREK1A",
21
+ rectangular: "rectangular-PFbww7",
22
+ rounded: "rounded-kQqesg",
23
+ loading: "loading-DPEeSl",
24
+ label: "label-gwmTIK",
25
+ stretchText: "stretchText-Nm2RYn",
26
+ hint: "hint-AFu_zz",
27
+ loader: "loader-BRksFP",
28
+ transparent: "transparent-w7vhL3"
29
+ };
30
+ export default index_module;