@redocly/theme 0.38.0 → 0.38.2
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/lib/components/Badge/Badge.js +1 -1
- package/lib/components/Feedback/Mood.js +6 -6
- package/lib/components/Search/SearchItem.js +4 -1
- package/lib/components/Switch/Switch.d.ts +6 -0
- package/lib/components/Switch/Switch.js +76 -0
- package/lib/components/Switch/variables.d.ts +1 -0
- package/lib/components/Switch/variables.dark.d.ts +1 -0
- package/lib/components/Switch/variables.dark.js +23 -0
- package/lib/components/Switch/variables.js +23 -0
- package/lib/core/styles/dark.js +3 -0
- package/lib/core/styles/global.js +2 -0
- package/lib/core/types/search.d.ts +2 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/package.json +1 -1
- package/src/components/Badge/Badge.tsx +1 -1
- package/src/components/Feedback/Mood.tsx +7 -7
- package/src/components/Search/SearchItem.tsx +7 -0
- package/src/components/Switch/Switch.tsx +61 -0
- package/src/components/Switch/variables.dark.ts +20 -0
- package/src/components/Switch/variables.ts +20 -0
- package/src/core/styles/dark.ts +3 -0
- package/src/core/styles/global.ts +2 -0
- package/src/core/types/search.ts +2 -1
- package/src/index.ts +1 -0
|
@@ -39,7 +39,7 @@ const BadgeComponent = styled_components_1.default.span `
|
|
|
39
39
|
vertical-align: middle;
|
|
40
40
|
line-height: var(--line-height-base);
|
|
41
41
|
color: var(--badge-text-color);
|
|
42
|
-
background-color: var(--badge-bg-color);
|
|
42
|
+
background-color: ${({ color }) => color || 'var(--badge-bg-color)'};
|
|
43
43
|
border-radius: var(--badge-border-radius);
|
|
44
44
|
margin: 0 0 0 0.5em;
|
|
45
45
|
font-size: var(--font-size-base);
|
|
@@ -101,15 +101,15 @@ function Mood({ settings, onSubmit, className }) {
|
|
|
101
101
|
React.createElement(StyledFormMandatoryFields, null,
|
|
102
102
|
React.createElement(Label, { "data-translation-key": "theme.feedback.settings.label" }, label || translate('theme.feedback.settings.label', 'Was this helpful?')),
|
|
103
103
|
React.createElement(StyledMandatoryFieldContainer, null,
|
|
104
|
-
React.createElement(Button_1.Button, { type: "button", variant: score === MOOD_STATES.
|
|
105
|
-
setScore(MOOD_STATES.
|
|
106
|
-
}, icon: React.createElement(
|
|
104
|
+
React.createElement(Button_1.Button, { type: "button", size: "medium", variant: score === MOOD_STATES.DISSATISFIED ? 'primary' : 'secondary', tone: score === MOOD_STATES.DISSATISFIED ? 'danger' : 'default', onClick: () => {
|
|
105
|
+
setScore(MOOD_STATES.DISSATISFIED);
|
|
106
|
+
}, icon: React.createElement(FaceDissatisfiedIcon_1.FaceDissatisfiedIcon, null) }),
|
|
107
107
|
React.createElement(Button_1.Button, { type: "button", variant: score === MOOD_STATES.NEUTRAL ? 'primary' : 'secondary', size: "medium", onClick: () => {
|
|
108
108
|
setScore(MOOD_STATES.NEUTRAL);
|
|
109
109
|
}, icon: React.createElement(FaceNeutralIcon_1.FaceNeutralIcon, null) }),
|
|
110
|
-
React.createElement(Button_1.Button, { type: "button",
|
|
111
|
-
setScore(MOOD_STATES.
|
|
112
|
-
}, icon: React.createElement(
|
|
110
|
+
React.createElement(Button_1.Button, { type: "button", variant: score === MOOD_STATES.SATISFIED ? 'primary' : 'secondary', size: "medium", onClick: () => {
|
|
111
|
+
setScore(MOOD_STATES.SATISFIED);
|
|
112
|
+
}, icon: React.createElement(FaceSatisfiedIcon_1.FaceSatisfiedIcon, null) }))),
|
|
113
113
|
(displayReasons || displayComment) && (React.createElement(StyledFormOptionalFields, null,
|
|
114
114
|
displayReasons && (React.createElement(Reasons_1.Reasons, { settings: {
|
|
115
115
|
label: reasonsSettings === null || reasonsSettings === void 0 ? void 0 : reasonsSettings.label,
|
|
@@ -54,7 +54,10 @@ function SearchItem({ item, className, product }) {
|
|
|
54
54
|
item.pathName ? (0, SearchHighlight_1.highlight)(item.pathName) : null)) : null,
|
|
55
55
|
react_1.default.createElement(SearchItemTitleWrapper, null,
|
|
56
56
|
react_1.default.createElement(SearchItemTitle, null, (0, SearchHighlight_1.highlight)(item.title)),
|
|
57
|
-
item.deprecated ? react_1.default.createElement(SearchItemBadge, { deprecated: true }, "Deprecated") : null
|
|
57
|
+
item.deprecated ? react_1.default.createElement(SearchItemBadge, { deprecated: true }, "Deprecated") : null,
|
|
58
|
+
item.badges
|
|
59
|
+
? item.badges.map(({ name, color }) => (react_1.default.createElement(SearchItemBadge, { color: color || 'var(--color-info-base)', key: name }, name)))
|
|
60
|
+
: null),
|
|
58
61
|
Array.isArray(item.text) ? (react_1.default.createElement(SearchItemDescription, null, (0, SearchHighlight_1.highlight)(item.text))) : null),
|
|
59
62
|
itemParam ? (react_1.default.createElement(SearchItemPlace, null,
|
|
60
63
|
react_1.default.createElement("div", null,
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.Switch = void 0;
|
|
30
|
+
const react_1 = __importDefault(require("react"));
|
|
31
|
+
const styled_components_1 = __importStar(require("styled-components"));
|
|
32
|
+
function Switch({ value = false, disabled = false, onChange }) {
|
|
33
|
+
const handleClick = () => {
|
|
34
|
+
if (disabled)
|
|
35
|
+
return;
|
|
36
|
+
onChange(!value);
|
|
37
|
+
};
|
|
38
|
+
return (react_1.default.createElement(SwitchWrapper, { onClick: handleClick, role: "switch", selected: value, disabled: disabled },
|
|
39
|
+
react_1.default.createElement(Knob, { selected: value })));
|
|
40
|
+
}
|
|
41
|
+
exports.Switch = Switch;
|
|
42
|
+
const SwitchWrapper = styled_components_1.default.div `
|
|
43
|
+
width: var(--switch-width);
|
|
44
|
+
height: var(--switch-height);
|
|
45
|
+
border-radius: var(--switch-border-radius);
|
|
46
|
+
background-color: ${({ selected, disabled }) => disabled
|
|
47
|
+
? 'var(--switch-bg-color-disabled)'
|
|
48
|
+
: selected
|
|
49
|
+
? 'var(--switch-bg-color-selected)'
|
|
50
|
+
: 'var(--switch-bg-color)'};
|
|
51
|
+
display: flex;
|
|
52
|
+
align-items: center;
|
|
53
|
+
padding: var(--switch-padding);
|
|
54
|
+
cursor: ${({ disabled }) => (disabled ? 'not-allowed' : 'pointer')};
|
|
55
|
+
transition: var(--switch-bg-transition);
|
|
56
|
+
|
|
57
|
+
${({ disabled }) => !disabled &&
|
|
58
|
+
(0, styled_components_1.css) `
|
|
59
|
+
&:hover {
|
|
60
|
+
background-color: var(--switch-bg-color-hover);
|
|
61
|
+
}
|
|
62
|
+
`}
|
|
63
|
+
|
|
64
|
+
&:active {
|
|
65
|
+
background-color: var(--switch-bg-color-pressed);
|
|
66
|
+
}
|
|
67
|
+
`;
|
|
68
|
+
const Knob = styled_components_1.default.div `
|
|
69
|
+
width: var(--switch-knob-width);
|
|
70
|
+
height: var(--switch-knob-height);
|
|
71
|
+
border-radius: var(--switch-knob-border-radius);
|
|
72
|
+
background-color: ${({ selected }) => selected ? 'var(--switch-knob-bg-color-selected)' : 'var(--switch-knob-bg-color)'};
|
|
73
|
+
transform: ${({ selected }) => selected ? 'translateX(var(--switch-knob-width))' : 'translateX(0)'};
|
|
74
|
+
transition: var(--switch-knob-transition);
|
|
75
|
+
`;
|
|
76
|
+
//# sourceMappingURL=Switch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const switcher: import("styled-components").FlattenSimpleInterpolation;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const switcherDarkMode: import("styled-components").FlattenSimpleInterpolation;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.switcherDarkMode = void 0;
|
|
4
|
+
const styled_components_1 = require("styled-components");
|
|
5
|
+
exports.switcherDarkMode = (0, styled_components_1.css) `
|
|
6
|
+
--switch-bg-color: var(--color-warm-grey-6); // @presenter Color
|
|
7
|
+
--switch-bg-color-selected: var(--color-warm-grey-6); // @presenter Color
|
|
8
|
+
--switch-bg-color-hover: var(--color-warm-grey-7); // @presenter Color
|
|
9
|
+
--switch-bg-color-pressed: var(--color-warm-grey-7); // @presenter Color
|
|
10
|
+
--switch-bg-color-disabled: var(--color-warm-grey-5); // @presenter Color
|
|
11
|
+
--switch-knob-bg-color: var(--color-warm-grey-8); // @presenter Color
|
|
12
|
+
--switch-knob-bg-color-selected: var(--color-warm-grey-11); // @presenter Color
|
|
13
|
+
--switch-border-radius: var(--border-radius); // @presenter BorderRadius
|
|
14
|
+
--switch-knob-border-radius: calc(var(--border-radius) / 2); // @presenter BorderRadius
|
|
15
|
+
--switch-width: 32px; // @presenter Width
|
|
16
|
+
--switch-height: 18px; // @presenter Height
|
|
17
|
+
--switch-padding: calc(var(--spacing-xxs) / 2); // @presenter Padding
|
|
18
|
+
--switch-bg-transition: background-color 0.3s; // @presenter Transition
|
|
19
|
+
--switch-knob-height: 14px; // @presenter Height
|
|
20
|
+
--switch-knob-width: 14px; // @presenter Width
|
|
21
|
+
--switch-knob-transition: all 0.3s; // @presenter Transition
|
|
22
|
+
`;
|
|
23
|
+
//# sourceMappingURL=variables.dark.js.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.switcher = void 0;
|
|
4
|
+
const styled_components_1 = require("styled-components");
|
|
5
|
+
exports.switcher = (0, styled_components_1.css) `
|
|
6
|
+
--switch-bg-color: var(--color-warm-grey-4); // @presenter Color
|
|
7
|
+
--switch-bg-color-selected: var(--color-warm-grey-9); // @presenter Color
|
|
8
|
+
--switch-bg-color-hover: var(--color-warm-grey-5); // @presenter Color
|
|
9
|
+
--switch-bg-color-pressed: var(--color-warm-grey-6); // @presenter Color
|
|
10
|
+
--switch-bg-color-disabled: var(--color-warm-grey-3); // @presenter Color
|
|
11
|
+
--switch-knob-bg-color: var(--color-white); // @presenter Color
|
|
12
|
+
--switch-knob-bg-color-selected: var(--color-white); // @presenter Color
|
|
13
|
+
--switch-border-radius: var(--border-radius); // @presenter BorderRadius
|
|
14
|
+
--switch-knob-border-radius: calc(var(--border-radius) / 2); // @presenter BorderRadius
|
|
15
|
+
--switch-width: 32px; // @presenter Width
|
|
16
|
+
--switch-height: 18px; // @presenter Height
|
|
17
|
+
--switch-padding: calc(var(--spacing-xxs) / 2); // @presenter Padding
|
|
18
|
+
--switch-bg-transition: background-color 0.3s; // @presenter Transition
|
|
19
|
+
--switch-knob-height: 14px; // @presenter Height
|
|
20
|
+
--switch-knob-width: 14px; // @presenter Width
|
|
21
|
+
--switch-knob-transition: transform 0.3s; // @presenter Transition
|
|
22
|
+
`;
|
|
23
|
+
//# sourceMappingURL=variables.js.map
|
package/lib/core/styles/dark.js
CHANGED
|
@@ -10,6 +10,7 @@ const variables_dark_5 = require("../../components/Segmented/variables.dark");
|
|
|
10
10
|
const variables_dark_6 = require("../../icons/CheckboxIcon/variables.dark");
|
|
11
11
|
const variables_dark_7 = require("../../components/Tag/variables.dark");
|
|
12
12
|
const variables_dark_8 = require("../../components/StatusCode/variables.dark");
|
|
13
|
+
const variables_dark_9 = require("../../components/Switch/variables.dark");
|
|
13
14
|
const replayDarkMode = (0, styled_components_1.css) `
|
|
14
15
|
/**
|
|
15
16
|
* @tokens Replay Colors
|
|
@@ -299,6 +300,8 @@ exports.darkMode = (0, styled_components_1.css) `
|
|
|
299
300
|
${variables_dark_2.mermaidDarkMode}
|
|
300
301
|
${variables_dark_1.scorecardDarkMode}
|
|
301
302
|
${replayDarkMode}
|
|
303
|
+
${variables_dark_9.switcherDarkMode}
|
|
304
|
+
|
|
302
305
|
|
|
303
306
|
/**
|
|
304
307
|
* @tokens Dark Theme Scrollbar Config
|
|
@@ -36,6 +36,7 @@ const variables_30 = require("../../components/UserMenu/variables");
|
|
|
36
36
|
const variables_31 = require("../../components/Tags/variables");
|
|
37
37
|
const variables_32 = require("../../components/VersionPicker/variables");
|
|
38
38
|
const variables_33 = require("../../components/DatePicker/variables");
|
|
39
|
+
const variables_34 = require("../../components/Switch/variables");
|
|
39
40
|
const themeColors = (0, styled_components_1.css) `
|
|
40
41
|
/* === Palette === */
|
|
41
42
|
/**
|
|
@@ -1177,6 +1178,7 @@ exports.styles = (0, styled_components_1.css) `
|
|
|
1177
1178
|
${icon}
|
|
1178
1179
|
${tree}
|
|
1179
1180
|
${variables_29.segmented}
|
|
1181
|
+
${variables_34.switcher}
|
|
1180
1182
|
${variables_14.checkbox}
|
|
1181
1183
|
${variables_3.feedback}
|
|
1182
1184
|
${variables_2.scorecard}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { REDOCLY_ROUTE_RBAC } from '@redocly/config';
|
|
1
|
+
import type { ItemBadge, REDOCLY_ROUTE_RBAC } from '@redocly/config';
|
|
2
2
|
import type { ProductConfig } from '../../config';
|
|
3
3
|
export type OperationParameter = {
|
|
4
4
|
name: string | string[];
|
|
@@ -28,4 +28,5 @@ export type SearchDocument = {
|
|
|
28
28
|
slug?: string;
|
|
29
29
|
fsPath?: string;
|
|
30
30
|
};
|
|
31
|
+
badges?: ItemBadge[];
|
|
31
32
|
};
|
package/lib/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export * from './components/JsonViewer/JsonViewer';
|
|
|
5
5
|
export * from './components/Tag/Tag';
|
|
6
6
|
export * from './components/TableOfContent/TableOfContent';
|
|
7
7
|
export * from './components/ColorModeSwitcher/ColorModeSwitcher';
|
|
8
|
+
export * from './components/Switch/Switch';
|
|
8
9
|
export * from './components/Select/Select';
|
|
9
10
|
export * from './components/Badge/Badge';
|
|
10
11
|
export * from './components/Dropdown/Dropdown';
|
package/lib/index.js
CHANGED
|
@@ -35,6 +35,7 @@ __exportStar(require("./components/JsonViewer/JsonViewer"), exports);
|
|
|
35
35
|
__exportStar(require("./components/Tag/Tag"), exports);
|
|
36
36
|
__exportStar(require("./components/TableOfContent/TableOfContent"), exports);
|
|
37
37
|
__exportStar(require("./components/ColorModeSwitcher/ColorModeSwitcher"), exports);
|
|
38
|
+
__exportStar(require("./components/Switch/Switch"), exports);
|
|
38
39
|
__exportStar(require("./components/Select/Select"), exports);
|
|
39
40
|
__exportStar(require("./components/Badge/Badge"), exports);
|
|
40
41
|
__exportStar(require("./components/Dropdown/Dropdown"), exports);
|
package/package.json
CHANGED
|
@@ -18,7 +18,7 @@ const BadgeComponent = styled.span<BadgeProps>`
|
|
|
18
18
|
vertical-align: middle;
|
|
19
19
|
line-height: var(--line-height-base);
|
|
20
20
|
color: var(--badge-text-color);
|
|
21
|
-
background-color: var(--badge-bg-color);
|
|
21
|
+
background-color: ${({ color }) => color || 'var(--badge-bg-color)'};
|
|
22
22
|
border-radius: var(--badge-border-radius);
|
|
23
23
|
margin: 0 0 0 0.5em;
|
|
24
24
|
font-size: var(--font-size-base);
|
|
@@ -124,12 +124,13 @@ export function Mood({ settings, onSubmit, className }: MoodProps): JSX.Element
|
|
|
124
124
|
<StyledMandatoryFieldContainer>
|
|
125
125
|
<Button
|
|
126
126
|
type="button"
|
|
127
|
-
variant={score === MOOD_STATES.SATISFIED ? 'primary' : 'secondary'}
|
|
128
127
|
size="medium"
|
|
128
|
+
variant={score === MOOD_STATES.DISSATISFIED ? 'primary' : 'secondary'}
|
|
129
|
+
tone={score === MOOD_STATES.DISSATISFIED ? 'danger' : 'default'}
|
|
129
130
|
onClick={() => {
|
|
130
|
-
setScore(MOOD_STATES.
|
|
131
|
+
setScore(MOOD_STATES.DISSATISFIED);
|
|
131
132
|
}}
|
|
132
|
-
icon={<
|
|
133
|
+
icon={<FaceDissatisfiedIcon />}
|
|
133
134
|
/>
|
|
134
135
|
<Button
|
|
135
136
|
type="button"
|
|
@@ -142,13 +143,12 @@ export function Mood({ settings, onSubmit, className }: MoodProps): JSX.Element
|
|
|
142
143
|
/>
|
|
143
144
|
<Button
|
|
144
145
|
type="button"
|
|
146
|
+
variant={score === MOOD_STATES.SATISFIED ? 'primary' : 'secondary'}
|
|
145
147
|
size="medium"
|
|
146
|
-
variant={score === MOOD_STATES.DISSATISFIED ? 'primary' : 'secondary'}
|
|
147
|
-
tone={score === MOOD_STATES.DISSATISFIED ? 'danger' : 'default'}
|
|
148
148
|
onClick={() => {
|
|
149
|
-
setScore(MOOD_STATES.
|
|
149
|
+
setScore(MOOD_STATES.SATISFIED);
|
|
150
150
|
}}
|
|
151
|
-
icon={<
|
|
151
|
+
icon={<FaceSatisfiedIcon />}
|
|
152
152
|
/>
|
|
153
153
|
</StyledMandatoryFieldContainer>
|
|
154
154
|
</StyledFormMandatoryFields>
|
|
@@ -56,6 +56,13 @@ export function SearchItem({ item, className, product }: SearchItemProps): JSX.E
|
|
|
56
56
|
<SearchItemTitleWrapper>
|
|
57
57
|
<SearchItemTitle>{highlight(item.title)}</SearchItemTitle>
|
|
58
58
|
{item.deprecated ? <SearchItemBadge deprecated>Deprecated</SearchItemBadge> : null}
|
|
59
|
+
{item.badges
|
|
60
|
+
? item.badges.map(({ name, color }) => (
|
|
61
|
+
<SearchItemBadge color={color || 'var(--color-info-base)'} key={name}>
|
|
62
|
+
{name}
|
|
63
|
+
</SearchItemBadge>
|
|
64
|
+
))
|
|
65
|
+
: null}
|
|
59
66
|
</SearchItemTitleWrapper>
|
|
60
67
|
{Array.isArray(item.text) ? (
|
|
61
68
|
<SearchItemDescription>{highlight(item.text)}</SearchItemDescription>
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import styled, { css } from 'styled-components';
|
|
3
|
+
|
|
4
|
+
export type SwitchProps = {
|
|
5
|
+
value: boolean;
|
|
6
|
+
onChange: (value: boolean) => void;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export function Switch({ value = false, disabled = false, onChange }: SwitchProps): JSX.Element {
|
|
11
|
+
const handleClick = () => {
|
|
12
|
+
if (disabled) return;
|
|
13
|
+
onChange(!value);
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
return (
|
|
17
|
+
<SwitchWrapper onClick={handleClick} role="switch" selected={value} disabled={disabled}>
|
|
18
|
+
<Knob selected={value} />
|
|
19
|
+
</SwitchWrapper>
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const SwitchWrapper = styled.div<{ selected: boolean; disabled: boolean }>`
|
|
24
|
+
width: var(--switch-width);
|
|
25
|
+
height: var(--switch-height);
|
|
26
|
+
border-radius: var(--switch-border-radius);
|
|
27
|
+
background-color: ${({ selected, disabled }) =>
|
|
28
|
+
disabled
|
|
29
|
+
? 'var(--switch-bg-color-disabled)'
|
|
30
|
+
: selected
|
|
31
|
+
? 'var(--switch-bg-color-selected)'
|
|
32
|
+
: 'var(--switch-bg-color)'};
|
|
33
|
+
display: flex;
|
|
34
|
+
align-items: center;
|
|
35
|
+
padding: var(--switch-padding);
|
|
36
|
+
cursor: ${({ disabled }) => (disabled ? 'not-allowed' : 'pointer')};
|
|
37
|
+
transition: var(--switch-bg-transition);
|
|
38
|
+
|
|
39
|
+
${({ disabled }) =>
|
|
40
|
+
!disabled &&
|
|
41
|
+
css`
|
|
42
|
+
&:hover {
|
|
43
|
+
background-color: var(--switch-bg-color-hover);
|
|
44
|
+
}
|
|
45
|
+
`}
|
|
46
|
+
|
|
47
|
+
&:active {
|
|
48
|
+
background-color: var(--switch-bg-color-pressed);
|
|
49
|
+
}
|
|
50
|
+
`;
|
|
51
|
+
|
|
52
|
+
const Knob = styled.div<{ selected: boolean }>`
|
|
53
|
+
width: var(--switch-knob-width);
|
|
54
|
+
height: var(--switch-knob-height);
|
|
55
|
+
border-radius: var(--switch-knob-border-radius);
|
|
56
|
+
background-color: ${({ selected }) =>
|
|
57
|
+
selected ? 'var(--switch-knob-bg-color-selected)' : 'var(--switch-knob-bg-color)'};
|
|
58
|
+
transform: ${({ selected }) =>
|
|
59
|
+
selected ? 'translateX(var(--switch-knob-width))' : 'translateX(0)'};
|
|
60
|
+
transition: var(--switch-knob-transition);
|
|
61
|
+
`;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { css } from 'styled-components';
|
|
2
|
+
|
|
3
|
+
export const switcherDarkMode = css`
|
|
4
|
+
--switch-bg-color: var(--color-warm-grey-6); // @presenter Color
|
|
5
|
+
--switch-bg-color-selected: var(--color-warm-grey-6); // @presenter Color
|
|
6
|
+
--switch-bg-color-hover: var(--color-warm-grey-7); // @presenter Color
|
|
7
|
+
--switch-bg-color-pressed: var(--color-warm-grey-7); // @presenter Color
|
|
8
|
+
--switch-bg-color-disabled: var(--color-warm-grey-5); // @presenter Color
|
|
9
|
+
--switch-knob-bg-color: var(--color-warm-grey-8); // @presenter Color
|
|
10
|
+
--switch-knob-bg-color-selected: var(--color-warm-grey-11); // @presenter Color
|
|
11
|
+
--switch-border-radius: var(--border-radius); // @presenter BorderRadius
|
|
12
|
+
--switch-knob-border-radius: calc(var(--border-radius) / 2); // @presenter BorderRadius
|
|
13
|
+
--switch-width: 32px; // @presenter Width
|
|
14
|
+
--switch-height: 18px; // @presenter Height
|
|
15
|
+
--switch-padding: calc(var(--spacing-xxs) / 2); // @presenter Padding
|
|
16
|
+
--switch-bg-transition: background-color 0.3s; // @presenter Transition
|
|
17
|
+
--switch-knob-height: 14px; // @presenter Height
|
|
18
|
+
--switch-knob-width: 14px; // @presenter Width
|
|
19
|
+
--switch-knob-transition: all 0.3s; // @presenter Transition
|
|
20
|
+
`;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { css } from 'styled-components';
|
|
2
|
+
|
|
3
|
+
export const switcher = css`
|
|
4
|
+
--switch-bg-color: var(--color-warm-grey-4); // @presenter Color
|
|
5
|
+
--switch-bg-color-selected: var(--color-warm-grey-9); // @presenter Color
|
|
6
|
+
--switch-bg-color-hover: var(--color-warm-grey-5); // @presenter Color
|
|
7
|
+
--switch-bg-color-pressed: var(--color-warm-grey-6); // @presenter Color
|
|
8
|
+
--switch-bg-color-disabled: var(--color-warm-grey-3); // @presenter Color
|
|
9
|
+
--switch-knob-bg-color: var(--color-white); // @presenter Color
|
|
10
|
+
--switch-knob-bg-color-selected: var(--color-white); // @presenter Color
|
|
11
|
+
--switch-border-radius: var(--border-radius); // @presenter BorderRadius
|
|
12
|
+
--switch-knob-border-radius: calc(var(--border-radius) / 2); // @presenter BorderRadius
|
|
13
|
+
--switch-width: 32px; // @presenter Width
|
|
14
|
+
--switch-height: 18px; // @presenter Height
|
|
15
|
+
--switch-padding: calc(var(--spacing-xxs) / 2); // @presenter Padding
|
|
16
|
+
--switch-bg-transition: background-color 0.3s; // @presenter Transition
|
|
17
|
+
--switch-knob-height: 14px; // @presenter Height
|
|
18
|
+
--switch-knob-width: 14px; // @presenter Width
|
|
19
|
+
--switch-knob-transition: transform 0.3s; // @presenter Transition
|
|
20
|
+
`;
|
package/src/core/styles/dark.ts
CHANGED
|
@@ -8,6 +8,7 @@ import { segmentedButtonsDarkMode } from '@redocly/theme/components/Segmented/va
|
|
|
8
8
|
import { checkboxDarkMode } from '@redocly/theme/icons/CheckboxIcon/variables.dark';
|
|
9
9
|
import { tagDarkMode } from '@redocly/theme/components/Tag/variables.dark';
|
|
10
10
|
import { statusCodeDarkMode } from '@redocly/theme/components/StatusCode/variables.dark';
|
|
11
|
+
import { switcherDarkMode } from '@redocly/theme/components/Switch/variables.dark';
|
|
11
12
|
|
|
12
13
|
const replayDarkMode = css`
|
|
13
14
|
/**
|
|
@@ -299,6 +300,8 @@ export const darkMode = css`
|
|
|
299
300
|
${mermaidDarkMode}
|
|
300
301
|
${scorecardDarkMode}
|
|
301
302
|
${replayDarkMode}
|
|
303
|
+
${switcherDarkMode}
|
|
304
|
+
|
|
302
305
|
|
|
303
306
|
/**
|
|
304
307
|
* @tokens Dark Theme Scrollbar Config
|
|
@@ -34,6 +34,7 @@ import { userMenu } from '@redocly/theme/components/UserMenu/variables';
|
|
|
34
34
|
import { httpTag } from '@redocly/theme/components/Tags/variables';
|
|
35
35
|
import { versionPicker } from '@redocly/theme/components/VersionPicker/variables';
|
|
36
36
|
import { datePicker } from '@redocly/theme/components/DatePicker/variables'
|
|
37
|
+
import { switcher } from '@redocly/theme/components/Switch/variables';
|
|
37
38
|
|
|
38
39
|
|
|
39
40
|
const themeColors = css`
|
|
@@ -1200,6 +1201,7 @@ export const styles = css`
|
|
|
1200
1201
|
${icon}
|
|
1201
1202
|
${tree}
|
|
1202
1203
|
${segmented}
|
|
1204
|
+
${switcher}
|
|
1203
1205
|
${checkbox}
|
|
1204
1206
|
${feedback}
|
|
1205
1207
|
${scorecard}
|
package/src/core/types/search.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { REDOCLY_ROUTE_RBAC } from '@redocly/config';
|
|
1
|
+
import type { ItemBadge, REDOCLY_ROUTE_RBAC } from '@redocly/config';
|
|
2
2
|
import type { ProductConfig } from '@redocly/theme/config';
|
|
3
3
|
|
|
4
4
|
export type OperationParameter = {
|
|
@@ -25,4 +25,5 @@ export type SearchDocument = {
|
|
|
25
25
|
product?: ProductConfig;
|
|
26
26
|
'redocly::teams-rbac'?: { [x: string]: string };
|
|
27
27
|
[REDOCLY_ROUTE_RBAC]?: { slug?: string; fsPath?: string };
|
|
28
|
+
badges?: ItemBadge[];
|
|
28
29
|
};
|
package/src/index.ts
CHANGED
|
@@ -7,6 +7,7 @@ export * from '@redocly/theme/components/JsonViewer/JsonViewer';
|
|
|
7
7
|
export * from '@redocly/theme/components/Tag/Tag';
|
|
8
8
|
export * from '@redocly/theme/components/TableOfContent/TableOfContent';
|
|
9
9
|
export * from '@redocly/theme/components/ColorModeSwitcher/ColorModeSwitcher';
|
|
10
|
+
export * from '@redocly/theme/components/Switch/Switch';
|
|
10
11
|
export * from '@redocly/theme/components/Select/Select';
|
|
11
12
|
export * from '@redocly/theme/components/Badge/Badge';
|
|
12
13
|
export * from '@redocly/theme/components/Dropdown/Dropdown';
|