@phpsoftbox/react-softbox 2.0.0 → 2.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 (45) hide show
  1. package/README.md +8 -0
  2. package/dist/components/Alert/Alert.d.ts +1 -1
  3. package/dist/components/Alert/Alert.js +6 -4
  4. package/dist/components/Alert/Alert.js.map +1 -1
  5. package/dist/components/Badge/Badge.d.ts +1 -1
  6. package/dist/components/Badge/Badge.js +5 -3
  7. package/dist/components/Badge/Badge.js.map +1 -1
  8. package/dist/components/Button/Button.js +15 -4
  9. package/dist/components/Button/Button.js.map +1 -1
  10. package/dist/components/Input/Input.d.ts +4 -4
  11. package/dist/components/Menu/Dropdown.d.ts +2 -0
  12. package/dist/components/Menu/Dropdown.js +1 -0
  13. package/dist/components/Menu/Dropdown.js.map +1 -1
  14. package/dist/components/Menu/Menu.d.ts +2 -0
  15. package/dist/components/Menu/Menu.js +5 -5
  16. package/dist/components/Menu/Menu.js.map +1 -1
  17. package/dist/components/Notifier/Notifier.js +4 -2
  18. package/dist/components/Notifier/Notifier.js.map +1 -1
  19. package/dist/components/Progress/Progress.d.ts +2 -1
  20. package/dist/components/Progress/Progress.js +5 -3
  21. package/dist/components/Progress/Progress.js.map +1 -1
  22. package/dist/components/Table/Table.js +2 -1
  23. package/dist/components/Table/Table.js.map +1 -1
  24. package/dist/components/Tooltip/Tooltip.d.ts +2 -1
  25. package/dist/components/Tooltip/Tooltip.js +4 -1
  26. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  27. package/dist/components/Typography/Heading.d.ts +2 -1
  28. package/dist/components/Typography/Heading.js +5 -3
  29. package/dist/components/Typography/Heading.js.map +1 -1
  30. package/dist/components/Typography/Text.d.ts +2 -1
  31. package/dist/components/Typography/Text.js +5 -3
  32. package/dist/components/Typography/Text.js.map +1 -1
  33. package/dist/components/Wizard/Wizard.js +6 -16
  34. package/dist/components/Wizard/Wizard.js.map +1 -1
  35. package/dist/components/Wizard/Wizard.module.css +2 -2
  36. package/dist/foundations/buttons.css +2 -2
  37. package/dist/foundations/tokens.css +6 -6
  38. package/dist/index.d.ts +1 -1
  39. package/dist/types.d.ts +3 -1
  40. package/dist/utils/uiVariant.d.ts +16 -0
  41. package/dist/utils/uiVariant.js +106 -0
  42. package/dist/utils/uiVariant.js.map +1 -0
  43. package/docs/feedback.md +4 -1
  44. package/docs/theme.md +25 -0
  45. package/package.json +1 -1
