@phpsoftbox/react-softbox 1.16.1 → 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 +18 -0
- package/dist/components/Alert/Alert.d.ts +1 -1
- package/dist/components/Alert/Alert.js +14 -4
- 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 +27 -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 +35 -5
- 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 +4 -4
- package/dist/components/Input/Input.module.css +1 -1
- package/dist/components/Input/InputGroup.module.css +8 -8
- package/dist/components/Input/Radio/Radio.module.css +2 -2
- package/dist/components/Input/Select/Select.module.css +12 -12
- 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/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/Menu/Menu.module.css +3 -3
- package/dist/components/Modal/Modal.module.css +1 -1
- package/dist/components/Notifier/Notifier.js +8 -2
- 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.d.ts +2 -1
- package/dist/components/Progress/Progress.js +9 -3
- package/dist/components/Progress/Progress.js.map +1 -1
- package/dist/components/Progress/Progress.module.css +24 -8
- package/dist/components/Table/Table.js +6 -1
- package/dist/components/Table/Table.js.map +1 -1
- package/dist/components/Table/Table.module.css +24 -8
- 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/Tooltip/Tooltip.module.css +1 -1
- package/dist/components/Typography/Heading.d.ts +2 -1
- package/dist/components/Typography/Heading.js +9 -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 +9 -3
- 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 +17 -5
- package/dist/components/Wizard/Wizard.js.map +1 -1
- package/dist/components/Wizard/Wizard.module.css +54 -40
- package/dist/foundations/buttons.css +269 -55
- 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 +2 -2
- package/dist/index.js.map +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/card.md +2 -1
- package/docs/feedback.md +11 -1
- package/docs/layout.md +42 -2
- package/docs/theme.md +71 -2
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -36,10 +36,10 @@ 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';
|
|
43
|
-
export type { UiVariant } from './types';
|
|
43
|
+
export type { BuiltinUiVariant, CustomUiVariant, UiVariant } from './types';
|
|
44
44
|
export { applyTheme, setThemeMode, getStoredThemeMode, initTheme } from './theme';
|
|
45
45
|
export type { ThemeMode, ThemeOptions } from './theme';
|
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,3 @@
|
|
|
1
|
-
export type
|
|
1
|
+
export type BuiltinUiVariant = 'default' | 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'danger' | 'dark' | 'light' | 'neutral';
|
|
2
|
+
export type CustomUiVariant = string & {};
|
|
3
|
+
export type UiVariant = BuiltinUiVariant | CustomUiVariant;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type React from 'react';
|
|
2
|
+
import type { BuiltinUiVariant, UiVariant } from '../types';
|
|
3
|
+
export type CssVarStyle = React.CSSProperties & Record<`--${string}`, string | number | undefined>;
|
|
4
|
+
export declare const builtinUiVariants: readonly ["default", "primary", "secondary", "info", "success", "warning", "danger", "dark", "light", "neutral"];
|
|
5
|
+
export declare const isBuiltinUiVariant: (variant: UiVariant | undefined) => variant is BuiltinUiVariant;
|
|
6
|
+
export declare const getBuiltinUiVariantClass: (classMap: Record<BuiltinUiVariant, string>, variant: UiVariant | undefined) => string | undefined;
|
|
7
|
+
export declare const normalizeUiVariantToken: (variant: UiVariant | undefined, fallback?: BuiltinUiVariant) => string;
|
|
8
|
+
export declare const mergeStyles: (base: React.CSSProperties | undefined, override: React.CSSProperties | undefined) => React.CSSProperties | undefined;
|
|
9
|
+
export declare const buildButtonVariantStyle: (variant: UiVariant) => CssVarStyle;
|
|
10
|
+
export declare const buildBadgeVariantStyle: (variant: UiVariant) => CssVarStyle;
|
|
11
|
+
export declare const buildProgressVariantStyle: (variant: UiVariant) => CssVarStyle;
|
|
12
|
+
export declare const buildNotifierVariantStyle: (variant: UiVariant) => CssVarStyle;
|
|
13
|
+
export declare const buildAlertVariantStyle: (variant: UiVariant) => CssVarStyle;
|
|
14
|
+
export declare const buildTextVariantStyle: (variant: UiVariant) => React.CSSProperties;
|
|
15
|
+
export declare const buildTooltipVariantStyle: (variant: UiVariant) => CssVarStyle;
|
|
16
|
+
export declare const buildWizardStepVariantStyle: (variant: UiVariant) => CssVarStyle;
|
|
@@ -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/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,21 +1,31 @@
|
|
|
1
1
|
# Feedback
|
|
2
2
|
|
|
3
|
-
Все статусные компоненты используют единый набор вариантов: `default`, `primary`, `info`, `success`, `warning`, `danger`.
|
|
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
|
|
|
7
9
|
```tsx
|
|
8
10
|
<Badge>Default</Badge>
|
|
9
11
|
<Badge variant="primary">Primary</Badge>
|
|
12
|
+
<Badge variant="secondary">Secondary</Badge>
|
|
10
13
|
<Badge variant="info">Info</Badge>
|
|
11
14
|
<Badge variant="success">Success</Badge>
|
|
12
15
|
<Badge variant="warning">Warning</Badge>
|
|
13
16
|
<Badge variant="danger">Danger</Badge>
|
|
17
|
+
<Badge variant="brand">Brand</Badge>
|
|
14
18
|
<Badge size="sm" variant="info">Small</Badge>
|
|
15
19
|
<Badge size="md" variant="info">Medium</Badge>
|
|
16
20
|
<Badge size="lg" variant="info">Large</Badge>
|
|
21
|
+
<Badge variant="success" className="rounded-pill">Pill</Badge>
|
|
22
|
+
<Badge variant="warning" className="rounded-circle size-6 p-0 f-2">3</Badge>
|
|
23
|
+
<Badge variant="info" className="border border-info text-uppercase f-2">helper styled</Badge>
|
|
24
|
+
<Badge variant="danger" dot aria-label="Ошибка" className="p-2" />
|
|
17
25
|
```
|
|
18
26
|
|
|
27
|
+
`Badge` не меняет регистр текста и не задает font-size. Для декоративных решений используйте helpers: `text-uppercase`, `f-2`, `border`, `rounded-pill`, `rounded-circle` и т.д.
|
|
28
|
+
|
|
19
29
|
## Alert
|
|
20
30
|
|
|
21
31
|
```tsx
|
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,72 @@ 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
|
+
Можно добавлять 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
|
+
|
|
127
|
+
## Radius and Units
|
|
128
|
+
|
|
129
|
+
Базовые размеры, отступы, font-size и radius задаются в `rem`, чтобы интерфейс корректно масштабировался вместе с настройками шрифта пользователя. Hairline-границы (`1px`, `2px`) остаются в `px`: так они предсказуемее выглядят на разных масштабах и плотностях экрана.
|
|
130
|
+
|
|
131
|
+
Основные radius-токены:
|
|
132
|
+
|
|
133
|
+
```css
|
|
134
|
+
:root {
|
|
135
|
+
--radius-default: 0.25rem;
|
|
136
|
+
--radius-pill: 50rem;
|
|
137
|
+
--radius-circle: 50%;
|
|
138
|
+
|
|
139
|
+
--btn-border-radius: var(--radius-default);
|
|
140
|
+
--badge-border-radius: var(--radius-default);
|
|
141
|
+
--card-border-radius: var(--radius-default);
|
|
142
|
+
--input-border-radius: var(--radius-default);
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Компоненты используют собственные `*-border-radius` переменные с fallback на базовые radius-токены. Для project-level кастомизации достаточно переопределить нужную component variable.
|