@sats-group/ui-lib 75.0.0 → 75.2.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/eslint.config.mjs +2 -0
- package/package.json +9 -10
- package/react/chip-selected/chip-selected.tsx +2 -2
- package/react/collapse/collapse.tsx +179 -0
- package/react/collapse/collapse.types.ts +13 -0
- package/react/collapse/index.ts +2 -0
- package/react/expander/expander.tsx +1 -1
- package/react/form-content/checkbox-category.tsx +1 -1
- package/react/hooks/focus-previous-element.ts +2 -2
- package/react/modal/tab-trapper.tsx +2 -2
- package/tokens/dark.scss +7 -4
- package/tokens/light.scss +8 -5
- package/react/form-content/types/index.d.ts +0 -1
package/eslint.config.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sats-group/ui-lib",
|
|
3
|
-
"version": "75.
|
|
3
|
+
"version": "75.2.0",
|
|
4
4
|
"description": "SATS web user interface library",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": "^18 || ^20",
|
|
@@ -23,17 +23,17 @@
|
|
|
23
23
|
"author": "developer@sats.no",
|
|
24
24
|
"license": "UNLICENSED",
|
|
25
25
|
"peerDependencies": {
|
|
26
|
-
"@sats-group/icons": "^8.
|
|
26
|
+
"@sats-group/icons": "^8.1.0",
|
|
27
27
|
"classnames": "^2.5.1",
|
|
28
|
-
"react": "^18.0.0",
|
|
29
|
-
"react-dom": "^18.0.0"
|
|
28
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
29
|
+
"react-dom": "^18.0.0 || ^19.0.0"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@svgr/cli": "^8.1.0",
|
|
33
33
|
"@types/fuzzy-search": "^2.1.5",
|
|
34
34
|
"@types/node": "^18.16.19",
|
|
35
|
-
"@types/react": "^
|
|
36
|
-
"@types/react-dom": "^
|
|
35
|
+
"@types/react": "^19.0.0",
|
|
36
|
+
"@types/react-dom": "^19.0.0",
|
|
37
37
|
"@typescript-eslint/eslint-plugin": "^8.12.2",
|
|
38
38
|
"@typescript-eslint/parser": "^8.12.2",
|
|
39
39
|
"eslint": "^9.13.0",
|
|
@@ -44,14 +44,13 @@
|
|
|
44
44
|
"npm-run-all": "^4.1.5",
|
|
45
45
|
"pascal-case": "^4.0.0",
|
|
46
46
|
"prettier": "^3.3.3",
|
|
47
|
-
"react": "^
|
|
48
|
-
"react-dom": "^
|
|
47
|
+
"react": "^19.0.0",
|
|
48
|
+
"react-dom": "^19.0.0",
|
|
49
49
|
"rimraf": "^6.0.1",
|
|
50
50
|
"typescript": "^5.6.3"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"fuzzy-search": "^3.2.1"
|
|
54
|
-
"react-tiny-collapse": "^2.0.0"
|
|
53
|
+
"fuzzy-search": "^3.2.1"
|
|
55
54
|
},
|
|
56
55
|
"workspaces": [
|
|
57
56
|
"site"
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import Collapse from 'react-tiny-collapse';
|
|
3
2
|
|
|
4
3
|
import ChevronDown from '../icons/24/arrow-down';
|
|
5
4
|
import ChevronUp from '../icons/24/arrow-up';
|
|
6
5
|
import Chip from '../chip/chip';
|
|
7
6
|
import Text from '../text';
|
|
7
|
+
import Link from '../link';
|
|
8
|
+
import Collapse from '../collapse';
|
|
8
9
|
|
|
9
10
|
import useEvent from '../hooks/use-event';
|
|
10
11
|
|
|
11
12
|
import { ChipSelected as Props } from './chip-selected.types';
|
|
12
|
-
import Link from '../link';
|
|
13
13
|
|
|
14
14
|
const ChipSelected: React.FC<Props> = ({
|
|
15
15
|
resetSelected,
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import React, { Component, createRef } from 'react';
|
|
2
|
+
|
|
3
|
+
import { Collapse as Props } from './collapse.types';
|
|
4
|
+
|
|
5
|
+
interface CollapseState {
|
|
6
|
+
height: number | null;
|
|
7
|
+
isAnimating: boolean;
|
|
8
|
+
isMounted: boolean;
|
|
9
|
+
isOpen: boolean;
|
|
10
|
+
shouldAnimate?: boolean;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
class Collapse extends Component<Props, CollapseState> {
|
|
14
|
+
static defaultProps: Props = {
|
|
15
|
+
animateChildren: false,
|
|
16
|
+
component: 'div',
|
|
17
|
+
componentProps: {},
|
|
18
|
+
duration: 500,
|
|
19
|
+
easing: 'cubic-bezier(0.3,0,0,1)',
|
|
20
|
+
forceInitialAnimation: false,
|
|
21
|
+
isOpen: false,
|
|
22
|
+
onMeasure: () => {},
|
|
23
|
+
unmountChildren: false,
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
state: CollapseState = {
|
|
27
|
+
height: this.props.forceInitialAnimation || !this.props.isOpen ? 0 : null,
|
|
28
|
+
isAnimating: false,
|
|
29
|
+
isMounted: false,
|
|
30
|
+
isOpen: this.props.isOpen || false,
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
private wrapperRef = createRef<HTMLElement>();
|
|
34
|
+
private previousHeight: number = 0;
|
|
35
|
+
private raf: number | null = null;
|
|
36
|
+
private timer: number | null = null;
|
|
37
|
+
private isAnimating: boolean = false;
|
|
38
|
+
|
|
39
|
+
getHeight = (): number => {
|
|
40
|
+
const child = this.wrapperRef.current
|
|
41
|
+
?.firstElementChild as HTMLElement | null;
|
|
42
|
+
return child ? Math.max(child.offsetHeight - 1, 0) : 0; // -1px to avoid jump after transition
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
transition = () => {
|
|
46
|
+
const newHeight = this.props.isOpen ? this.getHeight() : 0;
|
|
47
|
+
|
|
48
|
+
clearTimeout(this.timer!);
|
|
49
|
+
cancelAnimationFrame(this.raf!);
|
|
50
|
+
this.isAnimating = true;
|
|
51
|
+
|
|
52
|
+
this.setState(
|
|
53
|
+
{ height: this.previousHeight, isAnimating: true, shouldAnimate: false },
|
|
54
|
+
() => {
|
|
55
|
+
this.previousHeight = newHeight;
|
|
56
|
+
this.raf = requestAnimationFrame(() => {
|
|
57
|
+
this.raf = requestAnimationFrame(() => {
|
|
58
|
+
this.setState({ height: newHeight }, () => {
|
|
59
|
+
this.timer = window.setTimeout(() => {
|
|
60
|
+
this.setState(
|
|
61
|
+
{
|
|
62
|
+
height: this.props.isOpen ? null : 0,
|
|
63
|
+
isAnimating: false,
|
|
64
|
+
},
|
|
65
|
+
() => {
|
|
66
|
+
this.isAnimating = false;
|
|
67
|
+
},
|
|
68
|
+
);
|
|
69
|
+
}, this.props.duration);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
},
|
|
74
|
+
);
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
componentDidMount() {
|
|
78
|
+
this.setState({ isMounted: true }, () => {
|
|
79
|
+
if (this.props.forceInitialAnimation) {
|
|
80
|
+
this.transition();
|
|
81
|
+
} else {
|
|
82
|
+
this.previousHeight = this.props.isOpen ? this.getHeight() : 0;
|
|
83
|
+
this.setState({ isAnimating: false });
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
onTransitionEnd = () => {
|
|
89
|
+
this.previousHeight = this.getHeight();
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
static getDerivedStateFromProps(
|
|
93
|
+
nextProps: Props,
|
|
94
|
+
prevState: CollapseState,
|
|
95
|
+
): Partial<CollapseState> | null {
|
|
96
|
+
const openDidChange = nextProps.isOpen !== prevState.isOpen;
|
|
97
|
+
const forceAnimation =
|
|
98
|
+
!prevState.isMounted &&
|
|
99
|
+
nextProps.forceInitialAnimation &&
|
|
100
|
+
nextProps.isOpen;
|
|
101
|
+
|
|
102
|
+
return {
|
|
103
|
+
isOpen: nextProps.isOpen || false,
|
|
104
|
+
shouldAnimate: openDidChange || forceAnimation,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
getSnapshotBeforeUpdate(): number {
|
|
109
|
+
return this.props.isOpen ? this.getHeight() : 0;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
componentDidUpdate(
|
|
113
|
+
_prevProps: Props,
|
|
114
|
+
_prevState: CollapseState,
|
|
115
|
+
snapshot: number,
|
|
116
|
+
) {
|
|
117
|
+
if (this.isAnimating && !this.state.shouldAnimate) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const newHeight = this.getHeight();
|
|
122
|
+
const childrenDidChange = newHeight !== snapshot;
|
|
123
|
+
this.props.onMeasure!(newHeight);
|
|
124
|
+
|
|
125
|
+
if (
|
|
126
|
+
this.state.shouldAnimate ||
|
|
127
|
+
(childrenDidChange && this.props.animateChildren)
|
|
128
|
+
) {
|
|
129
|
+
this.transition();
|
|
130
|
+
} else if (childrenDidChange) {
|
|
131
|
+
this.previousHeight = this.getHeight();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
componentWillUnmount() {
|
|
136
|
+
clearTimeout(this.timer!);
|
|
137
|
+
cancelAnimationFrame(this.raf!);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
render() {
|
|
141
|
+
const { isAnimating, isMounted } = this.state;
|
|
142
|
+
const {
|
|
143
|
+
component = 'div',
|
|
144
|
+
componentProps = {},
|
|
145
|
+
forceInitialAnimation,
|
|
146
|
+
isOpen,
|
|
147
|
+
unmountChildren,
|
|
148
|
+
className,
|
|
149
|
+
children,
|
|
150
|
+
} = this.props;
|
|
151
|
+
const shouldMount = unmountChildren ? isOpen || isAnimating : true;
|
|
152
|
+
const initiallyHidden = !isMounted && forceInitialAnimation && isOpen;
|
|
153
|
+
|
|
154
|
+
return React.createElement(
|
|
155
|
+
component,
|
|
156
|
+
{
|
|
157
|
+
...componentProps,
|
|
158
|
+
className: className,
|
|
159
|
+
onTransitionEnd: this.onTransitionEnd,
|
|
160
|
+
ref: this.wrapperRef,
|
|
161
|
+
style: {
|
|
162
|
+
...componentProps.style,
|
|
163
|
+
height: this.state.height,
|
|
164
|
+
overflow:
|
|
165
|
+
isAnimating || !isOpen || initiallyHidden ? 'hidden' : undefined,
|
|
166
|
+
visibility:
|
|
167
|
+
(!isAnimating && !isOpen) || initiallyHidden ? 'hidden' : undefined,
|
|
168
|
+
transition:
|
|
169
|
+
isAnimating || initiallyHidden
|
|
170
|
+
? `height ${this.props.duration}ms ${this.props.easing}`
|
|
171
|
+
: undefined,
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
shouldMount && children,
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export default Collapse;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type Collapse = {
|
|
2
|
+
animateChildren?: boolean;
|
|
3
|
+
component?: string;
|
|
4
|
+
componentProps?: React.HTMLAttributes<HTMLElement>;
|
|
5
|
+
duration?: number;
|
|
6
|
+
easing?: string;
|
|
7
|
+
forceInitialAnimation?: boolean;
|
|
8
|
+
isOpen?: boolean;
|
|
9
|
+
onMeasure?: (height: number) => void;
|
|
10
|
+
unmountChildren?: boolean;
|
|
11
|
+
className?: string;
|
|
12
|
+
children?: React.ReactNode;
|
|
13
|
+
};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import cn from 'classnames';
|
|
2
2
|
import React, { useState } from 'react';
|
|
3
|
-
import Collapse from 'react-tiny-collapse';
|
|
4
3
|
|
|
5
4
|
import ArrowDown from '../icons/24/arrow-down';
|
|
6
5
|
import LinkButton from '../link-button';
|
|
@@ -10,6 +9,7 @@ import type { Expander as Props } from './expander.types';
|
|
|
10
9
|
import Badge from '../badge';
|
|
11
10
|
import { Types } from '../badge/badge.types';
|
|
12
11
|
import Link from '../link';
|
|
12
|
+
import Collapse from '../collapse';
|
|
13
13
|
|
|
14
14
|
const ExpanderListItem: React.FC<
|
|
15
15
|
React.PropsWithChildren<Props<unknown>['items'][number]['listItemProps']>
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import Collapse from 'react-tiny-collapse';
|
|
3
2
|
import Text from '../text';
|
|
4
3
|
import Checkbox from '../checkbox';
|
|
5
4
|
|
|
@@ -9,6 +8,7 @@ import ChevronUp from '../icons/24/arrow-up';
|
|
|
9
8
|
import { CheckboxCategory as Props } from './form-content.checkbox-list.types';
|
|
10
9
|
import VisuallyHidden from '../visually-hidden';
|
|
11
10
|
import { mod } from '../add-bem-modifiers';
|
|
11
|
+
import Collapse from '../collapse';
|
|
12
12
|
|
|
13
13
|
const CheckboxCategory: React.FC<React.PropsWithChildren<Props>> = ({
|
|
14
14
|
currentlySelectedValues = [],
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { RefObject, useEffect, useRef } from 'react';
|
|
2
2
|
|
|
3
|
-
const focusRef = (ref: React.
|
|
3
|
+
const focusRef = (ref: React.RefObject<HTMLElement | null>): void => {
|
|
4
4
|
ref?.current?.focus();
|
|
5
5
|
};
|
|
6
6
|
|
|
7
7
|
const focusPreviousElement = (
|
|
8
|
-
modal: RefObject<HTMLElement>,
|
|
8
|
+
modal: RefObject<HTMLElement | null>,
|
|
9
9
|
isActive?: boolean,
|
|
10
10
|
) => {
|
|
11
11
|
const previouslyFocusedElement = useRef<HTMLElement | null>(null);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
|
|
3
|
-
const focusRef = (ref: React.
|
|
3
|
+
const focusRef = (ref: React.RefObject<HTMLElement | null>): void => {
|
|
4
4
|
ref?.current?.focus();
|
|
5
5
|
};
|
|
6
6
|
|
|
@@ -14,7 +14,7 @@ const previousValue = usePrevious(value);
|
|
|
14
14
|
const usePrevious = <T extends unknown>(
|
|
15
15
|
value: T,
|
|
16
16
|
initialValue?: T,
|
|
17
|
-
): React.RefObject<T>['current'] => {
|
|
17
|
+
): React.RefObject<T | null>['current'] => {
|
|
18
18
|
const state = React.useRef<T | null>(
|
|
19
19
|
typeof initialValue === 'undefined' ? null : initialValue,
|
|
20
20
|
);
|
package/tokens/dark.scss
CHANGED
|
@@ -281,8 +281,11 @@ $on-ge-on-selector-secondary-unselected-default: primitives.$white-100;
|
|
|
281
281
|
$on-ge-on-selector-secondary-unselected-disabled: primitives.$white-20;
|
|
282
282
|
$on-ge-on-tabs-default: primitives.$white-100;
|
|
283
283
|
$on-ge-on-tabs-disabled: primitives.$black-40;
|
|
284
|
+
$on-ge-on-tags-featured-alternate: primitives.$coral-90;
|
|
284
285
|
$on-ge-on-tags-featured-default: primitives.$coral-170;
|
|
286
|
+
$on-ge-on-tags-primary-alternate: primitives.$white-100;
|
|
285
287
|
$on-ge-on-tags-primary-default: primitives.$blue-100;
|
|
288
|
+
$on-ge-on-tags-secondary-alternate: primitives.$white-100;
|
|
286
289
|
$on-ge-on-tags-secondary-default: primitives.$white-100;
|
|
287
290
|
$on-ge-on-workouts-bootcamp: primitives.$tropical-indigo-160;
|
|
288
291
|
$on-ge-on-workouts-gx: primitives.$salmon-pink-180;
|
|
@@ -370,14 +373,14 @@ $signal-surface-neutral: primitives.$black-90;
|
|
|
370
373
|
$signal-surface-success: primitives.$spring-green-170;
|
|
371
374
|
$signal-surface-waiting-list: primitives.$egyptian-purple-160;
|
|
372
375
|
$signal-surface-warning: primitives.$gold-170;
|
|
373
|
-
$surface-primary-default: primitives.$black-
|
|
376
|
+
$surface-primary-default: primitives.$black-90;
|
|
374
377
|
$surface-primary-disabled: primitives.$black-95;
|
|
375
378
|
$surface-primary-hover: primitives.$bright-blue-170;
|
|
376
379
|
$surface-primary-selected: primitives.$bright-blue-160;
|
|
377
|
-
$surface-secondary-default: primitives.$black-
|
|
380
|
+
$surface-secondary-default: primitives.$black-85;
|
|
378
381
|
$surface-secondary-disabled: primitives.$black-100;
|
|
379
|
-
$surface-secondary-hover: primitives.$black-
|
|
380
|
-
$surface-secondary-selected: primitives.$black-
|
|
382
|
+
$surface-secondary-hover: primitives.$black-80;
|
|
383
|
+
$surface-secondary-selected: primitives.$black-85;
|
|
381
384
|
$workout-surface-bootcamp: primitives.$tropical-indigo-180;
|
|
382
385
|
$workout-surface-bootcamp-hover: primitives.$tropical-indigo-160;
|
|
383
386
|
$workout-surface-gx: primitives.$salmon-pink-180;
|
package/tokens/light.scss
CHANGED
|
@@ -76,8 +76,8 @@ $ge-border-focused: primitives.$blue-40;
|
|
|
76
76
|
$ge-chips-selected-default: primitives.$blue-100;
|
|
77
77
|
$ge-chips-selected-disabled: primitives.$light-grey-15;
|
|
78
78
|
$ge-chips-selected-hover: primitives.$blue-grey-80;
|
|
79
|
-
$ge-chips-unselected-default: primitives.$
|
|
80
|
-
$ge-chips-unselected-disabled: primitives.$
|
|
79
|
+
$ge-chips-unselected-default: primitives.$light-grey-15;
|
|
80
|
+
$ge-chips-unselected-disabled: primitives.$blue-10;
|
|
81
81
|
$ge-chips-unselected-hover: primitives.$bright-blue-10;
|
|
82
82
|
$ge-divider-alternate: primitives.$black-o20;
|
|
83
83
|
$ge-divider-default: primitives.$light-grey-15;
|
|
@@ -128,7 +128,7 @@ $ge-icons-secondary: primitives.$blue-grey-80;
|
|
|
128
128
|
$ge-icons-waiting-list: primitives.$egyptian-purple-100;
|
|
129
129
|
$ge-indicator-tags-attention-alternate: primitives.$gold-10;
|
|
130
130
|
$ge-indicator-tags-attention-default: primitives.$gold-80;
|
|
131
|
-
$ge-indicator-tags-featured-alternate: primitives.$coral-
|
|
131
|
+
$ge-indicator-tags-featured-alternate: primitives.$coral-5;
|
|
132
132
|
$ge-indicator-tags-featured-default: primitives.$coral-120;
|
|
133
133
|
$ge-indicator-tags-information-alternate: primitives.$bright-blue-10;
|
|
134
134
|
$ge-indicator-tags-information-default: primitives.$bright-blue-100;
|
|
@@ -162,7 +162,7 @@ $ge-selector-primary-selected-disabled: primitives.$coral-40;
|
|
|
162
162
|
$ge-selector-primary-selected-hover: primitives.$coral-130;
|
|
163
163
|
$ge-selector-primary-selected-bg-default: primitives.$coral-10;
|
|
164
164
|
$ge-selector-primary-selected-bg-disabled: primitives.$coral-5;
|
|
165
|
-
$ge-selector-primary-unselected-default: primitives.$black-
|
|
165
|
+
$ge-selector-primary-unselected-default: primitives.$black-60;
|
|
166
166
|
$ge-selector-primary-unselected-disabled: primitives.$light-grey-15;
|
|
167
167
|
$ge-selector-primary-unselected-hover: primitives.$coral-10;
|
|
168
168
|
$ge-selector-primary-unselected-bg-default: primitives.$white-0;
|
|
@@ -281,8 +281,11 @@ $on-ge-on-selector-secondary-unselected-default: primitives.$blue-100;
|
|
|
281
281
|
$on-ge-on-selector-secondary-unselected-disabled: primitives.$black-40;
|
|
282
282
|
$on-ge-on-tabs-default: primitives.$blue-100;
|
|
283
283
|
$on-ge-on-tabs-disabled: primitives.$black-40;
|
|
284
|
+
$on-ge-on-tags-featured-alternate: primitives.$coral-130;
|
|
284
285
|
$on-ge-on-tags-featured-default: primitives.$white-100;
|
|
286
|
+
$on-ge-on-tags-primary-alternate: primitives.$blue-100;
|
|
285
287
|
$on-ge-on-tags-primary-default: primitives.$white-100;
|
|
288
|
+
$on-ge-on-tags-secondary-alternate: primitives.$blue-100;
|
|
286
289
|
$on-ge-on-tags-secondary-default: primitives.$blue-100;
|
|
287
290
|
$on-ge-on-workouts-bootcamp: primitives.$tropical-indigo-180;
|
|
288
291
|
$on-ge-on-workouts-gx: primitives.$salmon-pink-180;
|
|
@@ -353,7 +356,7 @@ $on-buttons-on-fixed-link-disabled: primitives.$white-50;
|
|
|
353
356
|
$on-buttons-on-fixed-link-hover: primitives.$bright-blue-100;
|
|
354
357
|
$on-buttons-on-link-default: primitives.$bright-blue-110;
|
|
355
358
|
$on-buttons-on-link-disabled: primitives.$black-50;
|
|
356
|
-
$on-buttons-on-link-hover: primitives.$bright-blue-
|
|
359
|
+
$on-buttons-on-link-hover: primitives.$bright-blue-130;
|
|
357
360
|
$on-buttons-on-primary-default: primitives.$white-100;
|
|
358
361
|
$on-buttons-on-primary-disabled: primitives.$black-60;
|
|
359
362
|
$on-buttons-on-secondary-default: primitives.$blue-100;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
declare module 'react-tiny-collapse';
|