@@ -0,0 +1,106 @@
1
+ export const builtinUiVariants = [
2
+ 'default',
3
+ 'primary',
4
+ 'secondary',
5
+ 'info',
6
+ 'success',
7
+ 'warning',
8
+ 'danger',
9
+ 'dark',
10
+ 'light',
11
+ 'neutral',
12
+ ];
13
+ const builtinUiVariantSet = new Set(builtinUiVariants);
14
+ const cssIdentPattern = /^-?[_a-zA-Z][-_a-zA-Z0-9]*$/;
15
+ export const isBuiltinUiVariant = (variant) => (typeof variant === 'string' && builtinUiVariantSet.has(variant));
16
+ export const getBuiltinUiVariantClass = (classMap, variant) => (isBuiltinUiVariant(variant) ? classMap[variant] : undefined);
17
+ export const normalizeUiVariantToken = (variant, fallback = 'default') => {
18
+ const token = String(variant ?? fallback).trim();
19
+ return cssIdentPattern.test(token) ? token : fallback;
20
+ };
21
+ const variantVar = (token, key, fallbackVariant = 'default', fallbackKey = key) => `var(--variant-${token}-${key}, var(--variant-${fallbackVariant}-${fallbackKey}))`;
22
+ export const mergeStyles = (base, override) => {
23
+ if (!base) {
24
+ return override;
25
+ }
26
+ if (!override) {
27
+ return base;
28
+ }
29
+ return { ...base, ...override };
30
+ };
31
+ export const buildButtonVariantStyle = (variant) => {
32
+ const token = normalizeUiVariantToken(variant);
33
+ return {
34
+ '--btn-accent': variantVar(token, 'accent'),
35
+ '--btn-accent-soft': variantVar(token, 'soft'),
36
+ '--btn-bg': variantVar(token, 'bg'),
37
+ '--btn-bg-hover': variantVar(token, 'hover'),
38
+ '--btn-bg-active': variantVar(token, 'active'),
39
+ '--btn-border': variantVar(token, 'border'),
40
+ '--btn-border-hover': variantVar(token, 'border'),
41
+ '--btn-border-active': variantVar(token, 'border'),
42
+ '--btn-color': variantVar(token, 'text'),
43
+ '--btn-bg-disabled': variantVar(token, 'disabled-bg', 'default', 'disabled-bg'),
44
+ '--btn-border-disabled': variantVar(token, 'disabled-border', 'default', 'disabled-border'),
45
+ '--btn-color-disabled': variantVar(token, 'disabled-text', 'default', 'disabled-text'),
46
+ '--btn-shadow': `0 12px 30px color-mix(in srgb, ${variantVar(token, 'bg')} 28%, transparent)`,
47
+ '--btn-shadow-hover': `0 16px 36px color-mix(in srgb, ${variantVar(token, 'bg')} 36%, transparent)`,
48
+ };
49
+ };
50
+ export const buildBadgeVariantStyle = (variant) => {
51
+ const token = normalizeUiVariantToken(variant);
52
+ return {
53
+ '--badge-bg': variantVar(token, 'bg'),
54
+ '--badge-color': variantVar(token, 'text'),
55
+ '--badge-border': variantVar(token, 'border'),
56
+ };
57
+ };
58
+ export const buildProgressVariantStyle = (variant) => {
59
+ const token = normalizeUiVariantToken(variant);
60
+ return {
61
+ '--progress-bg': variantVar(token, 'accent', 'default', 'accent'),
62
+ };
63
+ };
64
+ export const buildNotifierVariantStyle = (variant) => {
65
+ const token = normalizeUiVariantToken(variant);
66
+ return {
67
+ borderColor: variantVar(token, 'border'),
68
+ '--toast-accent': variantVar(token, 'accent', 'default', 'accent'),
69
+ };
70
+ };
71
+ export const buildAlertVariantStyle = (variant) => {
72
+ const token = normalizeUiVariantToken(variant);
73
+ return {
74
+ borderColor: variantVar(token, 'border'),
75
+ boxShadow: `0 0 0 1px color-mix(in srgb, ${variantVar(token, 'bg')} 20%, transparent)`,
76
+ '--alert-icon-color': variantVar(token, 'accent', 'default', 'accent'),
77
+ '--alert-icon-bg': variantVar(token, 'soft'),
78
+ '--alert-icon-bg-border': `color-mix(in srgb, ${variantVar(token, 'border')} 55%, transparent)`,
79
+ };
80
+ };
81
+ export const buildTextVariantStyle = (variant) => {
82
+ const token = normalizeUiVariantToken(variant);
83
+ return {
84
+ color: variantVar(token, 'accent', 'default', 'accent'),
85
+ };
86
+ };
87
+ export const buildTooltipVariantStyle = (variant) => {
88
+ const token = normalizeUiVariantToken(variant);
89
+ return {
90
+ '--tooltip-bg': `color-mix(in srgb, ${variantVar(token, 'bg')} 28%, var(--surface-panel))`,
91
+ '--tooltip-border': variantVar(token, 'border'),
92
+ '--tooltip-color': variantVar(token, 'text', 'default', 'text'),
93
+ };
94
+ };
95
+ export const buildWizardStepVariantStyle = (variant) => {
96
+ const token = normalizeUiVariantToken(variant);
97
+ return {
98
+ '--wizard-step-bg': variantVar(token, 'soft'),
99
+ '--wizard-step-border': variantVar(token, 'border'),
100
+ '--wizard-step-color': variantVar(token, 'accent', 'default', 'accent'),
101
+ '--wizard-step-index-bg': variantVar(token, 'bg'),
102
+ '--wizard-step-index-color': variantVar(token, 'text'),
103
+ '--wizard-step-shadow': `color-mix(in srgb, ${variantVar(token, 'bg')} 22%, transparent)`,
104
+ };
105
+ };
106
+ //# sourceMappingURL=uiVariant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uiVariant.js","sourceRoot":"","sources":["../../src/utils/uiVariant.ts"],"names":[],"mappings":"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"}
package/docs/feedback.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Feedback
2
2
 
