@jetbrains/ring-ui 7.0.120 → 7.0.122
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/components/banner/banner.css +3 -3
- package/components/collapse/collapse-content.d.ts +7 -0
- package/components/collapse/collapse-content.js +48 -6
- package/components/collapse/collapse-context.d.ts +1 -0
- package/components/collapse/collapse-context.js +1 -0
- package/components/collapse/collapse.d.ts +9 -0
- package/components/collapse/collapse.js +2 -1
- package/components/collapsible-group/collapsible-group.css +6 -0
- package/components/collapsible-group/collapsible-group.d.ts +13 -0
- package/components/collapsible-group/collapsible-group.js +4 -3
- package/components/expand/collapsible-group.css +4 -0
- package/components/global/variables.css +18 -18
- package/components/global/variables_dark.css +18 -18
- package/components/tag/tag.css +3 -3
- package/package.json +29 -29
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
background-color: var(--ring-error-container-light-color);
|
|
33
33
|
|
|
34
34
|
.icon {
|
|
35
|
-
color: var(--ring-
|
|
35
|
+
color: var(--ring-icon-error-color);
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
background-color: var(--ring-success-container-light-color);
|
|
42
42
|
|
|
43
43
|
.icon {
|
|
44
|
-
color: var(--ring-
|
|
44
|
+
color: var(--ring-icon-success-color);
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
background-color: var(--ring-warning-container-light-color);
|
|
51
51
|
|
|
52
52
|
.icon {
|
|
53
|
-
color: var(--ring-
|
|
53
|
+
color: var(--ring-icon-warning-color);
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import React, { type PropsWithChildren } from 'react';
|
|
2
2
|
interface Props {
|
|
3
|
+
/**
|
|
4
|
+
* Height of the always-visible preview of the collapsed content.
|
|
5
|
+
* The collapsed subtree is inert until expanded, matching `aria-expanded`.
|
|
6
|
+
* The preview is only a visual clip of that subtree, so it is inert too and
|
|
7
|
+
* assistive technology will not perceive it — if the preview carries essential
|
|
8
|
+
* information, expose an accessible summary outside the collapsed content.
|
|
9
|
+
*/
|
|
3
10
|
minHeight?: number;
|
|
4
11
|
className?: string;
|
|
5
12
|
'data-test'?: string | null | undefined;
|
|
@@ -10,11 +10,21 @@ const DURATION_FACTOR = 0.5;
|
|
|
10
10
|
const DEFAULT_HEIGHT = 0;
|
|
11
11
|
const VISIBLE = 1;
|
|
12
12
|
const HIDDEN = 0;
|
|
13
|
+
// margin for the hide fallback timer, so it fires only if transitionend never did
|
|
14
|
+
const HIDE_FALLBACK_EXTRA_DELAY = 100;
|
|
15
|
+
// React 18 renders unknown attributes from strings only, while React 19 treats `inert`
|
|
16
|
+
// as a real boolean and removes the attribute when it gets ''
|
|
17
|
+
// TODO drop the React 18 branch in develop-8.0 — Ring UI 8.0 supports React 19 only
|
|
18
|
+
const REACT_MAJOR_WITH_INERT_SUPPORT = 19;
|
|
19
|
+
const getInertAttributeValue = (reactMajor) => reactMajor >= REACT_MAJOR_WITH_INERT_SUPPORT ? true : '';
|
|
20
|
+
// the cast is confined to the JSX assignment: React 18 actually receives the string form
|
|
21
|
+
const INERT = getInertAttributeValue(Number(React.version.split('.')[0]));
|
|
22
|
+
const isFullyCollapsed = (collapsed, initialContentHeight) => collapsed && initialContentHeight <= DEFAULT_HEIGHT;
|
|
13
23
|
/**
|
|
14
24
|
* @name CollapseContent
|
|
15
25
|
*/
|
|
16
26
|
export const CollapseContent = ({ children, minHeight = DEFAULT_HEIGHT, 'data-test': dataTest, }) => {
|
|
17
|
-
const { collapsed, duration, id, disableAnimation } = useContext(CollapseContext);
|
|
27
|
+
const { collapsed, duration, id, disableAnimation, keepMounted } = useContext(CollapseContext);
|
|
18
28
|
const containerRef = useRef(null);
|
|
19
29
|
const contentRef = useRef(null);
|
|
20
30
|
const [initialContentHeight] = useState(minHeight);
|
|
@@ -23,20 +33,42 @@ export const CollapseContent = ({ children, minHeight = DEFAULT_HEIGHT, 'data-te
|
|
|
23
33
|
const height = toPx(nextHeight);
|
|
24
34
|
const [shouldHideContent, setShouldHideContent] = useState(collapsed && minHeight <= DEFAULT_HEIGHT);
|
|
25
35
|
useEffect(() => {
|
|
26
|
-
|
|
36
|
+
const container = containerRef.current;
|
|
37
|
+
function finalizeCollapse() {
|
|
27
38
|
if (initialContentHeight <= DEFAULT_HEIGHT) {
|
|
28
39
|
setShouldHideContent(collapsed);
|
|
29
40
|
}
|
|
30
41
|
}
|
|
31
|
-
|
|
42
|
+
function onTransitionEnd(event) {
|
|
43
|
+
// transitionend bubbles: only the container's own height transition finalizes the collapse
|
|
44
|
+
if (event.target === container && event.propertyName === 'height') {
|
|
45
|
+
finalizeCollapse();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
32
48
|
container?.addEventListener('transitionend', onTransitionEnd);
|
|
49
|
+
// fallback for suppressed or cancelled transitions (e.g. `transition: none` overrides),
|
|
50
|
+
// which emit no transitionend and would otherwise leave the content interactive forever.
|
|
51
|
+
// Armed once per collapse toggle from the --duration committed to the DOM — the value
|
|
52
|
+
// the running transition actually uses — so it can neither undercut a transition started
|
|
53
|
+
// from a stale height nor be restarted by content resizes or duration changes mid-collapse
|
|
54
|
+
// TODO merge with global/parse-css-duration when this lands in develop-8.0
|
|
55
|
+
const cssDuration = parseFloat(container?.style.getPropertyValue('--duration') || '') || 0;
|
|
56
|
+
const fallbackTimeout = window.setTimeout(finalizeCollapse, cssDuration + HIDE_FALLBACK_EXTRA_DELAY);
|
|
33
57
|
return () => {
|
|
34
58
|
container?.removeEventListener('transitionend', onTransitionEnd);
|
|
59
|
+
window.clearTimeout(fallbackTimeout);
|
|
35
60
|
};
|
|
36
61
|
}, [collapsed, initialContentHeight]);
|
|
62
|
+
// render-phase state adjustments (not effects): the React Compiler lint forbids
|
|
63
|
+
// setState-in-effect, and https://react.dev/learn/you-might-not-need-an-effect
|
|
64
|
+
// documents this pattern for resetting state when props change
|
|
37
65
|
if (!collapsed && shouldHideContent) {
|
|
38
66
|
setShouldHideContent(false);
|
|
39
67
|
}
|
|
68
|
+
// without a transition there is no transitionend to wait for, so hide immediately
|
|
69
|
+
if (disableAnimation && !shouldHideContent && isFullyCollapsed(collapsed, initialContentHeight)) {
|
|
70
|
+
setShouldHideContent(true);
|
|
71
|
+
}
|
|
40
72
|
useEffect(() => {
|
|
41
73
|
if (contentRef.current) {
|
|
42
74
|
const observer = new ResizeObserver(() => {
|
|
@@ -52,10 +84,20 @@ export const CollapseContent = ({ children, minHeight = DEFAULT_HEIGHT, 'data-te
|
|
|
52
84
|
opacity: collapsed && !minHeight ? HIDDEN : VISIBLE,
|
|
53
85
|
};
|
|
54
86
|
const fadeShouldBeVisible = Boolean(minHeight && collapsed);
|
|
55
|
-
const
|
|
87
|
+
const contentVisible = !shouldHideContent;
|
|
88
|
+
const contentHidden = Boolean(keepMounted) && !contentVisible;
|
|
89
|
+
// interaction is blocked as soon as the panel collapses (matching aria-expanded), while
|
|
90
|
+
// visibility waits for the animation to finish so the content stays painted meanwhile.
|
|
91
|
+
// This includes a minHeight preview: content clipped below it must not take focus,
|
|
92
|
+
// and inert cannot be applied any more granularly than to the whole subtree
|
|
93
|
+
const contentInert = collapsed;
|
|
56
94
|
return (<div ref={containerRef} id={`collapse-content-${id}`} data-test={dataTests(COLLAPSE_CONTENT_CONTAINER_TEST_ID)} className={classNames(styles.container, { [styles.transition]: !disableAnimation })} style={style}>
|
|
57
|
-
<div ref={contentRef} data-test={dataTests(COLLAPSE_CONTENT_TEST_ID, dataTest)}
|
|
58
|
-
|
|
95
|
+
<div ref={contentRef} data-test={dataTests(COLLAPSE_CONTENT_TEST_ID, dataTest)}
|
|
96
|
+
// visibility: hidden removes the fully collapsed content from the tab order and accessibility
|
|
97
|
+
// tree, but descendants can override it with visibility: visible — inert cannot be escaped.
|
|
98
|
+
// Both are rendered in JSX so server-rendered collapsed markup is protected before hydration.
|
|
99
|
+
style={contentHidden ? { visibility: 'hidden' } : undefined} inert={contentInert ? INERT : undefined}>
|
|
100
|
+
{keepMounted || contentVisible ? children : null}
|
|
59
101
|
</div>
|
|
60
102
|
{fadeShouldBeVisible && <div className={styles.fade}/>}
|
|
61
103
|
</div>);
|
|
@@ -4,6 +4,15 @@ interface Props {
|
|
|
4
4
|
onChange?: (collapsed: boolean) => void;
|
|
5
5
|
duration?: number;
|
|
6
6
|
disableAnimation?: boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Keep children mounted while collapsed (hidden via `visibility: hidden`
|
|
9
|
+
* and the `inert` attribute) instead of unmounting them, preserving their state.
|
|
10
|
+
* Note: hidden form controls still participate in form validation
|
|
11
|
+
* and submission — disable them while collapsed if needed.
|
|
12
|
+
* Content rendered through portals (e.g. Popup) escapes the hidden
|
|
13
|
+
* wrapper and is not hidden — close overlays on collapse.
|
|
14
|
+
*/
|
|
15
|
+
keepMounted?: boolean;
|
|
7
16
|
className?: string;
|
|
8
17
|
defaultCollapsed?: boolean;
|
|
9
18
|
collapsed?: boolean | null;
|
|
@@ -5,7 +5,7 @@ import { BASE_ANIMATION_DURATION } from './consts';
|
|
|
5
5
|
/**
|
|
6
6
|
* @name Collapse
|
|
7
7
|
*/
|
|
8
|
-
export const Collapse = ({ children, duration = BASE_ANIMATION_DURATION, disableAnimation = false, className = '', onChange = () => { }, defaultCollapsed = true, collapsed = null, }) => {
|
|
8
|
+
export const Collapse = ({ children, duration = BASE_ANIMATION_DURATION, disableAnimation = false, keepMounted = false, className = '', onChange = () => { }, defaultCollapsed = true, collapsed = null, }) => {
|
|
9
9
|
const [innerCollapsed, setInnerCollapsed] = useState(defaultCollapsed);
|
|
10
10
|
const id = useId();
|
|
11
11
|
const finalCollapsedValue = collapsed ?? innerCollapsed;
|
|
@@ -19,6 +19,7 @@ export const Collapse = ({ children, duration = BASE_ANIMATION_DURATION, disable
|
|
|
19
19
|
setCollapsed,
|
|
20
20
|
duration,
|
|
21
21
|
disableAnimation,
|
|
22
|
+
keepMounted,
|
|
22
23
|
id,
|
|
23
24
|
}}>
|
|
24
25
|
{children}
|
|
@@ -10,6 +10,19 @@ export interface CollapsibleGroupProps {
|
|
|
10
10
|
onChange?: (expanded: boolean) => void;
|
|
11
11
|
disableAnimation?: boolean;
|
|
12
12
|
interactive?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Keep children mounted while collapsed (hidden via `visibility: hidden`
|
|
15
|
+
* and the `inert` attribute) instead of unmounting them, preserving their state.
|
|
16
|
+
* Note: hidden form controls still participate in form validation
|
|
17
|
+
* and submission — disable them while collapsed if needed.
|
|
18
|
+
* Content rendered through portals (e.g. Popup) escapes the hidden
|
|
19
|
+
* wrapper and is not hidden — close overlays on collapse.
|
|
20
|
+
*/
|
|
21
|
+
keepMounted?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Wraps the header in an <h2>–<h6> to keep the document outline.
|
|
24
|
+
*/
|
|
25
|
+
headingLevel?: 2 | 3 | 4 | 5 | 6;
|
|
13
26
|
'data-test'?: string | null | undefined;
|
|
14
27
|
}
|
|
15
28
|
declare const CollapsibleGroup: React.ForwardRefExoticComponent<CollapsibleGroupProps & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -36,7 +36,7 @@ function CollapsibleGroupHeaderStatic({ avatar, titleContent, subtitle }) {
|
|
|
36
36
|
<CollapsibleGroupHeaderContent avatar={avatar} titleContent={titleContent} subtitle={subtitle}/>
|
|
37
37
|
</span>);
|
|
38
38
|
}
|
|
39
|
-
const CollapsibleGroup = forwardRef(({ avatar, title, subtitle, children, className, defaultExpanded = false, expanded = null, onChange = () => { }, disableAnimation = false, interactive = true, 'data-test': dataTest, }, ref) => {
|
|
39
|
+
const CollapsibleGroup = forwardRef(({ avatar, title, subtitle, children, className, defaultExpanded = false, expanded = null, onChange = () => { }, disableAnimation = false, interactive = true, keepMounted = false, headingLevel, 'data-test': dataTest, }, ref) => {
|
|
40
40
|
const [innerExpanded, setInnerExpanded] = useState(defaultExpanded);
|
|
41
41
|
const [hovered, setHovered] = useState(false);
|
|
42
42
|
const [focused, setFocused] = useState(false);
|
|
@@ -60,9 +60,10 @@ const CollapsibleGroup = forwardRef(({ avatar, title, subtitle, children, classN
|
|
|
60
60
|
[styles.expanded]: isExpanded,
|
|
61
61
|
[styles.focused]: focused,
|
|
62
62
|
});
|
|
63
|
+
const header = interactive ? (<CollapsibleGroupHeader avatar={avatar} titleContent={title} subtitle={subtitle} onMouseEnter={() => setHovered(true)} onMouseLeave={() => setHovered(false)} onFocus={() => setFocused(true)} onBlur={onBlur}/>) : (<CollapsibleGroupHeaderStatic avatar={avatar} titleContent={title} subtitle={subtitle}/>);
|
|
63
64
|
return (<div ref={ref} className={classes} data-test={dataTest}>
|
|
64
|
-
<Collapse defaultCollapsed={!defaultExpanded} collapsed={expanded == null ? null : !expanded} onChange={handleChange} disableAnimation={disableAnimation} className={styles.collapseRoot}>
|
|
65
|
-
{
|
|
65
|
+
<Collapse defaultCollapsed={!defaultExpanded} collapsed={expanded == null ? null : !expanded} onChange={handleChange} disableAnimation={disableAnimation} keepMounted={keepMounted} className={styles.collapseRoot}>
|
|
66
|
+
{headingLevel != null ? React.createElement(`h${headingLevel}`, { className: styles.heading }, header) : header}
|
|
66
67
|
<CollapseContent>
|
|
67
68
|
<div className={styles.body}>{children}</div>
|
|
68
69
|
</CollapseContent>
|
|
@@ -27,6 +27,10 @@
|
|
|
27
27
|
composes: header from '../collapsible-group/collapsible-group.css';
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
.heading {
|
|
31
|
+
composes: heading from '../collapsible-group/collapsible-group.css';
|
|
32
|
+
}
|
|
33
|
+
|
|
30
34
|
.headerButton {
|
|
31
35
|
composes: headerButton from '../collapsible-group/collapsible-group.css';
|
|
32
36
|
}
|
|
@@ -48,18 +48,18 @@
|
|
|
48
48
|
--ring-main-error-color: rgb(var(--ring-main-error-components)); /* #CC3645 */
|
|
49
49
|
--ring-main-error-hover-components: 188, 48, 62;
|
|
50
50
|
--ring-main-error-hover-color: rgb(var(--ring-main-error-hover-components)); /* #BC303E */
|
|
51
|
-
--ring-main-warning-components:
|
|
52
|
-
--ring-main-warning-color: rgb(var(--ring-main-warning-components)); /* #
|
|
53
|
-
--ring-main-warning-hover-components:
|
|
54
|
-
--ring-main-warning-hover-color: rgb(var(--ring-main-warning-hover-components)); /* #
|
|
51
|
+
--ring-main-warning-components: 255, 175, 15;
|
|
52
|
+
--ring-main-warning-color: rgb(var(--ring-main-warning-components)); /* #FFAF0F */
|
|
53
|
+
--ring-main-warning-hover-components: 223, 147, 3;
|
|
54
|
+
--ring-main-warning-hover-color: rgb(var(--ring-main-warning-hover-components)); /* #DF9303 */
|
|
55
55
|
--ring-main-purple-components: 131, 77, 240;
|
|
56
56
|
--ring-main-purple-color: rgb(var(--ring-main-purple-components)); /* #834DF0 */
|
|
57
57
|
--ring-main-purple-hover-components: 116, 68, 212;
|
|
58
58
|
--ring-main-purple-hover-color: rgb(var(--ring-main-purple-hover-components)); /* #7444D4 */
|
|
59
59
|
--ring-icon-error-components: 204, 54, 69;
|
|
60
60
|
--ring-icon-error-color: rgb(var(--ring-icon-error-components)); /* #CC3645 */
|
|
61
|
-
--ring-icon-warning-components:
|
|
62
|
-
--ring-icon-warning-color: rgb(var(--ring-icon-warning-components)); /* #
|
|
61
|
+
--ring-icon-warning-components: 223, 147, 3;
|
|
62
|
+
--ring-icon-warning-color: rgb(var(--ring-icon-warning-components)); /* #DF9303 */
|
|
63
63
|
--ring-icon-success-components: 32, 138, 60;
|
|
64
64
|
--ring-icon-success-color: rgb(var(--ring-icon-success-components)); /* #208A3C */
|
|
65
65
|
--ring-icon-highlight-components: 255, 175, 15;
|
|
@@ -74,10 +74,10 @@
|
|
|
74
74
|
--ring-error-border-color: rgb(var(--ring-error-border-components)); /* #F2B6BB */
|
|
75
75
|
--ring-error-border-hover-components: 228, 106, 118;
|
|
76
76
|
--ring-error-border-hover-color: rgb(var(--ring-error-border-hover-components)); /* #E46A76 */
|
|
77
|
-
--ring-warning-border-components:
|
|
78
|
-
--ring-warning-border-color: rgb(var(--ring-warning-border-components)); /* #
|
|
79
|
-
--ring-warning-border-hover-components:
|
|
80
|
-
--ring-warning-border-hover-color: rgb(var(--ring-warning-border-hover-components)); /* #
|
|
77
|
+
--ring-warning-border-components: 254, 210, 119;
|
|
78
|
+
--ring-warning-border-color: rgb(var(--ring-warning-border-components)); /* #FED277 */
|
|
79
|
+
--ring-warning-border-hover-components: 253, 189, 61;
|
|
80
|
+
--ring-warning-border-hover-color: rgb(var(--ring-warning-border-hover-components)); /* #FDBD3D */
|
|
81
81
|
--ring-highlight-border-components: 254, 210, 119;
|
|
82
82
|
--ring-highlight-border-color: rgb(var(--ring-highlight-border-components)); /* #FED277 */
|
|
83
83
|
--ring-highlight-border-hover-components: 253, 189, 61;
|
|
@@ -116,8 +116,8 @@
|
|
|
116
116
|
--ring-link-hover-color: rgb(var(--ring-link-hover-components)); /* #2E55A3 */
|
|
117
117
|
--ring-error-components: 204, 54, 69;
|
|
118
118
|
--ring-error-color: rgb(var(--ring-error-components)); /* #CC3645 */
|
|
119
|
-
--ring-warning-components:
|
|
120
|
-
--ring-warning-color: rgb(var(--ring-warning-components)); /* #
|
|
119
|
+
--ring-warning-components: 156, 97, 0;
|
|
120
|
+
--ring-warning-color: rgb(var(--ring-warning-components)); /* #9C6100 */ /* Prefer using warning icon + regular text color */
|
|
121
121
|
--ring-success-components: 31, 117, 54;
|
|
122
122
|
--ring-success-color: rgb(var(--ring-success-components)); /* #1F7536 */ /* Prefer using success icon + regular text color */
|
|
123
123
|
--ring-purple-text-components: 131, 77, 240;
|
|
@@ -154,8 +154,8 @@
|
|
|
154
154
|
--ring-tag-hover-background-color: rgb(var(--ring-tag-hover-background-components)); /* #DFE1E5 */
|
|
155
155
|
--ring-removed-background-components: 250, 212, 216;
|
|
156
156
|
--ring-removed-background-color: rgb(var(--ring-removed-background-components)); /* #FAD4D8 */
|
|
157
|
-
--ring-warning-background-components:
|
|
158
|
-
--ring-warning-background-color: rgb(var(--ring-warning-background-components)); /* #
|
|
157
|
+
--ring-warning-background-components: 255, 241, 209;
|
|
158
|
+
--ring-warning-background-color: rgb(var(--ring-warning-background-components)); /* #FFF1D1 */
|
|
159
159
|
--ring-highlight-background-components: 255, 241, 209;
|
|
160
160
|
--ring-highlight-background-color: rgb(var(--ring-highlight-background-components)); /* #FFF1D1 */
|
|
161
161
|
--ring-added-background-components: 197, 229, 204;
|
|
@@ -172,8 +172,8 @@
|
|
|
172
172
|
--ring-table-loader-background-color: rgba(var(--ring-content-background-components), 0.5); /* #FFFFFF50 */
|
|
173
173
|
--ring-removed-subtle-background-components: 255, 235, 236;
|
|
174
174
|
--ring-removed-subtle-background-color: rgb(var(--ring-removed-subtle-background-components)); /* #FFEBEC */
|
|
175
|
-
--ring-warning-subtle-background-components: 255,
|
|
176
|
-
--ring-warning-subtle-background-color: rgb(var(--ring-warning-subtle-background-components)); /* #
|
|
175
|
+
--ring-warning-subtle-background-components: 255, 246, 222;
|
|
176
|
+
--ring-warning-subtle-background-color: rgb(var(--ring-warning-subtle-background-components)); /* #FFF6DE */
|
|
177
177
|
--ring-highlight-subtle-background-components: 255, 246, 222;
|
|
178
178
|
--ring-highlight-subtle-background-color: rgb(var(--ring-highlight-subtle-background-components)); /* #FFF6DE */
|
|
179
179
|
--ring-added-subtle-background-components: 230, 247, 233;
|
|
@@ -186,8 +186,8 @@
|
|
|
186
186
|
--ring-success-container-light-color: rgb(var(--ring-success-container-light-components)); /* #F2FCF3 */
|
|
187
187
|
--ring-error-container-light-components: 255, 242, 243;
|
|
188
188
|
--ring-error-container-light-color: rgb(var(--ring-error-container-light-components)); /* #FFF2F3 */
|
|
189
|
-
--ring-warning-container-light-components: 255,
|
|
190
|
-
--ring-warning-container-light-color: rgb(var(--ring-warning-container-light-components)); /* #
|
|
189
|
+
--ring-warning-container-light-components: 255, 250, 235;
|
|
190
|
+
--ring-warning-container-light-color: rgb(var(--ring-warning-container-light-components)); /* #FFFAEB */
|
|
191
191
|
--ring-highlight-container-light-components: 255, 250, 235;
|
|
192
192
|
--ring-highlight-container-light-color: rgb(var(--ring-highlight-container-light-components)); /* #FFFAEB */
|
|
193
193
|
--ring-grey-container-light-components: 247, 248, 250;
|
|
@@ -39,18 +39,18 @@
|
|
|
39
39
|
--ring-main-error-color: rgb(var(--ring-main-error-components)); /* #BD5757 */
|
|
40
40
|
--ring-main-error-hover-components: 156, 78, 78;
|
|
41
41
|
--ring-main-error-hover-color: rgb(var(--ring-main-error-hover-components)); /* #9C4E4E */
|
|
42
|
-
--ring-main-warning-components:
|
|
43
|
-
--ring-main-warning-color: rgb(var(--ring-main-warning-components)); /* #
|
|
44
|
-
--ring-main-warning-hover-components:
|
|
45
|
-
--ring-main-warning-hover-color: rgb(var(--ring-main-warning-hover-components)); /* #
|
|
42
|
+
--ring-main-warning-components: 214, 174, 88;
|
|
43
|
+
--ring-main-warning-color: rgb(var(--ring-main-warning-components)); /* #D6AE58 */
|
|
44
|
+
--ring-main-warning-hover-components: 186, 151, 82;
|
|
45
|
+
--ring-main-warning-hover-color: rgb(var(--ring-main-warning-hover-components)); /* #BA9752 */
|
|
46
46
|
--ring-main-purple-components: 149, 90, 224;
|
|
47
47
|
--ring-main-purple-color: rgb(var(--ring-main-purple-components)); /* #955AE0 */
|
|
48
48
|
--ring-main-purple-hover-components: 129, 80, 190;
|
|
49
49
|
--ring-main-purple-hover-color: rgb(var(--ring-main-purple-hover-components)); /* #8150BE */
|
|
50
50
|
--ring-icon-error-components: 227, 119, 116;
|
|
51
51
|
--ring-icon-error-color: rgb(var(--ring-icon-error-components)); /* #E37774 */
|
|
52
|
-
--ring-icon-warning-components:
|
|
53
|
-
--ring-icon-warning-color: rgb(var(--ring-icon-warning-components)); /* #
|
|
52
|
+
--ring-icon-warning-components: 214, 174, 88;
|
|
53
|
+
--ring-icon-warning-color: rgb(var(--ring-icon-warning-components)); /* #D6AE58 */
|
|
54
54
|
--ring-icon-success-components: 95, 173, 101;
|
|
55
55
|
--ring-icon-success-color: rgb(var(--ring-icon-success-components)); /* #5FAD65 */
|
|
56
56
|
--ring-icon-highlight-components: 214, 174, 88;
|
|
@@ -65,10 +65,10 @@
|
|
|
65
65
|
--ring-error-border-color: rgb(var(--ring-error-border-components)); /* #7A4343 */
|
|
66
66
|
--ring-error-border-hover-components: 156, 78, 78;
|
|
67
67
|
--ring-error-border-hover-color: rgb(var(--ring-error-border-hover-components)); /* #9C4E4E */
|
|
68
|
-
--ring-warning-border-components: 130,
|
|
69
|
-
--ring-warning-border-color: rgb(var(--ring-warning-border-components)); /* #
|
|
70
|
-
--ring-warning-border-hover-components:
|
|
71
|
-
--ring-warning-border-hover-color: rgb(var(--ring-warning-border-hover-components)); /* #
|
|
68
|
+
--ring-warning-border-components: 130, 106, 65;
|
|
69
|
+
--ring-warning-border-color: rgb(var(--ring-warning-border-components)); /* #826A41 */
|
|
70
|
+
--ring-warning-border-hover-components: 158, 129, 74;
|
|
71
|
+
--ring-warning-border-hover-color: rgb(var(--ring-warning-border-hover-components)); /* #9E814A */
|
|
72
72
|
--ring-highlight-border-components: 130, 106, 65;
|
|
73
73
|
--ring-highlight-border-color: rgb(var(--ring-highlight-border-components)); /* #826A41 */
|
|
74
74
|
--ring-highlight-border-hover-components: 158, 129, 74;
|
|
@@ -101,8 +101,8 @@
|
|
|
101
101
|
--ring-link-hover-color: rgb(var(--ring-link-hover-components)); /* #6B9BFA */
|
|
102
102
|
--ring-error-components: 227, 119, 116;
|
|
103
103
|
--ring-error-color: rgb(var(--ring-error-components)); /* #E37774 */
|
|
104
|
-
--ring-warning-components:
|
|
105
|
-
--ring-warning-color: rgb(var(--ring-warning-components)); /* #
|
|
104
|
+
--ring-warning-components: 242, 197, 92;
|
|
105
|
+
--ring-warning-color: rgb(var(--ring-warning-components)); /* #F2C55C */ /* Prefer using warning icon + regular text color */
|
|
106
106
|
--ring-success-components: 95, 173, 101;
|
|
107
107
|
--ring-success-color: rgb(var(--ring-success-components)); /* #5FAD65 */ /* Prefer using success icon + regular text color */
|
|
108
108
|
--ring-purple-text-components: 181, 137, 236;
|
|
@@ -140,8 +140,8 @@
|
|
|
140
140
|
--ring-tag-hover-background-color: rgb(var(--ring-tag-hover-background-components)); /* #4E5157 */
|
|
141
141
|
--ring-removed-background-components: 94, 56, 56;
|
|
142
142
|
--ring-removed-background-color: rgb(var(--ring-removed-background-components)); /* #5E3838 */
|
|
143
|
-
--ring-warning-background-components:
|
|
144
|
-
--ring-warning-background-color: rgb(var(--ring-warning-background-components)); /* #
|
|
143
|
+
--ring-warning-background-components: 94, 77, 51;
|
|
144
|
+
--ring-warning-background-color: rgb(var(--ring-warning-background-components)); /* #5E4D33 */
|
|
145
145
|
--ring-highlight-background-components: 94, 77, 51;
|
|
146
146
|
--ring-highlight-background-color: rgb(var(--ring-highlight-background-components)); /* #5E4D33 */
|
|
147
147
|
--ring-added-background-components: 55, 82, 57;
|
|
@@ -157,8 +157,8 @@
|
|
|
157
157
|
--ring-table-loader-background-color: rgba(var(--ring-content-background-components), 0.5); /* #2B2D3050 */
|
|
158
158
|
--ring-removed-subtle-background-components: 64, 41, 41;
|
|
159
159
|
--ring-removed-subtle-background-color: rgb(var(--ring-removed-subtle-background-components)); /* #402929 */
|
|
160
|
-
--ring-warning-subtle-background-components:
|
|
161
|
-
--ring-warning-subtle-background-color: rgb(var(--ring-warning-subtle-background-components)); /* #
|
|
160
|
+
--ring-warning-subtle-background-components: 61, 50, 35;
|
|
161
|
+
--ring-warning-subtle-background-color: rgb(var(--ring-warning-subtle-background-components)); /* #3D3223 */
|
|
162
162
|
--ring-highlight-subtle-background-components: 61, 50, 35;
|
|
163
163
|
--ring-highlight-subtle-background-color: rgb(var(--ring-highlight-subtle-background-components)); /* #3D3223 */
|
|
164
164
|
--ring-added-subtle-background-components: 37, 54, 39;
|
|
@@ -171,8 +171,8 @@
|
|
|
171
171
|
--ring-success-container-light-color: rgb(var(--ring-success-container-light-components)); /* #222D25 */
|
|
172
172
|
--ring-error-container-light-components: 54, 38, 39;
|
|
173
173
|
--ring-error-container-light-color: rgb(var(--ring-error-container-light-components)); /* #362627 */
|
|
174
|
-
--ring-warning-container-light-components:
|
|
175
|
-
--ring-warning-container-light-color: rgb(var(--ring-warning-container-light-components)); /* #
|
|
174
|
+
--ring-warning-container-light-components: 49, 42, 35;
|
|
175
|
+
--ring-warning-container-light-color: rgb(var(--ring-warning-container-light-components)); /* #312A23 */
|
|
176
176
|
--ring-highlight-container-light-components: 49, 42, 35;
|
|
177
177
|
--ring-highlight-container-light-color: rgb(var(--ring-highlight-container-light-components)); /* #312A23 */
|
|
178
178
|
--ring-grey-container-light-components: 43, 45, 48;
|
package/components/tag/tag.css
CHANGED
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
--ring-tag-container-background-color: var(--ring-added-subtle-background-color);
|
|
94
94
|
--ring-tag-container-hover-background-color: var(--ring-added-background-color);
|
|
95
95
|
--ring-tag-text-color: var(--ring-success-color);
|
|
96
|
-
--ring-tag-icon-color: var(--ring-
|
|
96
|
+
--ring-tag-icon-color: var(--ring-success-color);
|
|
97
97
|
--ring-tag-container-outline-background-color: var(--ring-success-container-light-color);
|
|
98
98
|
--ring-tag-container-outline-hover-background-color: var(--ring-added-subtle-background-color);
|
|
99
99
|
--ring-tag-outline-color: var(--ring-success-border-color);
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
--ring-tag-container-background-color: var(--ring-warning-subtle-background-color);
|
|
105
105
|
--ring-tag-container-hover-background-color: var(--ring-warning-background-color);
|
|
106
106
|
--ring-tag-text-color: var(--ring-warning-color);
|
|
107
|
-
--ring-tag-icon-color: var(--ring-
|
|
107
|
+
--ring-tag-icon-color: var(--ring-warning-color);
|
|
108
108
|
--ring-tag-container-outline-background-color: var(--ring-warning-container-light-color);
|
|
109
109
|
--ring-tag-container-outline-hover-background-color: var(--ring-warning-subtle-background-color);
|
|
110
110
|
--ring-tag-outline-color: var(--ring-warning-border-color);
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
--ring-tag-container-background-color: var(--ring-removed-subtle-background-color);
|
|
116
116
|
--ring-tag-container-hover-background-color: var(--ring-removed-background-color);
|
|
117
117
|
--ring-tag-text-color: var(--ring-error-tag-text-color);
|
|
118
|
-
--ring-tag-icon-color: var(--ring-
|
|
118
|
+
--ring-tag-icon-color: var(--ring-error-tag-text-color);
|
|
119
119
|
--ring-tag-container-outline-background-color: var(--ring-error-container-light-color);
|
|
120
120
|
--ring-tag-container-outline-hover-background-color: var(--ring-removed-subtle-background-color);
|
|
121
121
|
--ring-tag-outline-color: var(--ring-error-border-color);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jetbrains/ring-ui",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.122",
|
|
4
4
|
"description": "JetBrains UI library",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "JetBrains"
|
|
@@ -99,29 +99,29 @@
|
|
|
99
99
|
},
|
|
100
100
|
"readmeFilename": "README.md",
|
|
101
101
|
"devDependencies": {
|
|
102
|
-
"@babel/cli": "^8.0.
|
|
102
|
+
"@babel/cli": "^8.0.4",
|
|
103
103
|
"@babel/eslint-parser": "^7.29.7",
|
|
104
104
|
"@csstools/css-parser-algorithms": "^4.0.0",
|
|
105
105
|
"@csstools/stylelint-no-at-nest-rule": "^5.0.0",
|
|
106
106
|
"@eslint/compat": "^2.1.0",
|
|
107
|
-
"@eslint/eslintrc": "^3.3.
|
|
107
|
+
"@eslint/eslintrc": "^3.3.6",
|
|
108
108
|
"@eslint/js": "^10.0.1",
|
|
109
|
-
"@figma/code-connect": "^1.4.
|
|
109
|
+
"@figma/code-connect": "^1.4.9",
|
|
110
110
|
"@jetbrains/eslint-config": "^6.0.5",
|
|
111
111
|
"@jetbrains/logos": "3.0.0-canary.734b213.0",
|
|
112
112
|
"@jetbrains/rollup-css-plugin": "./packages/rollup-css-plugin",
|
|
113
113
|
"@jetbrains/stylelint-config": "^4.0.2",
|
|
114
114
|
"@jetbrains/typescript-plugin-css-modules": "^5.3.1",
|
|
115
|
-
"@primer/octicons": "^19.
|
|
115
|
+
"@primer/octicons": "^19.29.2",
|
|
116
116
|
"@rollup/plugin-babel": "^7.1.0",
|
|
117
117
|
"@rollup/plugin-json": "^6.1.0",
|
|
118
118
|
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
119
119
|
"@rollup/plugin-replace": "^6.0.3",
|
|
120
|
-
"@storybook/addon-a11y": "10.4
|
|
121
|
-
"@storybook/addon-docs": "^10.4
|
|
122
|
-
"@storybook/addon-themes": "^10.4
|
|
120
|
+
"@storybook/addon-a11y": "10.5.4",
|
|
121
|
+
"@storybook/addon-docs": "^10.5.4",
|
|
122
|
+
"@storybook/addon-themes": "^10.5.4",
|
|
123
123
|
"@storybook/csf": "^0.1.13",
|
|
124
|
-
"@storybook/react-webpack5": "10.4
|
|
124
|
+
"@storybook/react-webpack5": "10.5.4",
|
|
125
125
|
"@storybook/test-runner": "^0.24.4",
|
|
126
126
|
"@testing-library/dom": "^10.4.1",
|
|
127
127
|
"@testing-library/react": "^16.3.2",
|
|
@@ -132,8 +132,8 @@
|
|
|
132
132
|
"@types/react": "^19.2.17",
|
|
133
133
|
"@types/react-dom": "^19.2.3",
|
|
134
134
|
"@types/webpack-env": "^1.18.8",
|
|
135
|
-
"@vitejs/plugin-react": "^6.0.
|
|
136
|
-
"@vitest/eslint-plugin": "^1.6.
|
|
135
|
+
"@vitejs/plugin-react": "^6.0.4",
|
|
136
|
+
"@vitest/eslint-plugin": "^1.6.24",
|
|
137
137
|
"acorn": "^8.17.0",
|
|
138
138
|
"babel-plugin-require-context-hook": "^1.0.0",
|
|
139
139
|
"caniuse-lite": "^1.0.30001799",
|
|
@@ -143,7 +143,7 @@
|
|
|
143
143
|
"core-js": "^3.49.0",
|
|
144
144
|
"cpy-cli": "^7.0.0",
|
|
145
145
|
"dotenv-cli": "^11.0.0",
|
|
146
|
-
"eslint": "^9.39.
|
|
146
|
+
"eslint": "^9.39.5",
|
|
147
147
|
"eslint-config-prettier": "^10.1.8",
|
|
148
148
|
"eslint-formatter-jslint-xml": "^9.0.1",
|
|
149
149
|
"eslint-import-resolver-exports": "^1.0.0-beta.5",
|
|
@@ -154,8 +154,8 @@
|
|
|
154
154
|
"eslint-plugin-prettier": "^5.5.6",
|
|
155
155
|
"eslint-plugin-react": "^7.37.5",
|
|
156
156
|
"eslint-plugin-react-hooks": "^7.1.1",
|
|
157
|
-
"eslint-plugin-storybook": "^10.4
|
|
158
|
-
"eslint-plugin-unicorn": "^
|
|
157
|
+
"eslint-plugin-storybook": "^10.5.4",
|
|
158
|
+
"eslint-plugin-unicorn": "^72.0.0",
|
|
159
159
|
"events": "^3.3.0",
|
|
160
160
|
"glob": "^13.0.6",
|
|
161
161
|
"globals": "^17.7.0",
|
|
@@ -166,11 +166,11 @@
|
|
|
166
166
|
"jest": "~30.4.2",
|
|
167
167
|
"jest-environment-jsdom": "^30.4.1",
|
|
168
168
|
"jest-teamcity": "^1.12.0",
|
|
169
|
-
"lint-staged": "^17.0
|
|
170
|
-
"markdown-it": "^14.
|
|
169
|
+
"lint-staged": "^17.2.0",
|
|
170
|
+
"markdown-it": "^14.3.0",
|
|
171
171
|
"merge-options": "^3.0.4",
|
|
172
172
|
"pinst": "^3.0.0",
|
|
173
|
-
"prettier": "^3.9.
|
|
173
|
+
"prettier": "^3.9.6",
|
|
174
174
|
"raw-loader": "^4.0.2",
|
|
175
175
|
"react": "^19.2.7",
|
|
176
176
|
"react-dom": "^19.2.7",
|
|
@@ -179,20 +179,20 @@
|
|
|
179
179
|
"rollup": "^4.62.2",
|
|
180
180
|
"rollup-plugin-clear": "^2.0.7",
|
|
181
181
|
"storage-mock": "^2.1.0",
|
|
182
|
-
"storybook": "10.4
|
|
183
|
-
"stylelint": "^17.14.
|
|
182
|
+
"storybook": "10.5.4",
|
|
183
|
+
"stylelint": "^17.14.1",
|
|
184
184
|
"stylelint-config-sass-guidelines": "^13.0.0",
|
|
185
185
|
"svg-inline-loader": "^0.8.2",
|
|
186
|
-
"teamcity-service-messages": "^0.
|
|
186
|
+
"teamcity-service-messages": "^0.2.0",
|
|
187
187
|
"terser-webpack-plugin": "^5.6.1",
|
|
188
188
|
"typed-css-modules": "^0.9.1",
|
|
189
189
|
"typescript": "~6.0.3",
|
|
190
|
-
"typescript-eslint": "^8.
|
|
191
|
-
"vite": "^8.1.
|
|
192
|
-
"vitest": "^4.1.
|
|
193
|
-
"vitest-teamcity-reporter": "^0.
|
|
194
|
-
"webpack": "^5.108.
|
|
195
|
-
"webpack-cli": "^7.1
|
|
190
|
+
"typescript-eslint": "^8.65.0",
|
|
191
|
+
"vite": "^8.1.4",
|
|
192
|
+
"vitest": "^4.1.10",
|
|
193
|
+
"vitest-teamcity-reporter": "^0.6.1",
|
|
194
|
+
"webpack": "^5.108.4",
|
|
195
|
+
"webpack-cli": "^7.2.1",
|
|
196
196
|
"xmlappend": "^1.0.4"
|
|
197
197
|
},
|
|
198
198
|
"peerDependencies": {
|
|
@@ -227,7 +227,7 @@
|
|
|
227
227
|
"babel-loader": "10.1.1",
|
|
228
228
|
"babel-plugin-react-compiler": "^1.0.0",
|
|
229
229
|
"babel-plugin-transform-define": "^2.1.4",
|
|
230
|
-
"browserslist": "^4.28.
|
|
230
|
+
"browserslist": "^4.28.6",
|
|
231
231
|
"change-case": "^4.1.1",
|
|
232
232
|
"classnames": "^2.5.1",
|
|
233
233
|
"combokeys": "^3.0.1",
|
|
@@ -242,12 +242,12 @@
|
|
|
242
242
|
"highlight.js": "^10.7.2",
|
|
243
243
|
"just-debounce-it": "^3.2.0",
|
|
244
244
|
"memoize-one": "^6.0.0",
|
|
245
|
-
"postcss": "^8.5.
|
|
245
|
+
"postcss": "^8.5.17",
|
|
246
246
|
"postcss-calc": "^10.1.1",
|
|
247
247
|
"postcss-font-family-system-ui": "^5.0.0",
|
|
248
248
|
"postcss-loader": "^8.2.1",
|
|
249
249
|
"postcss-modules-values-replace": "^4.2.2",
|
|
250
|
-
"postcss-preset-env": "^11.3.
|
|
250
|
+
"postcss-preset-env": "^11.3.2",
|
|
251
251
|
"react-compiler-runtime": "^1.0.0",
|
|
252
252
|
"react-movable": "^3.4.1",
|
|
253
253
|
"react-virtualized": "^9.22.6",
|