@phpsoftbox/react-softbox 1.16.0 → 2.0.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.
- package/README.md +10 -0
- package/dist/components/Alert/Alert.js +8 -0
- package/dist/components/Alert/Alert.js.map +1 -1
- package/dist/components/Alert/Alert.module.css +65 -33
- package/dist/components/Badge/Badge.d.ts +4 -1
- package/dist/components/Badge/Badge.js +25 -3
- package/dist/components/Badge/Badge.js.map +1 -1
- package/dist/components/Badge/Badge.module.css +89 -32
- package/dist/components/Button/Button.d.ts +11 -2
- package/dist/components/Button/Button.js +20 -1
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/Card/Card.d.ts +3 -1
- package/dist/components/Card/Card.js +9 -3
- package/dist/components/Card/Card.js.map +1 -1
- package/dist/components/Card/Card.module.css +8 -2
- package/dist/components/CollapseButton/CollapseButton.module.css +1 -1
- package/dist/components/Drawer/Drawer.module.css +1 -0
- package/dist/components/FileUploader/FileUploader.module.css +6 -6
- package/dist/components/Image/Image.module.css +2 -2
- package/dist/components/Input/Checkbox/Checkbox.module.css +2 -2
- package/dist/components/Input/ErrorTooltip/ErrorTooltip.module.css +1 -1
- package/dist/components/Input/FloatLabel/FloatLabel.module.css +2 -2
- package/dist/components/Input/FormField/FormField.module.css +2 -2
- package/dist/components/Input/Hint/Hint.module.css +1 -1
- package/dist/components/Input/Input.d.ts +12 -2
- package/dist/components/Input/Input.js +4 -1
- package/dist/components/Input/Input.js.map +1 -1
- package/dist/components/Input/Input.module.css +1 -1
- package/dist/components/Input/InputGroup.d.ts +14 -3
- package/dist/components/Input/InputGroup.js +27 -4
- package/dist/components/Input/InputGroup.js.map +1 -1
- package/dist/components/Input/InputGroup.module.css +83 -7
- package/dist/components/Input/Radio/Radio.js +1 -1
- package/dist/components/Input/Radio/Radio.js.map +1 -1
- package/dist/components/Input/Radio/Radio.module.css +2 -2
- package/dist/components/Input/Select/Select.d.ts +2 -1
- package/dist/components/Input/Select/Select.js +2 -2
- package/dist/components/Input/Select/Select.js.map +1 -1
- package/dist/components/Input/Select/Select.module.css +22 -9
- package/dist/components/Input/Switch/Switch.module.css +2 -2
- package/dist/components/Input/Textarea/Textarea.module.css +1 -1
- package/dist/components/MarkdownEditor/MarkdownEditor.module.css +51 -17
- package/dist/components/Menu/Menu.module.css +3 -3
- package/dist/components/Modal/Modal.module.css +1 -1
- package/dist/components/Notifier/Notifier.js +4 -0
- package/dist/components/Notifier/Notifier.js.map +1 -1
- package/dist/components/Notifier/Notifier.module.css +38 -16
- package/dist/components/Pagination/Pagination.module.css +1 -1
- package/dist/components/Progress/Progress.js +4 -0
- package/dist/components/Progress/Progress.js.map +1 -1
- package/dist/components/Progress/Progress.module.css +24 -8
- package/dist/components/Table/Table.js +4 -0
- package/dist/components/Table/Table.js.map +1 -1
- package/dist/components/Table/Table.module.css +24 -8
- package/dist/components/Tooltip/Tooltip.module.css +1 -1
- package/dist/components/Typography/Heading.js +4 -0
- package/dist/components/Typography/Heading.js.map +1 -1
- package/dist/components/Typography/Text.js +4 -0
- package/dist/components/Typography/Text.js.map +1 -1
- package/dist/components/Typography/Typography.module.css +22 -6
- package/dist/components/Wizard/Wizard.d.ts +2 -0
- package/dist/components/Wizard/Wizard.js +24 -2
- package/dist/components/Wizard/Wizard.js.map +1 -1
- package/dist/components/Wizard/Wizard.module.css +54 -40
- package/dist/foundations/buttons.css +268 -54
- package/dist/foundations/layout.css +2 -2
- package/dist/foundations/tabs.css +3 -3
- package/dist/foundations/tokens.css +304 -74
- package/dist/foundations/utilities.css +738 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/docs/card.md +2 -1
- package/docs/feedback.md +8 -1
- package/docs/forms.md +28 -2
- package/docs/layout.md +42 -2
- package/docs/theme.md +46 -2
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -36,7 +36,7 @@ export { default as Table } from './components/Table/Table';
|
|
|
36
36
|
export { default as Wizard } from './components/Wizard/Wizard';
|
|
37
37
|
export type { TableBulkAction, TableBulkActions, TableColumn, TableRenderBulkAction, TableSelection, TableSortDirection, TableSortOptions, TableSortState, } from './components/Table/Table';
|
|
38
38
|
export type { TooltipPlacement, TooltipVariant } from './components/Tooltip/Tooltip';
|
|
39
|
-
export type { WizardBlockedTransition, WizardDirection, WizardProgressState, WizardStep, WizardStepProps, WizardStepContentProps, WizardStepRenderProps, WizardStepStatus, WizardUrlSyncMode, WizardSummaryData, WizardSummaryProps, WizardSummaryVariant, WizardTemplateProps, WizardWindowSizeMap, WizardStepVisibilityContext, WizardTransitionContext, } from './components/Wizard/Wizard';
|
|
39
|
+
export type { WizardBlockedTransition, WizardDirection, WizardProgressState, WizardStep, WizardStepProps, WizardStepContentProps, WizardStepRenderProps, WizardStepStatus, WizardStepVariantMap, WizardUrlSyncMode, WizardSummaryData, WizardSummaryProps, WizardSummaryVariant, WizardTemplateProps, WizardWindowSizeMap, WizardStepVisibilityContext, WizardTransitionContext, } from './components/Wizard/Wizard';
|
|
40
40
|
export { default as Text } from './components/Typography/Text';
|
|
41
41
|
export { default as Heading } from './components/Typography/Heading';
|
|
42
42
|
export { default as useMediaQuery } from './hooks/useMediaQuery';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAE3E,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAE3E,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,4BAA4B,CAAC;AA+B/D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export type UiVariant = 'default' | 'primary' | 'info' | 'success' | 'warning' | 'danger';
|
|
1
|
+
export type UiVariant = 'default' | 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'danger' | 'dark' | 'light' | 'neutral';
|
package/docs/card.md
CHANGED
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
|
|
35
35
|
```tsx
|
|
36
36
|
<Card.Toolbar>
|
|
37
|
-
<Card.Toolbar.Group>
|
|
37
|
+
<Card.Toolbar.Group attached>
|
|
38
38
|
<Card.Toolbar.Button icon={<SaveIcon />} label="Сохранить" />
|
|
39
39
|
<Card.Toolbar.Button icon={<RefreshIcon />} />
|
|
40
40
|
</Card.Toolbar.Group>
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
|
|
44
44
|
`Card.Toolbar.Button` принимает `icon` и/или `label` (минимум одно из них обязательно).
|
|
45
45
|
Если переданы оба, внутри кнопки появится вертикальный разделитель. На средних экранах текстовая часть скрывается.
|
|
46
|
+
`Card.Toolbar.Group attached` склеивает соседние кнопки в одну группу; без `attached` группы остаются разделёнными gap и toolbar-разделителями.
|
|
46
47
|
|
|
47
48
|
Скрытие текста включено по умолчанию (`md`) и настраивается:
|
|
48
49
|
- на уровне `Card.Toolbar`: `buttonHideLabelOn="md" | "never"`
|
package/docs/feedback.md
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
# Feedback
|
|
2
2
|
|
|
3
|
-
Все статусные компоненты используют единый набор вариантов: `default`, `primary`, `info`, `success`, `warning`, `danger`.
|
|
3
|
+
Все статусные компоненты используют единый набор вариантов: `default`, `primary`, `secondary`, `info`, `success`, `warning`, `danger`, `dark`, `light`, `neutral`.
|
|
4
4
|
|
|
5
5
|
## Badge
|
|
6
6
|
|
|
7
7
|
```tsx
|
|
8
8
|
<Badge>Default</Badge>
|
|
9
9
|
<Badge variant="primary">Primary</Badge>
|
|
10
|
+
<Badge variant="secondary">Secondary</Badge>
|
|
10
11
|
<Badge variant="info">Info</Badge>
|
|
11
12
|
<Badge variant="success">Success</Badge>
|
|
12
13
|
<Badge variant="warning">Warning</Badge>
|
|
@@ -14,8 +15,14 @@
|
|
|
14
15
|
<Badge size="sm" variant="info">Small</Badge>
|
|
15
16
|
<Badge size="md" variant="info">Medium</Badge>
|
|
16
17
|
<Badge size="lg" variant="info">Large</Badge>
|
|
18
|
+
<Badge variant="success" className="rounded-pill">Pill</Badge>
|
|
19
|
+
<Badge variant="warning" className="rounded-circle size-6 p-0 f-2">3</Badge>
|
|
20
|
+
<Badge variant="info" className="border border-info text-uppercase f-2">helper styled</Badge>
|
|
21
|
+
<Badge variant="danger" dot aria-label="Ошибка" className="p-2" />
|
|
17
22
|
```
|
|
18
23
|
|
|
24
|
+
`Badge` не меняет регистр текста и не задает font-size. Для декоративных решений используйте helpers: `text-uppercase`, `f-2`, `border`, `rounded-pill`, `rounded-circle` и т.д.
|
|
25
|
+
|
|
19
26
|
## Alert
|
|
20
27
|
|
|
21
28
|
```tsx
|
package/docs/forms.md
CHANGED
|
@@ -237,9 +237,35 @@ const statusOptions = [
|
|
|
237
237
|
<Input>
|
|
238
238
|
<Input.Label>Цена</Input.Label>
|
|
239
239
|
<Input.Group stretch>
|
|
240
|
-
<Input.
|
|
240
|
+
<Input.Group.Label>₽</Input.Group.Label>
|
|
241
241
|
<Input.Number placeholder="0.00" />
|
|
242
|
-
<
|
|
242
|
+
<Input.Group.Text>без НДС</Input.Group.Text>
|
|
243
|
+
</Input.Group>
|
|
244
|
+
</Input>
|
|
245
|
+
|
|
246
|
+
<Input>
|
|
247
|
+
<Input.Label>Телефон</Input.Label>
|
|
248
|
+
<Input.Group stretch>
|
|
249
|
+
<Input.Select
|
|
250
|
+
value={country}
|
|
251
|
+
options={countryOptions}
|
|
252
|
+
style={{ flex: '0 0 150px' }}
|
|
253
|
+
onChange={(next) => {
|
|
254
|
+
setCountry(next);
|
|
255
|
+
setPhone('');
|
|
256
|
+
}}
|
|
257
|
+
/>
|
|
258
|
+
<Input.MaskedInput mask={phoneMasks[country]} value={phone} onChange={setPhone} />
|
|
259
|
+
</Input.Group>
|
|
260
|
+
</Input>
|
|
261
|
+
|
|
262
|
+
<Input>
|
|
263
|
+
<Input.Label>Скидка</Input.Label>
|
|
264
|
+
<Input.Group stretch>
|
|
265
|
+
<Input.Group.Choice>
|
|
266
|
+
<Input.Radio name="discount" label="%" />
|
|
267
|
+
</Input.Group.Choice>
|
|
268
|
+
<Input.Number placeholder="10" />
|
|
243
269
|
</Input.Group>
|
|
244
270
|
</Input>
|
|
245
271
|
```
|
package/docs/layout.md
CHANGED
|
@@ -56,7 +56,15 @@ const [open, setOpen] = useState(false);
|
|
|
56
56
|
</Collapse>
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
-
##
|
|
59
|
+
## Utility helpers
|
|
60
|
+
|
|
61
|
+
Utility helpers — публичный слой поверх дизайн-токенов. Компоненты должны держать только структурный минимум, состояния и accessibility; декоративные решения вроде регистра текста, border, radius, размера текста, позиционирования и простого layout лучше добавлять через helpers в `className`.
|
|
62
|
+
|
|
63
|
+
План миграции компонентов:
|
|
64
|
+
1. Новые component styles не должны добавлять opinionated-оформление, если это можно выразить helper-классом.
|
|
65
|
+
2. Существующие компоненты упрощаются по одному: сначала убираются декоративные typography/background/border/radius правила, затем примеры переводятся на helpers.
|
|
66
|
+
3. Цветовые состояния компонентов должны брать палитру из `UiVariant` tokens, а не из component-specific color tokens.
|
|
67
|
+
4. Component-specific CSS variables оставляются только для внутренней геометрии или сложного поведения, которое нельзя удобно описать helper-классом.
|
|
60
68
|
|
|
61
69
|
Глобальные классы для отступов и gap основаны на `--spacing-1…10`.
|
|
62
70
|
|
|
@@ -70,6 +78,31 @@ const [open, setOpen] = useState(false);
|
|
|
70
78
|
- `p-`, `px-`, `py-`, `pt-`, `pr-`, `pb-`, `pl-`
|
|
71
79
|
- `m-`, `mx-`, `my-`, `mt-`, `mr-`, `mb-`, `ml-`
|
|
72
80
|
- `gap-`
|
|
81
|
+
- zero helpers: `p-0`, `px-0`, `py-0`, `m-0`, `gap-0`
|
|
82
|
+
|
|
83
|
+
Typography и text:
|
|
84
|
+
- размеры: `f-1`…`f-9`
|
|
85
|
+
- вес: `fw-normal`, `fw-medium`, `fw-semibold`, `fw-bold`
|
|
86
|
+
- line-height: `lh-1`, `lh-sm`, `lh-base`, `lh-lg`
|
|
87
|
+
- цвет: `text-body`, `text-muted`, `text-muted-2`, `text-default`, `text-primary`, `text-secondary`, `text-info`, `text-success`, `text-warning`, `text-danger`, `text-dark`, `text-light`, `text-neutral`
|
|
88
|
+
- выравнивание и регистр: `text-start`, `text-center`, `text-end`, `text-uppercase`, `text-lowercase`, `text-capitalize`, `text-normalcase`
|
|
89
|
+
- переносы: `text-wrap`, `text-nowrap`, `text-break`, `text-truncate`, `line-clamp-1`, `line-clamp-2`, `line-clamp-3`
|
|
90
|
+
|
|
91
|
+
Background, border и radius:
|
|
92
|
+
- фон: `bg-surface`, `bg-surface-2`, `bg-panel`, `bg-transparent`
|
|
93
|
+
- solid variant background: `bg-default`, `bg-primary`, `bg-secondary`, `bg-info`, `bg-success`, `bg-warning`, `bg-danger`, `bg-dark`, `bg-light`, `bg-neutral`
|
|
94
|
+
- soft background: `bg-default-soft`, `bg-primary-soft`, `bg-secondary-soft`, `bg-info-soft`, `bg-success-soft`, `bg-warning-soft`, `bg-danger-soft`, `bg-dark-soft`, `bg-light-soft`, `bg-neutral-soft`
|
|
95
|
+
- border: `border`, `border-0`, `border-top`, `border-right`, `border-bottom`, `border-left`, `border-1`, `border-2`, `border-3`
|
|
96
|
+
- border color: `border-default`, `border-primary`, `border-secondary`, `border-info`, `border-success`, `border-warning`, `border-danger`, `border-dark`, `border-light`, `border-neutral`
|
|
97
|
+
- radius: `rounded-0`, `rounded`, `rounded-xs`, `rounded-sm`, `rounded-md`, `rounded-lg`, `rounded-pill`, `rounded-circle`
|
|
98
|
+
|
|
99
|
+
Display, flex, grid и position:
|
|
100
|
+
- display: `d-none`, `d-block`, `d-inline-block`, `d-flex`, `d-inline-flex`, `d-grid`
|
|
101
|
+
- flex: `flex-row`, `flex-column`, `flex-wrap`, `flex-nowrap`, `flex-1`, `flex-auto`, `flex-none`, `grow-0`, `grow-1`, `shrink-0`, `shrink-1`
|
|
102
|
+
- align/justify: `items-start`, `items-center`, `items-end`, `items-stretch`, `justify-start`, `justify-center`, `justify-end`, `justify-between`, `justify-around`, `justify-evenly`
|
|
103
|
+
- grid: `grid-cols-1`, `grid-cols-2`, `grid-cols-3`, `grid-cols-4`, `grid-cols-6`, `grid-cols-12`, `col-span-1`, `col-span-2`, `col-span-3`, `col-span-4`, `col-span-6`, `col-span-12`
|
|
104
|
+
- position: `position-static`, `position-relative`, `position-absolute`, `position-fixed`, `position-sticky`, `inset-0`, `top-0`, `top-100`, `right-0`, `right-100`, `bottom-0`, `bottom-100`, `left-0`, `left-100`, `translate-none`, `translate-middle`, `translate-middle-x`, `translate-middle-y`, `z-0`, `z-1`, `z-10`, `z-20`, `z-50`
|
|
105
|
+
- размеры/overflow/link: `w-100`, `h-100`, `size-1`…`size-10`, `min-w-0`, `overflow-hidden`, `overflow-auto`, `stretched-link`
|
|
73
106
|
|
|
74
107
|
## Классы кнопок
|
|
75
108
|
|
|
@@ -79,10 +112,17 @@ const [open, setOpen] = useState(false);
|
|
|
79
112
|
<a className="btn btn-primary btn-solid" href="/create">Создать</a>
|
|
80
113
|
<a className="btn btn-info btn-outline" href="/details">Подробнее</a>
|
|
81
114
|
<button className="btn btn-danger btn-ghost">Удалить</button>
|
|
115
|
+
|
|
116
|
+
<div className="btn-group btn-group-horizontal" role="group" aria-label="Режим просмотра">
|
|
117
|
+
<button className="btn btn-neutral btn-outline">День</button>
|
|
118
|
+
<button className="btn btn-neutral btn-outline">Неделя</button>
|
|
119
|
+
<button className="btn btn-neutral btn-outline">Месяц</button>
|
|
120
|
+
</div>
|
|
82
121
|
```
|
|
83
122
|
|
|
84
123
|
Доступны:
|
|
85
124
|
- базовый класс: `btn`
|
|
86
|
-
- варианты: `btn-default`, `btn-primary`, `btn-info`, `btn-success`, `btn-warning`, `btn-danger`
|
|
125
|
+
- варианты: `btn-default`, `btn-primary`, `btn-secondary`, `btn-info`, `btn-success`, `btn-warning`, `btn-danger`, `btn-dark`, `btn-light`, `btn-neutral`
|
|
87
126
|
- внешность: `btn-solid`, `btn-outline`, `btn-ghost`
|
|
88
127
|
- размеры: `btn-sm`, `btn-md`, `btn-lg`
|
|
128
|
+
- группы: `btn-group`, `btn-group-horizontal`, `btn-group-vertical`, `btn-group-stretch`
|
package/docs/theme.md
CHANGED
|
@@ -57,8 +57,8 @@ setThemeMode('dark', { storageKey: 'my-app-theme' });
|
|
|
57
57
|
:root {
|
|
58
58
|
--color-text: #0b1626;
|
|
59
59
|
--surface-panel: rgba(255, 255, 255, 0.98);
|
|
60
|
-
--radius-md:
|
|
61
|
-
--spacing-4:
|
|
60
|
+
--radius-md: 0.875rem;
|
|
61
|
+
--spacing-4: 1.125rem;
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
:root[data-theme="light"] {
|
|
@@ -75,3 +75,47 @@ setThemeMode('dark', { storageKey: 'my-app-theme' });
|
|
|
75
75
|
Рекомендуемый подход:
|
|
76
76
|
1. Скопировать нужные переменные из `packages-js/ReactSoftBox/src/foundations/tokens.css`.
|
|
77
77
|
2. Переопределить только отличающиеся значения в своём CSS (до инициализации темы).
|
|
78
|
+
|
|
79
|
+
## UiVariant tokens
|
|
80
|
+
|
|
81
|
+
Для каждого варианта доступны токены:
|
|
82
|
+
|
|
83
|
+
```css
|
|
84
|
+
:root {
|
|
85
|
+
--variant-primary-bg: #14c9d6;
|
|
86
|
+
--variant-primary-hover: #18d1de;
|
|
87
|
+
--variant-primary-active: #0faeb9;
|
|
88
|
+
--variant-primary-border: rgba(20, 201, 214, 0.72);
|
|
89
|
+
--variant-primary-text: #06201c;
|
|
90
|
+
--variant-primary-accent: var(--variant-primary-bg);
|
|
91
|
+
--variant-primary-soft: rgba(20, 201, 214, 0.18);
|
|
92
|
+
--variant-primary-disabled-bg: var(--variant-disabled-bg);
|
|
93
|
+
--variant-primary-disabled-border: var(--variant-disabled-border);
|
|
94
|
+
--variant-primary-disabled-text: var(--variant-disabled-text);
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Та же схема есть для `default`, `primary`, `secondary`, `info`, `success`, `warning`, `danger`, `dark`, `light`, `neutral`.
|
|
99
|
+
|
|
100
|
+
`default` и `neutral` — разные варианты. `default` используется для обычного UI-состояния компонента, а `neutral` — для явного нейтрального/status-варианта в общей палитре.
|
|
101
|
+
|
|
102
|
+
## Radius and Units
|
|
103
|
+
|
|
104
|
+
Базовые размеры, отступы, font-size и radius задаются в `rem`, чтобы интерфейс корректно масштабировался вместе с настройками шрифта пользователя. Hairline-границы (`1px`, `2px`) остаются в `px`: так они предсказуемее выглядят на разных масштабах и плотностях экрана.
|
|
105
|
+
|
|
106
|
+
Основные radius-токены:
|
|
107
|
+
|
|
108
|
+
```css
|
|
109
|
+
:root {
|
|
110
|
+
--radius-default: 0.25rem;
|
|
111
|
+
--radius-pill: 50rem;
|
|
112
|
+
--radius-circle: 50%;
|
|
113
|
+
|
|
114
|
+
--btn-border-radius: var(--radius-default);
|
|
115
|
+
--badge-border-radius: var(--radius-default);
|
|
116
|
+
--card-border-radius: var(--radius-default);
|
|
117
|
+
--input-border-radius: var(--radius-default);
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Компоненты используют собственные `*-border-radius` переменные с fallback на базовые radius-токены. Для project-level кастомизации достаточно переопределить нужную component variable.
|