@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.
- package/README.md +8 -0
- package/dist/components/Alert/Alert.d.ts +1 -1
- package/dist/components/Alert/Alert.js +6 -4
- package/dist/components/Alert/Alert.js.map +1 -1
- package/dist/components/Badge/Badge.d.ts +1 -1
- package/dist/components/Badge/Badge.js +5 -3
- package/dist/components/Badge/Badge.js.map +1 -1
- package/dist/components/Button/Button.js +15 -4
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/Input/Input.d.ts +4 -4
- package/dist/components/Menu/Dropdown.d.ts +2 -0
- package/dist/components/Menu/Dropdown.js +1 -0
- package/dist/components/Menu/Dropdown.js.map +1 -1
- package/dist/components/Menu/Menu.d.ts +2 -0
- package/dist/components/Menu/Menu.js +5 -5
- package/dist/components/Menu/Menu.js.map +1 -1
- package/dist/components/Notifier/Notifier.js +4 -2
- package/dist/components/Notifier/Notifier.js.map +1 -1
- package/dist/components/Progress/Progress.d.ts +2 -1
- package/dist/components/Progress/Progress.js +5 -3
- package/dist/components/Progress/Progress.js.map +1 -1
- package/dist/components/Table/Table.js +2 -1
- package/dist/components/Table/Table.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.d.ts +2 -1
- package/dist/components/Tooltip/Tooltip.js +4 -1
- package/dist/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/components/Typography/Heading.d.ts +2 -1
- package/dist/components/Typography/Heading.js +5 -3
- package/dist/components/Typography/Heading.js.map +1 -1
- package/dist/components/Typography/Text.d.ts +2 -1
- package/dist/components/Typography/Text.js +5 -3
- package/dist/components/Typography/Text.js.map +1 -1
- package/dist/components/Wizard/Wizard.js +6 -16
- package/dist/components/Wizard/Wizard.js.map +1 -1
- package/dist/components/Wizard/Wizard.module.css +2 -2
- package/dist/foundations/buttons.css +2 -2
- package/dist/foundations/tokens.css +6 -6
- package/dist/index.d.ts +1 -1
- package/dist/types.d.ts +3 -1
- package/dist/utils/uiVariant.d.ts +16 -0
- package/dist/utils/uiVariant.js +106 -0
- package/dist/utils/uiVariant.js.map +1 -0
- package/docs/feedback.md +4 -1
- package/docs/theme.md +25 -0
- 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":"AAKA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,SAAS;IACT,SAAS;IACT,WAAW;IACX,MAAM;IACN,SAAS;IACT,SAAS;IACT,QAAQ;IACR,MAAM;IACN,OAAO;IACP,SAAS;CACqC,CAAC;AAEjD,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAS,iBAAiB,CAAC,CAAC;AAC/D,MAAM,eAAe,GAAG,6BAA6B,CAAC;AAEtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAA8B,EAA+B,EAAE,CAAC,CACjG,OAAO,OAAO,KAAK,QAAQ,IAAI,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,CAChE,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,QAA0C,EAC1C,OAA8B,EAC9B,EAAE,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAEnE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,OAA8B,EAC9B,WAA6B,SAAS,EACtC,EAAE;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AACxD,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CACjB,KAAa,EACb,GAAW,EACX,kBAAoC,SAAS,EAC7C,cAAsB,GAAG,EACzB,EAAE,CAAC,iBAAiB,KAAK,IAAI,GAAG,mBAAmB,eAAe,IAAI,WAAW,IAAI,CAAC;AAExF,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,IAAqC,EACrC,QAAyC,EACzC,EAAE;IACF,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,EAAE,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,OAAkB,EAAe,EAAE;IACzE,MAAM,KAAK,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO;QACL,cAAc,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC;QAC3C,mBAAmB,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;QAC9C,UAAU,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;QACnC,gBAAgB,EAAE,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC;QAC5C,iBAAiB,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC;QAC9C,cAAc,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC;QAC3C,oBAAoB,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC;QACjD,qBAAqB,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC;QAClD,aAAa,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;QACxC,mBAAmB,EAAE,UAAU,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC;QAC/E,uBAAuB,EAAE,UAAU,CAAC,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,iBAAiB,CAAC;QAC3F,sBAAsB,EAAE,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,CAAC;QACtF,cAAc,EAAE,kCAAkC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB;QAC7F,oBAAoB,EAAE,kCAAkC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB;KACpG,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAkB,EAAe,EAAE;IACxE,MAAM,KAAK,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO;QACL,YAAY,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;QACrC,eAAe,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;QAC1C,gBAAgB,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC;KAC9C,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,OAAkB,EAAe,EAAE;IAC3E,MAAM,KAAK,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO;QACL,eAAe,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;KAClE,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,OAAkB,EAAe,EAAE;IAC3E,MAAM,KAAK,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO;QACL,WAAW,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC;QACxC,gBAAgB,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;KACnE,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAkB,EAAe,EAAE;IACxE,MAAM,KAAK,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO;QACL,WAAW,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC;QACxC,SAAS,EAAE,gCAAgC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB;QACtF,oBAAoB,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;QACtE,iBAAiB,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;QAC5C,wBAAwB,EAAE,sBAAsB,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,oBAAoB;KAChG,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,OAAkB,EAAuB,EAAE;IAC/E,MAAM,KAAK,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO;QACL,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;KACxD,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,OAAkB,EAAe,EAAE;IAC1E,MAAM,KAAK,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO;QACL,cAAc,EAAE,sBAAsB,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,6BAA6B;QAC1F,kBAAkB,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC;QAC/C,iBAAiB,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC;KAChE,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,OAAkB,EAAe,EAAE;IAC7E,MAAM,KAAK,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO;QACL,kBAAkB,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;QAC7C,sBAAsB,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC;QACnD,qBAAqB,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;QACvE,wBAAwB,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;QACjD,2BAA2B,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;QACtD,sBAAsB,EAAE,sBAAsB,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB;KAC1F,CAAC;AACJ,CAAC,CAAC"}
|
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`: так они предсказуемее выглядят на разных масштабах и плотностях экрана.
|