3
- Все статусные компоненты используют единый набор вариантов: `default`, `primary`, `secondary`, `info`, `success`, `warning`, `danger`, `dark`, `light`, `neutral`.
3
+ Все статусные компоненты используют единый набор встроенных вариантов: `default`, `primary`, `secondary`, `info`, `success`, `warning`, `danger`, `dark`, `light`, `neutral`.
4
+
5
+ Также поддерживаются custom variants через токены `--variant-{name}-*`; пример контракта описан в `theme.md`.
4
6
 
5
7
  ## Badge
6
8
 
@@ -12,6 +14,7 @@
12
14
  <Badge variant="success">Success</Badge>
13
15
  <Badge variant="warning">Warning</Badge>
14
16
  <Badge variant="danger">Danger</Badge>
17
+ <Badge variant="brand">Brand</Badge>
15
18
  <Badge size="sm" variant="info">Small</Badge>
16
19
  <Badge size="md" variant="info">Medium</Badge>
17
20
  <Badge size="lg" variant="info">Large</Badge>
package/docs/theme.md CHANGED
@@ -99,6 +99,31 @@ setThemeMode('dark', { storageKey: 'my-app-theme' });
99
99
 
100
100
  `default` и `neutral` — разные варианты. `default` используется для обычного UI-состояния компонента, а `neutral` — для явного нейтрального/status-варианта в общей палитре.
101
101
 
102
+ Можно добавлять project-level custom variants. Имя должно быть валидным CSS identifier (`brand`, `crm-accent`, `tenant_1`). Компоненты будут искать токены по схеме `--variant-{name}-*`:
103
+
104
+ ```css
105
+ :root {
106
+ --variant-brand-bg: #8b5cf6;
107
+ --variant-brand-hover: #9468ff;
108
+ --variant-brand-active: #7c3aed;
109
+ --variant-brand-border: #7c3aed;
110
+ --variant-brand-text: #ffffff;
111
+ --variant-brand-accent: #a78bfa;
112
+ --variant-brand-soft: rgba(139, 92, 246, 0.18);
113
+ --variant-brand-disabled-bg: var(--variant-disabled-bg);
114
+ --variant-brand-disabled-border: var(--variant-disabled-border);
115
+ --variant-brand-disabled-text: var(--variant-disabled-text);
116
+ }
117
+ ```
118
+
119
+ ```tsx
120
+ <Button variant="brand">Brand</Button>
121
+ <Badge variant="brand">Brand</Badge>
122
+ <Progress variant="brand" value={64} />
123
+ ```
124
+
125
+ Если токен custom variant не задан, компонент использует fallback из `default`.
126
+
102
127
  ## Radius and Units
103
128
 
104
129
  Базовые размеры, отступы, font-size и radius задаются в `rem`, чтобы интерфейс корректно масштабировался вместе с настройками шрифта пользователя. Hairline-границы (`1px`, `2px`) остаются в `px`: так они предсказуемее выглядят на разных масштабах и плотностях экрана.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@phpsoftbox/react-softbox",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",